)]}'
{"quantum/api/v2/base.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"class Controller(object):"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def __init__(self, plugin, collection, resource, attr_info,"},{"line_number":114,"context_line":"                 parent\u003dNone, allow_bulk\u003dFalse, member_actions\u003dNone):"},{"line_number":115,"context_line":"        if member_actions is None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8Wo%3D","line":112,"updated":"2012-12-05 22:53:21.000000000","message":"Consider adding class level constants here:\n     LIST \u003d \u0027list\u0027\n     SHOW \u003d \u0027show\u0027\n     CREATE \u003d \u0027create\u0027\n     UPDATE \u003d \u0027update\u0027\n     DELETE \u003d \u0027delete\u0027","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"class Controller(object):"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def __init__(self, plugin, collection, resource, attr_info,"},{"line_number":114,"context_line":"                 parent\u003dNone, allow_bulk\u003dFalse, member_actions\u003dNone):"},{"line_number":115,"context_line":"        if member_actions is None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F70o%3D","line":112,"in_reply_to":"AAAAMX%2F%2F8Wo%3D","updated":"2012-12-06 08:19:55.000000000","message":"Done","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":111,"context_line":"class Controller(object):"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def __init__(self, plugin, collection, resource, attr_info,"},{"line_number":114,"context_line":"                 parent\u003dNone, allow_bulk\u003dFalse, member_actions\u003dNone):"},{"line_number":115,"context_line":"        if member_actions is None:"},{"line_number":116,"context_line":"            member_actions \u003d []"},{"line_number":117,"context_line":"        self._plugin \u003d plugin"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8W0%3D","line":114,"updated":"2012-12-05 22:53:21.000000000","message":"\u0027parent\u0027 should go as the last arg for backwards compatibility.","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":111,"context_line":"class Controller(object):"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def __init__(self, plugin, collection, resource, attr_info,"},{"line_number":114,"context_line":"                 parent\u003dNone, allow_bulk\u003dFalse, member_actions\u003dNone):"},{"line_number":115,"context_line":"        if member_actions is None:"},{"line_number":116,"context_line":"            member_actions \u003d []"},{"line_number":117,"context_line":"        self._plugin \u003d plugin"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F70k%3D","line":114,"in_reply_to":"AAAAMX%2F%2F8W0%3D","updated":"2012-12-06 08:19:55.000000000","message":"Done","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        if parent:"},{"line_number":131,"context_line":"            self._parent_id_name \u003d \u0027%s_id\u0027 % parent[\u0027member_name\u0027]"},{"line_number":132,"context_line":"            parent_part \u003d \u0027_%s\u0027 % parent[\u0027member_name\u0027]"},{"line_number":133,"context_line":"        self._plugin_handlers \u003d {\u0027list\u0027: \u0027get%s_%s\u0027 % (parent_part,"},{"line_number":134,"context_line":"                                                       self._collection),"},{"line_number":135,"context_line":"                                 \u0027show\u0027: \u0027get%s_%s\u0027 % (parent_part,"},{"line_number":136,"context_line":"                                                       self._resource),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8WU%3D","line":133,"updated":"2012-12-05 22:53:21.000000000","message":"self._plugin_handlers \u003d {\n    self.LIST: \u0027get%s_%s\u0027 % (parent_part, self._collection),\n    self.SHOW: \u0027get%s_%s\u0027 % (parent_part, self._resource)\n}\nfor action in [self.CREATE, self.UPDATE, self.DELETE]:\n    self._plugin_handlers[action] \u003d \u0027%s%s_%s\u0027 % (action, parent_part, self._resource)","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        if parent:"},{"line_number":131,"context_line":"            self._parent_id_name \u003d \u0027%s_id\u0027 % parent[\u0027member_name\u0027]"},{"line_number":132,"context_line":"            parent_part \u003d \u0027_%s\u0027 % parent[\u0027member_name\u0027]"},{"line_number":133,"context_line":"        self._plugin_handlers \u003d {\u0027list\u0027: \u0027get%s_%s\u0027 % (parent_part,"},{"line_number":134,"context_line":"                                                       self._collection),"},{"line_number":135,"context_line":"                                 \u0027show\u0027: \u0027get%s_%s\u0027 % (parent_part,"},{"line_number":136,"context_line":"                                                       self._resource),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F70g%3D","line":133,"in_reply_to":"AAAAMX%2F%2F8WU%3D","updated":"2012-12-06 08:19:55.000000000","message":"Done","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        else:"},{"line_number":177,"context_line":"            raise AttributeError"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def _items(self, request, parent_id\u003dNone, do_authz\u003dFalse):"},{"line_number":180,"context_line":"        \"\"\"Retrieves and formats a list of elements of the requested entity\"\"\""},{"line_number":181,"context_line":"        # NOTE(salvatore-orlando): The following ensures that fields which"},{"line_number":182,"context_line":"        # are needed for authZ policy validation are not stripped away by the"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8Ww%3D","line":179,"updated":"2012-12-05 22:53:21.000000000","message":"same as above.","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        else:"},{"line_number":177,"context_line":"            raise AttributeError"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def _items(self, request, parent_id\u003dNone, do_authz\u003dFalse):"},{"line_number":180,"context_line":"        \"\"\"Retrieves and formats a list of elements of the requested entity\"\"\""},{"line_number":181,"context_line":"        # NOTE(salvatore-orlando): The following ensures that fields which"},{"line_number":182,"context_line":"        # are needed for authZ policy validation are not stripped away by the"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F70Y%3D","line":179,"in_reply_to":"AAAAMX%2F%2F8Ww%3D","updated":"2012-12-06 08:19:55.000000000","message":"Done","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        kwargs \u003d {\u0027filters\u0027: _filters(request, self._attr_info),"},{"line_number":186,"context_line":"                  \u0027fields\u0027: original_fields}"},{"line_number":187,"context_line":"        if parent_id:"},{"line_number":188,"context_line":"            kwargs.update({self._parent_id_name: parent_id})"},{"line_number":189,"context_line":"        obj_getter \u003d getattr(self._plugin, self._plugin_handlers[\u0027list\u0027])"},{"line_number":190,"context_line":"        obj_list \u003d obj_getter(request.context, **kwargs)"},{"line_number":191,"context_line":"        # Check authz"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8Ws%3D","line":188,"updated":"2012-12-05 22:53:21.000000000","message":"No need to do an update here:\n\nif parent_id:\n    kwargs[self._parent_id_name] \u003d parent_id","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        kwargs \u003d {\u0027filters\u0027: _filters(request, self._attr_info),"},{"line_number":186,"context_line":"                  \u0027fields\u0027: original_fields}"},{"line_number":187,"context_line":"        if parent_id:"},{"line_number":188,"context_line":"            kwargs.update({self._parent_id_name: parent_id})"},{"line_number":189,"context_line":"        obj_getter \u003d getattr(self._plugin, self._plugin_handlers[\u0027list\u0027])"},{"line_number":190,"context_line":"        obj_list \u003d obj_getter(request.context, **kwargs)"},{"line_number":191,"context_line":"        # Check authz"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F70U%3D","line":188,"in_reply_to":"AAAAMX%2F%2F8Ws%3D","updated":"2012-12-06 08:19:55.000000000","message":"Done","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                  \u0027fields\u0027: original_fields}"},{"line_number":187,"context_line":"        if parent_id:"},{"line_number":188,"context_line":"            kwargs.update({self._parent_id_name: parent_id})"},{"line_number":189,"context_line":"        obj_getter \u003d getattr(self._plugin, self._plugin_handlers[\u0027list\u0027])"},{"line_number":190,"context_line":"        obj_list \u003d obj_getter(request.context, **kwargs)"},{"line_number":191,"context_line":"        # Check authz"},{"line_number":192,"context_line":"        if do_authz:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8WQ%3D","line":189,"updated":"2012-12-05 22:53:21.000000000","message":"self.LIST","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                  \u0027fields\u0027: original_fields}"},{"line_number":187,"context_line":"        if parent_id:"},{"line_number":188,"context_line":"            kwargs.update({self._parent_id_name: parent_id})"},{"line_number":189,"context_line":"        obj_getter \u003d getattr(self._plugin, self._plugin_handlers[\u0027list\u0027])"},{"line_number":190,"context_line":"        obj_list \u003d obj_getter(request.context, **kwargs)"},{"line_number":191,"context_line":"        # Check authz"},{"line_number":192,"context_line":"        if do_authz:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F70Q%3D","line":189,"in_reply_to":"AAAAMX%2F%2F8WQ%3D","updated":"2012-12-06 08:19:55.000000000","message":"Done","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":195,"context_line":"            # Omit items from list that should not be visible"},{"line_number":196,"context_line":"            obj_list \u003d [obj for obj in obj_list"},{"line_number":197,"context_line":"                        if policy.check(request.context,"},{"line_number":198,"context_line":"                                        self._plugin_handlers[\u0027show\u0027],"},{"line_number":199,"context_line":"                                        obj,"},{"line_number":200,"context_line":"                                        plugin\u003dself._plugin)]"},{"line_number":201,"context_line":"        return {self._collection: [self._view(obj,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8WM%3D","line":198,"updated":"2012-12-05 22:53:21.000000000","message":"self.SHOW","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":195,"context_line":"            # Omit items from list that should not be visible"},{"line_number":196,"context_line":"            obj_list \u003d [obj for obj in obj_list"},{"line_number":197,"context_line":"                        if policy.check(request.context,"},{"line_number":198,"context_line":"                                        self._plugin_handlers[\u0027show\u0027],"},{"line_number":199,"context_line":"                                        obj,"},{"line_number":200,"context_line":"                                        plugin\u003dself._plugin)]"},{"line_number":201,"context_line":"        return {self._collection: [self._view(obj,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F70M%3D","line":198,"in_reply_to":"AAAAMX%2F%2F8WM%3D","updated":"2012-12-06 08:19:55.000000000","message":"Done","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        kwargs \u003d {\u0027fields\u0027: field_list}"},{"line_number":209,"context_line":"        action \u003d self._plugin_handlers[\u0027show\u0027]"},{"line_number":210,"context_line":"        if parent_id:"},{"line_number":211,"context_line":"            kwargs.update({self._parent_id_name: parent_id})"},{"line_number":212,"context_line":"        obj_getter \u003d getattr(self._plugin, action)"},{"line_number":213,"context_line":"        obj \u003d obj_getter(request.context, id, **kwargs)"},{"line_number":214,"context_line":"        # Check authz"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8TQ%3D","line":211,"updated":"2012-12-05 22:53:21.000000000","message":"kwargs[self._parent_id_name] \u003d parent_id","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        kwargs \u003d {\u0027fields\u0027: field_list}"},{"line_number":209,"context_line":"        action \u003d self._plugin_handlers[\u0027show\u0027]"},{"line_number":210,"context_line":"        if parent_id:"},{"line_number":211,"context_line":"            kwargs.update({self._parent_id_name: parent_id})"},{"line_number":212,"context_line":"        obj_getter \u003d getattr(self._plugin, action)"},{"line_number":213,"context_line":"        obj \u003d obj_getter(request.context, id, **kwargs)"},{"line_number":214,"context_line":"        # Check authz"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F70I%3D","line":211,"in_reply_to":"AAAAMX%2F%2F8TQ%3D","updated":"2012-12-06 08:19:55.000000000","message":"Done","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":218,"context_line":"            policy.enforce(request.context, action, obj, plugin\u003dself._plugin)"},{"line_number":219,"context_line":"        return obj"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def index(self, request, **kwargs):"},{"line_number":222,"context_line":"        \"\"\"Returns a list of the requested entity\"\"\""},{"line_number":223,"context_line":"        parent_id \u003d kwargs.get(self._parent_id_name)"},{"line_number":224,"context_line":"        return self._items(request, parent_id, True)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8SI%3D","line":221,"updated":"2012-12-05 22:53:21.000000000","message":"Not a big fan having kwargs that randomly get passed.","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":218,"context_line":"            policy.enforce(request.context, action, obj, plugin\u003dself._plugin)"},{"line_number":219,"context_line":"        return obj"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def index(self, request, **kwargs):"},{"line_number":222,"context_line":"        \"\"\"Returns a list of the requested entity\"\"\""},{"line_number":223,"context_line":"        parent_id \u003d kwargs.get(self._parent_id_name)"},{"line_number":224,"context_line":"        return self._items(request, parent_id, True)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F7z8%3D","line":221,"in_reply_to":"AAAAMX%2F%2F8SI%3D","updated":"2012-12-06 08:19:55.000000000","message":"Well, we don\u0027t know the actual name of parent id here yet as it depends on the parent\u0027s name (network_id, port_id, etc.). So we may result in unknown keyword parameter error. Thoughts?","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        parent_id \u003d kwargs.get(self._parent_id_name)"},{"line_number":224,"context_line":"        return self._items(request, parent_id, True)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def show(self, request, id, **kwargs):"},{"line_number":227,"context_line":"        \"\"\"Returns detailed information about the requested entity\"\"\""},{"line_number":228,"context_line":"        try:"},{"line_number":229,"context_line":"            # NOTE(salvatore-orlando): The following ensures that fields"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8Kg%3D","line":226,"updated":"2012-12-05 22:53:21.000000000","message":"parent_id\u003dNone","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        parent_id \u003d kwargs.get(self._parent_id_name)"},{"line_number":224,"context_line":"        return self._items(request, parent_id, True)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def show(self, request, id, **kwargs):"},{"line_number":227,"context_line":"        \"\"\"Returns detailed information about the requested entity\"\"\""},{"line_number":228,"context_line":"        try:"},{"line_number":229,"context_line":"            # NOTE(salvatore-orlando): The following ensures that fields"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F7z4%3D","line":226,"in_reply_to":"AAAAMX%2F%2F8Kg%3D","updated":"2012-12-06 08:19:55.000000000","message":"The same as in index()","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":249,"context_line":"            for item in body[self._collection]:"},{"line_number":250,"context_line":"                kwargs \u003d {self._resource: item}"},{"line_number":251,"context_line":"                if parent_id:"},{"line_number":252,"context_line":"                    kwargs.update({self._parent_id_name: parent_id})"},{"line_number":253,"context_line":"                objs.append(self._view(obj_creator(request.context,"},{"line_number":254,"context_line":"                                                   **kwargs)))"},{"line_number":255,"context_line":"            return objs"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8JM%3D","line":252,"updated":"2012-12-05 22:53:21.000000000","message":"kwargs[self._parent_id_name] \u003dparent_id","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":249,"context_line":"            for item in body[self._collection]:"},{"line_number":250,"context_line":"                kwargs \u003d {self._resource: item}"},{"line_number":251,"context_line":"                if parent_id:"},{"line_number":252,"context_line":"                    kwargs.update({self._parent_id_name: parent_id})"},{"line_number":253,"context_line":"                objs.append(self._view(obj_creator(request.context,"},{"line_number":254,"context_line":"                                                   **kwargs)))"},{"line_number":255,"context_line":"            return objs"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F7z0%3D","line":252,"in_reply_to":"AAAAMX%2F%2F8JM%3D","updated":"2012-12-06 08:19:55.000000000","message":"Done","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":251,"context_line":"                if parent_id:"},{"line_number":252,"context_line":"                    kwargs.update({self._parent_id_name: parent_id})"},{"line_number":253,"context_line":"                objs.append(self._view(obj_creator(request.context,"},{"line_number":254,"context_line":"                                                   **kwargs)))"},{"line_number":255,"context_line":"            return objs"},{"line_number":256,"context_line":"        # Note(salvatore-orlando): broad catch as in theory a plugin"},{"line_number":257,"context_line":"        # could raise any kind of exception"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8KU%3D","line":254,"updated":"2012-12-05 22:53:21.000000000","message":"parent_id\u003dparent_id instead of kwargs","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":251,"context_line":"                if parent_id:"},{"line_number":252,"context_line":"                    kwargs.update({self._parent_id_name: parent_id})"},{"line_number":253,"context_line":"                objs.append(self._view(obj_creator(request.context,"},{"line_number":254,"context_line":"                                                   **kwargs)))"},{"line_number":255,"context_line":"            return objs"},{"line_number":256,"context_line":"        # Note(salvatore-orlando): broad catch as in theory a plugin"},{"line_number":257,"context_line":"        # could raise any kind of exception"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F7zs%3D","line":254,"in_reply_to":"AAAAMX%2F%2F8KU%3D","updated":"2012-12-06 08:19:55.000000000","message":"I believe handlers in plugins will also have kind of \"create_network_dummy(..., network_id, dummy)\" signature so unknown keyword parameter error is possible here too.","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        except Exception as ex:"},{"line_number":259,"context_line":"            for obj in objs:"},{"line_number":260,"context_line":"                obj_deleter \u003d getattr(self._plugin,"},{"line_number":261,"context_line":"                                      self._plugin_handlers[\u0027delete\u0027])"},{"line_number":262,"context_line":"                try:"},{"line_number":263,"context_line":"                    kwargs \u003d ({self._parent_id_name: parent_id} if parent_id"},{"line_number":264,"context_line":"                              else {})"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8LU%3D","line":261,"updated":"2012-12-05 22:53:21.000000000","message":"self._plugin_handlers[self.DELETE]","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        except Exception as ex:"},{"line_number":259,"context_line":"            for obj in objs:"},{"line_number":260,"context_line":"                obj_deleter \u003d getattr(self._plugin,"},{"line_number":261,"context_line":"                                      self._plugin_handlers[\u0027delete\u0027])"},{"line_number":262,"context_line":"                try:"},{"line_number":263,"context_line":"                    kwargs \u003d ({self._parent_id_name: parent_id} if parent_id"},{"line_number":264,"context_line":"                              else {})"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F7zc%3D","line":261,"in_reply_to":"AAAAMX%2F%2F8LU%3D","updated":"2012-12-06 08:19:55.000000000","message":"Done","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":262,"context_line":"                try:"},{"line_number":263,"context_line":"                    kwargs \u003d ({self._parent_id_name: parent_id} if parent_id"},{"line_number":264,"context_line":"                              else {})"},{"line_number":265,"context_line":"                    obj_deleter(request.context, obj[\u0027id\u0027], **kwargs)"},{"line_number":266,"context_line":"                except Exception:"},{"line_number":267,"context_line":"                    # broad catch as our only purpose is to log the exception"},{"line_number":268,"context_line":"                    LOG.exception(_(\"Unable to undo add for \""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8Kk%3D","line":265,"updated":"2012-12-05 22:53:21.000000000","message":"obj_deleter(request.context, obj[\u0027id\u0027], parent_id\u003dparent_id)","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":262,"context_line":"                try:"},{"line_number":263,"context_line":"                    kwargs \u003d ({self._parent_id_name: parent_id} if parent_id"},{"line_number":264,"context_line":"                              else {})"},{"line_number":265,"context_line":"                    obj_deleter(request.context, obj[\u0027id\u0027], **kwargs)"},{"line_number":266,"context_line":"                except Exception:"},{"line_number":267,"context_line":"                    # broad catch as our only purpose is to log the exception"},{"line_number":268,"context_line":"                    LOG.exception(_(\"Unable to undo add for \""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F7zY%3D","line":265,"in_reply_to":"AAAAMX%2F%2F8Kk%3D","updated":"2012-12-06 08:19:55.000000000","message":"the same as in obj_creator","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":275,"context_line":"            # it is then deleted"},{"line_number":276,"context_line":"            raise"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def create(self, request, **kwargs):"},{"line_number":279,"context_line":"        \"\"\"Creates a new instance of the requested entity\"\"\""},{"line_number":280,"context_line":"        body \u003d kwargs.get(\u0027body\u0027)"},{"line_number":281,"context_line":"        parent_id \u003d kwargs.get(self._parent_id_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8K4%3D","line":278,"updated":"2012-12-05 22:53:21.000000000","message":"not sure why we\u0027re dropping the explicit body argument.  This should be:\n\ndef create(self, request, body\u003dNone, parend_id\u003dNone):","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":275,"context_line":"            # it is then deleted"},{"line_number":276,"context_line":"            raise"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def create(self, request, **kwargs):"},{"line_number":279,"context_line":"        \"\"\"Creates a new instance of the requested entity\"\"\""},{"line_number":280,"context_line":"        body \u003d kwargs.get(\u0027body\u0027)"},{"line_number":281,"context_line":"        parent_id \u003d kwargs.get(self._parent_id_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F7zU%3D","line":278,"in_reply_to":"AAAAMX%2F%2F8K4%3D","updated":"2012-12-06 08:19:55.000000000","message":"Agree for body, still concern about error with parent_id","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        body \u003d Controller.prepare_request_body(request.context, body, True,"},{"line_number":288,"context_line":"                                               self._resource, self._attr_info,"},{"line_number":289,"context_line":"                                               allow_bulk\u003dself._allow_bulk)"},{"line_number":290,"context_line":"        action \u003d self._plugin_handlers[\u0027create\u0027]"},{"line_number":291,"context_line":"        # Check authz"},{"line_number":292,"context_line":"        try:"},{"line_number":293,"context_line":"            if self._collection in body:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8Kw%3D","line":290,"updated":"2012-12-05 22:53:21.000000000","message":"action \u003d self._plugin_handlers[self.CREATE]","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        body \u003d Controller.prepare_request_body(request.context, body, True,"},{"line_number":288,"context_line":"                                               self._resource, self._attr_info,"},{"line_number":289,"context_line":"                                               allow_bulk\u003dself._allow_bulk)"},{"line_number":290,"context_line":"        action \u003d self._plugin_handlers[\u0027create\u0027]"},{"line_number":291,"context_line":"        # Check authz"},{"line_number":292,"context_line":"        try:"},{"line_number":293,"context_line":"            if self._collection in body:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F7zQ%3D","line":290,"in_reply_to":"AAAAMX%2F%2F8Kw%3D","updated":"2012-12-06 08:19:55.000000000","message":"Done","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":369,"context_line":"                obj \u003d obj_creator(request.context, **kwargs)"},{"line_number":370,"context_line":"                return notify({self._resource: self._view(obj)})"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"    def delete(self, request, id, **kwargs):"},{"line_number":373,"context_line":"        \"\"\"Deletes the specified entity\"\"\""},{"line_number":374,"context_line":"        notifier_api.notify(request.context,"},{"line_number":375,"context_line":"                            self._publisher_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8Jw%3D","line":372,"updated":"2012-12-05 22:53:21.000000000","message":"def delete(self, request, id, parent_id\u003dNone):","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":369,"context_line":"                obj \u003d obj_creator(request.context, **kwargs)"},{"line_number":370,"context_line":"                return notify({self._resource: self._view(obj)})"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"    def delete(self, request, id, **kwargs):"},{"line_number":373,"context_line":"        \"\"\"Deletes the specified entity\"\"\""},{"line_number":374,"context_line":"        notifier_api.notify(request.context,"},{"line_number":375,"context_line":"                            self._publisher_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F7zM%3D","line":372,"in_reply_to":"AAAAMX%2F%2F8Jw%3D","updated":"2012-12-06 08:19:55.000000000","message":"the same","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":376,"context_line":"                            self._resource + \u0027.delete.start\u0027,"},{"line_number":377,"context_line":"                            notifier_api.INFO,"},{"line_number":378,"context_line":"                            {self._resource + \u0027_id\u0027: id})"},{"line_number":379,"context_line":"        action \u003d self._plugin_handlers[\u0027delete\u0027]"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        # Check authz"},{"line_number":382,"context_line":"        parent_id \u003d kwargs.get(self._parent_id_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8Js%3D","line":379,"updated":"2012-12-05 22:53:21.000000000","message":"action \u003d self._plugin_handlers[self.DELETE]","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":376,"context_line":"                            self._resource + \u0027.delete.start\u0027,"},{"line_number":377,"context_line":"                            notifier_api.INFO,"},{"line_number":378,"context_line":"                            {self._resource + \u0027_id\u0027: id})"},{"line_number":379,"context_line":"        action \u003d self._plugin_handlers[\u0027delete\u0027]"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        # Check authz"},{"line_number":382,"context_line":"        parent_id \u003d kwargs.get(self._parent_id_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F7zI%3D","line":379,"in_reply_to":"AAAAMX%2F%2F8Js%3D","updated":"2012-12-06 08:19:55.000000000","message":"Done","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":399,"context_line":"                            notifier_api.INFO,"},{"line_number":400,"context_line":"                            {self._resource + \u0027_id\u0027: id})"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    def update(self, request, id, **kwargs):"},{"line_number":403,"context_line":"        \"\"\"Updates the specified entity\u0027s attributes\"\"\""},{"line_number":404,"context_line":"        body \u003d kwargs.get(\u0027body\u0027)"},{"line_number":405,"context_line":"        parent_id \u003d kwargs.get(self._parent_id_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8KA%3D","line":402,"updated":"2012-12-05 22:53:21.000000000","message":"ef update(self, request, id, body\u003dNone, parent_id\u003dNone):","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":399,"context_line":"                            notifier_api.INFO,"},{"line_number":400,"context_line":"                            {self._resource + \u0027_id\u0027: id})"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    def update(self, request, id, **kwargs):"},{"line_number":403,"context_line":"        \"\"\"Updates the specified entity\u0027s attributes\"\"\""},{"line_number":404,"context_line":"        body \u003d kwargs.get(\u0027body\u0027)"},{"line_number":405,"context_line":"        parent_id \u003d kwargs.get(self._parent_id_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F7zE%3D","line":402,"in_reply_to":"AAAAMX%2F%2F8KA%3D","updated":"2012-12-06 08:19:55.000000000","message":"the same","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":413,"context_line":"        body \u003d Controller.prepare_request_body(request.context, body, False,"},{"line_number":414,"context_line":"                                               self._resource, self._attr_info,"},{"line_number":415,"context_line":"                                               allow_bulk\u003dself._allow_bulk)"},{"line_number":416,"context_line":"        action \u003d self._plugin_handlers[\u0027update\u0027]"},{"line_number":417,"context_line":"        # Load object to check authz"},{"line_number":418,"context_line":"        # but pass only attributes in the original body and required"},{"line_number":419,"context_line":"        # by the policy engine to the policy \u0027brain\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8J8%3D","line":416,"updated":"2012-12-05 22:53:21.000000000","message":"action \u003d self._plugin_handlers[self.UPDATE]","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":413,"context_line":"        body \u003d Controller.prepare_request_body(request.context, body, False,"},{"line_number":414,"context_line":"                                               self._resource, self._attr_info,"},{"line_number":415,"context_line":"                                               allow_bulk\u003dself._allow_bulk)"},{"line_number":416,"context_line":"        action \u003d self._plugin_handlers[\u0027update\u0027]"},{"line_number":417,"context_line":"        # Load object to check authz"},{"line_number":418,"context_line":"        # but pass only attributes in the original body and required"},{"line_number":419,"context_line":"        # by the policy engine to the policy \u0027brain\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F7zA%3D","line":416,"in_reply_to":"AAAAMX%2F%2F8J8%3D","updated":"2012-12-06 08:19:55.000000000","message":"Done","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":435,"context_line":""},{"line_number":436,"context_line":"        obj_updater \u003d getattr(self._plugin, action)"},{"line_number":437,"context_line":"        kwargs \u003d {self._resource: body}"},{"line_number":438,"context_line":"        if parent_id:"},{"line_number":439,"context_line":"            kwargs.update({self._parent_id_name: parent_id})"},{"line_number":440,"context_line":"        obj \u003d obj_updater(request.context, id, **kwargs)"},{"line_number":441,"context_line":"        result \u003d {self._resource: self._view(obj)}"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8J4%3D","line":438,"updated":"2012-12-05 22:53:21.000000000","message":"unecessary","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":435,"context_line":""},{"line_number":436,"context_line":"        obj_updater \u003d getattr(self._plugin, action)"},{"line_number":437,"context_line":"        kwargs \u003d {self._resource: body}"},{"line_number":438,"context_line":"        if parent_id:"},{"line_number":439,"context_line":"            kwargs.update({self._parent_id_name: parent_id})"},{"line_number":440,"context_line":"        obj \u003d obj_updater(request.context, id, **kwargs)"},{"line_number":441,"context_line":"        result \u003d {self._resource: self._view(obj)}"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F7y8%3D","line":438,"in_reply_to":"AAAAMX%2F%2F8J4%3D","updated":"2012-12-06 08:19:55.000000000","message":"the same","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        kwargs \u003d {self._resource: body}"},{"line_number":438,"context_line":"        if parent_id:"},{"line_number":439,"context_line":"            kwargs.update({self._parent_id_name: parent_id})"},{"line_number":440,"context_line":"        obj \u003d obj_updater(request.context, id, **kwargs)"},{"line_number":441,"context_line":"        result \u003d {self._resource: self._view(obj)}"},{"line_number":442,"context_line":"        notifier_api.notify(request.context,"},{"line_number":443,"context_line":"                            self._publisher_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8J0%3D","line":440,"updated":"2012-12-05 22:53:21.000000000","message":"obj \u003d obj_updater(request.context, id, parent_id\u003dparent_id)","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        kwargs \u003d {self._resource: body}"},{"line_number":438,"context_line":"        if parent_id:"},{"line_number":439,"context_line":"            kwargs.update({self._parent_id_name: parent_id})"},{"line_number":440,"context_line":"        obj \u003d obj_updater(request.context, id, **kwargs)"},{"line_number":441,"context_line":"        result \u003d {self._resource: self._view(obj)}"},{"line_number":442,"context_line":"        notifier_api.notify(request.context,"},{"line_number":443,"context_line":"                            self._publisher_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F7y4%3D","line":440,"in_reply_to":"AAAAMX%2F%2F8J0%3D","updated":"2012-12-06 08:19:55.000000000","message":"the same","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"3bdfe4ab6596293fe14c911c8a25f4a4b87f1f1f","unresolved":false,"context_lines":[{"line_number":570,"context_line":"            })"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"def create_resource(collection, resource, plugin, params, parent\u003dNone,"},{"line_number":574,"context_line":"                    allow_bulk\u003dFalse, member_actions\u003dNone):"},{"line_number":575,"context_line":"    controller \u003d Controller(plugin, collection, resource, params, parent,"},{"line_number":576,"context_line":"                            allow_bulk, member_actions\u003dmember_actions)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F8Lo%3D","line":573,"updated":"2012-12-05 22:53:21.000000000","message":"parent\u003dNone should be last arg for backwards source compatibility.","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":570,"context_line":"            })"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"def create_resource(collection, resource, plugin, params, parent\u003dNone,"},{"line_number":574,"context_line":"                    allow_bulk\u003dFalse, member_actions\u003dNone):"},{"line_number":575,"context_line":"    controller \u003d Controller(plugin, collection, resource, params, parent,"},{"line_number":576,"context_line":"                            allow_bulk, member_actions\u003dmember_actions)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F7y0%3D","line":573,"in_reply_to":"AAAAMX%2F%2F8Lo%3D","updated":"2012-12-06 08:19:55.000000000","message":"Done","commit_id":"ac729f2d97652dddd32c541fde2e389a7323e295"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":123,"context_line":"        self._member_actions \u003d member_actions"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        self._parent_id_name \u003d None"},{"line_number":126,"context_line":"        parent_part \u003d \u0027\u0027"},{"line_number":127,"context_line":"        if parent:"},{"line_number":128,"context_line":"            self._parent_id_name \u003d \u0027%s_id\u0027 % parent[\u0027member_name\u0027]"},{"line_number":129,"context_line":"            parent_part \u003d \u0027_%s\u0027 % parent[\u0027member_name\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMX%2F%2F1ig%3D","line":126,"updated":"2012-12-13 10:18:06.000000000","message":"Maybe consider setting the parent_part \u003d \u0027\u0027 in the else.","commit_id":"d9999306abebb1d949b0ed71433ea36dfb260a4e"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        self._member_actions \u003d member_actions"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        self._parent_id_name \u003d None"},{"line_number":126,"context_line":"        parent_part \u003d \u0027\u0027"},{"line_number":127,"context_line":"        if parent:"},{"line_number":128,"context_line":"            self._parent_id_name \u003d \u0027%s_id\u0027 % parent[\u0027member_name\u0027]"},{"line_number":129,"context_line":"            parent_part \u003d \u0027_%s\u0027 % parent[\u0027member_name\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMX%2F%2F1hE%3D","line":126,"in_reply_to":"AAAAMX%2F%2F1ig%3D","updated":"2012-12-13 10:44:44.000000000","message":"I think the same for self._parent_id_name","commit_id":"d9999306abebb1d949b0ed71433ea36dfb260a4e"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":201,"context_line":"        \"\"\"Retrieves and formats a single element of the requested entity\"\"\""},{"line_number":202,"context_line":"        kwargs \u003d {\u0027fields\u0027: field_list}"},{"line_number":203,"context_line":"        action \u003d self._plugin_handlers[self.SHOW]"},{"line_number":204,"context_line":"        if parent_id:"},{"line_number":205,"context_line":"            kwargs[self._parent_id_name] \u003d parent_id"},{"line_number":206,"context_line":"        obj_getter \u003d getattr(self._plugin, action)"},{"line_number":207,"context_line":"        obj \u003d obj_getter(request.context, id, **kwargs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMX%2F%2F1h4%3D","line":204,"updated":"2012-12-13 10:18:06.000000000","message":"do we need the if?","commit_id":"d9999306abebb1d949b0ed71433ea36dfb260a4e"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        \"\"\"Retrieves and formats a single element of the requested entity\"\"\""},{"line_number":202,"context_line":"        kwargs \u003d {\u0027fields\u0027: field_list}"},{"line_number":203,"context_line":"        action \u003d self._plugin_handlers[self.SHOW]"},{"line_number":204,"context_line":"        if parent_id:"},{"line_number":205,"context_line":"            kwargs[self._parent_id_name] \u003d parent_id"},{"line_number":206,"context_line":"        obj_getter \u003d getattr(self._plugin, action)"},{"line_number":207,"context_line":"        obj \u003d obj_getter(request.context, id, **kwargs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMX%2F%2F1g4%3D","line":204,"in_reply_to":"AAAAMX%2F%2F1h4%3D","updated":"2012-12-13 10:44:44.000000000","message":"Yes, because if a top level resource is handled here then obj_getter will not accept parent_id attribute.","commit_id":"d9999306abebb1d949b0ed71433ea36dfb260a4e"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":242,"context_line":"        try:"},{"line_number":243,"context_line":"            for item in body[self._collection]:"},{"line_number":244,"context_line":"                kwargs \u003d {self._resource: item}"},{"line_number":245,"context_line":"                if parent_id:"},{"line_number":246,"context_line":"                    kwargs[self._parent_id_name] \u003d parent_id"},{"line_number":247,"context_line":"                objs.append(self._view(obj_creator(request.context,"},{"line_number":248,"context_line":"                                                   **kwargs)))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMX%2F%2F1h8%3D","line":245,"updated":"2012-12-13 10:18:06.000000000","message":"Do we need the if? Why not set it always?","commit_id":"d9999306abebb1d949b0ed71433ea36dfb260a4e"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        try:"},{"line_number":243,"context_line":"            for item in body[self._collection]:"},{"line_number":244,"context_line":"                kwargs \u003d {self._resource: item}"},{"line_number":245,"context_line":"                if parent_id:"},{"line_number":246,"context_line":"                    kwargs[self._parent_id_name] \u003d parent_id"},{"line_number":247,"context_line":"                objs.append(self._view(obj_creator(request.context,"},{"line_number":248,"context_line":"                                                   **kwargs)))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMX%2F%2F1g0%3D","line":245,"in_reply_to":"AAAAMX%2F%2F1h8%3D","updated":"2012-12-13 10:44:44.000000000","message":"The same as for obj_getter: if resource has no parent then we will result in unknown keyword parameter error in obj_creator","commit_id":"d9999306abebb1d949b0ed71433ea36dfb260a4e"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":343,"context_line":"                                create_result)"},{"line_number":344,"context_line":"            return create_result"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        kwargs \u003d {self._parent_id_name: parent_id} if parent_id else {}"},{"line_number":347,"context_line":"        if self._collection in body and self._native_bulk:"},{"line_number":348,"context_line":"            # plugin does atomic bulk create operations"},{"line_number":349,"context_line":"            obj_creator \u003d getattr(self._plugin, \"%s_bulk\" % action)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMX%2F%2F1h0%3D","line":346,"updated":"2012-12-13 10:18:06.000000000","message":"same as before","commit_id":"d9999306abebb1d949b0ed71433ea36dfb260a4e"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                                create_result)"},{"line_number":344,"context_line":"            return create_result"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        kwargs \u003d {self._parent_id_name: parent_id} if parent_id else {}"},{"line_number":347,"context_line":"        if self._collection in body and self._native_bulk:"},{"line_number":348,"context_line":"            # plugin does atomic bulk create operations"},{"line_number":349,"context_line":"            obj_creator \u003d getattr(self._plugin, \"%s_bulk\" % action)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMX%2F%2F1gk%3D","line":346,"in_reply_to":"AAAAMX%2F%2F1h0%3D","updated":"2012-12-13 10:44:44.000000000","message":"the same","commit_id":"d9999306abebb1d949b0ed71433ea36dfb260a4e"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":213,"context_line":"            policy.enforce(request.context, action, obj, plugin\u003dself._plugin)"},{"line_number":214,"context_line":"        return obj"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def index(self, request, **kwargs):"},{"line_number":217,"context_line":"        \"\"\"Returns a list of the requested entity\"\"\""},{"line_number":218,"context_line":"        parent_id \u003d kwargs.get(self._parent_id_name)"},{"line_number":219,"context_line":"        return self._items(request, True, parent_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMX%2F%2Fzfs%3D","line":216,"updated":"2012-12-14 23:22:44.000000000","message":"I understand that it may or may not have a parent, but I\u0027m failing to understand why we cannot do this: \n\ndef index(self, request, parent_id\u003dNone):","commit_id":"f4e1fa0ea7225da7eb3387f87538d47dfc03161c"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            policy.enforce(request.context, action, obj, plugin\u003dself._plugin)"},{"line_number":214,"context_line":"        return obj"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def index(self, request, **kwargs):"},{"line_number":217,"context_line":"        \"\"\"Returns a list of the requested entity\"\"\""},{"line_number":218,"context_line":"        parent_id \u003d kwargs.get(self._parent_id_name)"},{"line_number":219,"context_line":"        return self._items(request, True, parent_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2F%2FfA%3D","line":216,"in_reply_to":"AAAAM3%2F%2F%2FfY%3D","updated":"2012-12-17 15:09:42.000000000","message":"It means to have REST calls like this in the API: \"Post pools/parent_id/health_monitors\" - am I right?","commit_id":"f4e1fa0ea7225da7eb3387f87538d47dfc03161c"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":213,"context_line":"            policy.enforce(request.context, action, obj, plugin\u003dself._plugin)"},{"line_number":214,"context_line":"        return obj"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def index(self, request, **kwargs):"},{"line_number":217,"context_line":"        \"\"\"Returns a list of the requested entity\"\"\""},{"line_number":218,"context_line":"        parent_id \u003d kwargs.get(self._parent_id_name)"},{"line_number":219,"context_line":"        return self._items(request, True, parent_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2F%2FfY%3D","line":216,"in_reply_to":"AAAAM3%2F%2F%2Fs0%3D","updated":"2012-12-17 14:56:26.000000000","message":"Another way of looking at this is that you could have each resource passing the parent_id parameter in a keyword parameter whose name is always parent id, or even assume a positional parameter.\n\nAnyway, I\u0027m not strongly biased towards either solution. In my opinion this is not a blocker for approval.","commit_id":"f4e1fa0ea7225da7eb3387f87538d47dfc03161c"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            policy.enforce(request.context, action, obj, plugin\u003dself._plugin)"},{"line_number":214,"context_line":"        return obj"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def index(self, request, **kwargs):"},{"line_number":217,"context_line":"        \"\"\"Returns a list of the requested entity\"\"\""},{"line_number":218,"context_line":"        parent_id \u003d kwargs.get(self._parent_id_name)"},{"line_number":219,"context_line":"        return self._items(request, True, parent_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2F%2Fs0%3D","line":216,"in_reply_to":"AAAAMX%2F%2Fzfs%3D","updated":"2012-12-17 08:46:52.000000000","message":"The reason for using kwargs is that the name of the parent parameter depends on the name of the parent itself and it is a keyword parameter. So for instance if parent is \"pool\" then the func will be called as \"index(request, pool_id\u003did)\" from the resource (quantum.api.v2.resource.Resource). If we use \"parent_id\" as a parameter name we\u0027ll result in unknown keyword parameter error.","commit_id":"f4e1fa0ea7225da7eb3387f87538d47dfc03161c"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":244,"context_line":"            for item in body[self._collection]:"},{"line_number":245,"context_line":"                kwargs \u003d {self._resource: item}"},{"line_number":246,"context_line":"                if parent_id:"},{"line_number":247,"context_line":"                    kwargs[self._parent_id_name] \u003d parent_id"},{"line_number":248,"context_line":"                objs.append(self._view(obj_creator(request.context,"},{"line_number":249,"context_line":"                                                   **kwargs)))"},{"line_number":250,"context_line":"            return objs"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2F%2FfU%3D","line":247,"updated":"2012-12-17 14:56:26.000000000","message":"e.g.: here you could have probably set kwargs[\u0027parent_id\u0027] \u003d parent_id","commit_id":"f4e1fa0ea7225da7eb3387f87538d47dfc03161c"}],"quantum/api/v2/router.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":88,"context_line":"                                              parent\u003dparent)"},{"line_number":89,"context_line":"            path_prefix \u003d None"},{"line_number":90,"context_line":"            if parent:"},{"line_number":91,"context_line":"                path_prefix \u003d \"/%s/{%s_id}/%s\" % (parent[\u0027collection_name\u0027],"},{"line_number":92,"context_line":"                                                  parent[\u0027member_name\u0027],"},{"line_number":93,"context_line":"                                                  collection)"},{"line_number":94,"context_line":"            mapper_kwargs \u003d dict(controller\u003dcontroller,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMX%2F%2F1hw%3D","line":91,"updated":"2012-12-13 10:18:06.000000000","message":"do we need the _id? why not just %s?","commit_id":"d9999306abebb1d949b0ed71433ea36dfb260a4e"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                                              parent\u003dparent)"},{"line_number":89,"context_line":"            path_prefix \u003d None"},{"line_number":90,"context_line":"            if parent:"},{"line_number":91,"context_line":"                path_prefix \u003d \"/%s/{%s_id}/%s\" % (parent[\u0027collection_name\u0027],"},{"line_number":92,"context_line":"                                                  parent[\u0027member_name\u0027],"},{"line_number":93,"context_line":"                                                  collection)"},{"line_number":94,"context_line":"            mapper_kwargs \u003d dict(controller\u003dcontroller,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMX%2F%2F1gc%3D","line":91,"in_reply_to":"AAAAMX%2F%2F1hw%3D","updated":"2012-12-13 10:44:44.000000000","message":"Not sure I got your point, the target url should look like \u003cparent\u003e/\u003cparent_id\u003e/\u003csub-resource\u003e to be able to fetch actual parent_id","commit_id":"d9999306abebb1d949b0ed71433ea36dfb260a4e"}],"quantum/tests/unit/test_api_v2.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":686,"context_line":"        self._plugin_patcher \u003d mock.patch(plugin, autospec\u003dTrue)"},{"line_number":687,"context_line":"        self.plugin \u003d self._plugin_patcher.start()"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"        router.SUB_RESOURCES[\u0027dummy\u0027] \u003d\\"},{"line_number":690,"context_line":"            {\u0027collection_name\u0027: \u0027dummies\u0027,"},{"line_number":691,"context_line":"             \u0027parent\u0027: {\u0027collection_name\u0027: \u0027networks\u0027,"},{"line_number":692,"context_line":"                        \u0027member_name\u0027: \u0027network\u0027}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMX%2F%2F1hs%3D","line":689,"updated":"2012-12-13 10:18:06.000000000","message":"can we try and do the code without the \\","commit_id":"d9999306abebb1d949b0ed71433ea36dfb260a4e"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"97ffb89820bf685563b0c8289631095e29452b33","unresolved":false,"context_lines":[{"line_number":686,"context_line":"        self._plugin_patcher \u003d mock.patch(plugin, autospec\u003dTrue)"},{"line_number":687,"context_line":"        self.plugin \u003d self._plugin_patcher.start()"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"        router.SUB_RESOURCES[\u0027dummy\u0027] \u003d\\"},{"line_number":690,"context_line":"            {\u0027collection_name\u0027: \u0027dummies\u0027,"},{"line_number":691,"context_line":"             \u0027parent\u0027: {\u0027collection_name\u0027: \u0027networks\u0027,"},{"line_number":692,"context_line":"                        \u0027member_name\u0027: \u0027network\u0027}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMX%2F%2F1gE%3D","line":689,"in_reply_to":"AAAAMX%2F%2F1hs%3D","updated":"2012-12-13 10:44:44.000000000","message":"Sure","commit_id":"d9999306abebb1d949b0ed71433ea36dfb260a4e"}]}
