)]}'
{"neutron/pecan_wsgi/controllers/utils.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"d374f0ac268ba10b5ec25e02655e019fe61810b0","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def set_resource_and_collection(self, resource, collection):"},{"line_number":86,"context_line":"        self.collection \u003d collection"},{"line_number":87,"context_line":"        self.resource \u003d resource"},{"line_number":88,"context_line":"        self._resource_info \u003d api_attributes.get_collection_info(collection)"},{"line_number":89,"context_line":"        self.collection_key \u003d collection and collection.replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":90,"context_line":"        self.resource_key \u003d resource and resource.replace(\u0027-\u0027, \u0027_\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af94dfe_74a01ca0","line":87,"updated":"2016-03-16 16:40:07.000000000","message":"do we need to keep both forms (hyphen and underscore) because the latter is needed for lookup and the former for everything else?\n\nIf so can\u0027t we change the lookup process to always convert hyphen in uris into underscores? I don\u0027t think it\u0027ll be a big effort","commit_id":"7ec42cdbbe4e5d830d57c0f2994e260b171adb59"}],"neutron/pecan_wsgi/hooks/body_validation.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"d374f0ac268ba10b5ec25e02655e019fe61810b0","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        state.request.context[\u0027request_data\u0027] \u003d json_data"},{"line_number":51,"context_line":"        if not (resource_key in json_data or collection_key in json_data):"},{"line_number":52,"context_line":"            if \u0027bgp\u0027 in resource:"},{"line_number":53,"context_line":"                raise Exception(\"Expecting %s or %s in json data: %s\" % (resource, collection, json_data))"},{"line_number":54,"context_line":"            # there is no resource in the request. This can happen when a"},{"line_number":55,"context_line":"            # member action is being processed or on agent scheduler operations"},{"line_number":56,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af94dfe_b49bc4c8","line":53,"updated":"2016-03-16 16:40:07.000000000","message":"explain?\n\nI think a corner case like this really deserves an explanation, doesn\u0027t it ;)","commit_id":"7ec42cdbbe4e5d830d57c0f2994e260b171adb59"}],"neutron/pecan_wsgi/startup.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"5c64e5e980e652d412a8f3bbe8dbd48c407b5321","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        ext_aliases \u003d ext_mgr.get_plugin_supported_extension_aliases(plugin)"},{"line_number":50,"context_line":"        for alias in ext_aliases:"},{"line_number":51,"context_line":"            if (alias in ext_res_mappings and"},{"line_number":52,"context_line":"                    hasattr(plugin, \u0027get_%s\u0027 % collection)):"},{"line_number":53,"context_line":"                # This plugin implements this resource"},{"line_number":54,"context_line":"                return plugin"},{"line_number":55,"context_line":"    LOG.warning(_LW(\"No plugin found for: %s\"), collection)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_08356ad9","side":"PARENT","line":52,"updated":"2016-03-15 22:42:28.000000000","message":"how do you dare remove this line?\n\nIt serves a simple but important purpose... it ensures that a plugin really implements the method for dealing with a resource - this is mostly for quota.\nMost plugins (all actually) declare they support the extension but they do not implement it.\n\nI guess restoring it screws the rest of your code....","commit_id":"09a110ee48c9594afcde17088f0e1a94293846dd"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"d374f0ac268ba10b5ec25e02655e019fe61810b0","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            # deal with extentions that setup their RESOURCE_ATTR_MAP entry"},{"line_number":104,"context_line":"            # with a different name than their collection"},{"line_number":105,"context_line":"            ext_collection_name \u003d _match_attr_map_to_resources("},{"line_number":106,"context_line":"                ext_resource.attr_map)"},{"line_number":107,"context_line":"            if ext_collection_name:"},{"line_number":108,"context_line":"                ext_resource \u003d _handle_plurals(ext_collection_name)"},{"line_number":109,"context_line":"                plugin \u003d manager.NeutronManager.get_plugin_for_resource("}],"source_content_type":"text/x-python","patch_set":3,"id":"1af94dfe_d98689da","line":106,"updated":"2016-03-16 16:40:07.000000000","message":"This is rather boldish... I would avoid, if possible to compare dicts in the extension descriptor with dicts in RESOURCE_ATTRIBUTE_MAP.\n\nFor instance, attribute extensions might end up altering the latter and making this check invalid.\n\nI hope we can find an easier solution... I personally would \"pecanize\" these unruly extensions rather than figuring out how to make them work as \"legacy\". for instance it took me little more than a hour doing the l3 controller.","commit_id":"7ec42cdbbe4e5d830d57c0f2994e260b171adb59"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"d374f0ac268ba10b5ec25e02655e019fe61810b0","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            if ext_collection_name:"},{"line_number":108,"context_line":"                ext_resource \u003d _handle_plurals(ext_collection_name)"},{"line_number":109,"context_line":"                plugin \u003d manager.NeutronManager.get_plugin_for_resource("},{"line_number":110,"context_line":"                    ext_resource)"},{"line_number":111,"context_line":"                if plugin:"},{"line_number":112,"context_line":"                    manager.NeutronManager.set_plugin_for_resource(resource,"},{"line_number":113,"context_line":"                                                                   plugin)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af94dfe_f9b6e588","line":110,"updated":"2016-03-16 16:40:07.000000000","message":"If we accept the _match_attr_to_map_resource thing at least I would rework the logic of this routine so that get_plugin_for_resource is only run once.","commit_id":"7ec42cdbbe4e5d830d57c0f2994e260b171adb59"}]}
