)]}'
{"neutron/api/rpc/handlers/securitygroups_rpc.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"27d9d5ded74184aa5f3a35fdbf35fca67147bf65","unresolved":false,"context_lines":[{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class SecurityGroupServerRpcApi(object):"},{"line_number":37,"context_line":"    \"\"\"RPC client for security group methods in the plugin."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    This class implements the client side of an rpc interface.  This interface"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a461143_41a4b656","line":36,"range":{"start_line":36,"start_character":6,"end_line":36,"end_character":31},"updated":"2017-01-25 18:48:22.000000000","message":"Shouldn\u0027t this class also implement sg_rpc_base.SecurityGroupInfoInterface even when doesn\u0027t take advantage of any method but with the idea of having a contract.","commit_id":"8f34007890370d145ad126fb7ef9aa67f593a65a"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"27d9d5ded74184aa5f3a35fdbf35fca67147bf65","unresolved":false,"context_lines":[{"line_number":257,"context_line":"    def security_group_info_for_devices(self, context, devices):"},{"line_number":258,"context_line":"        ports \u003d self._get_devices_info(context, devices)"},{"line_number":259,"context_line":"        result \u003d self.security_group_info_for_ports(context, ports)"},{"line_number":260,"context_line":"        # import pdb"},{"line_number":261,"context_line":"        # pdb.set_trace()"},{"line_number":262,"context_line":"        return result"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    def security_group_rules_for_devices(self, context, devices):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a461143_81adbe33","line":261,"range":{"start_line":260,"start_character":8,"end_line":261,"end_character":25},"updated":"2017-01-25 18:48:22.000000000","message":"Oops","commit_id":"8f34007890370d145ad126fb7ef9aa67f593a65a"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"27d9d5ded74184aa5f3a35fdbf35fca67147bf65","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        # about the security group rules. so we need to emulate a rule deletion"},{"line_number":285,"context_line":"        # when a security group is removed."},{"line_number":286,"context_line":"        rule_in_group \u003d lambda r: r.security_group_id \u003d\u003d existing.id"},{"line_number":287,"context_line":"        for rule in self.rcache.get_resources(\u0027SecurityGroupRule\u0027,"},{"line_number":288,"context_line":"                                              rule_in_group):"},{"line_number":289,"context_line":"            self.rcache.record_resource_delete(context, \u0027SecurityGroupRule\u0027,"},{"line_number":290,"context_line":"                                               rule.id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a461143_2409782d","line":287,"range":{"start_line":287,"start_character":46,"end_line":287,"end_character":65},"updated":"2017-01-25 18:48:22.000000000","message":"is it possible to use the constant defined in neutron.api.rpc.callbacks.resources?","commit_id":"8f34007890370d145ad126fb7ef9aa67f593a65a"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"27d9d5ded74184aa5f3a35fdbf35fca67147bf65","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        rule_in_group \u003d lambda r: r.security_group_id \u003d\u003d existing.id"},{"line_number":287,"context_line":"        for rule in self.rcache.get_resources(\u0027SecurityGroupRule\u0027,"},{"line_number":288,"context_line":"                                              rule_in_group):"},{"line_number":289,"context_line":"            self.rcache.record_resource_delete(context, \u0027SecurityGroupRule\u0027,"},{"line_number":290,"context_line":"                                               rule.id)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def _handle_sg_rule_change(self, rtype, event, trigger, context, existing,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a461143_a41d6868","line":289,"range":{"start_line":289,"start_character":56,"end_line":289,"end_character":75},"updated":"2017-01-25 18:48:22.000000000","message":"ditto line 287","commit_id":"8f34007890370d145ad126fb7ef9aa67f593a65a"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"27d9d5ded74184aa5f3a35fdbf35fca67147bf65","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        # make_port_dict_with_security_groups in ML2 db"},{"line_number":343,"context_line":"        result \u003d {}"},{"line_number":344,"context_line":"        for device in devices:"},{"line_number":345,"context_line":"            ovo \u003d self.rcache.get_resource_by_id(\u0027Port\u0027, device)"},{"line_number":346,"context_line":"            if not ovo:"},{"line_number":347,"context_line":"                continue"},{"line_number":348,"context_line":"            port \u003d ovo.to_dict()"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a461143_e44cd078","line":345,"range":{"start_line":345,"start_character":50,"end_line":345,"end_character":54},"updated":"2017-01-25 18:48:22.000000000","message":"ditto line 287","commit_id":"8f34007890370d145ad126fb7ef9aa67f593a65a"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"27d9d5ded74184aa5f3a35fdbf35fca67147bf65","unresolved":false,"context_lines":[{"line_number":365,"context_line":"            return {}"},{"line_number":366,"context_line":"        ips \u003d {network_id: set() for network_id in network_ids}"},{"line_number":367,"context_line":"        subnet_in_net \u003d lambda s: s.network_id in network_ids"},{"line_number":368,"context_line":"        subnets \u003d self.rcache.get_resources(\u0027Subnet\u0027, subnet_in_net)"},{"line_number":369,"context_line":"        for s in subnets:"},{"line_number":370,"context_line":"            if not s.gateway_ip or s.ip_version !\u003d 6:"},{"line_number":371,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a461143_c448b45e","line":368,"range":{"start_line":368,"start_character":45,"end_line":368,"end_character":51},"updated":"2017-01-25 18:48:22.000000000","message":"ditto line 287","commit_id":"8f34007890370d145ad126fb7ef9aa67f593a65a"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"27d9d5ded74184aa5f3a35fdbf35fca67147bf65","unresolved":false,"context_lines":[{"line_number":391,"context_line":"                        fip.ip_address \u003d\u003d subnet.gateway_ip):"},{"line_number":392,"context_line":"                    return True"},{"line_number":393,"context_line":"            return False"},{"line_number":394,"context_line":"        router_gw_ports \u003d self.rcache.get_resources(\u0027Port\u0027, is_router_gw)"},{"line_number":395,"context_line":"        if len(router_gw_ports) !\u003d 1:"},{"line_number":396,"context_line":"            LOG.warning(_LW(\"No valid gateway port on subnet %s is found \""},{"line_number":397,"context_line":"                            \"for IPv6 RA\"), subnet.id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a461143_a4900897","line":394,"range":{"start_line":394,"start_character":53,"end_line":394,"end_character":57},"updated":"2017-01-25 18:48:22.000000000","message":"ditto line 287","commit_id":"8f34007890370d145ad126fb7ef9aa67f593a65a"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"27d9d5ded74184aa5f3a35fdbf35fca67147bf65","unresolved":false,"context_lines":[{"line_number":412,"context_line":"            if p.network_id in network_ids:"},{"line_number":413,"context_line":"                return True"},{"line_number":414,"context_line":"            return False"},{"line_number":415,"context_line":"        for p in self.rcache.get_resources(\u0027Port\u0027, is_dhcp_port):"},{"line_number":416,"context_line":"            for fip in p.fixed_ips:"},{"line_number":417,"context_line":"                ip \u003d netaddr.IPAddress(fip.ip_address)"},{"line_number":418,"context_line":"                if ip.version \u003d\u003d 6 and not ip.is_link_local():"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a461143_04871c62","line":415,"range":{"start_line":415,"start_character":44,"end_line":415,"end_character":48},"updated":"2017-01-25 18:48:22.000000000","message":"ditto line 287","commit_id":"8f34007890370d145ad126fb7ef9aa67f593a65a"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"27d9d5ded74184aa5f3a35fdbf35fca67147bf65","unresolved":false,"context_lines":[{"line_number":449,"context_line":"                      for sg_id in p[\u0027security_group_ids\u0027]))"},{"line_number":450,"context_line":"        rule_in_group \u003d lambda r: r.security_group_id in sg_ids"},{"line_number":451,"context_line":"        rules_by_sgid \u003d collections.defaultdict(list)"},{"line_number":452,"context_line":"        for r in self.rcache.get_resources(\u0027SecurityGroupRule\u0027, rule_in_group):"},{"line_number":453,"context_line":"            rules_by_sgid[r.security_group_id].append(r)"},{"line_number":454,"context_line":"        for p in ports.values():"},{"line_number":455,"context_line":"            for sg_id in p[\u0027security_group_ids\u0027]:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a461143_44aa04d6","line":452,"range":{"start_line":452,"start_character":44,"end_line":452,"end_character":61},"updated":"2017-01-25 18:48:22.000000000","message":"ditto line 287","commit_id":"8f34007890370d145ad126fb7ef9aa67f593a65a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2367a8648c755ae138d2c83a19b3897da5fadbab","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        updated \u003d kwargs.get(\u0027updated\u0027)"},{"line_number":301,"context_line":"        sgs \u003d set(existing.security_group_ids) if existing else set()"},{"line_number":302,"context_line":"        if event \u003d\u003d events.AFTER_DELETE:"},{"line_number":303,"context_line":"            if not sgs:"},{"line_number":304,"context_line":"                return"},{"line_number":305,"context_line":"        else:"},{"line_number":306,"context_line":"            changed_fields \u003d kwargs[\u0027changed_fields\u0027]"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_7672814b","line":303,"updated":"2017-07-12 20:15:42.000000000","message":"super nit: if not existing\nOnly noticed because L291, but it\u0027s the same result","commit_id":"f253dca7eebe9f5618890d834100ced5fc04f5d5"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"e6aae10144c3e1bb9e9bc7e4a99216ff70aa2c86","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        updated \u003d kwargs.get(\u0027updated\u0027)"},{"line_number":301,"context_line":"        sgs \u003d set(existing.security_group_ids) if existing else set()"},{"line_number":302,"context_line":"        if event \u003d\u003d events.AFTER_DELETE:"},{"line_number":303,"context_line":"            if not sgs:"},{"line_number":304,"context_line":"                return"},{"line_number":305,"context_line":"        else:"},{"line_number":306,"context_line":"            changed_fields \u003d kwargs[\u0027changed_fields\u0027]"}],"source_content_type":"text/x-python","patch_set":19,"id":"1f1a1f67_1f989419","line":303,"in_reply_to":"3f1d235d_7672814b","updated":"2017-07-19 09:07:42.000000000","message":"Done","commit_id":"f253dca7eebe9f5618890d834100ced5fc04f5d5"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2367a8648c755ae138d2c83a19b3897da5fadbab","unresolved":false,"context_lines":[{"line_number":308,"context_line":"                    \u0027fixed_ips\u0027 not in changed_fields):"},{"line_number":309,"context_line":"                return"},{"line_number":310,"context_line":"            sgs.update({sg_id for sg_id in updated.security_group_ids})"},{"line_number":311,"context_line":"        if sgs:"},{"line_number":312,"context_line":"            self._sg_agent.security_groups_member_updated(sgs)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def _get_devices_info(self, context, devices):"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_b678192b","line":311,"updated":"2017-07-12 20:15:42.000000000","message":"I think this has to be valid here, right?","commit_id":"f253dca7eebe9f5618890d834100ced5fc04f5d5"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"e6aae10144c3e1bb9e9bc7e4a99216ff70aa2c86","unresolved":false,"context_lines":[{"line_number":308,"context_line":"                    \u0027fixed_ips\u0027 not in changed_fields):"},{"line_number":309,"context_line":"                return"},{"line_number":310,"context_line":"            sgs.update({sg_id for sg_id in updated.security_group_ids})"},{"line_number":311,"context_line":"        if sgs:"},{"line_number":312,"context_line":"            self._sg_agent.security_groups_member_updated(sgs)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def _get_devices_info(self, context, devices):"}],"source_content_type":"text/x-python","patch_set":19,"id":"1f1a1f67_3ff7d05b","line":311,"in_reply_to":"3f1d235d_b678192b","updated":"2017-07-19 09:07:42.000000000","message":"I think so. I\u0027m going to split these out into separate handlers for each event type. The branching I think is causing more work to understand than separate handlers. :)","commit_id":"f253dca7eebe9f5618890d834100ced5fc04f5d5"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2367a8648c755ae138d2c83a19b3897da5fadbab","unresolved":false,"context_lines":[{"line_number":320,"context_line":"            ovo \u003d self.rcache.get_resource_by_id(\u0027Port\u0027, device)"},{"line_number":321,"context_line":"            if not ovo:"},{"line_number":322,"context_line":"                continue"},{"line_number":323,"context_line":"            port \u003d ovo.to_dict()"},{"line_number":324,"context_line":"            port[\u0027security_groups\u0027] \u003d [sid for sid in ovo.security_group_ids]"},{"line_number":325,"context_line":"            port[\u0027security_group_rules\u0027] \u003d []"},{"line_number":326,"context_line":"            port[\u0027security_group_source_groups\u0027] \u003d []"}],"source_content_type":"text/x-python","patch_set":19,"id":"1f1a1f67_04d7edef","line":323,"updated":"2017-07-12 20:15:42.000000000","message":"Maybe it\u0027s better to have the is_port_trusted() check here instead of L336, saves some work","commit_id":"f253dca7eebe9f5618890d834100ced5fc04f5d5"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"e6aae10144c3e1bb9e9bc7e4a99216ff70aa2c86","unresolved":false,"context_lines":[{"line_number":320,"context_line":"            ovo \u003d self.rcache.get_resource_by_id(\u0027Port\u0027, device)"},{"line_number":321,"context_line":"            if not ovo:"},{"line_number":322,"context_line":"                continue"},{"line_number":323,"context_line":"            port \u003d ovo.to_dict()"},{"line_number":324,"context_line":"            port[\u0027security_groups\u0027] \u003d [sid for sid in ovo.security_group_ids]"},{"line_number":325,"context_line":"            port[\u0027security_group_rules\u0027] \u003d []"},{"line_number":326,"context_line":"            port[\u0027security_group_source_groups\u0027] \u003d []"}],"source_content_type":"text/x-python","patch_set":19,"id":"1f1a1f67_bfa08043","line":323,"in_reply_to":"1f1a1f67_04d7edef","updated":"2017-07-19 09:07:42.000000000","message":"Done","commit_id":"f253dca7eebe9f5618890d834100ced5fc04f5d5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6bf0525fd19e99da844402de1d3215004d5bdaa4","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                           events.AFTER_DELETE)"},{"line_number":243,"context_line":"        registry.subscribe(self._add_child_sg_rules, \u0027SecurityGroup\u0027,"},{"line_number":244,"context_line":"                           events.AFTER_UPDATE)"},{"line_number":245,"context_line":"        # set this attr so agent can the adjust timeout of the client"},{"line_number":246,"context_line":"        self.client \u003d resources_rpc.ResourcesPullRpcApi().client"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def register_legacy_sg_notification_callbacks(self, sg_agent):"}],"source_content_type":"text/x-python","patch_set":21,"id":"1f1a1f67_13060d22","line":245,"range":{"start_line":245,"start_character":37,"end_line":245,"end_character":40},"updated":"2017-07-20 21:04:44.000000000","message":"remove","commit_id":"9d117ad48fbc99f381e59d6d844ff0433e7f59ba"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"1d7aba13869cb3ffca222db95be27a5053139f47","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                           events.AFTER_DELETE)"},{"line_number":243,"context_line":"        registry.subscribe(self._add_child_sg_rules, \u0027SecurityGroup\u0027,"},{"line_number":244,"context_line":"                           events.AFTER_UPDATE)"},{"line_number":245,"context_line":"        # set this attr so agent can the adjust timeout of the client"},{"line_number":246,"context_line":"        self.client \u003d resources_rpc.ResourcesPullRpcApi().client"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def register_legacy_sg_notification_callbacks(self, sg_agent):"}],"source_content_type":"text/x-python","patch_set":21,"id":"1f1a1f67_1dbdf767","line":245,"range":{"start_line":245,"start_character":37,"end_line":245,"end_character":40},"in_reply_to":"1f1a1f67_13060d22","updated":"2017-07-20 21:20:36.000000000","message":"Done","commit_id":"9d117ad48fbc99f381e59d6d844ff0433e7f59ba"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6bf0525fd19e99da844402de1d3215004d5bdaa4","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        # when a security group is removed."},{"line_number":286,"context_line":"        filters \u003d {\u0027security_group_id\u0027: (existing.id, )}"},{"line_number":287,"context_line":"        for rule in self.rcache.get_resources(\u0027SecurityGroupRule\u0027, filters):"},{"line_number":288,"context_line":"            self.rcache.record_resource_delete(context, \u0027SecurityGroupRule\u0027,"},{"line_number":289,"context_line":"                                               rule.id)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"    def _handle_sg_rule_delete(self, rtype, event, trigger, context, existing,"}],"source_content_type":"text/x-python","patch_set":21,"id":"1f1a1f67_fae001cf","line":288,"updated":"2017-07-20 21:04:44.000000000","message":"can record_resource_delete yield? because if it can, and another thread that gets priority while you do removal also touches cache structures, then you may issue AFTER_DELETE event twice. (is it a problem? and if it is, is it a problem in record_resource_delete implementation and not here?)","commit_id":"9d117ad48fbc99f381e59d6d844ff0433e7f59ba"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"1d7aba13869cb3ffca222db95be27a5053139f47","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        # when a security group is removed."},{"line_number":286,"context_line":"        filters \u003d {\u0027security_group_id\u0027: (existing.id, )}"},{"line_number":287,"context_line":"        for rule in self.rcache.get_resources(\u0027SecurityGroupRule\u0027, filters):"},{"line_number":288,"context_line":"            self.rcache.record_resource_delete(context, \u0027SecurityGroupRule\u0027,"},{"line_number":289,"context_line":"                                               rule.id)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"    def _handle_sg_rule_delete(self, rtype, event, trigger, context, existing,"}],"source_content_type":"text/x-python","patch_set":21,"id":"1f1a1f67_9d87c7b7","line":288,"in_reply_to":"1f1a1f67_fae001cf","updated":"2017-07-20 21:20:36.000000000","message":"Yes, it\u0027s possible that as we are cleaning up children rules here a listener could yield and then we process an explicit delete of the same child rule. Right now this is okay since DELETEs just end up triggering refreshes of the rules.\n\nWith a small change to \u0027record_resource_delete\u0027 I can prevent double notifications. Will do that in a separate patch.","commit_id":"9d117ad48fbc99f381e59d6d844ff0433e7f59ba"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6bf0525fd19e99da844402de1d3215004d5bdaa4","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        sgs \u003d set(existing.security_group_ids) if existing else set()"},{"line_number":314,"context_line":"        if not changed_fields.intersection({\u0027security_group_ids\u0027, \u0027fixed_ips\u0027,"},{"line_number":315,"context_line":"                                            \u0027allowed_address_pairs\u0027}):"},{"line_number":316,"context_line":"            # not of the relevant fields to SG calculations changed"},{"line_number":317,"context_line":"            return"},{"line_number":318,"context_line":"        sgs.update({sg_id for sg_id in updated.security_group_ids})"},{"line_number":319,"context_line":"        if sgs:"}],"source_content_type":"text/x-python","patch_set":21,"id":"1f1a1f67_1a13bdba","line":316,"range":{"start_line":316,"start_character":14,"end_line":316,"end_character":18},"updated":"2017-07-20 21:04:44.000000000","message":"none?","commit_id":"9d117ad48fbc99f381e59d6d844ff0433e7f59ba"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"1d7aba13869cb3ffca222db95be27a5053139f47","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        sgs \u003d set(existing.security_group_ids) if existing else set()"},{"line_number":314,"context_line":"        if not changed_fields.intersection({\u0027security_group_ids\u0027, \u0027fixed_ips\u0027,"},{"line_number":315,"context_line":"                                            \u0027allowed_address_pairs\u0027}):"},{"line_number":316,"context_line":"            # not of the relevant fields to SG calculations changed"},{"line_number":317,"context_line":"            return"},{"line_number":318,"context_line":"        sgs.update({sg_id for sg_id in updated.security_group_ids})"},{"line_number":319,"context_line":"        if sgs:"}],"source_content_type":"text/x-python","patch_set":21,"id":"1f1a1f67_5d912ff1","line":316,"range":{"start_line":316,"start_character":14,"end_line":316,"end_character":18},"in_reply_to":"1f1a1f67_1a13bdba","updated":"2017-07-20 21:20:36.000000000","message":"Done","commit_id":"9d117ad48fbc99f381e59d6d844ff0433e7f59ba"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6bf0525fd19e99da844402de1d3215004d5bdaa4","unresolved":false,"context_lines":[{"line_number":333,"context_line":"            if net.is_port_trusted(port):"},{"line_number":334,"context_line":"                continue"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"            port[\u0027security_groups\u0027] \u003d [sid for sid in ovo.security_group_ids]"},{"line_number":337,"context_line":"            port[\u0027security_group_rules\u0027] \u003d []"},{"line_number":338,"context_line":"            port[\u0027security_group_source_groups\u0027] \u003d []"},{"line_number":339,"context_line":"            port[\u0027fixed_ips\u0027] \u003d [str(f[\u0027ip_address\u0027])"}],"source_content_type":"text/x-python","patch_set":21,"id":"1f1a1f67_ba5f2971","line":336,"range":{"start_line":336,"start_character":54,"end_line":336,"end_character":76},"updated":"2017-07-20 21:04:44.000000000","message":"as per object definition, it\u0027s a nullable field, so iteration against it may fail with TypeError. Also I am not sure why you need to iterate if it\u0027s already a set. Or do you want a list? then just list() it.","commit_id":"9d117ad48fbc99f381e59d6d844ff0433e7f59ba"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"1d7aba13869cb3ffca222db95be27a5053139f47","unresolved":false,"context_lines":[{"line_number":333,"context_line":"            if net.is_port_trusted(port):"},{"line_number":334,"context_line":"                continue"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"            port[\u0027security_groups\u0027] \u003d [sid for sid in ovo.security_group_ids]"},{"line_number":337,"context_line":"            port[\u0027security_group_rules\u0027] \u003d []"},{"line_number":338,"context_line":"            port[\u0027security_group_source_groups\u0027] \u003d []"},{"line_number":339,"context_line":"            port[\u0027fixed_ips\u0027] \u003d [str(f[\u0027ip_address\u0027])"}],"source_content_type":"text/x-python","patch_set":21,"id":"1f1a1f67_3d8e73d0","line":336,"range":{"start_line":336,"start_character":54,"end_line":336,"end_character":76},"in_reply_to":"1f1a1f67_ba5f2971","updated":"2017-07-20 21:20:36.000000000","message":"Done","commit_id":"9d117ad48fbc99f381e59d6d844ff0433e7f59ba"}],"neutron/tests/unit/api/rpc/handlers/test_securitygroups_rpc.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6bf0525fd19e99da844402de1d3215004d5bdaa4","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        filters \u003d {\u0027security_group_id\u0027: (s1.id, )}"},{"line_number":118,"context_line":"        self.assertEqual("},{"line_number":119,"context_line":"            s1.rules,"},{"line_number":120,"context_line":"            self.rcache.get_resources(\u0027SecurityGroupRule\u0027, filters))"},{"line_number":121,"context_line":"        self.sg_agent.security_groups_rule_updated.assert_called_once_with("},{"line_number":122,"context_line":"            [s1.id])"},{"line_number":123,"context_line":"        self.sg_agent.security_groups_rule_updated.reset_mock()"}],"source_content_type":"text/x-python","patch_set":21,"id":"1f1a1f67_3d1793f0","line":120,"updated":"2017-07-20 21:04:44.000000000","message":"not sure if the order of s1.rules is guaranteed to be the same as the result of get_resources.","commit_id":"9d117ad48fbc99f381e59d6d844ff0433e7f59ba"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"3c230822979f3542700d8d6622741fe1d9944016","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        filters \u003d {\u0027security_group_id\u0027: (s1.id, )}"},{"line_number":118,"context_line":"        self.assertEqual("},{"line_number":119,"context_line":"            s1.rules,"},{"line_number":120,"context_line":"            self.rcache.get_resources(\u0027SecurityGroupRule\u0027, filters))"},{"line_number":121,"context_line":"        self.sg_agent.security_groups_rule_updated.assert_called_once_with("},{"line_number":122,"context_line":"            [s1.id])"},{"line_number":123,"context_line":"        self.sg_agent.security_groups_rule_updated.reset_mock()"}],"source_content_type":"text/x-python","patch_set":21,"id":"1f1a1f67_9d7587cf","line":120,"in_reply_to":"1f1a1f67_3d1793f0","updated":"2017-07-20 21:22:22.000000000","message":"might not be, but in this case we only have one rule so it should be safe.","commit_id":"9d117ad48fbc99f381e59d6d844ff0433e7f59ba"}]}
