)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"311291520d5fdb13d0f6160d168d4d96fabbb983","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added support for the Limits resource"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Introduced the Limits resource, filled in its"},{"line_number":10,"context_line":"attributes, and implemented API call to support"},{"line_number":11,"context_line":"the Cinder v3 API."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"79daad25_4dfcfe41","line":9,"updated":"2021-02-23 19:37:27.000000000","message":"super nit: commit messages should usually be in the present tense and wrapped at ~72 characters (except for the subject, which should be ~50)\n\n  Introduce the Limits resource, fill in its resources and implement\n  API calls to support this Cinder v3 API.","commit_id":"44e6837b8469b806f2a856e9a5faed96aa53587e"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"ce79a5adc0bd09f5a12298e035b7106ab6fe45f1","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added support for the Limits resource"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Introduced the Limits resource, filled in its"},{"line_number":10,"context_line":"attributes, and implemented API call to support"},{"line_number":11,"context_line":"the Cinder v3 API."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9165b7b6_e551acf5","line":9,"in_reply_to":"79daad25_4dfcfe41","updated":"2021-02-25 06:18:28.000000000","message":"Done","commit_id":"44e6837b8469b806f2a856e9a5faed96aa53587e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"311291520d5fdb13d0f6160d168d4d96fabbb983","unresolved":true,"context_lines":[{"line_number":10,"context_line":"attributes, and implemented API call to support"},{"line_number":11,"context_line":"the Cinder v3 API."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Task: 41816 Story: 2008619"},{"line_number":14,"context_line":"Change-Id: I7c1c00e72da763f7437d693ece50b7348f6f479a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"f06d3735_b71f95e7","line":13,"updated":"2021-02-23 19:37:27.000000000","message":"These should be on separate lines","commit_id":"44e6837b8469b806f2a856e9a5faed96aa53587e"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"ce79a5adc0bd09f5a12298e035b7106ab6fe45f1","unresolved":false,"context_lines":[{"line_number":10,"context_line":"attributes, and implemented API call to support"},{"line_number":11,"context_line":"the Cinder v3 API."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Task: 41816 Story: 2008619"},{"line_number":14,"context_line":"Change-Id: I7c1c00e72da763f7437d693ece50b7348f6f479a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7e168c33_5370cefd","line":13,"in_reply_to":"f06d3735_b71f95e7","updated":"2021-02-25 06:18:28.000000000","message":"Done","commit_id":"44e6837b8469b806f2a856e9a5faed96aa53587e"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"166fb1589d0892e196b3e811b499c298993f21a0","unresolved":true,"context_lines":[{"line_number":11,"context_line":"the Cinder v3 API."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Task: 41816"},{"line_number":14,"context_line":"Story: 2008619"},{"line_number":15,"context_line":"Change-Id: I7c1c00e72da763f7437d693ece50b7348f6f479a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"2c835863_f1a5c4fb","line":14,"updated":"2021-02-25 16:48:12.000000000","message":"Since you are also doing the proxy work in the same patch, I would get the tasks added to this story for the limits resource (https://storyboard.openstack.org/#!/story/2008621) and then add those tasks and stories here as well (you can have multiple in a single commit).\n\nCommit Body\n\nCommit Summary details\n\nTask: \nStory: \nTask:\nTask:\nStory: \n\nEtc.","commit_id":"28b2d5a0480b2792d471cdbfb323b74fdd1fdde3"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"feb860c451523ac863787a98ccb63fd822980188","unresolved":false,"context_lines":[{"line_number":11,"context_line":"the Cinder v3 API."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Task: 41816"},{"line_number":14,"context_line":"Story: 2008619"},{"line_number":15,"context_line":"Change-Id: I7c1c00e72da763f7437d693ece50b7348f6f479a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"6f0ed220_1fd1a71e","line":14,"in_reply_to":"2c835863_f1a5c4fb","updated":"2021-02-26 03:50:57.000000000","message":"Done","commit_id":"28b2d5a0480b2792d471cdbfb323b74fdd1fdde3"}],"openstack/block_storage/v3/_proxy.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"311291520d5fdb13d0f6160d168d4d96fabbb983","unresolved":true,"context_lines":[{"line_number":491,"context_line":"        \"\"\"Gets absolute limits for a project"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        :param limit: The value can be the ID of a limit or a"},{"line_number":494,"context_line":"                      :class:`~openstack.block_storage.v3.limit.Limit`"},{"line_number":495,"context_line":"                      instance."},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"        :returns: One :class:`~openstack.block_storage.v3.limit.Limit`"}],"source_content_type":"text/x-python","patch_set":3,"id":"7b18985d_4388eb22","line":494,"range":{"start_line":494,"start_character":12,"end_line":494,"end_character":22},"updated":"2021-02-23 19:37:27.000000000","message":"style nit: I realize this is probably copy-pasted from elsewhere, but no point repeating others mistakes 😉 Can you drop this?","commit_id":"44e6837b8469b806f2a856e9a5faed96aa53587e"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"ce79a5adc0bd09f5a12298e035b7106ab6fe45f1","unresolved":false,"context_lines":[{"line_number":491,"context_line":"        \"\"\"Gets absolute limits for a project"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        :param limit: The value can be the ID of a limit or a"},{"line_number":494,"context_line":"                      :class:`~openstack.block_storage.v3.limit.Limit`"},{"line_number":495,"context_line":"                      instance."},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"        :returns: One :class:`~openstack.block_storage.v3.limit.Limit`"}],"source_content_type":"text/x-python","patch_set":3,"id":"2d1bf79b_a78cecef","line":494,"range":{"start_line":494,"start_character":12,"end_line":494,"end_character":22},"in_reply_to":"7b18985d_4388eb22","updated":"2021-02-25 06:18:28.000000000","message":"Done","commit_id":"44e6837b8469b806f2a856e9a5faed96aa53587e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"311291520d5fdb13d0f6160d168d4d96fabbb983","unresolved":true,"context_lines":[{"line_number":495,"context_line":"                      instance."},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"        :returns: One :class:`~openstack.block_storage.v3.limit.Limit`"},{"line_number":498,"context_line":"                  instance."},{"line_number":499,"context_line":"        :raises: :class:`~openstack.exceptions.ResourceNotFound` when no"},{"line_number":500,"context_line":"                 resource can be found."},{"line_number":501,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"c1b5e174_a54a5541","line":498,"range":{"start_line":498,"start_character":12,"end_line":498,"end_character":18},"updated":"2021-02-23 19:37:27.000000000","message":"ditto","commit_id":"44e6837b8469b806f2a856e9a5faed96aa53587e"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"ce79a5adc0bd09f5a12298e035b7106ab6fe45f1","unresolved":false,"context_lines":[{"line_number":495,"context_line":"                      instance."},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"        :returns: One :class:`~openstack.block_storage.v3.limit.Limit`"},{"line_number":498,"context_line":"                  instance."},{"line_number":499,"context_line":"        :raises: :class:`~openstack.exceptions.ResourceNotFound` when no"},{"line_number":500,"context_line":"                 resource can be found."},{"line_number":501,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"6b77828a_1fc69003","line":498,"range":{"start_line":498,"start_character":12,"end_line":498,"end_character":18},"in_reply_to":"c1b5e174_a54a5541","updated":"2021-02-25 06:18:28.000000000","message":"Done","commit_id":"44e6837b8469b806f2a856e9a5faed96aa53587e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"311291520d5fdb13d0f6160d168d4d96fabbb983","unresolved":true,"context_lines":[{"line_number":497,"context_line":"        :returns: One :class:`~openstack.block_storage.v3.limit.Limit`"},{"line_number":498,"context_line":"                  instance."},{"line_number":499,"context_line":"        :raises: :class:`~openstack.exceptions.ResourceNotFound` when no"},{"line_number":500,"context_line":"                 resource can be found."},{"line_number":501,"context_line":"        \"\"\""},{"line_number":502,"context_line":"        return self._get(_limit.Limit, limit)"},{"line_number":503,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"aed92f60_5b1307dc","line":500,"range":{"start_line":500,"start_character":12,"end_line":500,"end_character":17},"updated":"2021-02-23 19:37:27.000000000","message":"ditto","commit_id":"44e6837b8469b806f2a856e9a5faed96aa53587e"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"ce79a5adc0bd09f5a12298e035b7106ab6fe45f1","unresolved":false,"context_lines":[{"line_number":497,"context_line":"        :returns: One :class:`~openstack.block_storage.v3.limit.Limit`"},{"line_number":498,"context_line":"                  instance."},{"line_number":499,"context_line":"        :raises: :class:`~openstack.exceptions.ResourceNotFound` when no"},{"line_number":500,"context_line":"                 resource can be found."},{"line_number":501,"context_line":"        \"\"\""},{"line_number":502,"context_line":"        return self._get(_limit.Limit, limit)"},{"line_number":503,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"d18e0ebd_21fb374c","line":500,"range":{"start_line":500,"start_character":12,"end_line":500,"end_character":17},"in_reply_to":"aed92f60_5b1307dc","updated":"2021-02-25 06:18:28.000000000","message":"Done","commit_id":"44e6837b8469b806f2a856e9a5faed96aa53587e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"23e3755c091471136e0ca9143ac121afe9a6282e","unresolved":true,"context_lines":[{"line_number":487,"context_line":"        backup \u003d self._get_resource(_backup.Backup, backup)"},{"line_number":488,"context_line":"        return backup.restore(self, volume_id\u003dvolume_id, name\u003dname)"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    def get_limit(self, limit):"},{"line_number":491,"context_line":"        \"\"\"Gets absolute limits for a project"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        :param limit: The value can be the ID of a limit or a"}],"source_content_type":"text/x-python","patch_set":5,"id":"c1d5e9c0_fc687059","line":490,"updated":"2021-02-25 13:47:04.000000000","message":"I guess we talk here in plural about limits. Even we use the singular GET method to get those we still deal with multiple props.","commit_id":"ed706f5c4adbe2bb3848914b90986f1251aecbb3"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"4ebed94f8330e55e87233c7527b1beb0f802411b","unresolved":false,"context_lines":[{"line_number":487,"context_line":"        backup \u003d self._get_resource(_backup.Backup, backup)"},{"line_number":488,"context_line":"        return backup.restore(self, volume_id\u003dvolume_id, name\u003dname)"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    def get_limit(self, limit):"},{"line_number":491,"context_line":"        \"\"\"Gets absolute limits for a project"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        :param limit: The value can be the ID of a limit or a"}],"source_content_type":"text/x-python","patch_set":5,"id":"fe9ccf6b_e89ffd4b","line":490,"in_reply_to":"c1d5e9c0_fc687059","updated":"2021-02-25 15:00:20.000000000","message":"Done","commit_id":"ed706f5c4adbe2bb3848914b90986f1251aecbb3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"35dd934638e2d37cc9c8a3a446be079e5cfe2527","unresolved":true,"context_lines":[{"line_number":487,"context_line":"        backup \u003d self._get_resource(_backup.Backup, backup)"},{"line_number":488,"context_line":"        return backup.restore(self, volume_id\u003dvolume_id, name\u003dname)"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    def get_limits(self, limit):"},{"line_number":491,"context_line":"        \"\"\"Gets absolute limits for a project"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        :param limit: The value can be the ID of a limit or a"}],"source_content_type":"text/x-python","patch_set":7,"id":"49c6cbbc_45d868f0","line":490,"updated":"2021-03-01 16:01:26.000000000","message":"Are you sure about this? If so, can you give a sample ID?\n\nAlso note that the naming strategy we seem to be using here is \u0027create_foo\u0027, \u0027get_foo\u0027, \u0027delete_foo\u0027, \u0027update_foo\u0027 and \u0027foos\u0027. If you were to implement a list operation, this should be called simply \u0027limits\u0027","commit_id":"91f17e9cf0282a559ca6fa14faad1f02a283ae71"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"db175ff132cfe3edb0f228f80dfd4a7b96398251","unresolved":true,"context_lines":[{"line_number":487,"context_line":"        backup \u003d self._get_resource(_backup.Backup, backup)"},{"line_number":488,"context_line":"        return backup.restore(self, volume_id\u003dvolume_id, name\u003dname)"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    def get_limits(self, limit):"},{"line_number":491,"context_line":"        \"\"\"Gets absolute limits for a project"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        :param limit: The value can be the ID of a limit or a"}],"source_content_type":"text/x-python","patch_set":7,"id":"85526f79_23d2f409","line":490,"in_reply_to":"49c6cbbc_45d868f0","updated":"2021-03-02 09:05:05.000000000","message":"For this, I am going off of what Artem said when he suggested that I changed what was formally \"get_limit\": \"I guess we talk here in plural about limits. Even we use the singular GET method to get those we still deal with multiple props.\"","commit_id":"91f17e9cf0282a559ca6fa14faad1f02a283ae71"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"1765c20b8fa319b1f705656e852a5e8c44ea94bc","unresolved":true,"context_lines":[{"line_number":487,"context_line":"        backup \u003d self._get_resource(_backup.Backup, backup)"},{"line_number":488,"context_line":"        return backup.restore(self, volume_id\u003dvolume_id, name\u003dname)"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    def get_limits(self, limit):"},{"line_number":491,"context_line":"        \"\"\"Gets absolute limits for a project"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        :param limit: The value can be the ID of a limit or a"}],"source_content_type":"text/x-python","patch_set":8,"id":"de3ab71f_b00fa83f","line":490,"updated":"2021-03-03 10:23:46.000000000","message":"How do you expect to find limit requiring the limit? Please have a look at https://opendev.org/openstack/openstacksdk/src/branch/master/openstack/load_balancer/v2/_proxy.py#L766 to understand how this can look like.","commit_id":"d2bcd02943764e687cf9a6c29742b19d261744f0"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"4ef67ce3a1e98bea2961285cdf28a3966bd5eb0c","unresolved":false,"context_lines":[{"line_number":487,"context_line":"        backup \u003d self._get_resource(_backup.Backup, backup)"},{"line_number":488,"context_line":"        return backup.restore(self, volume_id\u003dvolume_id, name\u003dname)"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    def get_limits(self, limit):"},{"line_number":491,"context_line":"        \"\"\"Gets absolute limits for a project"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        :param limit: The value can be the ID of a limit or a"}],"source_content_type":"text/x-python","patch_set":8,"id":"05f59717_fb5122b5","line":490,"in_reply_to":"de3ab71f_b00fa83f","updated":"2021-03-04 00:39:04.000000000","message":"Thanks for the response! \nI agree, that doesn\u0027t make any sense. After looking at [1], it looks like there are no parameters whatsoever. To better understand what is going on, I also looked at [2].\n\n[1] https://github.com/openstack/python-cinderclient/blob/f1236e09404c52b5eb3d9ba528be91d49487e08a/cinderclient/v2/limits.py\n[2]https://opendev.org/openstack/openstacksdk/src/branch/master/openstack/compute/v2/_proxy.py","commit_id":"d2bcd02943764e687cf9a6c29742b19d261744f0"}],"openstack/block_storage/v3/limit.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"311291520d5fdb13d0f6160d168d4d96fabbb983","unresolved":true,"context_lines":[{"line_number":13,"context_line":"from openstack import resource"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"class Absolute(resource.Resource):"},{"line_number":17,"context_line":"    #: Properties"},{"line_number":18,"context_line":"    #: The total number of snapshots used."},{"line_number":19,"context_line":"    total_snapshots_used \u003d resource.Body(\"totalSnapshotsUsed\", type\u003dint)"}],"source_content_type":"text/x-python","patch_set":3,"id":"25eedaaf_12141f24","line":16,"range":{"start_line":16,"start_character":6,"end_line":16,"end_character":14},"updated":"2021-02-23 19:37:27.000000000","message":"Can we call this AbsoluteLimit? Note that openstack/compute/v2/limits.py might be useful (Cinder was broken out of Nova way back and shares many similar APIs and concepts)","commit_id":"44e6837b8469b806f2a856e9a5faed96aa53587e"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"ce79a5adc0bd09f5a12298e035b7106ab6fe45f1","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from openstack import resource"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"class Absolute(resource.Resource):"},{"line_number":17,"context_line":"    #: Properties"},{"line_number":18,"context_line":"    #: The total number of snapshots used."},{"line_number":19,"context_line":"    total_snapshots_used \u003d resource.Body(\"totalSnapshotsUsed\", type\u003dint)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ae65268e_38f8cc60","line":16,"range":{"start_line":16,"start_character":6,"end_line":16,"end_character":14},"in_reply_to":"25eedaaf_12141f24","updated":"2021-02-25 06:18:28.000000000","message":"Done","commit_id":"44e6837b8469b806f2a856e9a5faed96aa53587e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"311291520d5fdb13d0f6160d168d4d96fabbb983","unresolved":true,"context_lines":[{"line_number":21,"context_line":"    max_total_backups \u003d resource.Body(\"maxTotalBackups\", type\u003dint)"},{"line_number":22,"context_line":"    #: The maximum total amount of volumes, in gibibytes (GiB)."},{"line_number":23,"context_line":"    max_total_volume_gigabytes \u003d resource.Body(\"maxTotalVolumeGigabytes\","},{"line_number":24,"context_line":"                                               type\u003dint)"},{"line_number":25,"context_line":"    #: The maximum number of snapshots."},{"line_number":26,"context_line":"    max_total_snapshots \u003d resource.Body(\"maxTotalSnapshots\", type\u003dint)"},{"line_number":27,"context_line":"    #: The maximum total amount of backups, in gibibytes (GiB)."}],"source_content_type":"text/x-python","patch_set":3,"id":"c3ff2650_7ec702a2","line":24,"updated":"2021-02-23 19:37:27.000000000","message":"style nit:\n\n  max_total_volume_gigabytes \u003d resource.Body(\n      \"maxTotalVolumeGigabytes\", type\u003dint)\n\nWe use both styles here but hanging indents are fugly. Same below","commit_id":"44e6837b8469b806f2a856e9a5faed96aa53587e"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"ce79a5adc0bd09f5a12298e035b7106ab6fe45f1","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    max_total_backups \u003d resource.Body(\"maxTotalBackups\", type\u003dint)"},{"line_number":22,"context_line":"    #: The maximum total amount of volumes, in gibibytes (GiB)."},{"line_number":23,"context_line":"    max_total_volume_gigabytes \u003d resource.Body(\"maxTotalVolumeGigabytes\","},{"line_number":24,"context_line":"                                               type\u003dint)"},{"line_number":25,"context_line":"    #: The maximum number of snapshots."},{"line_number":26,"context_line":"    max_total_snapshots \u003d resource.Body(\"maxTotalSnapshots\", type\u003dint)"},{"line_number":27,"context_line":"    #: The maximum total amount of backups, in gibibytes (GiB)."}],"source_content_type":"text/x-python","patch_set":3,"id":"5afa523a_4a95eb91","line":24,"in_reply_to":"c3ff2650_7ec702a2","updated":"2021-02-25 06:18:28.000000000","message":"Done","commit_id":"44e6837b8469b806f2a856e9a5faed96aa53587e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"311291520d5fdb13d0f6160d168d4d96fabbb983","unresolved":true,"context_lines":[{"line_number":51,"context_line":"    #: Properties"},{"line_number":52,"context_line":"    #: Rate-limit volume copy bandwidth, used to mitigate"},{"line_number":53,"context_line":"    #: slow down of data access from the instances."},{"line_number":54,"context_line":"    rate \u003d resource.Body(\"rate\", type\u003dlist)"},{"line_number":55,"context_line":"    #: An absolute limits object."},{"line_number":56,"context_line":"    absolute \u003d resource.Body(\"absolute\", type\u003dAbsolute)"}],"source_content_type":"text/x-python","patch_set":3,"id":"daa9f323_5e313a7f","line":54,"updated":"2021-02-23 19:37:27.000000000","message":"You haven\u0027t specified this yet. You should provide a RateLimit object above and set \u0027list_type\u003dRateLimit\u0027 here. FWIW, the API docs in Cinder aren\u0027t all that helpful but you can look at the cinder [1] and cinderclient [2] code to figure out what these should look like. A patch to improve the test that\u0027s generating the API sample in cinder so that it populates the \u0027rate\u0027 section would also be beneficial, but that might be a rabbit hole too far 😉\n\n[1] https://github.com/openstack/cinder/blob/23d76e01f2b4f3771b57fb287084a4884238b827/cinder/api/views/limits.py#L56-L91\n[2] https://github.com/openstack/python-cinderclient/blob/f1236e09404c52b5eb3d9ba528be91d49487e08a/cinderclient/v2/limits.py#L43-L66","commit_id":"44e6837b8469b806f2a856e9a5faed96aa53587e"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"ce79a5adc0bd09f5a12298e035b7106ab6fe45f1","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    #: Properties"},{"line_number":52,"context_line":"    #: Rate-limit volume copy bandwidth, used to mitigate"},{"line_number":53,"context_line":"    #: slow down of data access from the instances."},{"line_number":54,"context_line":"    rate \u003d resource.Body(\"rate\", type\u003dlist)"},{"line_number":55,"context_line":"    #: An absolute limits object."},{"line_number":56,"context_line":"    absolute \u003d resource.Body(\"absolute\", type\u003dAbsolute)"}],"source_content_type":"text/x-python","patch_set":3,"id":"90883748_f72cf5e8","line":54,"in_reply_to":"daa9f323_5e313a7f","updated":"2021-02-25 06:18:28.000000000","message":"Thanks for the reply! The two links helped quite a bit in figuring out how to implement the RateLimit object as the API docs don\u0027t go into any detail. I also used the code from openstack/compute/v2/limits.py as a guide.\n\nFor actually implementing the RateLimit object, it looks like the implementation is virtually the same as how it was implemented in openstack/compute/v2/limits.py. I had no clue what the properties for the RateLimit object did as the API goes into zero detail, so I just copied what was written there.\n\nLastly, for the limit property in the RateLimit object, I just made it of type list. Although the list is comprised of dictionaries with five properties, I believe it will suffice just to have it how it is in the new patchset.","commit_id":"44e6837b8469b806f2a856e9a5faed96aa53587e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6a817891a0ec9d05006a39c5b7ad477ea937d09f","unresolved":true,"context_lines":[{"line_number":40,"context_line":"    total_gigabytes_used \u003d resource.Body(\"totalGigabytesUsed\", type\u003dint)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class RateLimit(resource.Resource):"},{"line_number":44,"context_line":"    #: Properties"},{"line_number":45,"context_line":"    #: A URI representing which routes this rate limit applies to."},{"line_number":46,"context_line":"    uri \u003d resource.Body(\"uri\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"91ce2f80_5d33f1f5","line":43,"updated":"2021-02-24 09:57:18.000000000","message":"This should probably be \"RateLimits\" (plural) actually since it embeds individual \"RateLimit\" objects in the \u0027limit\u0027 attribute","commit_id":"c438d28f9d66e1cdfdc3cbda96b7c2ba79e53e1c"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"ce79a5adc0bd09f5a12298e035b7106ab6fe45f1","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    total_gigabytes_used \u003d resource.Body(\"totalGigabytesUsed\", type\u003dint)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class RateLimit(resource.Resource):"},{"line_number":44,"context_line":"    #: Properties"},{"line_number":45,"context_line":"    #: A URI representing which routes this rate limit applies to."},{"line_number":46,"context_line":"    uri \u003d resource.Body(\"uri\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"3c09a9a5_dc8802c4","line":43,"in_reply_to":"91ce2f80_5d33f1f5","updated":"2021-02-25 06:18:28.000000000","message":"Done","commit_id":"c438d28f9d66e1cdfdc3cbda96b7c2ba79e53e1c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6a817891a0ec9d05006a39c5b7ad477ea937d09f","unresolved":true,"context_lines":[{"line_number":47,"context_line":"    #: A regex representing which routes this rate limit applies to."},{"line_number":48,"context_line":"    regex \u003d resource.Body(\"regex\")"},{"line_number":49,"context_line":"    #: A list of the specific limits that apply to the ``regex`` and ``uri``."},{"line_number":50,"context_line":"    limit \u003d resource.Body(\"limit\", type\u003dlist)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"class Limit(resource.Resource):"}],"source_content_type":"text/x-python","patch_set":4,"id":"83e5e7f4_808ff69d","line":50,"updated":"2021-02-24 09:57:18.000000000","message":"This needs to be specified also. I think it will look something like:\n\n  {\n      \"verb\": \"POST\",\n      \"value\": 10,\n      \"remaining\": 10,\n      \"unit\": \"SECOND\",\n      \"next-available\": \"2021-01-01T00:00:00Z\"\n  }\n\nBased on [1] and [2]\n\n(hint: I\u0027m figuring this out by searching for things that are probably fairly unique in the code base e.g. \u0027totalSnapshotsUsed\u0027 to find the implementation. The \u0027ag\u0027 (the silver searcher) tool is pretty helpful in this regard, though grep can do something similar given some additional configuration)\n\nLater: Ah, I see you figured out the format already in the next file. Just need to encode this here so\n\n[1] https://github.com/openstack/cinder/blob/3b53c0faf0e564fc31f369a40ab9d3cc3d0219b7/cinder/api/views/limits.py#L82-L91\n[2] https://github.com/openstack/cinder/blob/3b53c0faf0e564fc31f369a40ab9d3cc3d0219b7/cinder/api/v2/limits.py#L71-L169","commit_id":"c438d28f9d66e1cdfdc3cbda96b7c2ba79e53e1c"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"ce79a5adc0bd09f5a12298e035b7106ab6fe45f1","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    #: A regex representing which routes this rate limit applies to."},{"line_number":48,"context_line":"    regex \u003d resource.Body(\"regex\")"},{"line_number":49,"context_line":"    #: A list of the specific limits that apply to the ``regex`` and ``uri``."},{"line_number":50,"context_line":"    limit \u003d resource.Body(\"limit\", type\u003dlist)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"class Limit(resource.Resource):"}],"source_content_type":"text/x-python","patch_set":4,"id":"19e49d62_b9353977","line":50,"in_reply_to":"83e5e7f4_808ff69d","updated":"2021-02-25 06:18:28.000000000","message":"Thanks, I didn\u0027t know if I should implement another object or not to satisfy these properties, but I believe it is making sense now. I made an object called \"RateLimit\" to implement those attributes and I changed my test file accordingly.","commit_id":"c438d28f9d66e1cdfdc3cbda96b7c2ba79e53e1c"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"23e3755c091471136e0ca9143ac121afe9a6282e","unresolved":true,"context_lines":[{"line_number":16,"context_line":"class AbsoluteLimit(resource.Resource):"},{"line_number":17,"context_line":"    #: Properties"},{"line_number":18,"context_line":"    #: The total number of snapshots used."},{"line_number":19,"context_line":"    total_snapshots_used \u003d resource.Body(\"totalSnapshotsUsed\", type\u003dint)"},{"line_number":20,"context_line":"    #: The maximum number of backups."},{"line_number":21,"context_line":"    max_total_backups \u003d resource.Body(\"maxTotalBackups\", type\u003dint)"},{"line_number":22,"context_line":"    #: The maximum total amount of volumes, in gibibytes (GiB)."}],"source_content_type":"text/x-python","patch_set":5,"id":"d85fc7eb_92be7565","line":19,"updated":"2021-02-25 13:47:04.000000000","message":"Can you please sort the properties? In future maintenance steps it is pretty messy to check unsorted props.","commit_id":"ed706f5c4adbe2bb3848914b90986f1251aecbb3"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"4ebed94f8330e55e87233c7527b1beb0f802411b","unresolved":false,"context_lines":[{"line_number":16,"context_line":"class AbsoluteLimit(resource.Resource):"},{"line_number":17,"context_line":"    #: Properties"},{"line_number":18,"context_line":"    #: The total number of snapshots used."},{"line_number":19,"context_line":"    total_snapshots_used \u003d resource.Body(\"totalSnapshotsUsed\", type\u003dint)"},{"line_number":20,"context_line":"    #: The maximum number of backups."},{"line_number":21,"context_line":"    max_total_backups \u003d resource.Body(\"maxTotalBackups\", type\u003dint)"},{"line_number":22,"context_line":"    #: The maximum total amount of volumes, in gibibytes (GiB)."}],"source_content_type":"text/x-python","patch_set":5,"id":"d317dea5_eaeed03b","line":19,"in_reply_to":"d85fc7eb_92be7565","updated":"2021-02-25 15:00:20.000000000","message":"Thanks! I assume that you mean by alphabetical order?","commit_id":"ed706f5c4adbe2bb3848914b90986f1251aecbb3"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"23e3755c091471136e0ca9143ac121afe9a6282e","unresolved":true,"context_lines":[{"line_number":43,"context_line":"class RateLimit(resource.Resource):"},{"line_number":44,"context_line":"    #: Properties"},{"line_number":45,"context_line":"    #: An HTTP verb (POST, PUT, etc.)."},{"line_number":46,"context_line":"    verb \u003d resource.Body(\"verb\")"},{"line_number":47,"context_line":"    #: Integer number of requests which can be made."},{"line_number":48,"context_line":"    value \u003d resource.Body(\"value\")"},{"line_number":49,"context_line":"    #: Integer for rate limits remaining."}],"source_content_type":"text/x-python","patch_set":5,"id":"ad6063d3_14a4cf54","line":46,"updated":"2021-02-25 13:47:04.000000000","message":"also sorting here, please.","commit_id":"ed706f5c4adbe2bb3848914b90986f1251aecbb3"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"4ebed94f8330e55e87233c7527b1beb0f802411b","unresolved":false,"context_lines":[{"line_number":43,"context_line":"class RateLimit(resource.Resource):"},{"line_number":44,"context_line":"    #: Properties"},{"line_number":45,"context_line":"    #: An HTTP verb (POST, PUT, etc.)."},{"line_number":46,"context_line":"    verb \u003d resource.Body(\"verb\")"},{"line_number":47,"context_line":"    #: Integer number of requests which can be made."},{"line_number":48,"context_line":"    value \u003d resource.Body(\"value\")"},{"line_number":49,"context_line":"    #: Integer for rate limits remaining."}],"source_content_type":"text/x-python","patch_set":5,"id":"1f3d7a5b_f5072e3e","line":46,"in_reply_to":"ad6063d3_14a4cf54","updated":"2021-02-25 15:00:20.000000000","message":"Done","commit_id":"ed706f5c4adbe2bb3848914b90986f1251aecbb3"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"23e3755c091471136e0ca9143ac121afe9a6282e","unresolved":true,"context_lines":[{"line_number":73,"context_line":"    allow_fetch \u003d True"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    #: Properties"},{"line_number":76,"context_line":"    #: Rate-limit volume copy bandwidth, used to mitigate"},{"line_number":77,"context_line":"    #: slow down of data access from the instances."},{"line_number":78,"context_line":"    rate \u003d resource.Body(\"rate\", type\u003dlist, list_type\u003dRateLimits)"},{"line_number":79,"context_line":"    #: An absolute limits object."}],"source_content_type":"text/x-python","patch_set":5,"id":"cab98d88_a17c410c","line":76,"updated":"2021-02-25 13:47:04.000000000","message":"and finally here sorting would be also welcome","commit_id":"ed706f5c4adbe2bb3848914b90986f1251aecbb3"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"4ebed94f8330e55e87233c7527b1beb0f802411b","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    allow_fetch \u003d True"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    #: Properties"},{"line_number":76,"context_line":"    #: Rate-limit volume copy bandwidth, used to mitigate"},{"line_number":77,"context_line":"    #: slow down of data access from the instances."},{"line_number":78,"context_line":"    rate \u003d resource.Body(\"rate\", type\u003dlist, list_type\u003dRateLimits)"},{"line_number":79,"context_line":"    #: An absolute limits object."}],"source_content_type":"text/x-python","patch_set":5,"id":"4ec6ab86_97ded92d","line":76,"in_reply_to":"cab98d88_a17c410c","updated":"2021-02-25 15:00:20.000000000","message":"Done","commit_id":"ed706f5c4adbe2bb3848914b90986f1251aecbb3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"35dd934638e2d37cc9c8a3a446be079e5cfe2527","unresolved":true,"context_lines":[{"line_number":45,"context_line":"    #: Rate limits next availabe time."},{"line_number":46,"context_line":"    next_available \u003d resource.Body(\"next-available\")"},{"line_number":47,"context_line":"    #: Integer for rate limits remaining."},{"line_number":48,"context_line":"    remaining \u003d resource.Body(\"remaining\")"},{"line_number":49,"context_line":"    #: Unit of measurement for the value parameter."},{"line_number":50,"context_line":"    unit \u003d resource.Body(\"unit\")"},{"line_number":51,"context_line":"    #: Integer number of requests which can be made."}],"source_content_type":"text/x-python","patch_set":7,"id":"ee78dab5_0ada8aff","line":48,"range":{"start_line":48,"start_character":41,"end_line":48,"end_character":42},"updated":"2021-03-01 16:01:26.000000000","message":"type\u003dint ?","commit_id":"91f17e9cf0282a559ca6fa14faad1f02a283ae71"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"db175ff132cfe3edb0f228f80dfd4a7b96398251","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    #: Rate limits next availabe time."},{"line_number":46,"context_line":"    next_available \u003d resource.Body(\"next-available\")"},{"line_number":47,"context_line":"    #: Integer for rate limits remaining."},{"line_number":48,"context_line":"    remaining \u003d resource.Body(\"remaining\")"},{"line_number":49,"context_line":"    #: Unit of measurement for the value parameter."},{"line_number":50,"context_line":"    unit \u003d resource.Body(\"unit\")"},{"line_number":51,"context_line":"    #: Integer number of requests which can be made."}],"source_content_type":"text/x-python","patch_set":7,"id":"9d14e56c_424d1eb7","line":48,"range":{"start_line":48,"start_character":41,"end_line":48,"end_character":42},"in_reply_to":"ee78dab5_0ada8aff","updated":"2021-03-02 09:05:05.000000000","message":"Oops, don\u0027t know how I missed that...","commit_id":"91f17e9cf0282a559ca6fa14faad1f02a283ae71"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"35dd934638e2d37cc9c8a3a446be079e5cfe2527","unresolved":true,"context_lines":[{"line_number":49,"context_line":"    #: Unit of measurement for the value parameter."},{"line_number":50,"context_line":"    unit \u003d resource.Body(\"unit\")"},{"line_number":51,"context_line":"    #: Integer number of requests which can be made."},{"line_number":52,"context_line":"    value \u003d resource.Body(\"value\")"},{"line_number":53,"context_line":"    #: An HTTP verb (POST, PUT, etc.)."},{"line_number":54,"context_line":"    verb \u003d resource.Body(\"verb\")"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"21a92f6b_b94b5674","line":52,"range":{"start_line":52,"start_character":33,"end_line":52,"end_character":34},"updated":"2021-03-01 16:01:26.000000000","message":"type\u003dint ?","commit_id":"91f17e9cf0282a559ca6fa14faad1f02a283ae71"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"db175ff132cfe3edb0f228f80dfd4a7b96398251","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    #: Unit of measurement for the value parameter."},{"line_number":50,"context_line":"    unit \u003d resource.Body(\"unit\")"},{"line_number":51,"context_line":"    #: Integer number of requests which can be made."},{"line_number":52,"context_line":"    value \u003d resource.Body(\"value\")"},{"line_number":53,"context_line":"    #: An HTTP verb (POST, PUT, etc.)."},{"line_number":54,"context_line":"    verb \u003d resource.Body(\"verb\")"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1b1206f6_1d048f6e","line":52,"range":{"start_line":52,"start_character":33,"end_line":52,"end_character":34},"in_reply_to":"21a92f6b_b94b5674","updated":"2021-03-02 09:05:05.000000000","message":"Done","commit_id":"91f17e9cf0282a559ca6fa14faad1f02a283ae71"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"35dd934638e2d37cc9c8a3a446be079e5cfe2527","unresolved":true,"context_lines":[{"line_number":70,"context_line":"    base_path \u003d \"/limits\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    # capabilities"},{"line_number":73,"context_line":"    allow_fetch \u003d True"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    #: Properties"},{"line_number":76,"context_line":"    #: An absolute limits object."}],"source_content_type":"text/x-python","patch_set":7,"id":"14954cc7_6fc109b1","line":73,"updated":"2021-03-01 16:01:26.000000000","message":"I missed this previously. In a RESTful API, a fetch/get/show operation fetches an individual resource or record and typically looks like this:\n\n  GET /resources/{id}\n\nBy comparison, a list operation typically looks like this:\n\n  GET /resources\n\nBy configuring \u0027allow_fetch \u003d True\u0027 and not setting anything else, you\u0027ve indicated that you\u0027re only able to support the former and not the latter (nor updating, creating or deleting, for that matter). Does this seem correct to you? Hint: look at the URLs you\u0027d be using with this. The unit tests in Cinder have some hints...\n\nAlso note that \u0027resource_key\u0027 (singular) is used to remove the envelope or wrapping around responses for operations that involved working with an individual resource: creating, deleting, updating or fetching. \u0027resources_key\u0027 (plural) is used to do the same for operations that involve multiple resource, so listing. Given you\u0027ve only specified \u0027allow_fetch\u0027, you don\u0027t need \u0027resources_key\u0027 since you\u0027ll never be listing anything. However, if you were to change this so that only \u0027allow_list \u003d True\u0027, then you shouldn\u0027t specify \u0027resource_key\u0027.","commit_id":"91f17e9cf0282a559ca6fa14faad1f02a283ae71"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"db175ff132cfe3edb0f228f80dfd4a7b96398251","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    base_path \u003d \"/limits\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    # capabilities"},{"line_number":73,"context_line":"    allow_fetch \u003d True"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    #: Properties"},{"line_number":76,"context_line":"    #: An absolute limits object."}],"source_content_type":"text/x-python","patch_set":7,"id":"7622aefa_36314030","line":73,"in_reply_to":"14954cc7_6fc109b1","updated":"2021-03-02 09:05:05.000000000","message":"It seems to me still after looking at multiple sources that the only capability that should be allowed is fetch. After looking through examples on the v3 block storage API,[1], I agree with your comment about how the operations typically look. However, it still looks as though the Limit class should only support the fetch operation.\nFirst, if we look here https://docs.openstack.org/api-ref/block-storage/v3/index.html#limits-limits, although it looks like a list operation, it describes it as a fetch operation.\nSecondly, if we look at [2], the compute limit only supports the fetch operation.\n\nAs for your comment about \"resource_key\" and \"resources_key\", I agree that we don\u0027t need \"resources_key.\"\n\nAlso, upon a closer look, I believe that the \"resource_key\" should be equal to \"limits\" and not \"limit\". It wouldn\u0027t make sense after looking at both [1] and [2].\n\n[1] https://docs.openstack.org/api-ref/block-storage/v3/index.html\n[2] https://opendev.org/openstack/openstacksdk/src/branch/master/openstack/compute/v2/_proxy.py","commit_id":"91f17e9cf0282a559ca6fa14faad1f02a283ae71"}],"openstack/tests/unit/block_storage/v3/test_limit.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"311291520d5fdb13d0f6160d168d4d96fabbb983","unresolved":true,"context_lines":[{"line_number":48,"context_line":"    def test_make_absolute(self):"},{"line_number":49,"context_line":"        limit_resource \u003d limit.Absolute(**ABSOLUTE)"},{"line_number":50,"context_line":"        self.assertEqual(ABSOLUTE[\u0027totalSnapshotsUsed\u0027],"},{"line_number":51,"context_line":"                         limit_resource.total_snapshots_used)"},{"line_number":52,"context_line":"        self.assertEqual(ABSOLUTE[\u0027maxTotalBackups\u0027],"},{"line_number":53,"context_line":"                         limit_resource.max_total_backups)"},{"line_number":54,"context_line":"        self.assertEqual(ABSOLUTE[\u0027maxTotalVolumeGigabytes\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"262ccf27_e086aadf","line":51,"updated":"2021-02-23 19:37:27.000000000","message":"style nit: Could we bring these down and avoid the hanging indents?\n\n  self.assertEqual(\n      ABSOLUTE[\u0027totalSnapshotsUsed\u0027], limit_resource.total_snapshots_used)\n\nshould fit, else:\n\n  self.assertEqual(\n      ABSOLUTE[\u0027totalSnapshotsUsed\u0027],\n      limit_resource.total_snapshots_used)","commit_id":"44e6837b8469b806f2a856e9a5faed96aa53587e"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"ce79a5adc0bd09f5a12298e035b7106ab6fe45f1","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def test_make_absolute(self):"},{"line_number":49,"context_line":"        limit_resource \u003d limit.Absolute(**ABSOLUTE)"},{"line_number":50,"context_line":"        self.assertEqual(ABSOLUTE[\u0027totalSnapshotsUsed\u0027],"},{"line_number":51,"context_line":"                         limit_resource.total_snapshots_used)"},{"line_number":52,"context_line":"        self.assertEqual(ABSOLUTE[\u0027maxTotalBackups\u0027],"},{"line_number":53,"context_line":"                         limit_resource.max_total_backups)"},{"line_number":54,"context_line":"        self.assertEqual(ABSOLUTE[\u0027maxTotalVolumeGigabytes\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"1614d30c_27a28888","line":51,"in_reply_to":"262ccf27_e086aadf","updated":"2021-02-25 06:18:28.000000000","message":"Done","commit_id":"44e6837b8469b806f2a856e9a5faed96aa53587e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6a817891a0ec9d05006a39c5b7ad477ea937d09f","unresolved":true,"context_lines":[{"line_number":146,"context_line":"            expected[\u0027maxTotalVolumes\u0027], actual.max_total_volumes)"},{"line_number":147,"context_line":"        self.assertEqual("},{"line_number":148,"context_line":"            expected[\u0027totalVolumesUsed\u0027],"},{"line_number":149,"context_line":"            actual.total_volumes_used)"},{"line_number":150,"context_line":"        self.assertEqual("},{"line_number":151,"context_line":"            expected[\u0027totalBackupsUsed\u0027],"},{"line_number":152,"context_line":"            actual.total_backups_used)"}],"source_content_type":"text/x-python","patch_set":4,"id":"4694e2f8_a707724a","line":149,"updated":"2021-02-24 09:57:18.000000000","message":"style nit: a few of these should fit on one line\n\n(tip: Vim does reasonably auto-wrapping if properly configured. Go to the beginning of a line, press v to enter visual mode, press \u003cEnd\u003e, then gq to wrap the highlighted line(s))","commit_id":"c438d28f9d66e1cdfdc3cbda96b7c2ba79e53e1c"},{"author":{"_account_id":33032,"name":"Dylan Zapzalka","email":"dylanjameszapzalka@hotmail.com","username":"dylanzapzalka"},"change_message_id":"ce79a5adc0bd09f5a12298e035b7106ab6fe45f1","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            expected[\u0027maxTotalVolumes\u0027], actual.max_total_volumes)"},{"line_number":147,"context_line":"        self.assertEqual("},{"line_number":148,"context_line":"            expected[\u0027totalVolumesUsed\u0027],"},{"line_number":149,"context_line":"            actual.total_volumes_used)"},{"line_number":150,"context_line":"        self.assertEqual("},{"line_number":151,"context_line":"            expected[\u0027totalBackupsUsed\u0027],"},{"line_number":152,"context_line":"            actual.total_backups_used)"}],"source_content_type":"text/x-python","patch_set":4,"id":"56735a88_04b964d8","line":149,"in_reply_to":"4694e2f8_a707724a","updated":"2021-02-25 06:18:28.000000000","message":"Done","commit_id":"c438d28f9d66e1cdfdc3cbda96b7c2ba79e53e1c"}]}
