)]}'
{"quantum/db/portsecurity_db.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7acf5a64582a2bc30cc0edeb70d29241947c8536","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2012 Nicira Networks, Inc.  All rights reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FsvA%3D","line":3,"updated":"2013-01-09 08:13:40.000000000","message":"2013 vmware :)","commit_id":"c3b8ba47b9501025b4eaee7c00b35f6aad34682c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2012 Nicira Networks, Inc.  All rights reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fso8%3D","line":3,"in_reply_to":"AAAAM3%2F%2FsvA%3D","updated":"2013-01-09 08:48:34.000000000","message":"I\u0027m sure I\u0027ll be writing 2012 for a while still :) Though I did just copy this header from another file. :P","commit_id":"c3b8ba47b9501025b4eaee7c00b35f6aad34682c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7acf5a64582a2bc30cc0edeb70d29241947c8536","unresolved":false,"context_lines":[{"line_number":17,"context_line":"# @author: Aaron Rosen, Nicira, Inc"},{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import logging"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import sqlalchemy as sa"},{"line_number":23,"context_line":"from sqlalchemy.orm import exc"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fsu8%3D","line":20,"updated":"2013-01-09 08:13:40.000000000","message":"please use common logging feature","commit_id":"c3b8ba47b9501025b4eaee7c00b35f6aad34682c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":17,"context_line":"# @author: Aaron Rosen, Nicira, Inc"},{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import logging"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import sqlalchemy as sa"},{"line_number":23,"context_line":"from sqlalchemy.orm import exc"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FspY%3D","line":20,"in_reply_to":"AAAAM3%2F%2Fsu8%3D","updated":"2013-01-09 08:48:34.000000000","message":"Done","commit_id":"c3b8ba47b9501025b4eaee7c00b35f6aad34682c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7acf5a64582a2bc30cc0edeb70d29241947c8536","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    def _process_network_create_port_security(self, context, network):"},{"line_number":50,"context_line":"        # enable port_security by default on networks if not specified"},{"line_number":51,"context_line":"        if network[psec.PORTSECURITY] \u003d\u003d attr.ATTR_NOT_SPECIFIED:"},{"line_number":52,"context_line":"            network[psec.PORTSECURITY] \u003d True"},{"line_number":53,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":54,"context_line":"            db \u003d NetworkSecurityBinding("},{"line_number":55,"context_line":"                network_id\u003dnetwork[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fsu0%3D","line":52,"updated":"2013-01-09 08:13:40.000000000","message":"why is this set as true? should the default be true/false?","commit_id":"c3b8ba47b9501025b4eaee7c00b35f6aad34682c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    def _process_network_create_port_security(self, context, network):"},{"line_number":50,"context_line":"        # enable port_security by default on networks if not specified"},{"line_number":51,"context_line":"        if network[psec.PORTSECURITY] \u003d\u003d attr.ATTR_NOT_SPECIFIED:"},{"line_number":52,"context_line":"            network[psec.PORTSECURITY] \u003d True"},{"line_number":53,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":54,"context_line":"            db \u003d NetworkSecurityBinding("},{"line_number":55,"context_line":"                network_id\u003dnetwork[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FspM%3D","line":52,"in_reply_to":"AAAAM3%2F%2Fsu0%3D","updated":"2013-01-09 08:48:34.000000000","message":"Sure, I\u0027ll make the api set this value to true by default.","commit_id":"c3b8ba47b9501025b4eaee7c00b35f6aad34682c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7acf5a64582a2bc30cc0edeb70d29241947c8536","unresolved":false,"context_lines":[{"line_number":145,"context_line":"               \u0027port_security\u0027: port[psec.PORTSECURITY]}"},{"line_number":146,"context_line":"        return self._fields(res, fields)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def _ip_on_port(self, port):"},{"line_number":149,"context_line":"        fixed_ips \u003d port.get(\u0027fixed_ips\u0027)"},{"line_number":150,"context_line":"        if not fixed_ips:"},{"line_number":151,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FstI%3D","line":148,"updated":"2013-01-09 08:13:40.000000000","message":"not really sure i understand this method. \n\nwhen a fixed_ip is defined on the port is always has an IP address.\n\nso if fixed_ip is None \u003d\u003e false else true","commit_id":"c3b8ba47b9501025b4eaee7c00b35f6aad34682c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":145,"context_line":"               \u0027port_security\u0027: port[psec.PORTSECURITY]}"},{"line_number":146,"context_line":"        return self._fields(res, fields)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def _ip_on_port(self, port):"},{"line_number":149,"context_line":"        fixed_ips \u003d port.get(\u0027fixed_ips\u0027)"},{"line_number":150,"context_line":"        if not fixed_ips:"},{"line_number":151,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FspI%3D","line":148,"in_reply_to":"AAAAM3%2F%2FstI%3D","updated":"2013-01-09 08:48:34.000000000","message":"Done","commit_id":"c3b8ba47b9501025b4eaee7c00b35f6aad34682c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":30,"context_line":"    port_id \u003d sa.Column(sa.String(36),"},{"line_number":31,"context_line":"                        sa.ForeignKey(\u0027ports.id\u0027, ondelete\u003d\"CASCADE\"),"},{"line_number":32,"context_line":"                        primary_key\u003dTrue)"},{"line_number":33,"context_line":"    port_security_state \u003d sa.Column(sa.Boolean(), nullable\u003dFalse)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class NetworkSecurityBinding(model_base.BASEV2):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FqQM%3D","line":33,"updated":"2013-01-10 15:54:00.000000000","message":"port_security_state is kind of ambiguous.\n\nport_security_active?\nport_security_enabled?\nsomething else?","commit_id":"dd66f2044bd150c161e8c4bf353bedaae95ade22"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    port_id \u003d sa.Column(sa.String(36),"},{"line_number":31,"context_line":"                        sa.ForeignKey(\u0027ports.id\u0027, ondelete\u003d\"CASCADE\"),"},{"line_number":32,"context_line":"                        primary_key\u003dTrue)"},{"line_number":33,"context_line":"    port_security_state \u003d sa.Column(sa.Boolean(), nullable\u003dFalse)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class NetworkSecurityBinding(model_base.BASEV2):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FqFc%3D","line":33,"in_reply_to":"AAAAM3%2F%2FqQM%3D","updated":"2013-01-10 18:24:21.000000000","message":"Changing to port_security_enabled","commit_id":"dd66f2044bd150c161e8c4bf353bedaae95ade22"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":140,"context_line":"        return self._fields(res, fields)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _ip_on_port(self, port):"},{"line_number":143,"context_line":"        fixed_ips \u003d port.get(\u0027fixed_ips\u0027)"},{"line_number":144,"context_line":"        if not fixed_ips:"},{"line_number":145,"context_line":"            return False"},{"line_number":146,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FqQU%3D","line":143,"updated":"2013-01-10 15:54:00.000000000","message":"return bool(port.get(\u0027fixed_ips\u0027))","commit_id":"dd66f2044bd150c161e8c4bf353bedaae95ade22"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        return self._fields(res, fields)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _ip_on_port(self, port):"},{"line_number":143,"context_line":"        fixed_ips \u003d port.get(\u0027fixed_ips\u0027)"},{"line_number":144,"context_line":"        if not fixed_ips:"},{"line_number":145,"context_line":"            return False"},{"line_number":146,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FqFY%3D","line":143,"in_reply_to":"AAAAM3%2F%2FqQU%3D","updated":"2013-01-10 18:24:21.000000000","message":"Done","commit_id":"dd66f2044bd150c161e8c4bf353bedaae95ade22"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            binding \u003d query.filter("},{"line_number":66,"context_line":"                NetworkSecurityBinding.network_id \u003d\u003d network_id).one()"},{"line_number":67,"context_line":"        except exc.NoResultFound:"},{"line_number":68,"context_line":"            raise psec.SecurityBindingNotFound()"},{"line_number":69,"context_line":"        return binding[psec.PORTSECURITY]"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _get_port_security_binding(self, context, port_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FloI%3D","line":68,"updated":"2013-01-18 00:38:21.000000000","message":"Good catch! The reason for this is because this should not happen. The only way for this to happen is if someone had created ports previously and then enabled the portsecurity extension. In this cause these bindings would not be here. I\u0027ve added the exception to portsecurity.py","commit_id":"2edafd85caf868c7f6d7b8d9e9733de52a10a925"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":65,"context_line":"            binding \u003d query.filter("},{"line_number":66,"context_line":"                NetworkSecurityBinding.network_id \u003d\u003d network_id).one()"},{"line_number":67,"context_line":"        except exc.NoResultFound:"},{"line_number":68,"context_line":"            raise psec.SecurityBindingNotFound()"},{"line_number":69,"context_line":"        return binding[psec.PORTSECURITY]"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _get_port_security_binding(self, context, port_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FpOE%3D","line":68,"updated":"2013-01-11 10:04:24.000000000","message":"SecurityBindingNotFound is not defined in portsecurity extension","commit_id":"2edafd85caf868c7f6d7b8d9e9733de52a10a925"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":65,"context_line":"            binding \u003d query.filter("},{"line_number":66,"context_line":"                NetworkSecurityBinding.network_id \u003d\u003d network_id).one()"},{"line_number":67,"context_line":"        except exc.NoResultFound:"},{"line_number":68,"context_line":"            raise psec.SecurityBindingNotFound()"},{"line_number":69,"context_line":"        return binding[psec.PORTSECURITY]"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _get_port_security_binding(self, context, port_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FoiM%3D","line":68,"in_reply_to":"AAAAM3%2F%2Fokg%3D","updated":"2013-01-11 20:39:23.000000000","message":"Looks like unit test missing here","commit_id":"2edafd85caf868c7f6d7b8d9e9733de52a10a925"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":65,"context_line":"            binding \u003d query.filter("},{"line_number":66,"context_line":"                NetworkSecurityBinding.network_id \u003d\u003d network_id).one()"},{"line_number":67,"context_line":"        except exc.NoResultFound:"},{"line_number":68,"context_line":"            raise psec.SecurityBindingNotFound()"},{"line_number":69,"context_line":"        return binding[psec.PORTSECURITY]"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _get_port_security_binding(self, context, port_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Fokg%3D","line":68,"in_reply_to":"AAAAM3%2F%2FpOE%3D","updated":"2013-01-11 20:17:42.000000000","message":"Also, it looks like SecurityGroup, so looks confusing. How about PortSecurityBindingNotFound here?","commit_id":"2edafd85caf868c7f6d7b8d9e9733de52a10a925"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":74,"context_line":"            binding \u003d query.filter("},{"line_number":75,"context_line":"                PortSecurityBinding.port_id \u003d\u003d port_id).one()"},{"line_number":76,"context_line":"        except exc.NoResultFound:"},{"line_number":77,"context_line":"            raise psec.SecurityBindingNotFound()"},{"line_number":78,"context_line":"        return binding[psec.PORTSECURITY]"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _update_port_security_binding(self, context, port_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FoiI%3D","line":77,"updated":"2013-01-11 20:39:23.000000000","message":"Looks like unit test missing here","commit_id":"2edafd85caf868c7f6d7b8d9e9733de52a10a925"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            binding \u003d query.filter("},{"line_number":75,"context_line":"                PortSecurityBinding.port_id \u003d\u003d port_id).one()"},{"line_number":76,"context_line":"        except exc.NoResultFound:"},{"line_number":77,"context_line":"            raise psec.SecurityBindingNotFound()"},{"line_number":78,"context_line":"        return binding[psec.PORTSECURITY]"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _update_port_security_binding(self, context, port_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FloE%3D","line":77,"in_reply_to":"AAAAM3%2F%2FoiI%3D","updated":"2013-01-18 00:38:21.000000000","message":"ditto above.","commit_id":"2edafd85caf868c7f6d7b8d9e9733de52a10a925"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"            binding.update({psec.PORTSECURITY: port_security_enabled})"},{"line_number":88,"context_line":"        except exc.NoResultFound:"},{"line_number":89,"context_line":"            raise psec.SecurityBindingNotFound()"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def _update_network_security_binding(self, context, network_id,"},{"line_number":92,"context_line":"                                         port_security_enabled):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FoiE%3D","line":89,"updated":"2013-01-11 20:39:23.000000000","message":"Looks like unit test missing here","commit_id":"2edafd85caf868c7f6d7b8d9e9733de52a10a925"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"            binding.update({psec.PORTSECURITY: port_security_enabled})"},{"line_number":88,"context_line":"        except exc.NoResultFound:"},{"line_number":89,"context_line":"            raise psec.SecurityBindingNotFound()"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def _update_network_security_binding(self, context, network_id,"},{"line_number":92,"context_line":"                                         port_security_enabled):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FloA%3D","line":89,"in_reply_to":"AAAAM3%2F%2FoiE%3D","updated":"2013-01-18 00:38:21.000000000","message":"ditto above.","commit_id":"2edafd85caf868c7f6d7b8d9e9733de52a10a925"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"            binding.update({psec.PORTSECURITY: port_security_enabled})"},{"line_number":99,"context_line":"        except exc.NoResultFound:"},{"line_number":100,"context_line":"            raise psec.SecurityBindingNotFound()"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _make_network_port_security_dict(self, port_security, fields\u003dNone):"},{"line_number":103,"context_line":"        res \u003d {\u0027network_id\u0027: port_security[\u0027network_id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FoiA%3D","line":100,"updated":"2013-01-11 20:39:23.000000000","message":"Looks like unit test missing here","commit_id":"2edafd85caf868c7f6d7b8d9e9733de52a10a925"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"            binding.update({psec.PORTSECURITY: port_security_enabled})"},{"line_number":99,"context_line":"        except exc.NoResultFound:"},{"line_number":100,"context_line":"            raise psec.SecurityBindingNotFound()"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _make_network_port_security_dict(self, port_security, fields\u003dNone):"},{"line_number":103,"context_line":"        res \u003d {\u0027network_id\u0027: port_security[\u0027network_id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Fln8%3D","line":100,"in_reply_to":"AAAAM3%2F%2FoiA%3D","updated":"2013-01-18 00:38:21.000000000","message":"ditto above.","commit_id":"2edafd85caf868c7f6d7b8d9e9733de52a10a925"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":128,"context_line":"            context.session.add(port_security_binding)"},{"line_number":129,"context_line":"        return self._make_port_security_dict(port_security_binding)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def _delete_port_security_bindings(self, context, port_id):"},{"line_number":132,"context_line":"        query \u003d self._model_query(context, PortSecurityBinding)"},{"line_number":133,"context_line":"        binding \u003d query.filter("},{"line_number":134,"context_line":"            PortSecurityBinding.port_id \u003d\u003d port_id).one()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FokM%3D","line":131,"updated":"2013-01-11 20:17:42.000000000","message":"Why this method needed? It looks like CASCADE deletion is configured on model","commit_id":"2edafd85caf868c7f6d7b8d9e9733de52a10a925"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            context.session.add(port_security_binding)"},{"line_number":129,"context_line":"        return self._make_port_security_dict(port_security_binding)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def _delete_port_security_bindings(self, context, port_id):"},{"line_number":132,"context_line":"        query \u003d self._model_query(context, PortSecurityBinding)"},{"line_number":133,"context_line":"        binding \u003d query.filter("},{"line_number":134,"context_line":"            PortSecurityBinding.port_id \u003d\u003d port_id).one()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Flnw%3D","line":131,"in_reply_to":"AAAAM3%2F%2FokM%3D","updated":"2013-01-18 00:38:21.000000000","message":"Thanks, Deleted.","commit_id":"2edafd85caf868c7f6d7b8d9e9733de52a10a925"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":"# @author: Aaron Rosen, Nicira, Inc"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import sqlalchemy as sa"},{"line_number":20,"context_line":"from sqlalchemy.orm import exc"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from quantum.db import model_base"},{"line_number":23,"context_line":"from quantum.extensions import portsecurity as psec"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Ff1g%3D","line":20,"updated":"2013-01-18 12:53:04.000000000","message":"I think the usual import order rule requires to invert lines 19 and 20.\n\nSorry for the pedantry.","commit_id":"ad5a5e614846d8a46347e68b39948b58860440d3"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":17,"context_line":"# @author: Aaron Rosen, Nicira, Inc"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import sqlalchemy as sa"},{"line_number":20,"context_line":"from sqlalchemy.orm import exc"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from quantum.db import model_base"},{"line_number":23,"context_line":"from quantum.extensions import portsecurity as psec"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Ffd0%3D","line":20,"in_reply_to":"AAAAM3%2F%2Ff1g%3D","updated":"2013-01-18 18:52:22.000000000","message":"Done","commit_id":"ad5a5e614846d8a46347e68b39948b58860440d3"}],"quantum/db/securitygroups_db.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":485,"context_line":"            sgids \u003d [default_sg]"},{"line_number":486,"context_line":"        port[\u0027port\u0027][ext_sg.SECURITYGROUPS] \u003d sgids"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    def _update_deletes_security_groups(self, port):"},{"line_number":489,"context_line":"        \"\"\"Return True if port has as security group and it\u0027s value"},{"line_number":490,"context_line":"        is either [] or not is_attr_set, otherwise return False\"\"\""},{"line_number":491,"context_line":"        if (ext_sg.SECURITYGROUPS in port[\u0027port\u0027] and"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FagM%3D","line":488,"updated":"2013-01-23 14:19:15.000000000","message":"This method does not update anything, so the method name _update_* is a little confusing.\n\nIt check whether we need to delete security group or not. It is better to change the method name to describe its behavior.\nOne idea is to add \u0027_is\u0027 or \u0027_check\u0027 as a prefix. We can know this method returns True or False from its name.","commit_id":"8b520386dd5c3b68b9947f6156f404454d8151c4"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":485,"context_line":"            sgids \u003d [default_sg]"},{"line_number":486,"context_line":"        port[\u0027port\u0027][ext_sg.SECURITYGROUPS] \u003d sgids"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    def _update_deletes_security_groups(self, port):"},{"line_number":489,"context_line":"        \"\"\"Return True if port has as security group and it\u0027s value"},{"line_number":490,"context_line":"        is either [] or not is_attr_set, otherwise return False\"\"\""},{"line_number":491,"context_line":"        if (ext_sg.SECURITYGROUPS in port[\u0027port\u0027] and"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FaNc%3D","line":488,"in_reply_to":"AAAAM3%2F%2FagM%3D","updated":"2013-01-23 17:23:42.000000000","message":"Done","commit_id":"8b520386dd5c3b68b9947f6156f404454d8151c4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":486,"context_line":"        port[\u0027port\u0027][ext_sg.SECURITYGROUPS] \u003d sgids"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    def _update_deletes_security_groups(self, port):"},{"line_number":489,"context_line":"        \"\"\"Return True if port has as security group and it\u0027s value"},{"line_number":490,"context_line":"        is either [] or not is_attr_set, otherwise return False\"\"\""},{"line_number":491,"context_line":"        if (ext_sg.SECURITYGROUPS in port[\u0027port\u0027] and"},{"line_number":492,"context_line":"            (not attr.is_attr_set(port[\u0027port\u0027][ext_sg.SECURITYGROUPS])"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2Fagk%3D","line":489,"updated":"2013-01-23 14:19:15.000000000","message":"port has as -\u003e the port has a","commit_id":"8b520386dd5c3b68b9947f6156f404454d8151c4"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":486,"context_line":"        port[\u0027port\u0027][ext_sg.SECURITYGROUPS] \u003d sgids"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    def _update_deletes_security_groups(self, port):"},{"line_number":489,"context_line":"        \"\"\"Return True if port has as security group and it\u0027s value"},{"line_number":490,"context_line":"        is either [] or not is_attr_set, otherwise return False\"\"\""},{"line_number":491,"context_line":"        if (ext_sg.SECURITYGROUPS in port[\u0027port\u0027] and"},{"line_number":492,"context_line":"            (not attr.is_attr_set(port[\u0027port\u0027][ext_sg.SECURITYGROUPS])"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FaNU%3D","line":489,"in_reply_to":"AAAAM3%2F%2Fagk%3D","updated":"2013-01-23 17:23:42.000000000","message":"Done","commit_id":"8b520386dd5c3b68b9947f6156f404454d8151c4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":490,"context_line":"        is either [] or not is_attr_set, otherwise return False\"\"\""},{"line_number":491,"context_line":"        if (ext_sg.SECURITYGROUPS in port[\u0027port\u0027] and"},{"line_number":492,"context_line":"            (not attr.is_attr_set(port[\u0027port\u0027][ext_sg.SECURITYGROUPS])"},{"line_number":493,"context_line":"             or port[\u0027port\u0027][ext_sg.SECURITYGROUPS] \u003d\u003d [])):"},{"line_number":494,"context_line":"            return True"},{"line_number":495,"context_line":"        return False"},{"line_number":496,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2Faes%3D","line":493,"updated":"2013-01-23 14:19:15.000000000","message":"L.492-493 is just an inverse of L.501-502.\n\nI prefer to using the same condition as follows:\n\nnot (attr.is_attr_set(port[\u0027port\u0027][ext_sg.SECURITYGROUPS]) and\n\tport[\u0027port\u0027][ext_sg.SECURITYGROUPS] !\u003d [])","commit_id":"8b520386dd5c3b68b9947f6156f404454d8151c4"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        is either [] or not is_attr_set, otherwise return False\"\"\""},{"line_number":491,"context_line":"        if (ext_sg.SECURITYGROUPS in port[\u0027port\u0027] and"},{"line_number":492,"context_line":"            (not attr.is_attr_set(port[\u0027port\u0027][ext_sg.SECURITYGROUPS])"},{"line_number":493,"context_line":"             or port[\u0027port\u0027][ext_sg.SECURITYGROUPS] \u003d\u003d [])):"},{"line_number":494,"context_line":"            return True"},{"line_number":495,"context_line":"        return False"},{"line_number":496,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FaNQ%3D","line":493,"in_reply_to":"AAAAM3%2F%2Faes%3D","updated":"2013-01-23 17:23:42.000000000","message":"Done","commit_id":"8b520386dd5c3b68b9947f6156f404454d8151c4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":494,"context_line":"            return True"},{"line_number":495,"context_line":"        return False"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"    def _update_has_security_groups(self, port):"},{"line_number":498,"context_line":"        \"\"\"Return True if port has as security group and False if the"},{"line_number":499,"context_line":"        security_group field is is_attr_set or [].\"\"\""},{"line_number":500,"context_line":"        if (ext_sg.SECURITYGROUPS in port[\u0027port\u0027] and"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FafQ%3D","line":497,"updated":"2013-01-23 14:19:15.000000000","message":"Same thing can be said to this method.","commit_id":"8b520386dd5c3b68b9947f6156f404454d8151c4"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":494,"context_line":"            return True"},{"line_number":495,"context_line":"        return False"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"    def _update_has_security_groups(self, port):"},{"line_number":498,"context_line":"        \"\"\"Return True if port has as security group and False if the"},{"line_number":499,"context_line":"        security_group field is is_attr_set or [].\"\"\""},{"line_number":500,"context_line":"        if (ext_sg.SECURITYGROUPS in port[\u0027port\u0027] and"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FaNM%3D","line":497,"in_reply_to":"AAAAM3%2F%2FafQ%3D","updated":"2013-01-23 17:23:42.000000000","message":"Done","commit_id":"8b520386dd5c3b68b9947f6156f404454d8151c4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":496,"context_line":""},{"line_number":497,"context_line":"    def _update_has_security_groups(self, port):"},{"line_number":498,"context_line":"        \"\"\"Return True if port has as security group and False if the"},{"line_number":499,"context_line":"        security_group field is is_attr_set or [].\"\"\""},{"line_number":500,"context_line":"        if (ext_sg.SECURITYGROUPS in port[\u0027port\u0027] and"},{"line_number":501,"context_line":"            (attr.is_attr_set(port[\u0027port\u0027][ext_sg.SECURITYGROUPS]) and"},{"line_number":502,"context_line":"             port[\u0027port\u0027][ext_sg.SECURITYGROUPS] !\u003d [])):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2Faeg%3D","line":499,"updated":"2013-01-23 14:19:15.000000000","message":"-\u003e Return True if the port has a security group and at least one security group is defined.","commit_id":"8b520386dd5c3b68b9947f6156f404454d8151c4"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":496,"context_line":""},{"line_number":497,"context_line":"    def _update_has_security_groups(self, port):"},{"line_number":498,"context_line":"        \"\"\"Return True if port has as security group and False if the"},{"line_number":499,"context_line":"        security_group field is is_attr_set or [].\"\"\""},{"line_number":500,"context_line":"        if (ext_sg.SECURITYGROUPS in port[\u0027port\u0027] and"},{"line_number":501,"context_line":"            (attr.is_attr_set(port[\u0027port\u0027][ext_sg.SECURITYGROUPS]) and"},{"line_number":502,"context_line":"             port[\u0027port\u0027][ext_sg.SECURITYGROUPS] !\u003d [])):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FaNI%3D","line":499,"in_reply_to":"AAAAM3%2F%2Faeg%3D","updated":"2013-01-23 17:23:42.000000000","message":"Done","commit_id":"8b520386dd5c3b68b9947f6156f404454d8151c4"}],"quantum/extensions/portsecurity.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7acf5a64582a2bc30cc0edeb70d29241947c8536","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 OpenStack, LLC."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fst0%3D","line":1,"updated":"2013-01-09 08:13:40.000000000","message":"2013","commit_id":"c3b8ba47b9501025b4eaee7c00b35f6aad34682c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 OpenStack, LLC."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fsog%3D","line":1,"in_reply_to":"AAAAM3%2F%2Fst0%3D","updated":"2013-01-09 08:48:34.000000000","message":"Done","commit_id":"c3b8ba47b9501025b4eaee7c00b35f6aad34682c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7acf5a64582a2bc30cc0edeb70d29241947c8536","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from quantum.api.v2 import attributes"},{"line_number":17,"context_line":"from quantum.common import exceptions as qexception"},{"line_number":18,"context_line":"from quantum.openstack.common import cfg"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class PortSecurityPortHasSecurityGroup(qexception.InUse):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fsto%3D","line":18,"updated":"2013-01-09 08:13:40.000000000","message":"not used","commit_id":"c3b8ba47b9501025b4eaee7c00b35f6aad34682c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7acf5a64582a2bc30cc0edeb70d29241947c8536","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    \u0027networks\u0027: {"},{"line_number":33,"context_line":"        PORTSECURITY: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":34,"context_line":"                       \u0027convert_to\u0027: attributes.convert_to_boolean,"},{"line_number":35,"context_line":"                       \u0027default\u0027: attributes.ATTR_NOT_SPECIFIED,"},{"line_number":36,"context_line":"                       \u0027is_visible\u0027: True},"},{"line_number":37,"context_line":"    },"},{"line_number":38,"context_line":"    \u0027ports\u0027: {"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fstw%3D","line":35,"updated":"2013-01-09 08:13:40.000000000","message":"why not true/false?","commit_id":"c3b8ba47b9501025b4eaee7c00b35f6aad34682c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    \u0027networks\u0027: {"},{"line_number":33,"context_line":"        PORTSECURITY: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":34,"context_line":"                       \u0027convert_to\u0027: attributes.convert_to_boolean,"},{"line_number":35,"context_line":"                       \u0027default\u0027: attributes.ATTR_NOT_SPECIFIED,"},{"line_number":36,"context_line":"                       \u0027is_visible\u0027: True},"},{"line_number":37,"context_line":"    },"},{"line_number":38,"context_line":"    \u0027ports\u0027: {"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fsos%3D","line":35,"in_reply_to":"AAAAM3%2F%2Fstw%3D","updated":"2013-01-09 08:48:34.000000000","message":"Setting to True.","commit_id":"c3b8ba47b9501025b4eaee7c00b35f6aad34682c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7acf5a64582a2bc30cc0edeb70d29241947c8536","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    \u0027ports\u0027: {"},{"line_number":39,"context_line":"        PORTSECURITY: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":40,"context_line":"                       \u0027convert_to\u0027: attributes.convert_to_boolean,"},{"line_number":41,"context_line":"                       \u0027default\u0027: attributes.ATTR_NOT_SPECIFIED,"},{"line_number":42,"context_line":"                       \u0027is_visible\u0027: True},"},{"line_number":43,"context_line":"    }"},{"line_number":44,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fsts%3D","line":41,"updated":"2013-01-09 08:13:40.000000000","message":"why not true/false?","commit_id":"c3b8ba47b9501025b4eaee7c00b35f6aad34682c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    \u0027ports\u0027: {"},{"line_number":39,"context_line":"        PORTSECURITY: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":40,"context_line":"                       \u0027convert_to\u0027: attributes.convert_to_boolean,"},{"line_number":41,"context_line":"                       \u0027default\u0027: attributes.ATTR_NOT_SPECIFIED,"},{"line_number":42,"context_line":"                       \u0027is_visible\u0027: True},"},{"line_number":43,"context_line":"    }"},{"line_number":44,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Frqk%3D","line":41,"in_reply_to":"AAAAM3%2F%2Fsok%3D","updated":"2013-01-09 18:28:04.000000000","message":"This one should actually still be ATTR_NOT_SPECIFIED. The reason for this is if one creates a network and sets port_security\u003dFalse. Then, if they create a port on that network without specifying port_security the value should be fails.","commit_id":"c3b8ba47b9501025b4eaee7c00b35f6aad34682c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    \u0027ports\u0027: {"},{"line_number":39,"context_line":"        PORTSECURITY: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":40,"context_line":"                       \u0027convert_to\u0027: attributes.convert_to_boolean,"},{"line_number":41,"context_line":"                       \u0027default\u0027: attributes.ATTR_NOT_SPECIFIED,"},{"line_number":42,"context_line":"                       \u0027is_visible\u0027: True},"},{"line_number":43,"context_line":"    }"},{"line_number":44,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fsok%3D","line":41,"in_reply_to":"AAAAM3%2F%2Fsts%3D","updated":"2013-01-09 08:48:34.000000000","message":"Setting to True.","commit_id":"c3b8ba47b9501025b4eaee7c00b35f6aad34682c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":21,"context_line":"from quantum.common import exceptions as qexception"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class PortSecurityPortHasSecurityGroup(qexception.InUse):"},{"line_number":25,"context_line":"    message \u003d _(\"Port has security group associated. Cannot remove \""},{"line_number":26,"context_line":"                \"port_security or ip address until security group is removed\")"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FpN4%3D","line":24,"updated":"2013-01-11 10:04:24.000000000","message":"These exceptions are not used in this patch. Are they used by plugin implementations later?","commit_id":"2edafd85caf868c7f6d7b8d9e9733de52a10a925"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from quantum.common import exceptions as qexception"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class PortSecurityPortHasSecurityGroup(qexception.InUse):"},{"line_number":25,"context_line":"    message \u003d _(\"Port has security group associated. Cannot remove \""},{"line_number":26,"context_line":"                \"port_security or ip address until security group is removed\")"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Fgc8%3D","line":24,"in_reply_to":"AAAAM3%2F%2FpN4%3D","updated":"2013-01-18 00:38:21.000000000","message":"They are now :)","commit_id":"2edafd85caf868c7f6d7b8d9e9733de52a10a925"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class PortSecurityAndIPRequiredForSecurityGroups(qexception.InvalidInput):"},{"line_number":30,"context_line":"    message \u003d _(\"Port secuity must be enabled and port must have an IP\""},{"line_number":31,"context_line":"                \" address inorder to use security groups.\")"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"PORTSECURITY \u003d \u0027port_security_enabled\u0027"},{"line_number":34,"context_line":"EXTENDED_ATTRIBUTES_2_0 \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FpOQ%3D","line":31,"updated":"2013-01-11 10:04:24.000000000","message":"typo: in order to","commit_id":"2edafd85caf868c7f6d7b8d9e9733de52a10a925"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class PortSecurityAndIPRequiredForSecurityGroups(qexception.InvalidInput):"},{"line_number":30,"context_line":"    message \u003d _(\"Port secuity must be enabled and port must have an IP\""},{"line_number":31,"context_line":"                \" address inorder to use security groups.\")"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"PORTSECURITY \u003d \u0027port_security_enabled\u0027"},{"line_number":34,"context_line":"EXTENDED_ATTRIBUTES_2_0 \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Fgc0%3D","line":31,"in_reply_to":"AAAAM3%2F%2FpOQ%3D","updated":"2013-01-18 00:38:21.000000000","message":"Done","commit_id":"2edafd85caf868c7f6d7b8d9e9733de52a10a925"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":33,"context_line":"PORTSECURITY \u003d \u0027port_security_enabled\u0027"},{"line_number":34,"context_line":"EXTENDED_ATTRIBUTES_2_0 \u003d {"},{"line_number":35,"context_line":"    \u0027networks\u0027: {"},{"line_number":36,"context_line":"        PORTSECURITY: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":37,"context_line":"                       \u0027convert_to\u0027: attributes.convert_to_boolean,"},{"line_number":38,"context_line":"                       \u0027default\u0027: True,"},{"line_number":39,"context_line":"                       \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Fokk%3D","line":36,"updated":"2013-01-11 20:17:42.000000000","message":"What\u0027s happen port attribute if port security state on Network will change?","commit_id":"2edafd85caf868c7f6d7b8d9e9733de52a10a925"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":33,"context_line":"PORTSECURITY \u003d \u0027port_security_enabled\u0027"},{"line_number":34,"context_line":"EXTENDED_ATTRIBUTES_2_0 \u003d {"},{"line_number":35,"context_line":"    \u0027networks\u0027: {"},{"line_number":36,"context_line":"        PORTSECURITY: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":37,"context_line":"                       \u0027convert_to\u0027: attributes.convert_to_boolean,"},{"line_number":38,"context_line":"                       \u0027default\u0027: True,"},{"line_number":39,"context_line":"                       \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FgcY%3D","line":36,"in_reply_to":"AAAAM3%2F%2Fokk%3D","updated":"2013-01-18 00:38:21.000000000","message":"From blueprint, \"Lastly, if a user has ports created on an existing network and updates the port_security_state settings associated with with the network. Ports previously created will not have their port_security_state settings changed to reflect the current association. That said, new ports created on this network will use the current port security association. \"","commit_id":"2edafd85caf868c7f6d7b8d9e9733de52a10a925"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class PortSecurityPortHasSecurityGroup(qexception.InUse):"},{"line_number":25,"context_line":"    message \u003d _(\"Port has security group associated. Cannot remove \""},{"line_number":26,"context_line":"                \"port_security or ip address until security group is removed\")"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class PortSecurityAndIPRequiredForSecurityGroups(qexception.InvalidInput):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Ff1Q%3D","line":26,"updated":"2013-01-18 12:53:04.000000000","message":"probably the underscore in port_security is not necessary for something which is returned to the user","commit_id":"ad5a5e614846d8a46347e68b39948b58860440d3"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class PortSecurityPortHasSecurityGroup(qexception.InUse):"},{"line_number":25,"context_line":"    message \u003d _(\"Port has security group associated. Cannot remove \""},{"line_number":26,"context_line":"                \"port_security or ip address until security group is removed\")"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class PortSecurityAndIPRequiredForSecurityGroups(qexception.InvalidInput):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Ffdo%3D","line":26,"in_reply_to":"AAAAM3%2F%2Ff1Q%3D","updated":"2013-01-18 18:52:22.000000000","message":"Done","commit_id":"ad5a5e614846d8a46347e68b39948b58860440d3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class PortSecurityAndIPRequiredForSecurityGroups(qexception.InvalidInput):"},{"line_number":30,"context_line":"    message \u003d _(\"Port secuity must be enabled and port must have an IP\""},{"line_number":31,"context_line":"                \" address in order to use security groups.\")"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Ff1M%3D","line":30,"updated":"2013-01-18 12:53:04.000000000","message":"secuity --\u003e security","commit_id":"ad5a5e614846d8a46347e68b39948b58860440d3"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class PortSecurityAndIPRequiredForSecurityGroups(qexception.InvalidInput):"},{"line_number":30,"context_line":"    message \u003d _(\"Port secuity must be enabled and port must have an IP\""},{"line_number":31,"context_line":"                \" address in order to use security groups.\")"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Ffdk%3D","line":30,"in_reply_to":"AAAAM3%2F%2Ff1M%3D","updated":"2013-01-18 18:52:22.000000000","message":"Done","commit_id":"ad5a5e614846d8a46347e68b39948b58860440d3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class PortSecurityBindingNotFound(qexception.InvalidExtenstionEnv):"},{"line_number":35,"context_line":"    message \u003d _(\"Port does not have security binding.\")"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"PORTSECURITY \u003d \u0027port_security_enabled\u0027"},{"line_number":38,"context_line":"EXTENDED_ATTRIBUTES_2_0 \u003d {"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Ff1I%3D","line":35,"updated":"2013-01-18 12:53:04.000000000","message":"\"security\" --\u003e \"port security\"?","commit_id":"ad5a5e614846d8a46347e68b39948b58860440d3"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class PortSecurityBindingNotFound(qexception.InvalidExtenstionEnv):"},{"line_number":35,"context_line":"    message \u003d _(\"Port does not have security binding.\")"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"PORTSECURITY \u003d \u0027port_security_enabled\u0027"},{"line_number":38,"context_line":"EXTENDED_ATTRIBUTES_2_0 \u003d {"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Ffdg%3D","line":35,"in_reply_to":"AAAAM3%2F%2Ff1I%3D","updated":"2013-01-18 18:52:22.000000000","message":"Done","commit_id":"ad5a5e614846d8a46347e68b39948b58860440d3"}],"quantum/tests/unit/test_db_plugin.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":277,"context_line":"        return self._create_bulk(fmt, number, \u0027subnet\u0027, base_data, **kwargs)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def _create_port(self, fmt, net_id, expected_res_status\u003dNone,"},{"line_number":280,"context_line":"                     arg_list\u003dNone, **kwargs):"},{"line_number":281,"context_line":"        content_type \u003d \u0027application/\u0027 + fmt"},{"line_number":282,"context_line":"        data \u003d {\u0027port\u0027: {\u0027network_id\u0027: net_id,"},{"line_number":283,"context_line":"                         \u0027tenant_id\u0027: self._tenant_id}}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FqPo%3D","line":280,"updated":"2013-01-10 15:54:00.000000000","message":"I don\u0027t think we need this. See below.","commit_id":"dd66f2044bd150c161e8c4bf353bedaae95ade22"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        return self._create_bulk(fmt, number, \u0027subnet\u0027, base_data, **kwargs)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def _create_port(self, fmt, net_id, expected_res_status\u003dNone,"},{"line_number":280,"context_line":"                     arg_list\u003dNone, **kwargs):"},{"line_number":281,"context_line":"        content_type \u003d \u0027application/\u0027 + fmt"},{"line_number":282,"context_line":"        data \u003d {\u0027port\u0027: {\u0027network_id\u0027: net_id,"},{"line_number":283,"context_line":"                         \u0027tenant_id\u0027: self._tenant_id}}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FqDI%3D","line":280,"in_reply_to":"AAAAM3%2F%2FqPo%3D","updated":"2013-01-10 18:24:21.000000000","message":"response below.","commit_id":"dd66f2044bd150c161e8c4bf353bedaae95ade22"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":282,"context_line":"        data \u003d {\u0027port\u0027: {\u0027network_id\u0027: net_id,"},{"line_number":283,"context_line":"                         \u0027tenant_id\u0027: self._tenant_id}}"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        for arg in ((\u0027admin_state_up\u0027, \u0027device_id\u0027,"},{"line_number":286,"context_line":"                    \u0027mac_address\u0027, \u0027name\u0027, \u0027fixed_ips\u0027,"},{"line_number":287,"context_line":"                    \u0027tenant_id\u0027, \u0027device_owner\u0027, \u0027security_groups\u0027) +"},{"line_number":288,"context_line":"                    (arg_list or ())):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FqPc%3D","line":285,"updated":"2013-01-10 15:54:00.000000000","message":"Consider replacing lines 285-291.\n\ndata[\u0027port\u0027].update((k, v) for k,v in kwargs if k not in (\u0027set_context\u0027,))","commit_id":"dd66f2044bd150c161e8c4bf353bedaae95ade22"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        data \u003d {\u0027port\u0027: {\u0027network_id\u0027: net_id,"},{"line_number":283,"context_line":"                         \u0027tenant_id\u0027: self._tenant_id}}"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        for arg in ((\u0027admin_state_up\u0027, \u0027device_id\u0027,"},{"line_number":286,"context_line":"                    \u0027mac_address\u0027, \u0027name\u0027, \u0027fixed_ips\u0027,"},{"line_number":287,"context_line":"                    \u0027tenant_id\u0027, \u0027device_owner\u0027, \u0027security_groups\u0027) +"},{"line_number":288,"context_line":"                    (arg_list or ())):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FqDE%3D","line":285,"in_reply_to":"AAAAM3%2F%2FqPc%3D","updated":"2013-01-10 18:24:21.000000000","message":"Yup that would definitely work too. I only did it this way because of how def _create_network() was done. https://github.com/openstack/quantum/blob/master/quantum/tests/unit/test_db_plugin.py#L218  I\u0027m happy to change all of these def _create_*()  to remove arg_list if you prefer.  I\u0027m OK with eitherway.","commit_id":"dd66f2044bd150c161e8c4bf353bedaae95ade22"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":470,"context_line":"               dns_nameservers\u003dNone,"},{"line_number":471,"context_line":"               host_routes\u003dNone,"},{"line_number":472,"context_line":"               shared\u003dNone,"},{"line_number":473,"context_line":"               do_delete\u003dTrue):"},{"line_number":474,"context_line":"        with (self.network() if not network"},{"line_number":475,"context_line":"              else dummy_context_func()) as network_to_use:"},{"line_number":476,"context_line":"            if network:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Ff0g%3D","line":473,"updated":"2013-01-18 12:53:04.000000000","message":"It does not seem you\u0027re using subnet with do_delete\u003dFalse anywhere.\nDid you add it just for doing the same thing as the network() method, or are there tests which are not in this patch (maybe not pushed -yet)","commit_id":"ad5a5e614846d8a46347e68b39948b58860440d3"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":470,"context_line":"               dns_nameservers\u003dNone,"},{"line_number":471,"context_line":"               host_routes\u003dNone,"},{"line_number":472,"context_line":"               shared\u003dNone,"},{"line_number":473,"context_line":"               do_delete\u003dTrue):"},{"line_number":474,"context_line":"        with (self.network() if not network"},{"line_number":475,"context_line":"              else dummy_context_func()) as network_to_use:"},{"line_number":476,"context_line":"            if network:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FfdY%3D","line":473,"in_reply_to":"AAAAM3%2F%2Ff0g%3D","updated":"2013-01-18 18:52:22.000000000","message":"The reason why I did this is if a unit test fails sometimes the exception is swallowed up because of the \u0027with\u0027 i.e with subnet(); Having this options one to just update the unit test to do_delete\u003dFalse without having to change code in this file everytime.","commit_id":"ad5a5e614846d8a46347e68b39948b58860440d3"}],"quantum/tests/unit/test_extension_portsecurity.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":46,"context_line":"class PortSecurityTestCase("},{"line_number":47,"context_line":"    test_extension_security_group.SecurityGroupsTestCase,"},{"line_number":48,"context_line":"    test_db_plugin.QuantumDbPluginV2TestCase,"},{"line_number":49,"context_line":"    unittest2.TestCase):"},{"line_number":50,"context_line":"    def setUp(self, plugin\u003dNone):"},{"line_number":51,"context_line":"        super(PortSecurityTestCase, self).setUp()"},{"line_number":52,"context_line":"        db._ENGINE \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FqPE%3D","line":49,"updated":"2013-01-10 15:54:00.000000000","message":"You only need to inherit from SecurityGroupsTestCase here.","commit_id":"dd66f2044bd150c161e8c4bf353bedaae95ade22"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":46,"context_line":"class PortSecurityTestCase("},{"line_number":47,"context_line":"    test_extension_security_group.SecurityGroupsTestCase,"},{"line_number":48,"context_line":"    test_db_plugin.QuantumDbPluginV2TestCase,"},{"line_number":49,"context_line":"    unittest2.TestCase):"},{"line_number":50,"context_line":"    def setUp(self, plugin\u003dNone):"},{"line_number":51,"context_line":"        super(PortSecurityTestCase, self).setUp()"},{"line_number":52,"context_line":"        db._ENGINE \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FqC8%3D","line":49,"in_reply_to":"AAAAM3%2F%2FqPE%3D","updated":"2013-01-10 18:24:21.000000000","message":"Done","commit_id":"dd66f2044bd150c161e8c4bf353bedaae95ade22"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":158,"context_line":"                    context, p[\u0027id\u0027], p[ext_sg.SECURITYGROUPS])"},{"line_number":159,"context_line":"            self._process_port_security_create(context, p)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        self._extend_port_dict_security_group(context, p)"},{"line_number":162,"context_line":"        self._extend_port_port_security_dict(context, p)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        return port[\u0027port\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FqO8%3D","line":161,"updated":"2013-01-10 15:54:00.000000000","message":"these two lines should be within same transaction context","commit_id":"dd66f2044bd150c161e8c4bf353bedaae95ade22"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                    context, p[\u0027id\u0027], p[ext_sg.SECURITYGROUPS])"},{"line_number":159,"context_line":"            self._process_port_security_create(context, p)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        self._extend_port_dict_security_group(context, p)"},{"line_number":162,"context_line":"        self._extend_port_port_security_dict(context, p)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        return port[\u0027port\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FqC4%3D","line":161,"in_reply_to":"AAAAM3%2F%2FqO8%3D","updated":"2013-01-10 18:24:21.000000000","message":"Done","commit_id":"dd66f2044bd150c161e8c4bf353bedaae95ade22"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":32,"context_line":"    def setUp(self, plugin\u003dNone):"},{"line_number":33,"context_line":"        super(PortSecurityTestCase, self).setUp()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        def _is_security_group_supported():"},{"line_number":36,"context_line":"            \"\"\"Checks if a plugin supports security groups.\"\"\""},{"line_number":37,"context_line":"            plugin_obj \u003d QuantumManager.get_plugin()"},{"line_number":38,"context_line":"            if \u0027security-group\u0027 not in plugin_obj.supported_extension_aliases:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2Fg2Y%3D","line":35,"updated":"2013-01-17 19:53:23.000000000","message":"Sorry missed this earlier...not sure why this needs to be an inner method.\n\n    plugin_obj \u003d QuantumManager.get_plugin()\n    self._skip_security_group \u003d (\u0027security-group\u0027 not in plugin_obj.supported_extension_aliases)","commit_id":"2feab5fa72c096ad026ef6a32552cf50b2c03a02"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    def setUp(self, plugin\u003dNone):"},{"line_number":33,"context_line":"        super(PortSecurityTestCase, self).setUp()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        def _is_security_group_supported():"},{"line_number":36,"context_line":"            \"\"\"Checks if a plugin supports security groups.\"\"\""},{"line_number":37,"context_line":"            plugin_obj \u003d QuantumManager.get_plugin()"},{"line_number":38,"context_line":"            if \u0027security-group\u0027 not in plugin_obj.supported_extension_aliases:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2Fgps%3D","line":35,"in_reply_to":"AAAAM3%2F%2Fg1k%3D","updated":"2013-01-17 22:03:31.000000000","message":"I\u0027ll remove that this is a method and just do it directly.","commit_id":"2feab5fa72c096ad026ef6a32552cf50b2c03a02"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    def setUp(self, plugin\u003dNone):"},{"line_number":33,"context_line":"        super(PortSecurityTestCase, self).setUp()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        def _is_security_group_supported():"},{"line_number":36,"context_line":"            \"\"\"Checks if a plugin supports security groups.\"\"\""},{"line_number":37,"context_line":"            plugin_obj \u003d QuantumManager.get_plugin()"},{"line_number":38,"context_line":"            if \u0027security-group\u0027 not in plugin_obj.supported_extension_aliases:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2Fg1k%3D","line":35,"in_reply_to":"AAAAM3%2F%2Fg2Y%3D","updated":"2013-01-17 19:57:22.000000000","message":"I guess it doesn\u0027t have to be an inline method. I only did it this way because that\u0027s how _is_native_bulk_supported() was done. https://github.com/openstack/quantum/blob/master/quantum/tests/unit/test_db_plugin.py#L60 \n\nAre you meaning why this is defined inside of def setUp()?","commit_id":"2feab5fa72c096ad026ef6a32552cf50b2c03a02"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":32,"context_line":"    def setUp(self, plugin\u003dNone):"},{"line_number":33,"context_line":"        super(PortSecurityTestCase, self).setUp()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        def _is_security_group_supported():"},{"line_number":36,"context_line":"            \"\"\"Checks if a plugin supports security groups.\"\"\""},{"line_number":37,"context_line":"            plugin_obj \u003d QuantumManager.get_plugin()"},{"line_number":38,"context_line":"            if \u0027security-group\u0027 not in plugin_obj.supported_extension_aliases:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2Fgd8%3D","line":35,"in_reply_to":"AAAAM3%2F%2Fgps%3D","updated":"2013-01-18 00:21:21.000000000","message":"I think that inlining is the better option here since you\u0027re really not using any of the benefits of a nested method.","commit_id":"2feab5fa72c096ad026ef6a32552cf50b2c03a02"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class PortSecurityTestPlugin(db_base_plugin_v2.QuantumDbPluginV2,"},{"line_number":50,"context_line":"                             securitygroups_db.SecurityGroupDbMixin,"},{"line_number":51,"context_line":"                             portsecurity_db.PortSecurityDbMixin):"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    \"\"\" Test plugin that implements necessary calls on create/delete port for"},{"line_number":54,"context_line":"    associating ports with security groups and port security."}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2Fgck%3D","line":51,"updated":"2013-01-18 00:35:33.000000000","message":"This test class looks having common logic which can be used in some plugins. How about create MixIn class for that purpose?","commit_id":"2feab5fa72c096ad026ef6a32552cf50b2c03a02"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":201,"context_line":"        self.assertEquals(net[\u0027network\u0027][psec.PORTSECURITY], False)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def test_create_port_default_true(self):"},{"line_number":204,"context_line":"        with self.network(do_delete\u003dFalse) as net:"},{"line_number":205,"context_line":"            res \u003d self._create_port(\u0027json\u0027, net[\u0027network\u0027][\u0027id\u0027])"},{"line_number":206,"context_line":"            port \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":207,"context_line":"            self.assertEquals(port[\u0027port\u0027][psec.PORTSECURITY], True)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Ff00%3D","line":204,"updated":"2013-01-18 12:53:04.000000000","message":"Do you have a reason for which the final network delete should fail?\n\nYou create a port on it and then delete it. No 409 error should be thrown.\n\nI\u0027m totally sure you have a good reason for doing that, but without a comment it looks like you\u0027re hacking the test for making it pass :)","commit_id":"ad5a5e614846d8a46347e68b39948b58860440d3"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        self.assertEquals(net[\u0027network\u0027][psec.PORTSECURITY], False)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def test_create_port_default_true(self):"},{"line_number":204,"context_line":"        with self.network(do_delete\u003dFalse) as net:"},{"line_number":205,"context_line":"            res \u003d self._create_port(\u0027json\u0027, net[\u0027network\u0027][\u0027id\u0027])"},{"line_number":206,"context_line":"            port \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":207,"context_line":"            self.assertEquals(port[\u0027port\u0027][psec.PORTSECURITY], True)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FfdQ%3D","line":204,"in_reply_to":"AAAAM3%2F%2Ff00%3D","updated":"2013-01-18 18:52:22.000000000","message":"This is a left over do_delete. This line should be removed good catch.","commit_id":"ad5a5e614846d8a46347e68b39948b58860440d3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":227,"context_line":"        self.assertEquals(port[\u0027port\u0027][psec.PORTSECURITY], False)"},{"line_number":228,"context_line":"        self._delete(\u0027ports\u0027, port[\u0027port\u0027][\u0027id\u0027])"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def test_create_port_on_port_security_false_network_but_true(self):"},{"line_number":231,"context_line":"        res \u003d self._create_network(\u0027json\u0027, \u0027net1\u0027, True,"},{"line_number":232,"context_line":"                                   arg_list\u003d(\u0027port_security_enabled\u0027,),"},{"line_number":233,"context_line":"                                   port_security_enabled\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Ff0s%3D","line":230,"updated":"2013-01-18 12:53:04.000000000","message":"It\u0027s me not being a native English speaker, or does this test name looks like it\u0027s being written by this Vicky Pollard :)\n\nhttp://www.youtube.com/watch?v\u003drxCPj40eFNc\n\n(0:40 onwards)\n\nJokes apart, if you reckon this and other tests\u0027 names can be made a little more intuitive, please do it.","commit_id":"ad5a5e614846d8a46347e68b39948b58860440d3"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e346791cb4a3d737d9564b74027ee0c22906ce40","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        self.assertEquals(port[\u0027port\u0027][psec.PORTSECURITY], False)"},{"line_number":228,"context_line":"        self._delete(\u0027ports\u0027, port[\u0027port\u0027][\u0027id\u0027])"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def test_create_port_on_port_security_false_network_but_true(self):"},{"line_number":231,"context_line":"        res \u003d self._create_network(\u0027json\u0027, \u0027net1\u0027, True,"},{"line_number":232,"context_line":"                                   arg_list\u003d(\u0027port_security_enabled\u0027,),"},{"line_number":233,"context_line":"                                   port_security_enabled\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Ffc4%3D","line":230,"in_reply_to":"AAAAM3%2F%2Ff0s%3D","updated":"2013-01-18 18:52:22.000000000","message":"Ha.... Done","commit_id":"ad5a5e614846d8a46347e68b39948b58860440d3"}]}
