)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":38254,"name":"Mincheol Kang","display_name":"Mincheol Kang","email":"platanus.kr@gmail.com","username":"mincheolkang"},"change_message_id":"cbe16427a541f6a7cd0561c2221415d59b5e7c32","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"69be79a4_3cfd68b3","updated":"2025-11-16 10:15:48.000000000","message":"Hello. I\u0027m sharing feedback regarding ProjectQuotas. This was a collaborative effort with `jbeen`, who submitted the PR below. It appears to have been merged recently.\n\nhttps://review.opendev.org/c/openstack/openstacksdk/+/959939\n\nIn that case, I plan to wrap up ProjectQuotas with the above PR and continue working on Quotas. Is it okay for me to proceed this way?","commit_id":"fbd4be1a906217228375defabf1022f9b8340289"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1a9e706a876656403ec6d22e19bf3fcf71bf5564","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"5e9983a4_6b519580","updated":"2025-11-12 12:33:12.000000000","message":"There\u0027s a lot of work to do here yet. Project quotas in particular look incomplete. I would encourage you to look at other resources and their proxy implementations for inspiration.","commit_id":"fbd4be1a906217228375defabf1022f9b8340289"}],"doc/source/user/resources/key_manager/v1/quota.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1a9e706a876656403ec6d22e19bf3fcf71bf5564","unresolved":true,"context_lines":[{"line_number":1,"context_line":"openstack.key_manager.v1.quota"},{"line_number":2,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":".. automodule:: openstack.key_manager.v1.quota"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"The Quota Class"},{"line_number":7,"context_line":"----------------------"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The ``Quota`` class inherits from :class:`~openstack.resource.Resource`."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"caea8450_81488be4","line":7,"range":{"start_line":1,"start_character":0,"end_line":7,"end_character":22},"updated":"2025-11-12 12:33:12.000000000","message":"underlines should match the length of the title\n\n```suggestion\nopenstack.key_manager.v1.quota\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\n.. automodule:: openstack.key_manager.v1.quota\n\nThe Quota Class\n---------------\n```","commit_id":"fbd4be1a906217228375defabf1022f9b8340289"},{"author":{"_account_id":38254,"name":"Mincheol Kang","display_name":"Mincheol Kang","email":"platanus.kr@gmail.com","username":"mincheolkang"},"change_message_id":"cbe16427a541f6a7cd0561c2221415d59b5e7c32","unresolved":false,"context_lines":[{"line_number":1,"context_line":"openstack.key_manager.v1.quota"},{"line_number":2,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":".. automodule:: openstack.key_manager.v1.quota"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"The Quota Class"},{"line_number":7,"context_line":"----------------------"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The ``Quota`` class inherits from :class:`~openstack.resource.Resource`."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"e15b09f2_db1b07f0","line":7,"range":{"start_line":1,"start_character":0,"end_line":7,"end_character":22},"in_reply_to":"caea8450_81488be4","updated":"2025-11-16 10:15:48.000000000","message":"Done","commit_id":"fbd4be1a906217228375defabf1022f9b8340289"}],"openstack/key_manager/v1/_proxy.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1a9e706a876656403ec6d22e19bf3fcf71bf5564","unresolved":true,"context_lines":[{"line_number":315,"context_line":"            base_path\u003d\u0027/secret-stores/preferred\u0027,"},{"line_number":316,"context_line":"        )"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d Utilities \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    def get_project_quota(self, project_quota\u003dNone):"},{"line_number":321,"context_line":"        \"\"\"Get project quota(s)"}],"source_content_type":"text/x-python","patch_set":3,"id":"66e094e8_623ef0dc","line":318,"updated":"2025-11-12 12:33:12.000000000","message":"You need a new section comment\n\n```suggestion\n    # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d Quotas \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n```","commit_id":"fbd4be1a906217228375defabf1022f9b8340289"},{"author":{"_account_id":38254,"name":"Mincheol Kang","display_name":"Mincheol Kang","email":"platanus.kr@gmail.com","username":"mincheolkang"},"change_message_id":"cbe16427a541f6a7cd0561c2221415d59b5e7c32","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            base_path\u003d\u0027/secret-stores/preferred\u0027,"},{"line_number":316,"context_line":"        )"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d Utilities \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    def get_project_quota(self, project_quota\u003dNone):"},{"line_number":321,"context_line":"        \"\"\"Get project quota(s)"}],"source_content_type":"text/x-python","patch_set":3,"id":"e6944de3_97811d73","line":318,"in_reply_to":"66e094e8_623ef0dc","updated":"2025-11-16 10:15:48.000000000","message":"Done","commit_id":"fbd4be1a906217228375defabf1022f9b8340289"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1a9e706a876656403ec6d22e19bf3fcf71bf5564","unresolved":true,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        :param project_quota: Optional. The value can be the ID of a project"},{"line_number":324,"context_line":"            quota or a :class:`~openstack.key_manager.v1.project_quota.ProjectQuota`"},{"line_number":325,"context_line":"            instance. If None, get list of all project quotas."},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"        :returns: One :class:`~openstack.key_manager.v1.project_quota.ProjectQuota`"},{"line_number":328,"context_line":"        :raises: :class:`~openstack.exceptions.NotFoundException`"}],"source_content_type":"text/x-python","patch_set":3,"id":"15475358_0f362275","line":325,"updated":"2025-11-12 12:33:12.000000000","message":"That\u0027s not how these are supposed to work. Instead, you should provide a second method, `project_quotas`, that retrieves all project quotas e.g.\n\n```\ndef project_quotas(self):\n    ...\n    \ndef get_project_quota(self, project_quota):\n    ...\n```\n\nThe `project_quotas` method should use `self._list`, not `self._get`.","commit_id":"fbd4be1a906217228375defabf1022f9b8340289"},{"author":{"_account_id":38254,"name":"Mincheol Kang","display_name":"Mincheol Kang","email":"platanus.kr@gmail.com","username":"mincheolkang"},"change_message_id":"cbe16427a541f6a7cd0561c2221415d59b5e7c32","unresolved":false,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        :param project_quota: Optional. The value can be the ID of a project"},{"line_number":324,"context_line":"            quota or a :class:`~openstack.key_manager.v1.project_quota.ProjectQuota`"},{"line_number":325,"context_line":"            instance. If None, get list of all project quotas."},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"        :returns: One :class:`~openstack.key_manager.v1.project_quota.ProjectQuota`"},{"line_number":328,"context_line":"        :raises: :class:`~openstack.exceptions.NotFoundException`"}],"source_content_type":"text/x-python","patch_set":3,"id":"d7622d99_da4c9a0b","line":325,"in_reply_to":"15475358_0f362275","updated":"2025-11-16 10:15:48.000000000","message":"Done","commit_id":"fbd4be1a906217228375defabf1022f9b8340289"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1a9e706a876656403ec6d22e19bf3fcf71bf5564","unresolved":true,"context_lines":[{"line_number":342,"context_line":"        \"\"\""},{"line_number":343,"context_line":"        return self._get(_quota.Quota, requires_id\u003dFalse)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def wait_for_status("},{"line_number":346,"context_line":"        self,"},{"line_number":347,"context_line":"        res: resource.ResourceT,"},{"line_number":348,"context_line":"        status: str,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1bacebc4_5568a734","line":345,"updated":"2025-11-12 12:33:12.000000000","message":"```suggestion\n\n    # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d Utilities \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\n    def wait_for_status(\n```","commit_id":"fbd4be1a906217228375defabf1022f9b8340289"},{"author":{"_account_id":38254,"name":"Mincheol Kang","display_name":"Mincheol Kang","email":"platanus.kr@gmail.com","username":"mincheolkang"},"change_message_id":"cbe16427a541f6a7cd0561c2221415d59b5e7c32","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        \"\"\""},{"line_number":343,"context_line":"        return self._get(_quota.Quota, requires_id\u003dFalse)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def wait_for_status("},{"line_number":346,"context_line":"        self,"},{"line_number":347,"context_line":"        res: resource.ResourceT,"},{"line_number":348,"context_line":"        status: str,"}],"source_content_type":"text/x-python","patch_set":3,"id":"c0a240c7_196b16e4","line":345,"in_reply_to":"1bacebc4_5568a734","updated":"2025-11-16 10:15:48.000000000","message":"Done","commit_id":"fbd4be1a906217228375defabf1022f9b8340289"},{"author":{"_account_id":35057,"name":"JaeSeong-Shin","email":"rornfl916@gmail.com","username":"JaeSeong"},"change_message_id":"c5d826c2d9ed7215b46d6c5d0832538fddbd2770","unresolved":true,"context_lines":[{"line_number":338,"context_line":"        \"\"\"Get project quota(s)"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"        :param project_quota: Optional. The value can be the ID of a project"},{"line_number":341,"context_line":"            quota or a :class:`~openstack.key_manager.v1.project_quota.ProjectQuota`"},{"line_number":342,"context_line":"            instance. If None, get list of all project quotas."},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        :returns: One :class:`~openstack.key_manager.v1.project_quota.ProjectQuota`"}],"source_content_type":"text/x-python","patch_set":5,"id":"98953ebc_d8db4eaf","line":341,"range":{"start_line":341,"start_character":71,"end_line":341,"end_character":83},"updated":"2025-12-01 07:37:28.000000000","message":"Please write these items, including this line, in compliance with PEP 8 format.\nAdditional lines that need to be modified can be found in \"https://zuul.opendev.org/t/openstack/build/53bb16d96c8e40fea36436934ef50d27\".","commit_id":"60912cf6dc01017f2da285196d478c93585760c7"}],"openstack/key_manager/v1/project_quota.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1a9e706a876656403ec6d22e19bf3fcf71bf5564","unresolved":true,"context_lines":[{"line_number":18,"context_line":"    resources_key \u003d \u0027project_quotas\u0027"},{"line_number":19,"context_line":"    base_path \u003d \u0027/project-quotas\u0027"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    # capabilities"},{"line_number":22,"context_line":"    allow_create \u003d True"},{"line_number":23,"context_line":"    allow_fetch \u003d True"},{"line_number":24,"context_line":"    allow_commit \u003d True"},{"line_number":25,"context_line":"    allow_delete \u003d True"},{"line_number":26,"context_line":"    allow_list \u003d True"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    # Properties"},{"line_number":29,"context_line":"    #: Contains the configured quota value of the requested project for the secret resource."}],"source_content_type":"text/x-python","patch_set":3,"id":"c8a6f862_6b92d835","line":26,"range":{"start_line":21,"start_character":18,"end_line":26,"end_character":21},"updated":"2025-11-12 12:33:12.000000000","message":"Are all these true? If so, why do we not have `create_project_quota`, `delete_project_quota` and `update_project_quota` proxy methods?","commit_id":"fbd4be1a906217228375defabf1022f9b8340289"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1a9e706a876656403ec6d22e19bf3fcf71bf5564","unresolved":true,"context_lines":[{"line_number":26,"context_line":"    allow_list \u003d True"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    # Properties"},{"line_number":29,"context_line":"    #: Contains the configured quota value of the requested project for the secret resource."},{"line_number":30,"context_line":"    secrets \u003d resource.Body(\"secrets\")"},{"line_number":31,"context_line":"    #: Contains the configured quota value of the requested project for the orders resource."},{"line_number":32,"context_line":"    orders \u003d resource.Body(\"orders\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"48d06791_8782cc35","line":29,"updated":"2025-11-12 12:33:12.000000000","message":"Can you wrap these comments at \u003c\u003d 79 characters?","commit_id":"fbd4be1a906217228375defabf1022f9b8340289"},{"author":{"_account_id":38254,"name":"Mincheol Kang","display_name":"Mincheol Kang","email":"platanus.kr@gmail.com","username":"mincheolkang"},"change_message_id":"cbe16427a541f6a7cd0561c2221415d59b5e7c32","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    allow_list \u003d True"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    # Properties"},{"line_number":29,"context_line":"    #: Contains the configured quota value of the requested project for the secret resource."},{"line_number":30,"context_line":"    secrets \u003d resource.Body(\"secrets\")"},{"line_number":31,"context_line":"    #: Contains the configured quota value of the requested project for the orders resource."},{"line_number":32,"context_line":"    orders \u003d resource.Body(\"orders\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"22bd40e4_5949d5d7","line":29,"in_reply_to":"48d06791_8782cc35","updated":"2025-11-16 10:15:48.000000000","message":"Done","commit_id":"fbd4be1a906217228375defabf1022f9b8340289"}],"openstack/tests/functional/key_manager/v1/test_quota.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1a9e706a876656403ec6d22e19bf3fcf71bf5564","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"# a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":3,"id":"07f85b78_3722bbfe","line":1,"updated":"2025-11-12 12:33:12.000000000","message":"We need tests for project quotas also","commit_id":"fbd4be1a906217228375defabf1022f9b8340289"}],"openstack/tests/unit/key_manager/v1/test_proxy.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1a9e706a876656403ec6d22e19bf3fcf71bf5564","unresolved":true,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"class TestKeyManagerProjectQuota(TestKeyManagerProxy):"},{"line_number":106,"context_line":"    def test_project_quota_get_all(self):"},{"line_number":107,"context_line":"        self.verify_get("},{"line_number":108,"context_line":"            self.proxy.get_project_quota,"},{"line_number":109,"context_line":"            project_quota.ProjectQuota,"}],"source_content_type":"text/x-python","patch_set":3,"id":"825ec6d3_5c427b91","line":106,"updated":"2025-11-12 12:33:12.000000000","message":"This test needs to be rewritten. It should be called `test_project_quotas` and should use `verify_list`, like the other list operations in this file.","commit_id":"fbd4be1a906217228375defabf1022f9b8340289"},{"author":{"_account_id":38254,"name":"Mincheol Kang","display_name":"Mincheol Kang","email":"platanus.kr@gmail.com","username":"mincheolkang"},"change_message_id":"cbe16427a541f6a7cd0561c2221415d59b5e7c32","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"class TestKeyManagerProjectQuota(TestKeyManagerProxy):"},{"line_number":106,"context_line":"    def test_project_quota_get_all(self):"},{"line_number":107,"context_line":"        self.verify_get("},{"line_number":108,"context_line":"            self.proxy.get_project_quota,"},{"line_number":109,"context_line":"            project_quota.ProjectQuota,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1740ab62_dc766d14","line":106,"in_reply_to":"825ec6d3_5c427b91","updated":"2025-11-16 10:15:48.000000000","message":"Done","commit_id":"fbd4be1a906217228375defabf1022f9b8340289"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1a9e706a876656403ec6d22e19bf3fcf71bf5564","unresolved":true,"context_lines":[{"line_number":112,"context_line":"            expected_kwargs\u003d{\u0027requires_id\u0027: False},"},{"line_number":113,"context_line":"        )"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def test_project_quota_get_by_id(self):"},{"line_number":116,"context_line":"        self.verify_get("},{"line_number":117,"context_line":"            self.proxy.get_project_quota, project_quota.ProjectQuota"},{"line_number":118,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":3,"id":"7e26532e_7f235a1b","line":115,"updated":"2025-11-12 12:33:12.000000000","message":"```suggestion\n    def test_project_quota_get(self):\n```","commit_id":"fbd4be1a906217228375defabf1022f9b8340289"},{"author":{"_account_id":38254,"name":"Mincheol Kang","display_name":"Mincheol Kang","email":"platanus.kr@gmail.com","username":"mincheolkang"},"change_message_id":"cbe16427a541f6a7cd0561c2221415d59b5e7c32","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            expected_kwargs\u003d{\u0027requires_id\u0027: False},"},{"line_number":113,"context_line":"        )"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def test_project_quota_get_by_id(self):"},{"line_number":116,"context_line":"        self.verify_get("},{"line_number":117,"context_line":"            self.proxy.get_project_quota, project_quota.ProjectQuota"},{"line_number":118,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":3,"id":"cd045605_c99d19d4","line":115,"in_reply_to":"7e26532e_7f235a1b","updated":"2025-11-16 10:15:48.000000000","message":"Done","commit_id":"fbd4be1a906217228375defabf1022f9b8340289"}],"openstack/tests/unit/key_manager/v1/test_quota.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1a9e706a876656403ec6d22e19bf3fcf71bf5564","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"# a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":3,"id":"d780692a_5e9301df","line":1,"updated":"2025-11-12 12:33:12.000000000","message":"You need unit tests for project quotas also.","commit_id":"fbd4be1a906217228375defabf1022f9b8340289"}]}
