)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"636159b766280697fec734cd7c127d82ac5b27c9","unresolved":false,"context_lines":[{"line_number":15,"context_line":"not make sense once we already had the base.Manager inheritance to"},{"line_number":16,"context_line":"avoid this type of problem."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"This change moves the duplicate code to the father (base.Manager) and"},{"line_number":19,"context_line":"make the specific managers simpler by making the base.Manager more"},{"line_number":20,"context_line":"useful regarding code reuse for these methods."},{"line_number":21,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ba8a016a_909f9eb3","line":18,"updated":"2015-11-18 05:04:01.000000000","message":"nit: s/father/parent/","commit_id":"ae98401c43f4efee0d9522206b6831c96bef1e34"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"21f7d46b7ea18b74ddf757f794b79f334f9db19d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"not make sense once we already had the base.Manager inheritance to"},{"line_number":16,"context_line":"avoid this type of problem."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"This change moves the duplicate code to the father (base.Manager) and"},{"line_number":19,"context_line":"make the specific managers simpler by making the base.Manager more"},{"line_number":20,"context_line":"useful regarding code reuse for these methods."},{"line_number":21,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ba8a016a_f456105b","line":18,"in_reply_to":"ba8a016a_909f9eb3","updated":"2015-11-18 11:34:04.000000000","message":"Done","commit_id":"ae98401c43f4efee0d9522206b6831c96bef1e34"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"86122cad00a90648feab0ea83a037f5a96d09eac","unresolved":false,"context_lines":[{"line_number":18,"context_line":"This change moves the duplicate code to the parent (base.Manager) and"},{"line_number":19,"context_line":"make the specific managers simpler by making the base.Manager more"},{"line_number":20,"context_line":"useful regarding code reuse for these methods."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I9acef9ecc815df61d7ddabe3fae9eccdafe2eeed"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"ba8a016a_ef6f1d29","line":21,"updated":"2015-11-18 11:51:46.000000000","message":"It would be nice to have bug.","commit_id":"fd5c6331e352cb9d3491b86f264b6efee2ec9482"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"a5c6b387631d5d4b39f5c0cbdc6580ec0cfb21ea","unresolved":false,"context_lines":[{"line_number":18,"context_line":"This change moves the duplicate code to the parent (base.Manager) and"},{"line_number":19,"context_line":"make the specific managers simpler by making the base.Manager more"},{"line_number":20,"context_line":"useful regarding code reuse for these methods."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I9acef9ecc815df61d7ddabe3fae9eccdafe2eeed"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"ba8a016a_c7755dfa","line":21,"in_reply_to":"ba8a016a_ef6f1d29","updated":"2015-11-18 12:47:24.000000000","message":"Done","commit_id":"fd5c6331e352cb9d3491b86f264b6efee2ec9482"}],"ironicclient/common/base.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1a25e349aab45277c00b23cc0888b062342579b6","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                new[key] \u003d value"},{"line_number":53,"context_line":"            else:"},{"line_number":54,"context_line":"                raise exc.InvalidAttribute()"},{"line_number":55,"context_line":"        url \u003d self._path()"},{"line_number":56,"context_line":"        resp, body \u003d self.api.json_request(\u0027POST\u0027, url, body\u003dnew)"},{"line_number":57,"context_line":"        if body:"},{"line_number":58,"context_line":"            return self.resource_class(self, body)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_ba1b9172","line":55,"updated":"2015-11-18 12:01:49.000000000","message":"You\u0027re now relying on methods of heirs in base class, which I think should be avoided. Maybe add a new path argument to this function instead?","commit_id":"fd5c6331e352cb9d3491b86f264b6efee2ec9482"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"a5c6b387631d5d4b39f5c0cbdc6580ec0cfb21ea","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                new[key] \u003d value"},{"line_number":53,"context_line":"            else:"},{"line_number":54,"context_line":"                raise exc.InvalidAttribute()"},{"line_number":55,"context_line":"        url \u003d self._path()"},{"line_number":56,"context_line":"        resp, body \u003d self.api.json_request(\u0027POST\u0027, url, body\u003dnew)"},{"line_number":57,"context_line":"        if body:"},{"line_number":58,"context_line":"            return self.resource_class(self, body)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_958f7e29","line":55,"in_reply_to":"ba8a016a_ba1b9172","updated":"2015-11-18 12:47:24.000000000","message":"Done","commit_id":"fd5c6331e352cb9d3491b86f264b6efee2ec9482"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1a25e349aab45277c00b23cc0888b062342579b6","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            resource_id +\u003d \u0027,\u0027.join(fields)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            return self._list(self._path(resource_id))[0]"},{"line_number":67,"context_line":"        except IndexError:"},{"line_number":68,"context_line":"            return None"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_ba32b1f0","line":66,"updated":"2015-11-18 12:01:49.000000000","message":"ditto","commit_id":"fd5c6331e352cb9d3491b86f264b6efee2ec9482"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"a5c6b387631d5d4b39f5c0cbdc6580ec0cfb21ea","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            resource_id +\u003d \u0027,\u0027.join(fields)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            return self._list(self._path(resource_id))[0]"},{"line_number":67,"context_line":"        except IndexError:"},{"line_number":68,"context_line":"            return None"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_f57e0a18","line":66,"in_reply_to":"ba8a016a_ba32b1f0","updated":"2015-11-18 12:47:24.000000000","message":"Done","commit_id":"fd5c6331e352cb9d3491b86f264b6efee2ec9482"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1a25e349aab45277c00b23cc0888b062342579b6","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        path \u003d \"%s/vendor_passthru/%s\" % (resource_identifier, method)"},{"line_number":89,"context_line":"        if http_method in (\u0027POST\u0027, \u0027PUT\u0027, \u0027PATCH\u0027):"},{"line_number":90,"context_line":"            return self.update(path, args, http_method\u003dhttp_method)"},{"line_number":91,"context_line":"        elif http_method \u003d\u003d \u0027DELETE\u0027:"},{"line_number":92,"context_line":"            return self.delete(path)"},{"line_number":93,"context_line":"        elif http_method \u003d\u003d \u0027GET\u0027:"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_5af625fa","line":90,"updated":"2015-11-18 12:01:49.000000000","message":"And here too - update, delete, get are not defined in this class. In this case it may be worth to just introduce some common function and use it for both node and driver.","commit_id":"fd5c6331e352cb9d3491b86f264b6efee2ec9482"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"a5c6b387631d5d4b39f5c0cbdc6580ec0cfb21ea","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        path \u003d \"%s/vendor_passthru/%s\" % (resource_identifier, method)"},{"line_number":89,"context_line":"        if http_method in (\u0027POST\u0027, \u0027PUT\u0027, \u0027PATCH\u0027):"},{"line_number":90,"context_line":"            return self.update(path, args, http_method\u003dhttp_method)"},{"line_number":91,"context_line":"        elif http_method \u003d\u003d \u0027DELETE\u0027:"},{"line_number":92,"context_line":"            return self.delete(path)"},{"line_number":93,"context_line":"        elif http_method \u003d\u003d \u0027GET\u0027:"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_a71939d9","line":90,"in_reply_to":"ba8a016a_5af625fa","updated":"2015-11-18 12:47:24.000000000","message":"Done","commit_id":"fd5c6331e352cb9d3491b86f264b6efee2ec9482"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"6c1b1a001a5345bc7f7b35f9a627c469aeb5de1f","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def __init__(self, api):"},{"line_number":46,"context_line":"        self.api \u003d api"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _create(self, creation_attributes, url, **kwargs):"},{"line_number":49,"context_line":"        new \u003d {}"},{"line_number":50,"context_line":"        for (key, value) in kwargs.items():"},{"line_number":51,"context_line":"            if key in creation_attributes:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_dc274eb4","line":48,"updated":"2015-11-19 00:14:05.000000000","message":"Are there unit tests for this function?","commit_id":"02507723eff6cb36f8ebe5e257e641886f027c92"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"6c1b1a001a5345bc7f7b35f9a627c469aeb5de1f","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        if body:"},{"line_number":57,"context_line":"            return self.resource_class(self, body)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def _get(self, resource_id, path_function, fields\u003dNone):"},{"line_number":60,"context_line":"        if fields is not None:"},{"line_number":61,"context_line":"            resource_id \u003d \u0027%s?fields\u003d\u0027 % resource_id"},{"line_number":62,"context_line":"            resource_id +\u003d \u0027,\u0027.join(fields)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_7c3982d6","line":59,"updated":"2015-11-19 00:14:05.000000000","message":"Are there unit tests for this function?","commit_id":"02507723eff6cb36f8ebe5e257e641886f027c92"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"6c1b1a001a5345bc7f7b35f9a627c469aeb5de1f","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            resource_id +\u003d \u0027,\u0027.join(fields)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        try:"},{"line_number":65,"context_line":"            return self._list(path_function(resource_id))[0]"},{"line_number":66,"context_line":"        except IndexError:"},{"line_number":67,"context_line":"            return None"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_3c5d3a15","line":65,"updated":"2015-11-19 00:14:05.000000000","message":"Also I will disagree with vdrok in that I don\u0027t see an issue with calling the child class self._path directly.  I don\u0027t think it is that uncommon for base class functions to have an assumption that a derived class will have a function provided.\n\nI would be interested in other opinions.\n\nThought I think it would be good to define a _path function in this class and have it raise a NotImplemented exception.","commit_id":"02507723eff6cb36f8ebe5e257e641886f027c92"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1dfbec78b3cc3aeed4732c21e36d9d4d4e2e9535","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            resource_id +\u003d \u0027,\u0027.join(fields)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        try:"},{"line_number":65,"context_line":"            return self._list(path_function(resource_id))[0]"},{"line_number":66,"context_line":"        except IndexError:"},{"line_number":67,"context_line":"            return None"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_587b557b","line":65,"in_reply_to":"ba8a016a_3c5d3a15","updated":"2015-11-19 11:02:27.000000000","message":"To be clear - I meant that if the name is not defined in this class (either as abstract method or with some implementation) it should not be used :)","commit_id":"02507723eff6cb36f8ebe5e257e641886f027c92"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"6c1b1a001a5345bc7f7b35f9a627c469aeb5de1f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        try:"},{"line_number":65,"context_line":"            return self._list(path_function(resource_id))[0]"},{"line_number":66,"context_line":"        except IndexError:"},{"line_number":67,"context_line":"            return None"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _vendor_passthru(self, resource_identifier, method,"},{"line_number":70,"context_line":"                         update_function, delete_function, get_function,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_9c96a63c","line":67,"updated":"2015-11-19 00:14:05.000000000","message":"To me it seems like self.get() could be defined in the base class. No need to define self.get() in the child classes.","commit_id":"02507723eff6cb36f8ebe5e257e641886f027c92"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"25788af5b0b912be50e474b4ec3ea7bb43862f4b","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        try:"},{"line_number":65,"context_line":"            return self._list(path_function(resource_id))[0]"},{"line_number":66,"context_line":"        except IndexError:"},{"line_number":67,"context_line":"            return None"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _vendor_passthru(self, resource_identifier, method,"},{"line_number":70,"context_line":"                         update_function, delete_function, get_function,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_aeb9ed16","line":67,"in_reply_to":"ba8a016a_9c96a63c","updated":"2015-11-19 03:01:21.000000000","message":"Done","commit_id":"02507723eff6cb36f8ebe5e257e641886f027c92"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"6c1b1a001a5345bc7f7b35f9a627c469aeb5de1f","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        except IndexError:"},{"line_number":67,"context_line":"            return None"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _vendor_passthru(self, resource_identifier, method,"},{"line_number":70,"context_line":"                         update_function, delete_function, get_function,"},{"line_number":71,"context_line":"                         args\u003dNone, http_method\u003dNone):"},{"line_number":72,"context_line":"        \"\"\"Issue requests for vendor-specific actions on a given driver."}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_1c32b6f2","line":69,"updated":"2015-11-19 00:14:05.000000000","message":"Are there unit tests for this function?","commit_id":"02507723eff6cb36f8ebe5e257e641886f027c92"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"6c1b1a001a5345bc7f7b35f9a627c469aeb5de1f","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        :param resource_identifier: Identifier of the resource."},{"line_number":75,"context_line":"        :param method: Name of the vendor method."},{"line_number":76,"context_line":"        :param update_function: Update function that should be called."},{"line_number":77,"context_line":"        :param delete_function: Delete function that should be called."},{"line_number":78,"context_line":"        :param get_function: Get function that should be called."},{"line_number":79,"context_line":"        :param args: Optional. The arguments to be passed to the method."}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_dc898e27","line":76,"updated":"2015-11-19 00:14:05.000000000","message":"This is also a case where I think we should  just expect the child class to define: self.update, self.delete, self.get\n\nAnd we should define those function in this class to raise a NotImplemented exception.\n\nThough I feel like self.get could be defined in the base class with a real implementation.","commit_id":"02507723eff6cb36f8ebe5e257e641886f027c92"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"25788af5b0b912be50e474b4ec3ea7bb43862f4b","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        :param resource_identifier: Identifier of the resource."},{"line_number":75,"context_line":"        :param method: Name of the vendor method."},{"line_number":76,"context_line":"        :param update_function: Update function that should be called."},{"line_number":77,"context_line":"        :param delete_function: Delete function that should be called."},{"line_number":78,"context_line":"        :param get_function: Get function that should be called."},{"line_number":79,"context_line":"        :param args: Optional. The arguments to be passed to the method."}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_4e3961a3","line":76,"in_reply_to":"ba8a016a_dc898e27","updated":"2015-11-19 03:01:21.000000000","message":"Done","commit_id":"02507723eff6cb36f8ebe5e257e641886f027c92"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"4916728df47e0a23d140bc07ba2e671826227b73","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    except AttributeError:"},{"line_number":39,"context_line":"        return obj"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class Manager(object):"},{"line_number":43,"context_line":"    \"\"\"Provides  CRUD operations with a particular API.\"\"\""},{"line_number":44,"context_line":"    resource_class \u003d None"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_0e583989","line":41,"updated":"2015-11-19 03:31:19.000000000","message":"@six.add_metaclass(abc.ABCMeta)\n\nSee the openstack/ironic source for examples","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"5837734007cb318a8ee520c7a6fc70c273846340","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    except AttributeError:"},{"line_number":39,"context_line":"        return obj"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class Manager(object):"},{"line_number":43,"context_line":"    \"\"\"Provides  CRUD operations with a particular API.\"\"\""},{"line_number":44,"context_line":"    resource_class \u003d None"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_5857d5c9","line":41,"in_reply_to":"ba8a016a_0e583989","updated":"2015-11-19 11:33:32.000000000","message":"++ and then __metaclass class variable is not needed (also should be __metaclass__)","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"909afaeb2d27ba9a7b6e58d25e7d62e054c78716","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    except AttributeError:"},{"line_number":39,"context_line":"        return obj"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class Manager(object):"},{"line_number":43,"context_line":"    \"\"\"Provides  CRUD operations with a particular API.\"\"\""},{"line_number":44,"context_line":"    resource_class \u003d None"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_be882972","line":41,"in_reply_to":"ba8a016a_5857d5c9","updated":"2015-11-19 11:44:20.000000000","message":"By bad, Done.","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"5837734007cb318a8ee520c7a6fc70c273846340","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def __init__(self, api):"},{"line_number":48,"context_line":"        self.api \u003d api"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @abc.abstractmethod"},{"line_number":51,"context_line":"    def _path(self, id\u003dNone):"},{"line_number":52,"context_line":"        raise NotImplemented"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_9e29a58c","line":50,"updated":"2015-11-19 11:33:32.000000000","message":"I think it can be used together with @staticmethod decorator so that this method can be left static in derived classes, but I\u0027m not sure if it is supported in 2.7 python (at least 3.3 docs mention it).","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"909afaeb2d27ba9a7b6e58d25e7d62e054c78716","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def __init__(self, api):"},{"line_number":48,"context_line":"        self.api \u003d api"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @abc.abstractmethod"},{"line_number":51,"context_line":"    def _path(self, id\u003dNone):"},{"line_number":52,"context_line":"        raise NotImplemented"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_3edc3972","line":50,"in_reply_to":"ba8a016a_9e29a58c","updated":"2015-11-19 11:44:20.000000000","message":"I\u0027ll double check it.","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"4916728df47e0a23d140bc07ba2e671826227b73","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @abc.abstractmethod"},{"line_number":51,"context_line":"    def _path(self, id\u003dNone):"},{"line_number":52,"context_line":"        raise NotImplemented"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @abc.abstractproperty"},{"line_number":55,"context_line":"    def creation_attributes(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_6ef54555","line":52,"updated":"2015-11-19 03:31:19.000000000","message":"This line isn\u0027t needed because of the decorator.\n\nPlease add a docstring though.\n\nSome examples at:\nhttps://github.com/openstack/ironic/blob/master/ironic/db/api.py#L37-L49","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"909afaeb2d27ba9a7b6e58d25e7d62e054c78716","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @abc.abstractmethod"},{"line_number":51,"context_line":"    def _path(self, id\u003dNone):"},{"line_number":52,"context_line":"        raise NotImplemented"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @abc.abstractproperty"},{"line_number":55,"context_line":"    def creation_attributes(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_bed6e94c","line":52,"in_reply_to":"ba8a016a_6ef54555","updated":"2015-11-19 11:44:20.000000000","message":"Done","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"5837734007cb318a8ee520c7a6fc70c273846340","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def _path(self, id\u003dNone):"},{"line_number":52,"context_line":"        raise NotImplemented"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @abc.abstractproperty"},{"line_number":55,"context_line":"    def creation_attributes(self):"},{"line_number":56,"context_line":"        return []"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_bbc03b51","line":54,"updated":"2015-11-19 11:33:32.000000000","message":"I think it should not be abstract and return [] here, as driver does not need it.","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"909afaeb2d27ba9a7b6e58d25e7d62e054c78716","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def _path(self, id\u003dNone):"},{"line_number":52,"context_line":"        raise NotImplemented"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @abc.abstractproperty"},{"line_number":55,"context_line":"    def creation_attributes(self):"},{"line_number":56,"context_line":"        return []"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_3ec3d98a","line":54,"in_reply_to":"ba8a016a_bbc03b51","updated":"2015-11-19 11:44:20.000000000","message":"Done","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"4916728df47e0a23d140bc07ba2e671826227b73","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @abc.abstractproperty"},{"line_number":55,"context_line":"    def creation_attributes(self):"},{"line_number":56,"context_line":"        return []"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def create(self, **kwargs):"},{"line_number":59,"context_line":"        new \u003d {}"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_ee013539","line":56,"updated":"2015-11-19 03:31:19.000000000","message":"This line isn\u0027t needed because of the decorator.\n\nPlease add a docstring though.\n\nSome examples at:\nhttps://github.com/openstack/ironic/blob/master/ironic/db/api.py#L37-L49","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"909afaeb2d27ba9a7b6e58d25e7d62e054c78716","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @abc.abstractproperty"},{"line_number":55,"context_line":"    def creation_attributes(self):"},{"line_number":56,"context_line":"        return []"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def create(self, **kwargs):"},{"line_number":59,"context_line":"        new \u003d {}"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_9e3a0598","line":56,"in_reply_to":"ba8a016a_ee013539","updated":"2015-11-19 11:44:20.000000000","message":"Done","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"4916728df47e0a23d140bc07ba2e671826227b73","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    def creation_attributes(self):"},{"line_number":56,"context_line":"        return []"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def create(self, **kwargs):"},{"line_number":59,"context_line":"        new \u003d {}"},{"line_number":60,"context_line":"        for (key, value) in kwargs.items():"},{"line_number":61,"context_line":"            if key in self.creation_attributes:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_8efae941","line":58,"updated":"2015-11-19 03:31:19.000000000","message":"Can a docstring be added please.","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"909afaeb2d27ba9a7b6e58d25e7d62e054c78716","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    def creation_attributes(self):"},{"line_number":56,"context_line":"        return []"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def create(self, **kwargs):"},{"line_number":59,"context_line":"        new \u003d {}"},{"line_number":60,"context_line":"        for (key, value) in kwargs.items():"},{"line_number":61,"context_line":"            if key in self.creation_attributes:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_7e43a113","line":58,"in_reply_to":"ba8a016a_8efae941","updated":"2015-11-19 11:44:20.000000000","message":"Done","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"4916728df47e0a23d140bc07ba2e671826227b73","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        if body:"},{"line_number":68,"context_line":"            return self.resource_class(self, body)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def get(self, resource_id, fields\u003dNone):"},{"line_number":71,"context_line":"        if fields is not None:"},{"line_number":72,"context_line":"            resource_id \u003d \u0027%s?fields\u003d\u0027 % resource_id"},{"line_number":73,"context_line":"            resource_id +\u003d \u0027,\u0027.join(fields)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_ce8b11c2","line":70,"updated":"2015-11-19 03:31:19.000000000","message":"Can a docstring be added please.","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"909afaeb2d27ba9a7b6e58d25e7d62e054c78716","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        if body:"},{"line_number":68,"context_line":"            return self.resource_class(self, body)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def get(self, resource_id, fields\u003dNone):"},{"line_number":71,"context_line":"        if fields is not None:"},{"line_number":72,"context_line":"            resource_id \u003d \u0027%s?fields\u003d\u0027 % resource_id"},{"line_number":73,"context_line":"            resource_id +\u003d \u0027,\u0027.join(fields)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_3e4af926","line":70,"in_reply_to":"ba8a016a_ce8b11c2","updated":"2015-11-19 11:44:20.000000000","message":"Done","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"5837734007cb318a8ee520c7a6fc70c273846340","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        except IndexError:"},{"line_number":78,"context_line":"            return None"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def vendor_passthru(self, resource_identifier, method, args\u003dNone,"},{"line_number":81,"context_line":"                        http_method\u003dNone):"},{"line_number":82,"context_line":"        \"\"\"Issue requests for vendor-specific actions on a given driver."},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_5b810ffa","line":80,"updated":"2015-11-19 11:33:32.000000000","message":"I\u0027m still not sure it should be in base class as it does not make sense for chassis and port. But maybe it\u0027s just me.","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"909afaeb2d27ba9a7b6e58d25e7d62e054c78716","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        except IndexError:"},{"line_number":78,"context_line":"            return None"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def vendor_passthru(self, resource_identifier, method, args\u003dNone,"},{"line_number":81,"context_line":"                        http_method\u003dNone):"},{"line_number":82,"context_line":"        \"\"\"Issue requests for vendor-specific actions on a given driver."},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_7e84010a","line":80,"in_reply_to":"ba8a016a_5b810ffa","updated":"2015-11-19 11:44:20.000000000","message":"Well, to me sounds reasonable, I think that is more cohesive keep it on the inheritance than put it on a common module. I\u0027d love to hear other opinions.","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"4916728df47e0a23d140bc07ba2e671826227b73","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        :param resource_identifier: Identifier of the resource."},{"line_number":85,"context_line":"        :param method: Name of the vendor method."},{"line_number":86,"context_line":"        :param update_function: Update function that should be called."},{"line_number":87,"context_line":"        :param delete_function: Delete function that should be called."},{"line_number":88,"context_line":"        :param get_function: Get function that should be called."},{"line_number":89,"context_line":"        :param args: Optional. The arguments to be passed to the method."}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_2eb97d79","line":86,"updated":"2015-11-19 03:31:19.000000000","message":"Please delete some of these params as not valid anymore","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"909afaeb2d27ba9a7b6e58d25e7d62e054c78716","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        :param resource_identifier: Identifier of the resource."},{"line_number":85,"context_line":"        :param method: Name of the vendor method."},{"line_number":86,"context_line":"        :param update_function: Update function that should be called."},{"line_number":87,"context_line":"        :param delete_function: Delete function that should be called."},{"line_number":88,"context_line":"        :param get_function: Get function that should be called."},{"line_number":89,"context_line":"        :param args: Optional. The arguments to be passed to the method."}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_5e981d6a","line":86,"in_reply_to":"ba8a016a_2eb97d79","updated":"2015-11-19 11:44:20.000000000","message":"Done","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"4916728df47e0a23d140bc07ba2e671826227b73","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        data \u003d self._format_body_data(body, response_key)"},{"line_number":186,"context_line":"        return [obj_class(self, res, loaded\u003dTrue) for res in data if res]"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def update(self, resource_id, patch, method\u003d\u0027PATCH\u0027, response_key\u003dNone):"},{"line_number":189,"context_line":"        url \u003d self._path(resource_id)"},{"line_number":190,"context_line":"        resp, body \u003d self.api.json_request(method, url, body\u003dpatch)"},{"line_number":191,"context_line":"        # PATCH/PUT requests may not return a body"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_0e6b59f2","line":188,"updated":"2015-11-19 03:31:19.000000000","message":"Please add a docstring","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"909afaeb2d27ba9a7b6e58d25e7d62e054c78716","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        data \u003d self._format_body_data(body, response_key)"},{"line_number":186,"context_line":"        return [obj_class(self, res, loaded\u003dTrue) for res in data if res]"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def update(self, resource_id, patch, method\u003d\u0027PATCH\u0027, response_key\u003dNone):"},{"line_number":189,"context_line":"        url \u003d self._path(resource_id)"},{"line_number":190,"context_line":"        resp, body \u003d self.api.json_request(method, url, body\u003dpatch)"},{"line_number":191,"context_line":"        # PATCH/PUT requests may not return a body"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_7e9ba166","line":188,"in_reply_to":"ba8a016a_0e6b59f2","updated":"2015-11-19 11:44:20.000000000","message":"Done","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"4916728df47e0a23d140bc07ba2e671826227b73","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        if body:"},{"line_number":193,"context_line":"            return self.resource_class(self, body)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def delete(self, resource_id):"},{"line_number":196,"context_line":"        self.api.raw_request(\u0027DELETE\u0027, self._path(resource_id))"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_ae7c8db5","line":195,"updated":"2015-11-19 03:31:19.000000000","message":"Please add a docstring","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"909afaeb2d27ba9a7b6e58d25e7d62e054c78716","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        if body:"},{"line_number":193,"context_line":"            return self.resource_class(self, body)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def delete(self, resource_id):"},{"line_number":196,"context_line":"        self.api.raw_request(\u0027DELETE\u0027, self._path(resource_id))"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_1ea7f5aa","line":195,"in_reply_to":"ba8a016a_ae7c8db5","updated":"2015-11-19 11:44:20.000000000","message":"Done","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"cc3c0bba27b6a3e4d1f62e3d4d2b013835b792d2","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @staticmethod"},{"line_number":52,"context_line":"    @abc.abstractmethod"},{"line_number":53,"context_line":"    def _path(self, id\u003dNone):"},{"line_number":54,"context_line":"        \"\"\"Returns a request path for a given resource identifier."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        :param id: Identifier of the resource to generate the request path."}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_9a93bf5a","line":53,"updated":"2015-11-20 04:12:58.000000000","message":"If staticmethod then no need for self, I think.\n\nNeed to be consistent with base and child classes. To me easier to not use @staticmethod since that is something to remember to put on every child class. But can see other point to use it since the function does not use any variables from the class/object.\n\nThough it seems like maybe there could be a class level variable and then could just have the function here.\n\n @classmethod\n def_path(cls, id\u003dNone):\n           return \u0027/v1/%s/%s\u0027 % (cls._resource_id), id if id else \u0027/v1/%s\u0027 % cls._resource_id\n\nOr something like that.","commit_id":"1969138a718be4c00b3eea815bbcdb1307400720"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"943893d6dd2d02643962812dd0eabc1bf08ffef6","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @staticmethod"},{"line_number":52,"context_line":"    @abc.abstractmethod"},{"line_number":53,"context_line":"    def _path(self, id\u003dNone):"},{"line_number":54,"context_line":"        \"\"\"Returns a request path for a given resource identifier."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        :param id: Identifier of the resource to generate the request path."}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_5f6c5736","line":53,"in_reply_to":"ba8a016a_9a93bf5a","updated":"2015-11-20 12:20:16.000000000","message":"I think it would be good, but there is no need for @classmethod, this case is very similar to what we did with _creation_attributes and create. Done.","commit_id":"1969138a718be4c00b3eea815bbcdb1307400720"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"cc3c0bba27b6a3e4d1f62e3d4d2b013835b792d2","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        :param id: Identifier of the resource to generate the request path."},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        pass"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    @property"},{"line_number":61,"context_line":"    def _creation_attributes(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_1a326fa7","line":58,"updated":"2015-11-20 04:12:58.000000000","message":"nit: I believe there is no need for pass.","commit_id":"1969138a718be4c00b3eea815bbcdb1307400720"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"943893d6dd2d02643962812dd0eabc1bf08ffef6","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        :param id: Identifier of the resource to generate the request path."},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        pass"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    @property"},{"line_number":61,"context_line":"    def _creation_attributes(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_5fc9b759","line":58,"in_reply_to":"ba8a016a_1a326fa7","updated":"2015-11-20 12:20:16.000000000","message":"Done","commit_id":"1969138a718be4c00b3eea815bbcdb1307400720"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"cc3c0bba27b6a3e4d1f62e3d4d2b013835b792d2","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        \"\"\"A list of required creation attributes for a resource type."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        \"\"\""},{"line_number":65,"context_line":"        pass"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def create(self, **kwargs):"},{"line_number":68,"context_line":"        \"\"\"Create a resource based on a kwargs dictionary of attributes."}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_fa91ab47","line":65,"updated":"2015-11-20 04:12:58.000000000","message":"nit: I believe there is no need for pass.","commit_id":"1969138a718be4c00b3eea815bbcdb1307400720"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"943893d6dd2d02643962812dd0eabc1bf08ffef6","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        \"\"\"A list of required creation attributes for a resource type."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        \"\"\""},{"line_number":65,"context_line":"        pass"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def create(self, **kwargs):"},{"line_number":68,"context_line":"        \"\"\"Create a resource based on a kwargs dictionary of attributes."}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_7fc6fb4a","line":65,"in_reply_to":"ba8a016a_fa91ab47","updated":"2015-11-20 12:20:16.000000000","message":"Done","commit_id":"1969138a718be4c00b3eea815bbcdb1307400720"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"cc3c0bba27b6a3e4d1f62e3d4d2b013835b792d2","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            if key in self._creation_attributes:"},{"line_number":79,"context_line":"                new[key] \u003d value"},{"line_number":80,"context_line":"            else:"},{"line_number":81,"context_line":"                raise exc.InvalidAttribute()"},{"line_number":82,"context_line":"        url \u003d self._path()"},{"line_number":83,"context_line":"        resp, body \u003d self.api.json_request(\u0027POST\u0027, url, body\u003dnew)"},{"line_number":84,"context_line":"        if body:"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_1a66ef50","line":81,"updated":"2015-11-20 04:12:58.000000000","message":"Can we have a test case for this path?","commit_id":"1969138a718be4c00b3eea815bbcdb1307400720"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"943893d6dd2d02643962812dd0eabc1bf08ffef6","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            if key in self._creation_attributes:"},{"line_number":79,"context_line":"                new[key] \u003d value"},{"line_number":80,"context_line":"            else:"},{"line_number":81,"context_line":"                raise exc.InvalidAttribute()"},{"line_number":82,"context_line":"        url \u003d self._path()"},{"line_number":83,"context_line":"        resp, body \u003d self.api.json_request(\u0027POST\u0027, url, body\u003dnew)"},{"line_number":84,"context_line":"        if body:"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_9ffcff73","line":81,"in_reply_to":"ba8a016a_1a66ef50","updated":"2015-11-20 12:20:16.000000000","message":"Done","commit_id":"1969138a718be4c00b3eea815bbcdb1307400720"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"cc3c0bba27b6a3e4d1f62e3d4d2b013835b792d2","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            return None"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def vendor_passthru(self, resource_identifier, method, args\u003dNone,"},{"line_number":104,"context_line":"                        http_method\u003dNone):"},{"line_number":105,"context_line":"        \"\"\"Issue requests for vendor-specific actions on a given driver."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        :param resource_identifier: Identifier of the resource."}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_baaec37e","line":104,"updated":"2015-11-20 04:12:58.000000000","message":"s/http_method\u003dNone/http_method\u003d\"POST\u0027/\n\nAnd then delete lines 116-118","commit_id":"1969138a718be4c00b3eea815bbcdb1307400720"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"943893d6dd2d02643962812dd0eabc1bf08ffef6","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            return None"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def vendor_passthru(self, resource_identifier, method, args\u003dNone,"},{"line_number":104,"context_line":"                        http_method\u003dNone):"},{"line_number":105,"context_line":"        \"\"\"Issue requests for vendor-specific actions on a given driver."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        :param resource_identifier: Identifier of the resource."}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_df028772","line":104,"in_reply_to":"ba8a016a_baaec37e","updated":"2015-11-20 12:20:16.000000000","message":"Done","commit_id":"1969138a718be4c00b3eea815bbcdb1307400720"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"be2595935cf65191346e95f5244bc24eaaa5d7c5","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        :param id: Identifier of the resource to generate the request path."},{"line_number":55,"context_line":"        \"\"\""},{"line_number":56,"context_line":"        return \u0027/v1/%s/%s\u0027 % (self._resource_name, id) if id \\"},{"line_number":57,"context_line":"            else \u0027/v1/%s\u0027 % self._resource_name"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba8a016a_e59fbc63","line":56,"updated":"2015-11-20 12:42:37.000000000","message":"No backslashes please.\n\nSomething like this should work:\n\n return (\u0027/v1/%s/%s\u0027 % (self._resource_name, id) if id \n         else \u0027/v1/%s\u0027 % self._resource_name)","commit_id":"d1cbf7016418598a545b0be350a8d801288c4e54"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"5c4bab122b15f65db81a3c221d536d81a97067ec","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        :param id: Identifier of the resource to generate the request path."},{"line_number":55,"context_line":"        \"\"\""},{"line_number":56,"context_line":"        return \u0027/v1/%s/%s\u0027 % (self._resource_name, id) if id \\"},{"line_number":57,"context_line":"            else \u0027/v1/%s\u0027 % self._resource_name"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba8a016a_776cdf36","line":56,"in_reply_to":"ba8a016a_e59fbc63","updated":"2015-11-20 13:00:36.000000000","message":"Done","commit_id":"d1cbf7016418598a545b0be350a8d801288c4e54"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"be2595935cf65191346e95f5244bc24eaaa5d7c5","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        \"\"\""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @property"},{"line_number":66,"context_line":"    def _resource_name(self):"},{"line_number":67,"context_line":"        \"\"\"The resource name."},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba8a016a_a5fc5473","line":65,"updated":"2015-11-20 12:42:37.000000000","message":"Should this be @abc.abstractproperty?\n\nDo we require the child classes to define it?","commit_id":"d1cbf7016418598a545b0be350a8d801288c4e54"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"5c4bab122b15f65db81a3c221d536d81a97067ec","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        \"\"\""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @property"},{"line_number":66,"context_line":"    def _resource_name(self):"},{"line_number":67,"context_line":"        \"\"\"The resource name."},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba8a016a_9722a300","line":65,"in_reply_to":"ba8a016a_a5fc5473","updated":"2015-11-20 13:00:36.000000000","message":"I think we must require it, this is directly used by _path() to make the request path, If a manager child class does not define it, how should we make requests to endpoints regarding that manager?","commit_id":"d1cbf7016418598a545b0be350a8d801288c4e54"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"35989ab1967af907e5898f1dc56e49e83f33f369","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        \"\"\""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @property"},{"line_number":66,"context_line":"    def _resource_name(self):"},{"line_number":67,"context_line":"        \"\"\"The resource name."},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba8a016a_1a67ba26","line":65,"updated":"2015-11-20 13:23:03.000000000","message":"If this should be required in child classes then shouldn\u0027t it be @abc.abstractproperty?","commit_id":"552cf8eb4a9ba7c65f42fcd8fce1417ce69500c0"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"ee95ccdd34e1fdbe4e922e4e02475953802d6ceb","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        \"\"\""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @property"},{"line_number":66,"context_line":"    def _resource_name(self):"},{"line_number":67,"context_line":"        \"\"\"The resource name."},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba8a016a_4dc02e2b","line":65,"in_reply_to":"ba8a016a_1a67ba26","updated":"2015-11-20 13:32:57.000000000","message":"I\u0027m so sorry John, I did not understand your previous comment, it make a lot of sense. Done.","commit_id":"552cf8eb4a9ba7c65f42fcd8fce1417ce69500c0"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"1c0024af029b08056ea86e513fd48cf1c927be32","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        return (\u0027/v1/%s/%s\u0027 % (self._resource_name, id) if id"},{"line_number":57,"context_line":"                else \u0027/v1/%s\u0027 % self._resource_name)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @property"},{"line_number":60,"context_line":"    def _creation_attributes(self):"},{"line_number":61,"context_line":"        \"\"\"A list of required creation attributes for a resource type."},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"ba8a016a_507d21b0","line":59,"updated":"2015-11-20 13:55:45.000000000","message":"If not @abc.abstractproperty here then should raise NotImplemented.\n\nNot sure which is better.","commit_id":"150d042ea199a40ad0a6a248af236a64b78e2e0b"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"dc91bac7d77667ac46ec478c9ffc55f18dbedee1","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                else \u0027/v1/%s\u0027 % self._resource_name)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @property"},{"line_number":60,"context_line":"    def _creation_attributes(self):"},{"line_number":61,"context_line":"        \"\"\"A list of required creation attributes for a resource type."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba8a016a_e56c92d2","line":60,"updated":"2015-11-20 15:20:22.000000000","message":"Please add a unit test for this base class.  Make sure it raises the exception that is expected.","commit_id":"7b5de4d40bdd7c1eb1ca28958c6b3bae3fe567ab"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"3d9707a03d8d4e28566a571511031821d268f497","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                else \u0027/v1/%s\u0027 % self._resource_name)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @property"},{"line_number":60,"context_line":"    def _creation_attributes(self):"},{"line_number":61,"context_line":"        \"\"\"A list of required creation attributes for a resource type."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba8a016a_05b8b6e4","line":60,"in_reply_to":"ba8a016a_e56c92d2","updated":"2015-11-20 15:21:43.000000000","message":"A unit test for this function in the base class, is what I meant :)","commit_id":"7b5de4d40bdd7c1eb1ca28958c6b3bae3fe567ab"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"62cd20c434e407fa0185d5013b1f9efd17206d1a","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \"\"\"A list of required creation attributes for a resource type."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        \"\"\""},{"line_number":64,"context_line":"        raise NotImplementedError"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @abc.abstractproperty"},{"line_number":67,"context_line":"    def _resource_name(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a8ffd7b_21001a01","line":64,"updated":"2015-11-25 12:24:22.000000000","message":"looks like this should be an abstractproperty as well. raising NotImplementedError in a property looks weird","commit_id":"aaf573e94e483e5aea7161e5a93b6fccd6a3e020"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"ed1703cc6929b67bf056aa61d473d4b3e5bca0c4","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \"\"\"A list of required creation attributes for a resource type."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        \"\"\""},{"line_number":64,"context_line":"        raise NotImplementedError"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @abc.abstractproperty"},{"line_number":67,"context_line":"    def _resource_name(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a8ffd7b_82221a00","line":64,"in_reply_to":"9a8ffd7b_21001a01","updated":"2015-11-25 15:19:22.000000000","message":"Not all child classes use \u0027create\u0027 function which uses this property (_creation_attributes).  But suggestion below to make a second class (CreatableManager or something like that) makes sense to me.","commit_id":"aaf573e94e483e5aea7161e5a93b6fccd6a3e020"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"62cd20c434e407fa0185d5013b1f9efd17206d1a","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                       that will be created."},{"line_number":77,"context_line":"        :raises exc.InvalidAttribute: For invalid attributes that are not"},{"line_number":78,"context_line":"                                      needed to create the resource."},{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        new \u003d {}"},{"line_number":82,"context_line":"        for (key, value) in kwargs.items():"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a8ffd7b_a1facabb","line":79,"updated":"2015-11-25 12:24:22.000000000","message":"as not all objects can be created, I suggest creating the second class (inheriting Manager) e.g. CreatableManager with only create() and _creation_attributes","commit_id":"aaf573e94e483e5aea7161e5a93b6fccd6a3e020"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"3477985ed38af58367d8ae7ec8943c0a81f3a7ae","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":206,"context_line":"class CreateManager(object):"},{"line_number":207,"context_line":"    \"\"\"Provides creation operations with a particular API.\"\"\""},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    resource_class \u003d None"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_2099a6c4","line":206,"updated":"2015-11-26 15:04:35.000000000","message":"Please have this class inherit from Manager. Unless there is some reason it can\u0027t be done.\n\n class CreateManager(Manager)\n\nThen in usage don\u0027t have to be inheriting from two different classes.\n\nFor example in chassis.py it will become:\n\n class ChassisManager(CreateManager):","commit_id":"807b6821b4aabf14f874e4348945a525b5fd01d2"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"338cc2dc11ef399a9750cae2301addd0665cf171","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":206,"context_line":"class CreateManager(object):"},{"line_number":207,"context_line":"    \"\"\"Provides creation operations with a particular API.\"\"\""},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    resource_class \u003d None"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_1915d847","line":206,"in_reply_to":"9a8ffd7b_2099a6c4","updated":"2015-11-27 11:52:58.000000000","message":"Done, I don\u0027t like the idea of having multiple parents for a class, but when a tried to do this there was a problem with solving parent method calling, but I realized what was wrong, thanks.","commit_id":"807b6821b4aabf14f874e4348945a525b5fd01d2"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"3477985ed38af58367d8ae7ec8943c0a81f3a7ae","unresolved":false,"context_lines":[{"line_number":206,"context_line":"class CreateManager(object):"},{"line_number":207,"context_line":"    \"\"\"Provides creation operations with a particular API.\"\"\""},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    resource_class \u003d None"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def __init__(self, api):"},{"line_number":212,"context_line":"        self.api \u003d api"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_008ca27d","line":209,"updated":"2015-11-26 15:04:35.000000000","message":"This will probably not be needed if make change on L206","commit_id":"807b6821b4aabf14f874e4348945a525b5fd01d2"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"338cc2dc11ef399a9750cae2301addd0665cf171","unresolved":false,"context_lines":[{"line_number":206,"context_line":"class CreateManager(object):"},{"line_number":207,"context_line":"    \"\"\"Provides creation operations with a particular API.\"\"\""},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    resource_class \u003d None"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def __init__(self, api):"},{"line_number":212,"context_line":"        self.api \u003d api"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_4ca2c0fe","line":209,"in_reply_to":"9a8ffd7b_008ca27d","updated":"2015-11-27 11:52:58.000000000","message":"Done","commit_id":"807b6821b4aabf14f874e4348945a525b5fd01d2"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"3477985ed38af58367d8ae7ec8943c0a81f3a7ae","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    resource_class \u003d None"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def __init__(self, api):"},{"line_number":212,"context_line":"        self.api \u003d api"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    @abc.abstractproperty"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_60f1ee00","line":211,"updated":"2015-11-26 15:04:35.000000000","message":"This will probably not be needed if make change on L206","commit_id":"807b6821b4aabf14f874e4348945a525b5fd01d2"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"338cc2dc11ef399a9750cae2301addd0665cf171","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    resource_class \u003d None"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def __init__(self, api):"},{"line_number":212,"context_line":"        self.api \u003d api"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    @abc.abstractproperty"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_eca294fb","line":211,"in_reply_to":"9a8ffd7b_60f1ee00","updated":"2015-11-27 11:52:58.000000000","message":"Done","commit_id":"807b6821b4aabf14f874e4348945a525b5fd01d2"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"b343f8244bd70e9f0fb6e4d05314fcf8475069ba","unresolved":false,"context_lines":[{"line_number":43,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":44,"context_line":"class Manager(object):"},{"line_number":45,"context_line":"    \"\"\"Provides  CRUD operations with a particular API.\"\"\""},{"line_number":46,"context_line":"    resource_class \u003d None"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def __init__(self, api):"},{"line_number":49,"context_line":"        self.api \u003d api"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a8ffd7b_e1b83b13","line":46,"updated":"2015-11-28 21:37:54.000000000","message":"nit: This could probably be an abstractproperty","commit_id":"22fe2d5b8aa8f2f5d6a492bea80213d20bb2d96b"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"1a8e7e2473ad052fd76044c041a9822cefd66dbc","unresolved":false,"context_lines":[{"line_number":43,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":44,"context_line":"class Manager(object):"},{"line_number":45,"context_line":"    \"\"\"Provides  CRUD operations with a particular API.\"\"\""},{"line_number":46,"context_line":"    resource_class \u003d None"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def __init__(self, api):"},{"line_number":49,"context_line":"        self.api \u003d api"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a8ffd7b_2f72894a","line":46,"in_reply_to":"9a8ffd7b_e1b83b13","updated":"2015-11-30 13:21:44.000000000","message":"Makes sense, Done","commit_id":"22fe2d5b8aa8f2f5d6a492bea80213d20bb2d96b"}],"ironicclient/tests/unit/common/test_base.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"cc3c0bba27b6a3e4d1f62e3d4d2b013835b792d2","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            (\u0027POST\u0027, \u0027/v1/testableresources\u0027, {}, CREATE_TESTABLE_RESOURCE),"},{"line_number":102,"context_line":"        ]"},{"line_number":103,"context_line":"        self.assertEqual(expect, self.api.calls)"},{"line_number":104,"context_line":"        self.assertTrue(resource)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def test_get(self):"},{"line_number":107,"context_line":"        resource \u003d self.manager.get(TESTABLE_RESOURCE[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_1a690ff9","line":104,"updated":"2015-11-20 04:12:58.000000000","message":"Why not:\n\n self.assertIsInstance(resource, TestableResource)\n\nIf I\u0027m understanding the code correctly.","commit_id":"1969138a718be4c00b3eea815bbcdb1307400720"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"943893d6dd2d02643962812dd0eabc1bf08ffef6","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            (\u0027POST\u0027, \u0027/v1/testableresources\u0027, {}, CREATE_TESTABLE_RESOURCE),"},{"line_number":102,"context_line":"        ]"},{"line_number":103,"context_line":"        self.assertEqual(expect, self.api.calls)"},{"line_number":104,"context_line":"        self.assertTrue(resource)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def test_get(self):"},{"line_number":107,"context_line":"        resource \u003d self.manager.get(TESTABLE_RESOURCE[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_7ffefb39","line":104,"in_reply_to":"ba8a016a_1a690ff9","updated":"2015-11-20 12:20:16.000000000","message":"Done","commit_id":"1969138a718be4c00b3eea815bbcdb1307400720"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"c9975e9fb082d0bb772579070e405e74e224d86b","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import copy"},{"line_number":17,"context_line":"import testtools"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from ironicclient.common import base"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_4b4bab2a","line":16,"updated":"2015-11-26 15:16:27.000000000","message":"nit: Add blank line between these two lines.\n\ncopy is a built-in library\n\ntesttools is a 3rd party library","commit_id":"807b6821b4aabf14f874e4348945a525b5fd01d2"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"338cc2dc11ef399a9750cae2301addd0665cf171","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import copy"},{"line_number":17,"context_line":"import testtools"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from ironicclient.common import base"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_992a288f","line":16,"in_reply_to":"9a8ffd7b_4b4bab2a","updated":"2015-11-27 11:52:58.000000000","message":"Done","commit_id":"807b6821b4aabf14f874e4348945a525b5fd01d2"}],"ironicclient/v1/chassis.py":[{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"86122cad00a90648feab0ea83a037f5a96d09eac","unresolved":false,"context_lines":[{"line_number":165,"context_line":"            return self._list_pagination(self._path(path), \"nodes\","},{"line_number":166,"context_line":"                                         limit\u003dlimit)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def get(self, chassis_id, fields\u003dNone):"},{"line_number":169,"context_line":"        return self._get(chassis_id, fields)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def create(self, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_afc27532","line":168,"updated":"2015-11-18 11:51:46.000000000","message":"Why do you need to redefine \u0027get\u0027 method and just call base one with same signature,  looks like using base would be better.","commit_id":"fd5c6331e352cb9d3491b86f264b6efee2ec9482"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"a5c6b387631d5d4b39f5c0cbdc6580ec0cfb21ea","unresolved":false,"context_lines":[{"line_number":165,"context_line":"            return self._list_pagination(self._path(path), \"nodes\","},{"line_number":166,"context_line":"                                         limit\u003dlimit)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def get(self, chassis_id, fields\u003dNone):"},{"line_number":169,"context_line":"        return self._get(chassis_id, fields)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def create(self, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_9abd6db9","line":168,"in_reply_to":"ba8a016a_afc27532","updated":"2015-11-18 12:47:24.000000000","message":"I totally agree with you, when I was changing this I had the same idea as you, but, I notice that other methods like delete and update are redefining the base methods and I don\u0027t wanted to be inconsistent on this. But now, vdrok made some comments on base.Manager and the get method on chassis will pass a function as parameter for base.Manager._get, so it will be necessary to redefine this method here, it is a similar case of create passing the CREATION_ATTRIBUTES.","commit_id":"fd5c6331e352cb9d3491b86f264b6efee2ec9482"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"6c1b1a001a5345bc7f7b35f9a627c469aeb5de1f","unresolved":false,"context_lines":[{"line_number":165,"context_line":"            return self._list_pagination(self._path(path), \"nodes\","},{"line_number":166,"context_line":"                                         limit\u003dlimit)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def get(self, chassis_id, fields\u003dNone):"},{"line_number":169,"context_line":"        return self._get(chassis_id, self._path, fields)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def create(self, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_3ca8da76","line":168,"updated":"2015-11-19 00:14:05.000000000","message":"I think this could be deleted and just done in the base class.","commit_id":"02507723eff6cb36f8ebe5e257e641886f027c92"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"25788af5b0b912be50e474b4ec3ea7bb43862f4b","unresolved":false,"context_lines":[{"line_number":165,"context_line":"            return self._list_pagination(self._path(path), \"nodes\","},{"line_number":166,"context_line":"                                         limit\u003dlimit)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def get(self, chassis_id, fields\u003dNone):"},{"line_number":169,"context_line":"        return self._get(chassis_id, self._path, fields)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def create(self, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_6e3ea58d","line":168,"in_reply_to":"ba8a016a_3ca8da76","updated":"2015-11-19 03:01:21.000000000","message":"Done","commit_id":"02507723eff6cb36f8ebe5e257e641886f027c92"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"6c1b1a001a5345bc7f7b35f9a627c469aeb5de1f","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        return self._get(chassis_id, self._path, fields)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def create(self, **kwargs):"},{"line_number":172,"context_line":"        return self._create(CREATION_ATTRIBUTES, self._path(), **kwargs)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def delete(self, chassis_id):"},{"line_number":175,"context_line":"        return self._delete(self._path(chassis_id))"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_bce92ab9","line":172,"updated":"2015-11-19 00:14:05.000000000","message":"I think this could be deleted and just done in the base class.  If moved CREATION attributes to be a class variable of this class.","commit_id":"02507723eff6cb36f8ebe5e257e641886f027c92"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"25788af5b0b912be50e474b4ec3ea7bb43862f4b","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        return self._get(chassis_id, self._path, fields)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def create(self, **kwargs):"},{"line_number":172,"context_line":"        return self._create(CREATION_ATTRIBUTES, self._path(), **kwargs)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def delete(self, chassis_id):"},{"line_number":175,"context_line":"        return self._delete(self._path(chassis_id))"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_2e441d19","line":172,"in_reply_to":"ba8a016a_bce92ab9","updated":"2015-11-19 03:01:21.000000000","message":"Done","commit_id":"02507723eff6cb36f8ebe5e257e641886f027c92"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"46847a583103ca1b993f7aa1757e602ea9f747a7","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @property"},{"line_number":36,"context_line":"    def _resource_name(self):"},{"line_number":37,"context_line":"        return \u0027chassis\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def list(self, marker\u003dNone, limit\u003dNone, sort_key\u003dNone,"},{"line_number":40,"context_line":"             sort_dir\u003dNone, detail\u003dFalse, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba8a016a_93804848","line":37,"updated":"2015-11-22 12:33:14.000000000","message":"I suspect you can just use class-level attributes:\n\n _creation_attributes \u003d [..]\n _resource_name \u003d \u0027chassis\u0027","commit_id":"afafa57c76837ee845bd403d755f220e74cb576d"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"309186d03692389bd07e5c88b8e8e257c171a27d","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @property"},{"line_number":36,"context_line":"    def _resource_name(self):"},{"line_number":37,"context_line":"        return \u0027chassis\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def list(self, marker\u003dNone, limit\u003dNone, sort_key\u003dNone,"},{"line_number":40,"context_line":"             sort_dir\u003dNone, detail\u003dFalse, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba8a016a_d9190e24","line":37,"in_reply_to":"ba8a016a_93804848","updated":"2015-11-23 01:24:58.000000000","message":"Yes, class-level attributes would work, but I prefer do this with abstract properties, just to be explicit that the heirs must provide these fields, since we are using them inside base.Manager functions like create and _path(). This implementation was discussed with jlvillal and he agreed with the idea.","commit_id":"afafa57c76837ee845bd403d755f220e74cb576d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"73efbe78929cd8caec1bdc09be083bef92d41303","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @property"},{"line_number":36,"context_line":"    def _resource_name(self):"},{"line_number":37,"context_line":"        return \u0027chassis\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def list(self, marker\u003dNone, limit\u003dNone, sort_key\u003dNone,"},{"line_number":40,"context_line":"             sort_dir\u003dNone, detail\u003dFalse, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba8a016a_4fe0e6cc","line":37,"in_reply_to":"ba8a016a_d9190e24","updated":"2015-11-23 10:20:15.000000000","message":"I didn\u0027t suggest to stop using abstract properties, I only suggested to override them with class attributes","commit_id":"afafa57c76837ee845bd403d755f220e74cb576d"}],"ironicclient/v1/driver.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"636159b766280697fec734cd7c127d82ac5b27c9","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        :param http_method: The HTTP method to use on the request."},{"line_number":60,"context_line":"                            Defaults to POST."},{"line_number":61,"context_line":"        \"\"\""},{"line_number":62,"context_line":"        return self._vendor_passthru(driver_name, method, args, http_method)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_50805646","line":62,"updated":"2015-11-18 05:04:01.000000000","message":"nit:\n\n ... args\u003dargs, http_method\u003dhttp_method)\n\nThough it might just be me who prefers it this way :)","commit_id":"ae98401c43f4efee0d9522206b6831c96bef1e34"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"21f7d46b7ea18b74ddf757f794b79f334f9db19d","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        :param http_method: The HTTP method to use on the request."},{"line_number":60,"context_line":"                            Defaults to POST."},{"line_number":61,"context_line":"        \"\"\""},{"line_number":62,"context_line":"        return self._vendor_passthru(driver_name, method, args, http_method)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_74c9c025","line":62,"in_reply_to":"ba8a016a_50805646","updated":"2015-11-18 11:34:04.000000000","message":"No problem, Done.","commit_id":"ae98401c43f4efee0d9522206b6831c96bef1e34"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1a25e349aab45277c00b23cc0888b062342579b6","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def list(self):"},{"line_number":28,"context_line":"        return self._list(\u0027/v1/drivers\u0027, \"drivers\")"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def get(self, driver_name):"},{"line_number":31,"context_line":"        try:"},{"line_number":32,"context_line":"            return self._list(\u0027/v1/drivers/%s\u0027 % driver_name)[0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_9a656db6","line":29,"updated":"2015-11-18 12:01:49.000000000","message":"This one could be refactored too, also might be worth to add _path method as in other modules.","commit_id":"fd5c6331e352cb9d3491b86f264b6efee2ec9482"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"a5c6b387631d5d4b39f5c0cbdc6580ec0cfb21ea","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def list(self):"},{"line_number":28,"context_line":"        return self._list(\u0027/v1/drivers\u0027, \"drivers\")"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def get(self, driver_name):"},{"line_number":31,"context_line":"        try:"},{"line_number":32,"context_line":"            return self._list(\u0027/v1/drivers/%s\u0027 % driver_name)[0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_2726a915","line":29,"in_reply_to":"ba8a016a_9a656db6","updated":"2015-11-18 12:47:24.000000000","message":"Done","commit_id":"fd5c6331e352cb9d3491b86f264b6efee2ec9482"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"5837734007cb318a8ee520c7a6fc70c273846340","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def properties(self, driver_name):"},{"line_number":34,"context_line":"        try:"},{"line_number":35,"context_line":"            info \u003d self._list(\u0027/v1/drivers/%s/properties\u0027 % driver_name)[0]"},{"line_number":36,"context_line":"            if info:"},{"line_number":37,"context_line":"                return info.to_dict()"},{"line_number":38,"context_line":"            return {}"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_b837e1fd","line":35,"updated":"2015-11-19 11:33:32.000000000","message":"nit - might be better to reuse self.get(\u0027%s/properties\u0027 % driver_name) here, try block is not needed then.","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"909afaeb2d27ba9a7b6e58d25e7d62e054c78716","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def properties(self, driver_name):"},{"line_number":34,"context_line":"        try:"},{"line_number":35,"context_line":"            info \u003d self._list(\u0027/v1/drivers/%s/properties\u0027 % driver_name)[0]"},{"line_number":36,"context_line":"            if info:"},{"line_number":37,"context_line":"                return info.to_dict()"},{"line_number":38,"context_line":"            return {}"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_1efcd56e","line":35,"in_reply_to":"ba8a016a_b837e1fd","updated":"2015-11-19 11:44:20.000000000","message":"Done","commit_id":"f918b60d7334d84d628b392b8aecf4a1e3359779"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"02cfbdc848b2f72766386a63bbacfd7e64ce13e7","unresolved":false,"context_lines":[{"line_number":21,"context_line":"        return \"\u003cDriver %s\u003e\" % self._info"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class DriverManager(base.Manager):"},{"line_number":25,"context_line":"    resource_class \u003d Driver"},{"line_number":26,"context_line":"    _resource_name \u003d \u0027drivers\u0027"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9a8ffd7b_d9d2b5d0","line":24,"updated":"2015-11-30 09:50:26.000000000","message":"You only inherit base.Manager here rather than base.CreateManager with node/chassis/port. I assume the CreateManager is just for skip driver Class. What about all inherit CreateManager and in the case of Driver class, overwrite create() by throwing an exception of unsupported.","commit_id":"22fe2d5b8aa8f2f5d6a492bea80213d20bb2d96b"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"1a8e7e2473ad052fd76044c041a9822cefd66dbc","unresolved":false,"context_lines":[{"line_number":21,"context_line":"        return \"\u003cDriver %s\u003e\" % self._info"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class DriverManager(base.Manager):"},{"line_number":25,"context_line":"    resource_class \u003d Driver"},{"line_number":26,"context_line":"    _resource_name \u003d \u0027drivers\u0027"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9a8ffd7b_b25a5e29","line":24,"in_reply_to":"9a8ffd7b_d9d2b5d0","updated":"2015-11-30 13:21:44.000000000","message":"Hi Tan Lin, as Dmitry said, this idea has been avoided, both approaches are good but I do agree with the current one. What do you think? Thanks for the review","commit_id":"22fe2d5b8aa8f2f5d6a492bea80213d20bb2d96b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"2d6f5f11f71518e041a63bede5669338a73e2ddf","unresolved":false,"context_lines":[{"line_number":21,"context_line":"        return \"\u003cDriver %s\u003e\" % self._info"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class DriverManager(base.Manager):"},{"line_number":25,"context_line":"    resource_class \u003d Driver"},{"line_number":26,"context_line":"    _resource_name \u003d \u0027drivers\u0027"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9a8ffd7b_9923cdbc","line":24,"in_reply_to":"9a8ffd7b_d9d2b5d0","updated":"2015-11-30 09:51:31.000000000","message":"that\u0027s what I just asked NOT to do. not having a method is a clear enough sign","commit_id":"22fe2d5b8aa8f2f5d6a492bea80213d20bb2d96b"}],"ironicclient/v1/node.py":[{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"86122cad00a90648feab0ea83a037f5a96d09eac","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        :param http_method: The HTTP method to use on the request."},{"line_number":201,"context_line":"                            Defaults to POST."},{"line_number":202,"context_line":"        \"\"\""},{"line_number":203,"context_line":"        return self._vendor_passthru(node_id, method, args, http_method)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def set_maintenance(self, node_id, state, maint_reason\u003dNone):"},{"line_number":206,"context_line":"        \"\"\"Set the maintenance mode for the node."}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_ef287de4","line":203,"updated":"2015-11-18 11:51:46.000000000","message":"ditto","commit_id":"fd5c6331e352cb9d3491b86f264b6efee2ec9482"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"a5c6b387631d5d4b39f5c0cbdc6580ec0cfb21ea","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        :param http_method: The HTTP method to use on the request."},{"line_number":201,"context_line":"                            Defaults to POST."},{"line_number":202,"context_line":"        \"\"\""},{"line_number":203,"context_line":"        return self._vendor_passthru(node_id, method, args, http_method)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def set_maintenance(self, node_id, state, maint_reason\u003dNone):"},{"line_number":206,"context_line":"        \"\"\"Set the maintenance mode for the node."}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_e71bc1c8","line":203,"in_reply_to":"ba8a016a_ef287de4","updated":"2015-11-18 12:47:24.000000000","message":"Done","commit_id":"fd5c6331e352cb9d3491b86f264b6efee2ec9482"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"46847a583103ca1b993f7aa1757e602ea9f747a7","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @property"},{"line_number":39,"context_line":"    def _resource_name(self):"},{"line_number":40,"context_line":"        return \u0027nodes\u0027"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def list(self, associated\u003dNone, maintenance\u003dNone, marker\u003dNone, limit\u003dNone,"},{"line_number":43,"context_line":"             detail\u003dFalse, sort_key\u003dNone, sort_dir\u003dNone, fields\u003dNone,"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba8a016a_33963c95","line":40,"updated":"2015-11-22 12:33:14.000000000","message":"ditto","commit_id":"afafa57c76837ee845bd403d755f220e74cb576d"}]}
