)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":37745,"name":"Jan Ueberacker","display_name":"ueber","email":"jan.ueberacker@inovex.de","username":"ueber"},"change_message_id":"fa368c0765f28420fa36e7777000bc82b6567a12","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"6aa566b0_81e780df","updated":"2025-09-29 09:49:22.000000000","message":"recheck logs not present","commit_id":"2cc9784281f56f2f074fbdcdecf2b6364cca23df"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e01f9aca8ac1fd759d76855f6caf2c3aee2fc56a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"359d0f50_2260af9b","updated":"2025-10-14 16:55:57.000000000","message":"Thanks for the change. Can we please implement this using the SDK client (`identity_sdk_client`) instead of keystoneclient (`identity_client`)? We\u0027re are trying to migrate existing commands to SDK so we don\u0027t want to add any new ones that would need migration later.","commit_id":"3f58babe6a4770d63f3a0dbfbd35278272b2691d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"403dfeb760016f2f34441ad5dbd394cf6e8e9ea0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4dbfaaa4_cb9179da","updated":"2025-10-14 16:56:13.000000000","message":"and apologies for not getting to this sooner: I missed it somehow","commit_id":"3f58babe6a4770d63f3a0dbfbd35278272b2691d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"44fc5d6942ca09e0df6d81b0c77da346e3566de5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"91dcb705_eef28565","updated":"2025-10-22 12:24:23.000000000","message":"Almost there. Two comments inline","commit_id":"208c5eaa4e7df952414a94e505af79a7e9eb341a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"eaeb92cf76c019b8d4000364690d5afe98186e70","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3e8bd07a_2545bb39","updated":"2025-10-22 14:37:12.000000000","message":"Assuming CI is happy","commit_id":"305e037df22c5ea3166df274cb9513b16680b711"}],"openstackclient/tests/unit/volume/v3/fakes.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"44fc5d6942ca09e0df6d81b0c77da346e3566de5","unresolved":true,"context_lines":[{"line_number":99,"context_line":"        self.volume_sdk_client \u003d self.app.client_manager.sdk_connection.volume"},{"line_number":100,"context_line":"        self.set_volume_api_version()  # default to the lowest"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        self.app.client_manager.sdk_connection.identity \u003d mock.Mock("},{"line_number":103,"context_line":"            _proxy.Proxy"},{"line_number":104,"context_line":"        )"},{"line_number":105,"context_line":"        self.identity_sdk_client \u003d ("},{"line_number":106,"context_line":"            self.app.client_manager.sdk_connection.identity"},{"line_number":107,"context_line":"        )"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def set_volume_api_version(self, version: str \u003d \u00273.0\u0027):"},{"line_number":110,"context_line":"        \"\"\"Set a fake block storage API version."}],"source_content_type":"text/x-python","patch_set":3,"id":"f0bf3936_cb6dd13d","line":107,"range":{"start_line":102,"start_character":0,"end_line":107,"end_character":9},"updated":"2025-10-22 12:24:23.000000000","message":"This shouldn\u0027t be necessary: `TestVolume` below already inherits from `identity_fakes.FakeClientMixin` [which defines this](https://github.com/openstack/python-openstackclient/blob/b0763f9f9a3c1e4134738147f922b06a041811eb/openstackclient/tests/unit/identity/v3/fakes.py#L706-L713).","commit_id":"208c5eaa4e7df952414a94e505af79a7e9eb341a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"eaeb92cf76c019b8d4000364690d5afe98186e70","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        self.volume_sdk_client \u003d self.app.client_manager.sdk_connection.volume"},{"line_number":100,"context_line":"        self.set_volume_api_version()  # default to the lowest"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        self.app.client_manager.sdk_connection.identity \u003d mock.Mock("},{"line_number":103,"context_line":"            _proxy.Proxy"},{"line_number":104,"context_line":"        )"},{"line_number":105,"context_line":"        self.identity_sdk_client \u003d ("},{"line_number":106,"context_line":"            self.app.client_manager.sdk_connection.identity"},{"line_number":107,"context_line":"        )"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def set_volume_api_version(self, version: str \u003d \u00273.0\u0027):"},{"line_number":110,"context_line":"        \"\"\"Set a fake block storage API version."}],"source_content_type":"text/x-python","patch_set":3,"id":"bd88d579_061fc313","line":107,"range":{"start_line":102,"start_character":0,"end_line":107,"end_character":9},"in_reply_to":"f0bf3936_cb6dd13d","updated":"2025-10-22 14:37:12.000000000","message":"Done","commit_id":"208c5eaa4e7df952414a94e505af79a7e9eb341a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"44fc5d6942ca09e0df6d81b0c77da346e3566de5","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"class TestVolume("},{"line_number":130,"context_line":"    identity_fakes.FakeClientMixin,"},{"line_number":131,"context_line":"    FakeClientMixin,"},{"line_number":132,"context_line":"    utils.TestCommand,"},{"line_number":133,"context_line":"):"}],"source_content_type":"text/x-python","patch_set":3,"id":"206d6e42_a8a075dc","line":130,"updated":"2025-10-22 12:24:23.000000000","message":"here","commit_id":"208c5eaa4e7df952414a94e505af79a7e9eb341a"}],"openstackclient/tests/unit/volume/v3/test_volume_backup.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"44fc5d6942ca09e0df6d81b0c77da346e3566de5","unresolved":true,"context_lines":[{"line_number":403,"context_line":"        self.assertCountEqual(self.data, list(data))"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"    def test_backup_list_with_options(self):"},{"line_number":406,"context_line":"        project \u003d identity_fakes_v3.FakeProject.create_one_project()"},{"line_number":407,"context_line":"        self.identity_sdk_client.find_project.return_value \u003d project"},{"line_number":408,"context_line":"        arglist \u003d ["},{"line_number":409,"context_line":"            \"--long\","}],"source_content_type":"text/x-python","patch_set":3,"id":"2942f0ae_cf2ec9c1","line":406,"updated":"2025-10-22 12:24:23.000000000","message":"This will return a keystoneclient-style object rather than a proper SDK `Project` instance. You need to either define a new `create_one_sdk_project` helper to do the latter or use `generate_fake_resource` from `openstack.test.fakes`. There are plenty of examples of both but the latter is probably easier.","commit_id":"208c5eaa4e7df952414a94e505af79a7e9eb341a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"eaeb92cf76c019b8d4000364690d5afe98186e70","unresolved":false,"context_lines":[{"line_number":403,"context_line":"        self.assertCountEqual(self.data, list(data))"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"    def test_backup_list_with_options(self):"},{"line_number":406,"context_line":"        project \u003d identity_fakes_v3.FakeProject.create_one_project()"},{"line_number":407,"context_line":"        self.identity_sdk_client.find_project.return_value \u003d project"},{"line_number":408,"context_line":"        arglist \u003d ["},{"line_number":409,"context_line":"            \"--long\","}],"source_content_type":"text/x-python","patch_set":3,"id":"4651a13a_752f68e6","line":406,"in_reply_to":"2942f0ae_cf2ec9c1","updated":"2025-10-22 14:37:12.000000000","message":"Done","commit_id":"208c5eaa4e7df952414a94e505af79a7e9eb341a"}]}
