)]}'
{"networking_cisco/plugins/cisco/l3/drivers/asr1k/aci_asr1k_routertype_driver.py":[{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"5e2d60c651fce5dba5e1ba2fdfe352121af2ffd8","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _get_router_id_from_port(self, r_port_context):"},{"line_number":101,"context_line":"        current \u003d r_port_context.current"},{"line_number":102,"context_line":"        if (current[\u0027device_owner\u0027] !\u003d l3_constants.DEVICE_OWNER_ROUTER_GW and"},{"line_number":103,"context_line":"            current[\u0027device_owner\u0027] !\u003d l3_constants.DEVICE_OWNER_ROUTER_INTF):"},{"line_number":104,"context_line":"            # TODO(tbachman): raise exception?"},{"line_number":105,"context_line":"            return None"},{"line_number":106,"context_line":"        else:"},{"line_number":107,"context_line":"            return current[\u0027device_id\u0027]"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def create_router_precommit(self, context, router_context):"},{"line_number":110,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_df59b436","line":107,"range":{"start_line":102,"start_character":8,"end_line":107,"end_character":39},"updated":"2016-10-03 11:52:37.000000000","message":"This reads a little weird, perhaps change to:\n\n    if (current[\u0027device_owner\u0027] \u003d\u003d l3_constants.DEVICE_OWNER_ROUTER_GW or\n        current[\u0027device_owner\u0027] \u003d\u003d l3_constants.DEVICE_OWNER_ROUTER_INTF):\n        return current[\u0027device_id\u0027]\n    # raise ...Exception","commit_id":"520ed45599b2c8b822cf88c17fd5512e8575d437"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"4c8930a0adf1d9a1562139c4f0086c097b171fac","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _get_router_id_from_port(self, r_port_context):"},{"line_number":101,"context_line":"        current \u003d r_port_context.current"},{"line_number":102,"context_line":"        if (current[\u0027device_owner\u0027] !\u003d l3_constants.DEVICE_OWNER_ROUTER_GW and"},{"line_number":103,"context_line":"            current[\u0027device_owner\u0027] !\u003d l3_constants.DEVICE_OWNER_ROUTER_INTF):"},{"line_number":104,"context_line":"            # TODO(tbachman): raise exception?"},{"line_number":105,"context_line":"            return None"},{"line_number":106,"context_line":"        else:"},{"line_number":107,"context_line":"            return current[\u0027device_id\u0027]"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def create_router_precommit(self, context, router_context):"},{"line_number":110,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_360abe8a","line":107,"range":{"start_line":102,"start_character":8,"end_line":107,"end_character":39},"in_reply_to":"3a98d1f4_df59b436","updated":"2016-10-03 13:23:00.000000000","message":"Sure - will fix.","commit_id":"520ed45599b2c8b822cf88c17fd5512e8575d437"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"5e2d60c651fce5dba5e1ba2fdfe352121af2ffd8","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def update_router_postcommit(self, context, router_context):"},{"line_number":119,"context_line":"        current \u003d router_context.current"},{"line_number":120,"context_line":"        if current[HOSTING_DEVICE_ATTR] is None:"},{"line_number":121,"context_line":"            return"},{"line_number":122,"context_line":"        super(AciASR1kL3RouterDriver, self).update_router_postcommit("},{"line_number":123,"context_line":"            context, router_context)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_bf0ea8e2","line":120,"range":{"start_line":120,"start_character":11,"end_line":120,"end_character":39},"updated":"2016-10-03 11:52:37.000000000","message":"I\u0027m assuming based on the \"if current\" statement below that current can either be None or an empty dict, if this is the case then you want to use:\n\ncurrent.get(HOSTING_DEVICE_ATTR)\n\nThe current code will throw a KeyError at this point.\n\n(We should be unit testing these paths through the code)","commit_id":"520ed45599b2c8b822cf88c17fd5512e8575d437"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"4c8930a0adf1d9a1562139c4f0086c097b171fac","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def update_router_postcommit(self, context, router_context):"},{"line_number":119,"context_line":"        current \u003d router_context.current"},{"line_number":120,"context_line":"        if current[HOSTING_DEVICE_ATTR] is None:"},{"line_number":121,"context_line":"            return"},{"line_number":122,"context_line":"        super(AciASR1kL3RouterDriver, self).update_router_postcommit("},{"line_number":123,"context_line":"            context, router_context)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_f6ebf6d9","line":120,"range":{"start_line":120,"start_character":11,"end_line":120,"end_character":39},"in_reply_to":"3a98d1f4_bf0ea8e2","updated":"2016-10-03 13:23:00.000000000","message":"Yeah -- good catch, and will fix (and add UT). This is actually a copy/paste bug, as this part of the code was copied from the ASR1k router type driver. I\u0027ll propose a similar fix to that driver in a separate patch.","commit_id":"520ed45599b2c8b822cf88c17fd5512e8575d437"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"5e2d60c651fce5dba5e1ba2fdfe352121af2ffd8","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        # TODO(tbachman): remove setting of _plugin?"},{"line_number":131,"context_line":"        context._plugin \u003d self"},{"line_number":132,"context_line":"        router \u003d router_context.current"},{"line_number":133,"context_line":"        router_id \u003d router[\u0027id\u0027]"},{"line_number":134,"context_line":"        if router and router[\u0027tenant_id\u0027] !\u003d \u0027\u0027:"},{"line_number":135,"context_line":"            self.apic_driver.delete_router_precommit(context, router_id)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def delete_router_postcommit(self, context, router_context):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_ffd11024","line":134,"range":{"start_line":133,"start_character":8,"end_line":134,"end_character":17},"updated":"2016-10-03 11:52:37.000000000","message":"If router is None or an empty dict, then it\u0027ll throw a key error before we reach the if statement checking it.","commit_id":"520ed45599b2c8b822cf88c17fd5512e8575d437"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"7954767f9bd127abc617aae23afbce40c00de5c9","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        # TODO(tbachman): remove setting of _plugin?"},{"line_number":131,"context_line":"        context._plugin \u003d self"},{"line_number":132,"context_line":"        router \u003d router_context.current"},{"line_number":133,"context_line":"        router_id \u003d router[\u0027id\u0027]"},{"line_number":134,"context_line":"        if router and router[\u0027tenant_id\u0027] !\u003d \u0027\u0027:"},{"line_number":135,"context_line":"            self.apic_driver.delete_router_precommit(context, router_id)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def delete_router_postcommit(self, context, router_context):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_bcc86f56","line":134,"range":{"start_line":133,"start_character":8,"end_line":134,"end_character":17},"in_reply_to":"3a98d1f4_1c8b2320","updated":"2016-10-03 13:36:40.000000000","message":"Ah yes -- of course :-). Will remove the \"if router\" check (as well as \"if port\" checks below).","commit_id":"520ed45599b2c8b822cf88c17fd5512e8575d437"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"b1aa3312d16a53faca9844abc738e3cfa8565d6f","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        # TODO(tbachman): remove setting of _plugin?"},{"line_number":131,"context_line":"        context._plugin \u003d self"},{"line_number":132,"context_line":"        router \u003d router_context.current"},{"line_number":133,"context_line":"        router_id \u003d router[\u0027id\u0027]"},{"line_number":134,"context_line":"        if router and router[\u0027tenant_id\u0027] !\u003d \u0027\u0027:"},{"line_number":135,"context_line":"            self.apic_driver.delete_router_precommit(context, router_id)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def delete_router_postcommit(self, context, router_context):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_1c8b2320","line":134,"range":{"start_line":133,"start_character":8,"end_line":134,"end_character":17},"in_reply_to":"3a98d1f4_d9338df4","updated":"2016-10-03 13:34:52.000000000","message":"That makes sense, and I\u0027m happy for this code to assume the router always exists. What I\u0027m pointing out in this comment though is that if router is None, the code will fail with a KeyError before the \u0027if router\u0027 ever gets reached, which results in the \u0027if router\u0027 always evaluating to True.","commit_id":"520ed45599b2c8b822cf88c17fd5512e8575d437"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"4c8930a0adf1d9a1562139c4f0086c097b171fac","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        # TODO(tbachman): remove setting of _plugin?"},{"line_number":131,"context_line":"        context._plugin \u003d self"},{"line_number":132,"context_line":"        router \u003d router_context.current"},{"line_number":133,"context_line":"        router_id \u003d router[\u0027id\u0027]"},{"line_number":134,"context_line":"        if router and router[\u0027tenant_id\u0027] !\u003d \u0027\u0027:"},{"line_number":135,"context_line":"            self.apic_driver.delete_router_precommit(context, router_id)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def delete_router_postcommit(self, context, router_context):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_d9338df4","line":134,"range":{"start_line":133,"start_character":8,"end_line":134,"end_character":17},"in_reply_to":"3a98d1f4_ffd11024","updated":"2016-10-03 13:23:00.000000000","message":"I guess it depends how we want to see this driver. If we only see it as being used by the L3 plugin, then we should be okay. The reason is the L3 plugin provides a certain level of validation for us. The call is made here:\n\nhttps://github.com/openstack/networking-cisco/blob/master/networking_cisco/plugins/cisco/db/l3/l3_router_appliance_db.py#L376\n\nYou\u0027ll note that the router DB object is obtained earlier:\n\nhttps://github.com/openstack/networking-cisco/blob/master/networking_cisco/plugins/cisco/db/l3/l3_router_appliance_db.py#L352\n\nThe guts of that call throw an exception if the router doesn\u0027t exist.\n\nWe can add checks if you prefer, but I\u0027d rather not add checks that are redundant when considering the context of their use.","commit_id":"520ed45599b2c8b822cf88c17fd5512e8575d437"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"5e2d60c651fce5dba5e1ba2fdfe352121af2ffd8","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    def add_router_interface_postcommit(self, context, r_port_context):"},{"line_number":160,"context_line":"        port \u003d r_port_context.current"},{"line_number":161,"context_line":"        router_id \u003d r_port_context.current_router"},{"line_number":162,"context_line":"        interface_info \u003d {\u0027port_id\u0027: port[\u0027id\u0027]}"},{"line_number":163,"context_line":"        if port and port[\u0027tenant_id\u0027] !\u003d \u0027\u0027:"},{"line_number":164,"context_line":"            self.apic_driver.add_router_interface_postcommit("},{"line_number":165,"context_line":"                context, router_id, interface_info)"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_5fc3e456","line":163,"range":{"start_line":162,"start_character":37,"end_line":163,"end_character":15},"updated":"2016-10-03 11:52:37.000000000","message":"Ditto","commit_id":"520ed45599b2c8b822cf88c17fd5512e8575d437"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"4c8930a0adf1d9a1562139c4f0086c097b171fac","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    def add_router_interface_postcommit(self, context, r_port_context):"},{"line_number":160,"context_line":"        port \u003d r_port_context.current"},{"line_number":161,"context_line":"        router_id \u003d r_port_context.current_router"},{"line_number":162,"context_line":"        interface_info \u003d {\u0027port_id\u0027: port[\u0027id\u0027]}"},{"line_number":163,"context_line":"        if port and port[\u0027tenant_id\u0027] !\u003d \u0027\u0027:"},{"line_number":164,"context_line":"            self.apic_driver.add_router_interface_postcommit("},{"line_number":165,"context_line":"                context, router_id, interface_info)"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_39539118","line":163,"range":{"start_line":162,"start_character":37,"end_line":163,"end_character":15},"in_reply_to":"3a98d1f4_5fc3e456","updated":"2016-10-03 13:23:00.000000000","message":"In the case of the port object, it appears as though the base DB \"get_port\" methods don\u0027t throw exceptions if they aren\u0027t found, and instead return None. It seems like we should make our API contract consistent for driver API calls, and therefore should add a check for None objects in the L3 DB plugin caller instead (I did see there are even some code paths in the calling L3 DB coee that would throw exceptions because they are expecting an actual port object, and not None). I\u0027d be happy to submit a separate patch that adds such checks","commit_id":"520ed45599b2c8b822cf88c17fd5512e8575d437"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"5e2d60c651fce5dba5e1ba2fdfe352121af2ffd8","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    def remove_router_interface_precommit(self, context, r_port_context):"},{"line_number":168,"context_line":"        port \u003d r_port_context.current"},{"line_number":169,"context_line":"        router_id \u003d self._get_router_id_from_port(r_port_context)"},{"line_number":170,"context_line":"        interface_info \u003d {\u0027port_id\u0027: port[\u0027id\u0027]}"},{"line_number":171,"context_line":"        if port and port[\u0027tenant_id\u0027] !\u003d \u0027\u0027:"},{"line_number":172,"context_line":"            self.apic_driver.remove_router_interface_precommit("},{"line_number":173,"context_line":"                context, router_id, interface_info)"},{"line_number":174,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_bfaa2883","line":171,"range":{"start_line":170,"start_character":24,"end_line":171,"end_character":15},"updated":"2016-10-03 11:52:37.000000000","message":"Ditto","commit_id":"520ed45599b2c8b822cf88c17fd5512e8575d437"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"4c8930a0adf1d9a1562139c4f0086c097b171fac","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    def remove_router_interface_precommit(self, context, r_port_context):"},{"line_number":168,"context_line":"        port \u003d r_port_context.current"},{"line_number":169,"context_line":"        router_id \u003d self._get_router_id_from_port(r_port_context)"},{"line_number":170,"context_line":"        interface_info \u003d {\u0027port_id\u0027: port[\u0027id\u0027]}"},{"line_number":171,"context_line":"        if port and port[\u0027tenant_id\u0027] !\u003d \u0027\u0027:"},{"line_number":172,"context_line":"            self.apic_driver.remove_router_interface_precommit("},{"line_number":173,"context_line":"                context, router_id, interface_info)"},{"line_number":174,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_59985d6a","line":171,"range":{"start_line":170,"start_character":24,"end_line":171,"end_character":15},"in_reply_to":"3a98d1f4_bfaa2883","updated":"2016-10-03 13:23:00.000000000","message":"See above.","commit_id":"520ed45599b2c8b822cf88c17fd5512e8575d437"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"4d24445ddb340827225dd9c25e7273291c361f1d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Cisco Systems, Inc.  All rights reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_5d003366","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2016-10-03 21:01:35.000000000","message":"Unless this was moved from somewhere, 2016.","commit_id":"2c91c273656fe544fb560a154f2836d72fb69771"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"c1025c7a8334f51736e48225bd633af6b6f7659c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Cisco Systems, Inc.  All rights reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_beeccabb","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"in_reply_to":"3a98d1f4_5d003366","updated":"2016-10-04 00:29:36.000000000","message":"Thanks -- will fix.","commit_id":"2c91c273656fe544fb560a154f2836d72fb69771"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"4d24445ddb340827225dd9c25e7273291c361f1d","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from networking_cisco.plugins.cisco.common import cisco_constants"},{"line_number":16,"context_line":"from networking_cisco.plugins.cisco.db.l3 import ha_db"},{"line_number":17,"context_line":"from networking_cisco.plugins.cisco.extensions import routerhostingdevice"},{"line_number":18,"context_line":"from networking_cisco.plugins.cisco.extensions import routerrole"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_7dd40feb","line":15,"updated":"2016-10-03 21:01:35.000000000","message":"Convention is to group system, third party (which would be neutron and oslo) and then project imports, separating groups by blank line.","commit_id":"2c91c273656fe544fb560a154f2836d72fb69771"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"c1025c7a8334f51736e48225bd633af6b6f7659c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from networking_cisco.plugins.cisco.common import cisco_constants"},{"line_number":16,"context_line":"from networking_cisco.plugins.cisco.db.l3 import ha_db"},{"line_number":17,"context_line":"from networking_cisco.plugins.cisco.extensions import routerhostingdevice"},{"line_number":18,"context_line":"from networking_cisco.plugins.cisco.extensions import routerrole"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_de7b56f3","line":15,"in_reply_to":"3a98d1f4_7dd40feb","updated":"2016-10-04 00:29:36.000000000","message":"Will fix.","commit_id":"2c91c273656fe544fb560a154f2836d72fb69771"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"4d24445ddb340827225dd9c25e7273291c361f1d","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    def update_floatingip_precommit(self, context, fip_context):"},{"line_number":189,"context_line":"        floatingip \u003d fip_context.current"},{"line_number":190,"context_line":"        fip_id \u003d getattr(floatingip, \u0027id\u0027, None)"},{"line_number":191,"context_line":"        if fip_id is None:"},{"line_number":192,"context_line":"            fip_id \u003d fip_context.original[\u0027id\u0027]"},{"line_number":193,"context_line":"        self.apic_driver.update_floatingip_precommit("},{"line_number":194,"context_line":"            context, fip_id, floatingip)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_bdacd78c","line":191,"updated":"2016-10-03 21:01:35.000000000","message":"Can just say if not fip_id. Here and below.","commit_id":"2c91c273656fe544fb560a154f2836d72fb69771"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"c1025c7a8334f51736e48225bd633af6b6f7659c","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    def update_floatingip_precommit(self, context, fip_context):"},{"line_number":189,"context_line":"        floatingip \u003d fip_context.current"},{"line_number":190,"context_line":"        fip_id \u003d getattr(floatingip, \u0027id\u0027, None)"},{"line_number":191,"context_line":"        if fip_id is None:"},{"line_number":192,"context_line":"            fip_id \u003d fip_context.original[\u0027id\u0027]"},{"line_number":193,"context_line":"        self.apic_driver.update_floatingip_precommit("},{"line_number":194,"context_line":"            context, fip_id, floatingip)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_5e70260b","line":191,"in_reply_to":"3a98d1f4_bdacd78c","updated":"2016-10-04 00:29:36.000000000","message":"Good form -- will fix.","commit_id":"2c91c273656fe544fb560a154f2836d72fb69771"},{"author":{"_account_id":162,"name":"Bob Melander","email":"bob.melander@gmail.com","username":"bob-melander"},"change_message_id":"5e6111c3c9e6c00506f9f3203b6d28fa9c7df1a6","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def update_floatingip_precommit(self, context, fip_context):"},{"line_number":190,"context_line":"        floatingip \u003d fip_context.current"},{"line_number":191,"context_line":"        fip_id \u003d getattr(floatingip, \u0027id\u0027, None)"},{"line_number":192,"context_line":"        if not fip_id:"},{"line_number":193,"context_line":"            fip_id \u003d fip_context.original[\u0027id\u0027]"},{"line_number":194,"context_line":"        self.apic_driver.update_floatingip_precommit("}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_d756cdcc","line":191,"updated":"2016-10-04 09:35:44.000000000","message":"Since ip_context.current will return a dict this won\u0027t work as (I imagine) you have intended. Specifically, \u0027getattr\u0027 does not do *item* lookups in things like dicts (it does attribute lookup on objects). So your statement will always return None.\n\nThe correct statement ought to be:\nfip_id \u003d floatingip.get(\u0027id\u0027)","commit_id":"3d246ad101889c5f911fb06360e42087b8eca88f"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"83837dbf99c675c9a5bed57b1fe37dbe538b3c5c","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def update_floatingip_precommit(self, context, fip_context):"},{"line_number":190,"context_line":"        floatingip \u003d fip_context.current"},{"line_number":191,"context_line":"        fip_id \u003d getattr(floatingip, \u0027id\u0027, None)"},{"line_number":192,"context_line":"        if not fip_id:"},{"line_number":193,"context_line":"            fip_id \u003d fip_context.original[\u0027id\u0027]"},{"line_number":194,"context_line":"        self.apic_driver.update_floatingip_precommit("}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_636e1198","line":191,"in_reply_to":"3a98d1f4_d756cdcc","updated":"2016-10-04 15:33:44.000000000","message":"Good catch. Will fix.","commit_id":"3d246ad101889c5f911fb06360e42087b8eca88f"},{"author":{"_account_id":162,"name":"Bob Melander","email":"bob.melander@gmail.com","username":"bob-melander"},"change_message_id":"5e6111c3c9e6c00506f9f3203b6d28fa9c7df1a6","unresolved":false,"context_lines":[{"line_number":197,"context_line":"    def update_floatingip_postcommit(self, context, fip_context):"},{"line_number":198,"context_line":"        floatingip \u003d fip_context.current"},{"line_number":199,"context_line":"        context.current \u003d floatingip"},{"line_number":200,"context_line":"        fip_id \u003d getattr(floatingip, \u0027id\u0027, None)"},{"line_number":201,"context_line":"        if not fip_id:"},{"line_number":202,"context_line":"            fip_id \u003d fip_context.original[\u0027id\u0027]"},{"line_number":203,"context_line":"        self.apic_driver.update_floatingip_postcommit("}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_b70a21d0","line":200,"updated":"2016-10-04 09:35:44.000000000","message":"Dito (see comment to line 191).","commit_id":"3d246ad101889c5f911fb06360e42087b8eca88f"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"83837dbf99c675c9a5bed57b1fe37dbe538b3c5c","unresolved":false,"context_lines":[{"line_number":197,"context_line":"    def update_floatingip_postcommit(self, context, fip_context):"},{"line_number":198,"context_line":"        floatingip \u003d fip_context.current"},{"line_number":199,"context_line":"        context.current \u003d floatingip"},{"line_number":200,"context_line":"        fip_id \u003d getattr(floatingip, \u0027id\u0027, None)"},{"line_number":201,"context_line":"        if not fip_id:"},{"line_number":202,"context_line":"            fip_id \u003d fip_context.original[\u0027id\u0027]"},{"line_number":203,"context_line":"        self.apic_driver.update_floatingip_postcommit("}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_836b1d85","line":200,"in_reply_to":"3a98d1f4_b70a21d0","updated":"2016-10-04 15:33:44.000000000","message":"Will fix.","commit_id":"3d246ad101889c5f911fb06360e42087b8eca88f"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"78b79346a486b01633bbdc0f2ac1a4f708dcd238","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from oslo_log import log as logging"},{"line_number":16,"context_line":"from oslo_utils import importutils"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from neutron.common import constants as l3_constants"},{"line_number":19,"context_line":"from neutron.common import exceptions as n_exc"},{"line_number":20,"context_line":"from neutron import context as nctx"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a95cdbc_088c4b34","line":17,"updated":"2016-10-05 17:42:26.000000000","message":"nit: Oslo and neutron are both in the same group, so can put oslo imports after L22 (no blank).","commit_id":"f0eb894d35a60b4de3af6b25cd0163ed7517cf16"},{"author":{"_account_id":162,"name":"Bob Melander","email":"bob.melander@gmail.com","username":"bob-melander"},"change_message_id":"d87cc509880eca3bb1ad49e9e99dfb23eda7e31a","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                except Exception:"},{"line_number":97,"context_line":"                    LOG.error(_LE(\"APIC ML2 service plugin present, but \""},{"line_number":98,"context_line":"                                  \"dynamic load of APIC ML2 L3 driver \""},{"line_number":99,"context_line":"                                  \"failed.\"))"},{"line_number":100,"context_line":"        return self._apic_driver"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _get_router_id_from_port(self, r_port_context):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a95cdbc_9258388c","line":99,"updated":"2016-10-07 08:29:39.000000000","message":"Similar to the plugging driver case I think failure to load either GPB or APIC driver is a show-stopping failure that probably should prevent neutron from starting at all.","commit_id":"e3d5ab658636ee80aecb91ce44751f8960a4adff"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"dd29e5e05890a536912b8e0d34733f2a096aa138","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                except Exception:"},{"line_number":97,"context_line":"                    LOG.error(_LE(\"APIC ML2 service plugin present, but \""},{"line_number":98,"context_line":"                                  \"dynamic load of APIC ML2 L3 driver \""},{"line_number":99,"context_line":"                                  \"failed.\"))"},{"line_number":100,"context_line":"        return self._apic_driver"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _get_router_id_from_port(self, r_port_context):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a95cdbc_982f6d87","line":99,"in_reply_to":"1a95cdbc_9258388c","updated":"2016-10-07 12:58:47.000000000","message":"Will fix.","commit_id":"e3d5ab658636ee80aecb91ce44751f8960a4adff"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"994ac0a7e8d363d7e4a57d32e49bcb9ab847b87b","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                                  \"dynamic load of APIC ML2 L3 driver \""},{"line_number":105,"context_line":"                                  \"failed.\"))"},{"line_number":106,"context_line":"                    raise PluggingDriverNoAciDriverInstalledOrConfigured()"},{"line_number":107,"context_line":"        return self._apic_driver"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def _get_router_id_from_port(self, r_port_context):"},{"line_number":110,"context_line":"        current \u003d r_port_context.current"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a95cdbc_fc65811d","line":107,"updated":"2016-10-10 13:25:06.000000000","message":"This function feels a little to nested to me, what do you think about restrucuturing it a little bit like this: http://paste.openstack.org/show/585179","commit_id":"adbe8b3cdab28c7270657f5e3b1773f6e2825614"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"c61a14de12556d9adaca7553b3b9e78089899a14","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                                  \"dynamic load of APIC ML2 L3 driver \""},{"line_number":105,"context_line":"                                  \"failed.\"))"},{"line_number":106,"context_line":"                    raise PluggingDriverNoAciDriverInstalledOrConfigured()"},{"line_number":107,"context_line":"        return self._apic_driver"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def _get_router_id_from_port(self, r_port_context):"},{"line_number":110,"context_line":"        current \u003d r_port_context.current"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a95cdbc_130bfb7d","line":107,"in_reply_to":"1a95cdbc_fc65811d","updated":"2016-10-10 13:47:33.000000000","message":"That\u0027s a good improvement. I\u0027ll also look into using similar logic when I do the follow-on patch for the plugging driver (which used this type of logic).","commit_id":"adbe8b3cdab28c7270657f5e3b1773f6e2825614"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"994ac0a7e8d363d7e4a57d32e49bcb9ab847b87b","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    def schedule_router_precommit(self, context, router_context):"},{"line_number":151,"context_line":"        pass"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def schedule_router_postcommit(self, context, router_context):"},{"line_number":154,"context_line":"        super(AciASR1kL3RouterDriver, self).schedule_router_postcommit("},{"line_number":155,"context_line":"            context, router_context)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def unschedule_router_precommit(self, context, router_context):"},{"line_number":158,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a95cdbc_f0792594","line":155,"range":{"start_line":153,"start_character":0,"end_line":155,"end_character":36},"updated":"2016-10-10 13:25:06.000000000","message":"These functions where you are just calling the super version of the same function don\u0027t need to be included because of the inheritance.","commit_id":"adbe8b3cdab28c7270657f5e3b1773f6e2825614"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"c61a14de12556d9adaca7553b3b9e78089899a14","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    def schedule_router_precommit(self, context, router_context):"},{"line_number":151,"context_line":"        pass"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def schedule_router_postcommit(self, context, router_context):"},{"line_number":154,"context_line":"        super(AciASR1kL3RouterDriver, self).schedule_router_postcommit("},{"line_number":155,"context_line":"            context, router_context)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def unschedule_router_precommit(self, context, router_context):"},{"line_number":158,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a95cdbc_d37b53f3","line":155,"range":{"start_line":153,"start_character":0,"end_line":155,"end_character":36},"in_reply_to":"1a95cdbc_f0792594","updated":"2016-10-10 13:47:33.000000000","message":"Will remove.","commit_id":"adbe8b3cdab28c7270657f5e3b1773f6e2825614"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"994ac0a7e8d363d7e4a57d32e49bcb9ab847b87b","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    def unschedule_router_precommit(self, context, router_context):"},{"line_number":158,"context_line":"        pass"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def unschedule_router_postcommit(self, context, router_context):"},{"line_number":161,"context_line":"        super(AciASR1kL3RouterDriver, self).unschedule_router_postcommit("},{"line_number":162,"context_line":"            context, router_context)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def add_router_interface_precommit(self, context, r_port_context):"},{"line_number":165,"context_line":"        super(AciASR1kL3RouterDriver, self).add_router_interface_precommit("},{"line_number":166,"context_line":"            context, r_port_context)"},{"line_number":167,"context_line":"        pass"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def add_router_interface_postcommit(self, context, r_port_context):"},{"line_number":170,"context_line":"        port \u003d r_port_context.current"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a95cdbc_b05cfd19","line":167,"range":{"start_line":160,"start_character":0,"end_line":167,"end_character":12},"updated":"2016-10-10 13:25:06.000000000","message":"Ditto","commit_id":"adbe8b3cdab28c7270657f5e3b1773f6e2825614"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"c61a14de12556d9adaca7553b3b9e78089899a14","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    def unschedule_router_precommit(self, context, router_context):"},{"line_number":158,"context_line":"        pass"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def unschedule_router_postcommit(self, context, router_context):"},{"line_number":161,"context_line":"        super(AciASR1kL3RouterDriver, self).unschedule_router_postcommit("},{"line_number":162,"context_line":"            context, router_context)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def add_router_interface_precommit(self, context, r_port_context):"},{"line_number":165,"context_line":"        super(AciASR1kL3RouterDriver, self).add_router_interface_precommit("},{"line_number":166,"context_line":"            context, r_port_context)"},{"line_number":167,"context_line":"        pass"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def add_router_interface_postcommit(self, context, r_port_context):"},{"line_number":170,"context_line":"        port \u003d r_port_context.current"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a95cdbc_f37e8fe2","line":167,"range":{"start_line":160,"start_character":0,"end_line":167,"end_character":12},"in_reply_to":"1a95cdbc_b05cfd19","updated":"2016-10-10 13:47:33.000000000","message":"Will remove.","commit_id":"adbe8b3cdab28c7270657f5e3b1773f6e2825614"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"994ac0a7e8d363d7e4a57d32e49bcb9ab847b87b","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def update_floatingip_precommit(self, context, fip_context):"},{"line_number":197,"context_line":"        floatingip \u003d fip_context.current"},{"line_number":198,"context_line":"        fip_id \u003d floatingip.get(\u0027id\u0027)"},{"line_number":199,"context_line":"        if not fip_id:"},{"line_number":200,"context_line":"            fip_id \u003d fip_context.original[\u0027id\u0027]"},{"line_number":201,"context_line":"        self.apic_driver.update_floatingip_precommit("},{"line_number":202,"context_line":"            context, fip_id, floatingip)"},{"line_number":203,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a95cdbc_90bd4104","line":200,"range":{"start_line":198,"start_character":8,"end_line":200,"end_character":47},"updated":"2016-10-10 13:25:06.000000000","message":"The .get() function can take a default value to return if it fails to get the requested key, so you can achieve the same thing by doing:\n\nfip_id \u003d floatingip.get(\u0027id\u0027, fip_context.original[\u0027id\u0027])","commit_id":"adbe8b3cdab28c7270657f5e3b1773f6e2825614"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"c61a14de12556d9adaca7553b3b9e78089899a14","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def update_floatingip_precommit(self, context, fip_context):"},{"line_number":197,"context_line":"        floatingip \u003d fip_context.current"},{"line_number":198,"context_line":"        fip_id \u003d floatingip.get(\u0027id\u0027)"},{"line_number":199,"context_line":"        if not fip_id:"},{"line_number":200,"context_line":"            fip_id \u003d fip_context.original[\u0027id\u0027]"},{"line_number":201,"context_line":"        self.apic_driver.update_floatingip_precommit("},{"line_number":202,"context_line":"            context, fip_id, floatingip)"},{"line_number":203,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a95cdbc_f365af44","line":200,"range":{"start_line":198,"start_character":8,"end_line":200,"end_character":47},"in_reply_to":"1a95cdbc_90bd4104","updated":"2016-10-10 13:47:33.000000000","message":"Good improvement -- will change.","commit_id":"adbe8b3cdab28c7270657f5e3b1773f6e2825614"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"994ac0a7e8d363d7e4a57d32e49bcb9ab847b87b","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    def update_floatingip_postcommit(self, context, fip_context):"},{"line_number":205,"context_line":"        floatingip \u003d fip_context.current"},{"line_number":206,"context_line":"        context.current \u003d floatingip"},{"line_number":207,"context_line":"        fip_id \u003d floatingip.get(\u0027id\u0027)"},{"line_number":208,"context_line":"        if not fip_id:"},{"line_number":209,"context_line":"            fip_id \u003d fip_context.original[\u0027id\u0027]"},{"line_number":210,"context_line":"        self.apic_driver.update_floatingip_postcommit("},{"line_number":211,"context_line":"            context, fip_id, floatingip)"},{"line_number":212,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a95cdbc_d007c9c7","line":209,"range":{"start_line":207,"start_character":2,"end_line":209,"end_character":47},"updated":"2016-10-10 13:25:06.000000000","message":"ditto","commit_id":"adbe8b3cdab28c7270657f5e3b1773f6e2825614"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"c61a14de12556d9adaca7553b3b9e78089899a14","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    def update_floatingip_postcommit(self, context, fip_context):"},{"line_number":205,"context_line":"        floatingip \u003d fip_context.current"},{"line_number":206,"context_line":"        context.current \u003d floatingip"},{"line_number":207,"context_line":"        fip_id \u003d floatingip.get(\u0027id\u0027)"},{"line_number":208,"context_line":"        if not fip_id:"},{"line_number":209,"context_line":"            fip_id \u003d fip_context.original[\u0027id\u0027]"},{"line_number":210,"context_line":"        self.apic_driver.update_floatingip_postcommit("},{"line_number":211,"context_line":"            context, fip_id, floatingip)"},{"line_number":212,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a95cdbc_53574357","line":209,"range":{"start_line":207,"start_character":2,"end_line":209,"end_character":47},"in_reply_to":"1a95cdbc_d007c9c7","updated":"2016-10-10 13:47:33.000000000","message":"Good improvement -- will change.","commit_id":"adbe8b3cdab28c7270657f5e3b1773f6e2825614"}],"networking_cisco/tests/unit/cisco/etc/cisco_device_manager_plugin.ini":[{"author":{"_account_id":162,"name":"Bob Melander","email":"bob.melander@gmail.com","username":"bob-melander"},"change_message_id":"f52a6af9ab551a3d8858812498d3ad714f57a63e","unresolved":false,"context_lines":[{"line_number":144,"context_line":"desired_slots_free\u003d0"},{"line_number":145,"context_line":"tenant_bound\u003d"},{"line_number":146,"context_line":"device_driver\u003dnetworking_cisco.plugins.cisco.device_manager.hosting_device_drivers.noop_hd_driver.NoopHostingDeviceDriver"},{"line_number":147,"context_line":"plugging_driver\u003dnetworking_cisco.plugins.cisco.device_manager.plugging_drivers.hw_vlan_trunking_driver.HwVLANTrunkingPlugDriver"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"[hosting_devices]"}],"source_content_type":"text/x-properties","patch_set":12,"id":"da36d5c6_5c47e61c","line":147,"updated":"2017-02-21 20:56:07.000000000","message":"Is it this driver you want here?","commit_id":"9e4054f2f12be73a35522ff8ca401b664b50d029"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"2aa187003d5b2400701cb66c38b1d7ad7258242f","unresolved":false,"context_lines":[{"line_number":144,"context_line":"desired_slots_free\u003d0"},{"line_number":145,"context_line":"tenant_bound\u003d"},{"line_number":146,"context_line":"device_driver\u003dnetworking_cisco.plugins.cisco.device_manager.hosting_device_drivers.noop_hd_driver.NoopHostingDeviceDriver"},{"line_number":147,"context_line":"plugging_driver\u003dnetworking_cisco.plugins.cisco.device_manager.plugging_drivers.hw_vlan_trunking_driver.HwVLANTrunkingPlugDriver"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"[hosting_devices]"}],"source_content_type":"text/x-properties","patch_set":12,"id":"da36d5c6_b2dd6b16","line":147,"in_reply_to":"da36d5c6_5c47e61c","updated":"2017-02-21 21:43:50.000000000","message":"Good catch -- no it isn\u0027t. It doesn\u0027t affect the L3 tests, but it should be fixed. I\u0027ll submit a new version of the patch. Thanks!","commit_id":"9e4054f2f12be73a35522ff8ca401b664b50d029"}],"networking_cisco/tests/unit/cisco/l3/test_aciasr1k_routertype_driver.py":[{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"5e2d60c651fce5dba5e1ba2fdfe352121af2ffd8","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from networking_cisco.plugins.cisco.extensions import routerhostingdevice"},{"line_number":20,"context_line":"from networking_cisco.plugins.cisco.extensions import routerrole"},{"line_number":21,"context_line":"from networking_cisco.plugins.cisco.extensions import routertypeawarescheduler"},{"line_number":22,"context_line":"# This is here only for pre-populating config file options for override"},{"line_number":23,"context_line":"from networking_cisco.tests.unit.cisco.l3 import ("},{"line_number":24,"context_line":"    test_asr1k_routertype_driver as asr1k)"},{"line_number":25,"context_line":"from neutron.api.v2 import attributes"},{"line_number":26,"context_line":"from neutron import context"},{"line_number":27,"context_line":"from neutron.extensions import l3"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_ff28309c","line":24,"range":{"start_line":22,"start_character":0,"end_line":24,"end_character":42},"updated":"2016-10-03 11:52:37.000000000","message":"Is this comment really true? It seems like you are using it for getting the base class for your TestCase","commit_id":"520ed45599b2c8b822cf88c17fd5512e8575d437"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"4c8930a0adf1d9a1562139c4f0086c097b171fac","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from networking_cisco.plugins.cisco.extensions import routerhostingdevice"},{"line_number":20,"context_line":"from networking_cisco.plugins.cisco.extensions import routerrole"},{"line_number":21,"context_line":"from networking_cisco.plugins.cisco.extensions import routertypeawarescheduler"},{"line_number":22,"context_line":"# This is here only for pre-populating config file options for override"},{"line_number":23,"context_line":"from networking_cisco.tests.unit.cisco.l3 import ("},{"line_number":24,"context_line":"    test_asr1k_routertype_driver as asr1k)"},{"line_number":25,"context_line":"from neutron.api.v2 import attributes"},{"line_number":26,"context_line":"from neutron import context"},{"line_number":27,"context_line":"from neutron.extensions import l3"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_b924010d","line":24,"range":{"start_line":22,"start_character":0,"end_line":24,"end_character":42},"in_reply_to":"3a98d1f4_ff28309c","updated":"2016-10-03 13:23:00.000000000","message":"Yeah -- I\u0027m not even sure why I put that comment there in the first place. Will remove.","commit_id":"520ed45599b2c8b822cf88c17fd5512e8575d437"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"4d24445ddb340827225dd9c25e7273291c361f1d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Cisco Systems, Inc.  All rights reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_3d9e0707","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2016-10-03 21:01:35.000000000","message":"date","commit_id":"2c91c273656fe544fb560a154f2836d72fb69771"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"c1025c7a8334f51736e48225bd633af6b6f7659c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Cisco Systems, Inc.  All rights reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_1ed05ec8","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"in_reply_to":"3a98d1f4_3d9e0707","updated":"2016-10-04 00:29:36.000000000","message":"Will fix.","commit_id":"2c91c273656fe544fb560a154f2836d72fb69771"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"4d24445ddb340827225dd9c25e7273291c361f1d","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from networking_cisco.plugins.cisco.extensions import routertypeawarescheduler"},{"line_number":22,"context_line":"from networking_cisco.tests.unit.cisco.l3 import ("},{"line_number":23,"context_line":"    test_asr1k_routertype_driver as asr1k)"},{"line_number":24,"context_line":"from neutron.api.v2 import attributes"},{"line_number":25,"context_line":"from neutron.common import exceptions as n_exc"},{"line_number":26,"context_line":"from neutron import context"},{"line_number":27,"context_line":"from neutron.extensions import l3"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_dda4434c","line":24,"updated":"2016-10-03 21:01:35.000000000","message":"move up neutron and webob imports to 3rd party group.","commit_id":"2c91c273656fe544fb560a154f2836d72fb69771"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"c1025c7a8334f51736e48225bd633af6b6f7659c","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from networking_cisco.plugins.cisco.extensions import routertypeawarescheduler"},{"line_number":22,"context_line":"from networking_cisco.tests.unit.cisco.l3 import ("},{"line_number":23,"context_line":"    test_asr1k_routertype_driver as asr1k)"},{"line_number":24,"context_line":"from neutron.api.v2 import attributes"},{"line_number":25,"context_line":"from neutron.common import exceptions as n_exc"},{"line_number":26,"context_line":"from neutron import context"},{"line_number":27,"context_line":"from neutron.extensions import l3"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_7ed962f2","line":24,"in_reply_to":"3a98d1f4_dda4434c","updated":"2016-10-04 00:29:36.000000000","message":"Will fix.","commit_id":"2c91c273656fe544fb560a154f2836d72fb69771"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"4d24445ddb340827225dd9c25e7273291c361f1d","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            # create a specific auth context for this request"},{"line_number":85,"context_line":"            req.environ[\u0027neutron.context\u0027] \u003d neutron_context"},{"line_number":86,"context_line":"        res \u003d req.get_response(self._api_for_resource(resource))"},{"line_number":87,"context_line":"        self.assertEqual(res.status_int, expected_code)"},{"line_number":88,"context_line":"        return self.deserialize(self.fmt, res)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _test_router_update_set_gw_adds_global_router(self, set_context\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_bd05b714","line":87,"updated":"2016-10-03 21:01:35.000000000","message":"nit: convention is to order args (expected, actual) for consistency. More complex structures will mark the first as \"reference\" and second as \"actual\".","commit_id":"2c91c273656fe544fb560a154f2836d72fb69771"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"c1025c7a8334f51736e48225bd633af6b6f7659c","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            # create a specific auth context for this request"},{"line_number":85,"context_line":"            req.environ[\u0027neutron.context\u0027] \u003d neutron_context"},{"line_number":86,"context_line":"        res \u003d req.get_response(self._api_for_resource(resource))"},{"line_number":87,"context_line":"        self.assertEqual(res.status_int, expected_code)"},{"line_number":88,"context_line":"        return self.deserialize(self.fmt, res)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _test_router_update_set_gw_adds_global_router(self, set_context\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_f9a02cf6","line":87,"in_reply_to":"3a98d1f4_bd05b714","updated":"2016-10-04 00:29:36.000000000","message":"Will fix (and fix others like it).","commit_id":"2c91c273656fe544fb560a154f2836d72fb69771"},{"author":{"_account_id":162,"name":"Bob Melander","email":"bob.melander@gmail.com","username":"bob-melander"},"change_message_id":"5e6111c3c9e6c00506f9f3203b6d28fa9c7df1a6","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                    \u0027host_cidr_ver\u0027: 4, }}"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class AciAsr1kRouterTypeDriverTestCase("},{"line_number":53,"context_line":"        asr1k.Asr1kRouterTypeDriverTestCase):"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    router_type \u003d \u0027AciASR1k_Neutron_router\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_77009902","line":52,"range":{"start_line":52,"start_character":6,"end_line":52,"end_character":38},"updated":"2016-10-04 09:35:44.000000000","message":"I suggest you add UTs where the \u0027id\u0027 attribute is missing to explicitly cover that if clause I made a comment about in the driver.","commit_id":"3d246ad101889c5f911fb06360e42087b8eca88f"},{"author":{"_account_id":18031,"name":"Thomas Bachman","email":"tbachman@yahoo.com","username":"bachmantech"},"change_message_id":"83837dbf99c675c9a5bed57b1fe37dbe538b3c5c","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                    \u0027host_cidr_ver\u0027: 4, }}"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class AciAsr1kRouterTypeDriverTestCase("},{"line_number":53,"context_line":"        asr1k.Asr1kRouterTypeDriverTestCase):"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    router_type \u003d \u0027AciASR1k_Neutron_router\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_83fb1d47","line":52,"range":{"start_line":52,"start_character":6,"end_line":52,"end_character":38},"in_reply_to":"3a98d1f4_77009902","updated":"2016-10-04 15:33:44.000000000","message":"Will add.","commit_id":"3d246ad101889c5f911fb06360e42087b8eca88f"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"78b79346a486b01633bbdc0f2ac1a4f708dcd238","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from oslo_utils import uuidutils"},{"line_number":17,"context_line":"import webob.exc"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.api.v2 import attributes"},{"line_number":20,"context_line":"from neutron.common import exceptions as n_exc"},{"line_number":21,"context_line":"from neutron import context"},{"line_number":22,"context_line":"from neutron.extensions import l3"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a95cdbc_a8c5173d","line":19,"updated":"2016-10-05 17:42:26.000000000","message":"should be at L16.","commit_id":"f0eb894d35a60b4de3af6b25cd0163ed7517cf16"}]}
