)]}'
{"neutron/api/extensions.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"cd514503a8a7bc0ad83ed873ca84b3f7d34ba78d","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        neutron.pecan_wsgi.controllers.utils.NeutronPecanController."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        If a resource is defined in both get_resources and get_pecan_resources,"},{"line_number":192,"context_line":"        the resource defined in get_pecan_resources will take precedence."},{"line_number":193,"context_line":"        \"\"\""},{"line_number":194,"context_line":"        return []"},{"line_number":195,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_4780b746","line":192,"updated":"2016-05-19 21:46:57.000000000","message":"cool","commit_id":"3cd6821b0fd1cce4bdae6062b966bc49da7f09a3"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"cd514503a8a7bc0ad83ed873ca84b3f7d34ba78d","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        \"\"\"Returns a list of PecanResourceExtension objects.\"\"\""},{"line_number":438,"context_line":"        resources \u003d []"},{"line_number":439,"context_line":"        for ext in self.extensions.values():"},{"line_number":440,"context_line":"            # NOTE: this is being called because there are side effects that"},{"line_number":441,"context_line":"            # the get_resources method does, like registering plural mappings"},{"line_number":442,"context_line":"            # and quotas. The side effects that get_resources does should"},{"line_number":443,"context_line":"            # probably be moved to another extension method, but that should"}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_a797e38e","line":440,"updated":"2016-05-19 21:46:57.000000000","message":"TODO instead of NOTE","commit_id":"3cd6821b0fd1cce4bdae6062b966bc49da7f09a3"}],"neutron/manager.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"3187f1e2fceb0cf8de3d395cb8f9307e567b08cf","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        # Used by pecan WSGI"},{"line_number":129,"context_line":"        self.resource_plugin_mappings \u003d {}"},{"line_number":130,"context_line":"        self.resource_controller_mappings \u003d {}"},{"line_number":131,"context_line":"        self.path_prefix_resource_mappings \u003d {}"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    @staticmethod"},{"line_number":134,"context_line":"    def load_class_for_provider(namespace, plugin_provider):"}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_1e3d1add","line":131,"updated":"2016-05-17 01:12:36.000000000","message":"make this a defaultdict of lists so you can get rid of all of the \u0027get\u0027 logic in the new methods\n\ndef add_resource_for_path_prefix(...):\n    cls.get_instance().path_prefix_resource_mappings[path_prefix].append(resource)\n\ndef get_resources_for_path_prefix(...):\n    return cls.get_instance().path_prefix_resource_mappings[path_prefix]","commit_id":"182d3ae3c8411d4dbe84fbcf2c5c04ae8aa60356"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"4473d1eb76654693f03a60baac22287789a1f0dd","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        # Used by pecan WSGI"},{"line_number":129,"context_line":"        self.resource_plugin_mappings \u003d {}"},{"line_number":130,"context_line":"        self.resource_controller_mappings \u003d {}"},{"line_number":131,"context_line":"        self.path_prefix_resource_mappings \u003d {}"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    @staticmethod"},{"line_number":134,"context_line":"    def load_class_for_provider(namespace, plugin_provider):"}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_bf0a0777","line":131,"in_reply_to":"dab17558_1e3d1add","updated":"2016-05-17 03:41:33.000000000","message":"good idea","commit_id":"182d3ae3c8411d4dbe84fbcf2c5c04ae8aa60356"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"4ff26a98d1dab500f0d73e2a71be1f48e683e039","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        # Used by pecan WSGI"},{"line_number":129,"context_line":"        self.resource_plugin_mappings \u003d {}"},{"line_number":130,"context_line":"        self.resource_controller_mappings \u003d {}"},{"line_number":131,"context_line":"        self.path_prefix_resource_mappings \u003d {}"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    @staticmethod"},{"line_number":134,"context_line":"    def load_class_for_provider(namespace, plugin_provider):"}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_f6f0fffe","line":131,"in_reply_to":"dab17558_bf0a0777","updated":"2016-05-18 00:06:32.000000000","message":"Done","commit_id":"182d3ae3c8411d4dbe84fbcf2c5c04ae8aa60356"},{"author":{"_account_id":12906,"name":"tonytan4ever","email":"tony.tan@rackspace.com","username":"tonytan4ever"},"change_message_id":"c8dbc367e7c47b3d3d02b57009fd033c48e6454f","unresolved":false,"context_lines":[{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    @classmethod"},{"line_number":287,"context_line":"    def get_resources_for_path_prefix(cls, path_prefix):"},{"line_number":288,"context_line":"        return cls.get_instance().path_prefix_resource_mappings[path_prefix])"}],"source_content_type":"text/x-python","patch_set":12,"id":"bab6814e_75733eb2","line":288,"updated":"2016-05-18 14:00:22.000000000","message":"This won\u0027t work. The ending parentheses will generate a syntax error","commit_id":"ea4a4578553a7d4f5e7cde9e2b0373fc313c7ba5"}],"neutron/pecan_wsgi/controllers/resource.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"3187f1e2fceb0cf8de3d395cb8f9307e567b08cf","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def get(self, *args, **kwargs):"},{"line_number":39,"context_line":"        getter \u003d getattr(self.plugin, \u0027get_%s\u0027 % self.resource)"},{"line_number":40,"context_line":"        neutron_context \u003d request.context[\u0027neutron_context\u0027]"},{"line_number":41,"context_line":"        return {self.resource: getter(neutron_context, self.item, fields\u003d[])}"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @utils.when(index, method\u003d\u0027HEAD\u0027)"},{"line_number":44,"context_line":"    @utils.when(index, method\u003d\u0027POST\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_be55ee1e","line":41,"updated":"2016-05-17 01:12:36.000000000","message":"why an emtpy list for fields now?","commit_id":"182d3ae3c8411d4dbe84fbcf2c5c04ae8aa60356"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"4473d1eb76654693f03a60baac22287789a1f0dd","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def get(self, *args, **kwargs):"},{"line_number":39,"context_line":"        getter \u003d getattr(self.plugin, \u0027get_%s\u0027 % self.resource)"},{"line_number":40,"context_line":"        neutron_context \u003d request.context[\u0027neutron_context\u0027]"},{"line_number":41,"context_line":"        return {self.resource: getter(neutron_context, self.item, fields\u003d[])}"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @utils.when(index, method\u003d\u0027HEAD\u0027)"},{"line_number":44,"context_line":"    @utils.when(index, method\u003d\u0027POST\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_ffcc8f6b","line":41,"in_reply_to":"dab17558_be55ee1e","updated":"2016-05-17 03:41:33.000000000","message":"this is basically just to allow the auto allocate calls to work.  Salvatore has another review up that will fix this though.\n\nhttps://review.openstack.org/#/c/305707\n\nThis does fix one issue with the auto allocate calls but not all so I can remove this and just wait for the review above to merge.","commit_id":"182d3ae3c8411d4dbe84fbcf2c5c04ae8aa60356"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"4ff26a98d1dab500f0d73e2a71be1f48e683e039","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def get(self, *args, **kwargs):"},{"line_number":39,"context_line":"        getter \u003d getattr(self.plugin, \u0027get_%s\u0027 % self.resource)"},{"line_number":40,"context_line":"        neutron_context \u003d request.context[\u0027neutron_context\u0027]"},{"line_number":41,"context_line":"        return {self.resource: getter(neutron_context, self.item, fields\u003d[])}"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @utils.when(index, method\u003d\u0027HEAD\u0027)"},{"line_number":44,"context_line":"    @utils.when(index, method\u003d\u0027POST\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_768ecf79","line":41,"in_reply_to":"dab17558_ffcc8f6b","updated":"2016-05-18 00:06:32.000000000","message":"Done","commit_id":"182d3ae3c8411d4dbe84fbcf2c5c04ae8aa60356"}],"neutron/pecan_wsgi/startup.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"3187f1e2fceb0cf8de3d395cb8f9307e567b08cf","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    ext_mgr.extend_resources(\"2.0\", attributes.RESOURCE_ATTRIBUTE_MAP)"},{"line_number":38,"context_line":"    # At this stage we have a fully populated resource attribute map;"},{"line_number":39,"context_line":"    # build Pecan controllers and routes for all core resources"},{"line_number":40,"context_line":"    for resource in router.RESOURCES:"},{"line_number":41,"context_line":"        resource_registry.register_resource_by_name(resource)"},{"line_number":42,"context_line":"        collection \u003d router.RESOURCES[resource]"},{"line_number":43,"context_line":"        plugin \u003d manager.NeutronManager.get_plugin()"}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_9e52aa33","line":40,"updated":"2016-05-17 01:12:36.000000000","message":"for resource, collection in router.RESOURCES.items():","commit_id":"182d3ae3c8411d4dbe84fbcf2c5c04ae8aa60356"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"4ff26a98d1dab500f0d73e2a71be1f48e683e039","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    ext_mgr.extend_resources(\"2.0\", attributes.RESOURCE_ATTRIBUTE_MAP)"},{"line_number":38,"context_line":"    # At this stage we have a fully populated resource attribute map;"},{"line_number":39,"context_line":"    # build Pecan controllers and routes for all core resources"},{"line_number":40,"context_line":"    for resource in router.RESOURCES:"},{"line_number":41,"context_line":"        resource_registry.register_resource_by_name(resource)"},{"line_number":42,"context_line":"        collection \u003d router.RESOURCES[resource]"},{"line_number":43,"context_line":"        plugin \u003d manager.NeutronManager.get_plugin()"}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_36df276a","line":40,"in_reply_to":"dab17558_9e52aa33","updated":"2016-05-18 00:06:32.000000000","message":"Done","commit_id":"182d3ae3c8411d4dbe84fbcf2c5c04ae8aa60356"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"3187f1e2fceb0cf8de3d395cb8f9307e567b08cf","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        if isinstance(legacy_controller, base.Controller):"},{"line_number":58,"context_line":"            resource \u003d legacy_controller._resource"},{"line_number":59,"context_line":"            plugin \u003d legacy_controller._plugin"},{"line_number":60,"context_line":"            if collection \u003d\u003d \u0027routers\u0027:"},{"line_number":61,"context_line":"                # We already have routers controllers for use with pecan"},{"line_number":62,"context_line":"                # so we will use them instead of a generic controller"},{"line_number":63,"context_line":"                new_controller \u003d pecanized_router.RoutersController()"}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_fe31360c","line":60,"updated":"2016-05-17 01:12:36.000000000","message":"can\u0027t we ask the extension first if it\u0027s pecanized so we don\u0027t have to special case each one of these?","commit_id":"182d3ae3c8411d4dbe84fbcf2c5c04ae8aa60356"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"4ff26a98d1dab500f0d73e2a71be1f48e683e039","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        if isinstance(legacy_controller, base.Controller):"},{"line_number":58,"context_line":"            resource \u003d legacy_controller._resource"},{"line_number":59,"context_line":"            plugin \u003d legacy_controller._plugin"},{"line_number":60,"context_line":"            if collection \u003d\u003d \u0027routers\u0027:"},{"line_number":61,"context_line":"                # We already have routers controllers for use with pecan"},{"line_number":62,"context_line":"                # so we will use them instead of a generic controller"},{"line_number":63,"context_line":"                new_controller \u003d pecanized_router.RoutersController()"}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_76e52f36","line":60,"in_reply_to":"dab17558_7f2edf43","updated":"2016-05-18 00:06:32.000000000","message":"Done","commit_id":"182d3ae3c8411d4dbe84fbcf2c5c04ae8aa60356"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"4473d1eb76654693f03a60baac22287789a1f0dd","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        if isinstance(legacy_controller, base.Controller):"},{"line_number":58,"context_line":"            resource \u003d legacy_controller._resource"},{"line_number":59,"context_line":"            plugin \u003d legacy_controller._plugin"},{"line_number":60,"context_line":"            if collection \u003d\u003d \u0027routers\u0027:"},{"line_number":61,"context_line":"                # We already have routers controllers for use with pecan"},{"line_number":62,"context_line":"                # so we will use them instead of a generic controller"},{"line_number":63,"context_line":"                new_controller \u003d pecanized_router.RoutersController()"}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_7f2edf43","line":60,"in_reply_to":"dab17558_fe31360c","updated":"2016-05-17 03:41:33.000000000","message":"we could do that, but then we\u0027ll also need to decide if we want to keep the get_pecan_controllers method in the extension.  If so, that method needs to do the same type of registering that get_resources does with plurals and the policy engine and whatever else I\u0027m not thinking of.\n\nI don\u0027t like having to special case either, and this was just intended to be temporary.","commit_id":"182d3ae3c8411d4dbe84fbcf2c5c04ae8aa60356"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"3187f1e2fceb0cf8de3d395cb8f9307e567b08cf","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        elif isinstance(legacy_controller, wsgi.Controller):"},{"line_number":74,"context_line":"            # We already have quotas controllers defined for use with pecan"},{"line_number":75,"context_line":"            # so we will use them instead of a shim"},{"line_number":76,"context_line":"            if collection \u003d\u003d \u0027quotas\u0027:"},{"line_number":77,"context_line":"                # Need to build the plurals for quotas because they aren\u0027t"},{"line_number":78,"context_line":"                # at this point"},{"line_number":79,"context_line":"                attributes.PLURALS[\u0027quotas\u0027] \u003d \u0027quota\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_de36f201","line":76,"updated":"2016-05-17 01:12:36.000000000","message":"samesies","commit_id":"182d3ae3c8411d4dbe84fbcf2c5c04ae8aa60356"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"4ff26a98d1dab500f0d73e2a71be1f48e683e039","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        elif isinstance(legacy_controller, wsgi.Controller):"},{"line_number":74,"context_line":"            # We already have quotas controllers defined for use with pecan"},{"line_number":75,"context_line":"            # so we will use them instead of a shim"},{"line_number":76,"context_line":"            if collection \u003d\u003d \u0027quotas\u0027:"},{"line_number":77,"context_line":"                # Need to build the plurals for quotas because they aren\u0027t"},{"line_number":78,"context_line":"                # at this point"},{"line_number":79,"context_line":"                attributes.PLURALS[\u0027quotas\u0027] \u003d \u0027quota\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_56e0eb25","line":76,"in_reply_to":"dab17558_de36f201","updated":"2016-05-18 00:06:32.000000000","message":"Done","commit_id":"182d3ae3c8411d4dbe84fbcf2c5c04ae8aa60356"},{"author":{"_account_id":12906,"name":"tonytan4ever","email":"tony.tan@rackspace.com","username":"tonytan4ever"},"change_message_id":"4cf429e0363fb455215f8b20f2fd07c4d013ebac","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            else:"},{"line_number":82,"context_line":"                new_controller \u003d utils.ShimCollectionsController("},{"line_number":83,"context_line":"                    collection, None, legacy_controller)"},{"line_number":84,"context_line":"            manager.NeutronManager.set_controller_for_resource("},{"line_number":85,"context_line":"                collection, new_controller)"},{"line_number":86,"context_line":"        else:"},{"line_number":87,"context_line":"            LOG.info(_LI(\"Unknown controller type encountered %s.  It will be\""}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_261ee25e","line":84,"updated":"2016-05-17 18:36:38.000000000","message":"This line of code is getting called by both branches, we can refactor it out ?","commit_id":"182d3ae3c8411d4dbe84fbcf2c5c04ae8aa60356"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"3bbd5984adb1603adff4092cd9db76f3831824ad","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            else:"},{"line_number":82,"context_line":"                new_controller \u003d utils.ShimCollectionsController("},{"line_number":83,"context_line":"                    collection, None, legacy_controller)"},{"line_number":84,"context_line":"            manager.NeutronManager.set_controller_for_resource("},{"line_number":85,"context_line":"                collection, new_controller)"},{"line_number":86,"context_line":"        else:"},{"line_number":87,"context_line":"            LOG.info(_LI(\"Unknown controller type encountered %s.  It will be\""}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_cc93b54d","line":84,"in_reply_to":"dab17558_261ee25e","updated":"2016-05-17 19:19:59.000000000","message":"i tried to do that real quick but then it got ugly and i didn\u0027t like the look of it.  I may try again though.","commit_id":"182d3ae3c8411d4dbe84fbcf2c5c04ae8aa60356"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"4ff26a98d1dab500f0d73e2a71be1f48e683e039","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            else:"},{"line_number":82,"context_line":"                new_controller \u003d utils.ShimCollectionsController("},{"line_number":83,"context_line":"                    collection, None, legacy_controller)"},{"line_number":84,"context_line":"            manager.NeutronManager.set_controller_for_resource("},{"line_number":85,"context_line":"                collection, new_controller)"},{"line_number":86,"context_line":"        else:"},{"line_number":87,"context_line":"            LOG.info(_LI(\"Unknown controller type encountered %s.  It will be\""}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_b6d15759","line":84,"in_reply_to":"dab17558_cc93b54d","updated":"2016-05-18 00:06:32.000000000","message":"Done","commit_id":"182d3ae3c8411d4dbe84fbcf2c5c04ae8aa60356"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"3187f1e2fceb0cf8de3d395cb8f9307e567b08cf","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            manager.NeutronManager.set_controller_for_resource("},{"line_number":85,"context_line":"                collection, new_controller)"},{"line_number":86,"context_line":"        else:"},{"line_number":87,"context_line":"            LOG.info(_LI(\"Unknown controller type encountered %s.  It will be\""},{"line_number":88,"context_line":"                         \"ignored.\"), legacy_controller)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    # Certain policy checks require that the extensions are loaded"}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_3e38deed","line":87,"updated":"2016-05-17 01:12:36.000000000","message":"We should log probably Warning at this level. We shouldn\u0027t be encountering these right? What do you think about making this fatal?","commit_id":"182d3ae3c8411d4dbe84fbcf2c5c04ae8aa60356"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"4473d1eb76654693f03a60baac22287789a1f0dd","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            manager.NeutronManager.set_controller_for_resource("},{"line_number":85,"context_line":"                collection, new_controller)"},{"line_number":86,"context_line":"        else:"},{"line_number":87,"context_line":"            LOG.info(_LI(\"Unknown controller type encountered %s.  It will be\""},{"line_number":88,"context_line":"                         \"ignored.\"), legacy_controller)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    # Certain policy checks require that the extensions are loaded"}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_9fac63a0","line":87,"in_reply_to":"dab17558_3e38deed","updated":"2016-05-17 03:41:33.000000000","message":"I think warning right now.  I was hoping there wouldn\u0027t be any other type of controller but there is :(\n\nTags define their own controllers and they\u0027re not inheriting from any class (except object of course).  It\u0027s also doing a lot of other uncommon things that we\u0027ll have to add in logic to handle it.","commit_id":"182d3ae3c8411d4dbe84fbcf2c5c04ae8aa60356"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"4ff26a98d1dab500f0d73e2a71be1f48e683e039","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            manager.NeutronManager.set_controller_for_resource("},{"line_number":85,"context_line":"                collection, new_controller)"},{"line_number":86,"context_line":"        else:"},{"line_number":87,"context_line":"            LOG.info(_LI(\"Unknown controller type encountered %s.  It will be\""},{"line_number":88,"context_line":"                         \"ignored.\"), legacy_controller)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    # Certain policy checks require that the extensions are loaded"}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_36c6079a","line":87,"in_reply_to":"dab17558_9fac63a0","updated":"2016-05-18 00:06:32.000000000","message":"Done","commit_id":"182d3ae3c8411d4dbe84fbcf2c5c04ae8aa60356"},{"author":{"_account_id":12906,"name":"tonytan4ever","email":"tony.tan@rackspace.com","username":"tonytan4ever"},"change_message_id":"c8dbc367e7c47b3d3d02b57009fd033c48e6454f","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron.api.v2 import base"},{"line_number":22,"context_line":"from neutron.api.v2 import router"},{"line_number":23,"context_line":"from neutron import manager"},{"line_number":24,"context_line":"from neutron.pecan_wsgi.controllers import quota as pecanized_quota"},{"line_number":25,"context_line":"from neutron.pecan_wsgi.controllers import resource as res_ctrl"},{"line_number":26,"context_line":"from neutron.pecan_wsgi.controllers import router as pecanized_router"},{"line_number":27,"context_line":"from neutron.pecan_wsgi.controllers import utils"}],"source_content_type":"text/x-python","patch_set":12,"id":"bab6814e_5588ba22","line":24,"updated":"2016-05-18 14:00:22.000000000","message":"import but not used?","commit_id":"ea4a4578553a7d4f5e7cde9e2b0373fc313c7ba5"},{"author":{"_account_id":12906,"name":"tonytan4ever","email":"tony.tan@rackspace.com","username":"tonytan4ever"},"change_message_id":"c8dbc367e7c47b3d3d02b57009fd033c48e6454f","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from neutron import manager"},{"line_number":24,"context_line":"from neutron.pecan_wsgi.controllers import quota as pecanized_quota"},{"line_number":25,"context_line":"from neutron.pecan_wsgi.controllers import resource as res_ctrl"},{"line_number":26,"context_line":"from neutron.pecan_wsgi.controllers import router as pecanized_router"},{"line_number":27,"context_line":"from neutron.pecan_wsgi.controllers import utils"},{"line_number":28,"context_line":"from neutron import policy"},{"line_number":29,"context_line":"from neutron.quota import resource_registry"}],"source_content_type":"text/x-python","patch_set":12,"id":"bab6814e_7587be0f","line":26,"updated":"2016-05-18 14:00:22.000000000","message":"import but not used?","commit_id":"ea4a4578553a7d4f5e7cde9e2b0373fc313c7ba5"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"cd514503a8a7bc0ad83ed873ca84b3f7d34ba78d","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            # This is a collection that already has a pecan controller, we"},{"line_number":63,"context_line":"            # do not need to do anything else"},{"line_number":64,"context_line":"            continue"},{"line_number":65,"context_line":"        legacy_controller \u003d getattr(ext_res.controller, \u0027controller\u0027, None)"},{"line_number":66,"context_line":"        if not legacy_controller:"},{"line_number":67,"context_line":"            legacy_controller \u003d ext_res.controller"},{"line_number":68,"context_line":"        new_controller \u003d None"}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_87929f9d","line":65,"updated":"2016-05-19 21:46:57.000000000","message":"you can save a line! :)\n\nlegacy_controller \u003d getattr(ext_res.controller, \u0027controller\u0027,\n                            ext_res.controller)","commit_id":"3cd6821b0fd1cce4bdae6062b966bc49da7f09a3"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"2759ed5b2d7a393b7772b6b6d73b9fe808aebe20","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            # This is a collection that already has a pecan controller, we"},{"line_number":63,"context_line":"            # do not need to do anything else"},{"line_number":64,"context_line":"            continue"},{"line_number":65,"context_line":"        legacy_controller \u003d getattr(ext_res.controller, \u0027controller\u0027, None)"},{"line_number":66,"context_line":"        if not legacy_controller:"},{"line_number":67,"context_line":"            legacy_controller \u003d ext_res.controller"},{"line_number":68,"context_line":"        new_controller \u003d None"}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_36767506","line":65,"in_reply_to":"bab6814e_87929f9d","updated":"2016-05-20 07:16:58.000000000","message":"ah yes, thanks","commit_id":"3cd6821b0fd1cce4bdae6062b966bc49da7f09a3"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"cd514503a8a7bc0ad83ed873ca84b3f7d34ba78d","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            legacy_controller \u003d ext_res.controller"},{"line_number":68,"context_line":"        new_controller \u003d None"},{"line_number":69,"context_line":"        if isinstance(legacy_controller, base.Controller):"},{"line_number":70,"context_line":"            resource \u003d legacy_controller._resource"},{"line_number":71,"context_line":"            plugin \u003d legacy_controller._plugin"},{"line_number":72,"context_line":"            new_controller \u003d res_ctrl.CollectionsController("},{"line_number":73,"context_line":"                    collection, resource)"}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_e791eb9a","line":70,"updated":"2016-05-19 21:46:57.000000000","message":"_resource and _plugin sound private. If this needs to access them they should be upgraded to lose the underscore. (i think \u0027plugin\u0027 is already be a property so can use that here...)","commit_id":"3cd6821b0fd1cce4bdae6062b966bc49da7f09a3"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"2759ed5b2d7a393b7772b6b6d73b9fe808aebe20","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            legacy_controller \u003d ext_res.controller"},{"line_number":68,"context_line":"        new_controller \u003d None"},{"line_number":69,"context_line":"        if isinstance(legacy_controller, base.Controller):"},{"line_number":70,"context_line":"            resource \u003d legacy_controller._resource"},{"line_number":71,"context_line":"            plugin \u003d legacy_controller._plugin"},{"line_number":72,"context_line":"            new_controller \u003d res_ctrl.CollectionsController("},{"line_number":73,"context_line":"                    collection, resource)"}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_767bddf5","line":70,"in_reply_to":"bab6814e_e791eb9a","updated":"2016-05-20 07:16:58.000000000","message":"this is controller defined by the class neutron.api.v2.base.Controller.  I don\u0027t see a plugin property there, and I\u0027m not sure there\u0027s anyway to get that, so we may have to upgrade that to without the underscore, but I\u0027m afraid that would have HUGE ramifications.  I don\u0027t think its worth that extra effort for a Controller that should be deprecated soon (though not taken out). The resource can most likely just be grabbed from the attributes.PLURALS dict though, but that\u0027s not always guaranteed to be there.","commit_id":"3cd6821b0fd1cce4bdae6062b966bc49da7f09a3"},{"author":{"_account_id":12906,"name":"tonytan4ever","email":"tony.tan@rackspace.com","username":"tonytan4ever"},"change_message_id":"bfbd1cb6ca9cb04b35d7e830324cbe292bd125f6","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            resource \u003d legacy_controller._resource"},{"line_number":71,"context_line":"            plugin \u003d legacy_controller._plugin"},{"line_number":72,"context_line":"            new_controller \u003d res_ctrl.CollectionsController("},{"line_number":73,"context_line":"                    collection, resource)"},{"line_number":74,"context_line":"            manager.NeutronManager.set_plugin_for_resource(resource, plugin)"},{"line_number":75,"context_line":"            if path_prefix:"},{"line_number":76,"context_line":"                manager.NeutronManager.add_resource_for_path_prefix("}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_ce0fb82c","line":73,"updated":"2016-05-19 15:54:24.000000000","message":"Indentation here could be less.","commit_id":"3cd6821b0fd1cce4bdae6062b966bc49da7f09a3"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"2759ed5b2d7a393b7772b6b6d73b9fe808aebe20","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            resource \u003d legacy_controller._resource"},{"line_number":71,"context_line":"            plugin \u003d legacy_controller._plugin"},{"line_number":72,"context_line":"            new_controller \u003d res_ctrl.CollectionsController("},{"line_number":73,"context_line":"                    collection, resource)"},{"line_number":74,"context_line":"            manager.NeutronManager.set_plugin_for_resource(resource, plugin)"},{"line_number":75,"context_line":"            if path_prefix:"},{"line_number":76,"context_line":"                manager.NeutronManager.add_resource_for_path_prefix("}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_16737116","line":73,"in_reply_to":"bab6814e_ce0fb82c","updated":"2016-05-20 07:16:58.000000000","message":"will do","commit_id":"3cd6821b0fd1cce4bdae6062b966bc49da7f09a3"},{"author":{"_account_id":12906,"name":"tonytan4ever","email":"tony.tan@rackspace.com","username":"tonytan4ever"},"change_message_id":"bfbd1cb6ca9cb04b35d7e830324cbe292bd125f6","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                    collection, path_prefix)"},{"line_number":78,"context_line":"        elif isinstance(legacy_controller, wsgi.Controller):"},{"line_number":79,"context_line":"            new_controller \u003d utils.ShimCollectionsController("},{"line_number":80,"context_line":"                    collection, None, legacy_controller)"},{"line_number":81,"context_line":"        else:"},{"line_number":82,"context_line":"            LOG.warning(_LW(\"Unknown controller type encountered %s.  It will\""},{"line_number":83,"context_line":"                            \"be ignored.\"), legacy_controller)"}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_0e1a606e","line":80,"updated":"2016-05-19 15:54:24.000000000","message":"Same.","commit_id":"3cd6821b0fd1cce4bdae6062b966bc49da7f09a3"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"2759ed5b2d7a393b7772b6b6d73b9fe808aebe20","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                    collection, path_prefix)"},{"line_number":78,"context_line":"        elif isinstance(legacy_controller, wsgi.Controller):"},{"line_number":79,"context_line":"            new_controller \u003d utils.ShimCollectionsController("},{"line_number":80,"context_line":"                    collection, None, legacy_controller)"},{"line_number":81,"context_line":"        else:"},{"line_number":82,"context_line":"            LOG.warning(_LW(\"Unknown controller type encountered %s.  It will\""},{"line_number":83,"context_line":"                            \"be ignored.\"), legacy_controller)"}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_b658a58b","line":80,"in_reply_to":"bab6814e_0e1a606e","updated":"2016-05-20 07:16:58.000000000","message":"will do","commit_id":"3cd6821b0fd1cce4bdae6062b966bc49da7f09a3"}]}
