)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9d05793ca49eb080dd250ad9ea0c11eb2b37ae16","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"5e952710_22eeb4b1","updated":"2025-09-09 21:42:02.000000000","message":"This is very thorough. Nice work. I have a couple of requests inline. The -1 is for that. I\u0027d also like to see a functional test if you\u0027re willing and able to add it.","commit_id":"62335fc0c3162375383e611e38f44b4b32cf5fe6"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"e3083e20f5feecf3d19b11de3aa324eac427ecc3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"89e37f1a_7c79483a","updated":"2026-05-19 14:45:41.000000000","message":"This patch was originally developed as part of the 2025 Korea Contribution Mentoring Program.\n\nSince there have been no updates for several months after the patch was proposed, a mentee from the 2026 program will continue working on it. (from may 2026)","commit_id":"62335fc0c3162375383e611e38f44b4b32cf5fe6"}],"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":"9d05793ca49eb080dd250ad9ea0c11eb2b37ae16","unresolved":true,"context_lines":[{"line_number":23,"context_line":"class Proxy(proxy.Proxy):"},{"line_number":24,"context_line":"    _resource_registry \u003d {"},{"line_number":25,"context_line":"        \"container\": _container.Container,"},{"line_number":26,"context_line":"        \"order\": _order.Order,"},{"line_number":27,"context_line":"        \"secret_consumer\": _secret_consumer.SecretConsumer,"},{"line_number":28,"context_line":"        \"secret\": _secret.Secret,"},{"line_number":29,"context_line":"    }"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def create_container(self, **attrs):"}],"source_content_type":"text/x-python","patch_set":3,"id":"f3d94490_e49bb2fa","line":28,"range":{"start_line":26,"start_character":30,"end_line":28,"end_character":33},"updated":"2025-09-09 21:42:02.000000000","message":"nit:\n\n```suggestion\n        \"order\": _order.Order,\n        \"secret\": _secret.Secret,\n        \"secret_consumer\": _secret_consumer.SecretConsumer,\n```","commit_id":"62335fc0c3162375383e611e38f44b4b32cf5fe6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9d05793ca49eb080dd250ad9ea0c11eb2b37ae16","unresolved":true,"context_lines":[{"line_number":275,"context_line":"    def create_secret_consumer(self, secret, **attrs):"},{"line_number":276,"context_line":"        \"\"\"Create a consumer for a secret"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        :param secret: The secret id or :class:`~openstack.key_manager.v1.secret.Secret`."},{"line_number":279,"context_line":"        :param dict attrs: Must include ``service``, ``resource_type``, ``resource_id``."},{"line_number":280,"context_line":"        :returns: The created consumer association"},{"line_number":281,"context_line":"        :rtype: :class:`~openstack.key_manager.v1.secret_consumer.SecretConsumer`"}],"source_content_type":"text/x-python","patch_set":3,"id":"a8b3fa0c_92ca0c23","line":278,"updated":"2025-09-09 21:42:02.000000000","message":"Can you wrap these docstring at \u003c\u003d 79 characters","commit_id":"62335fc0c3162375383e611e38f44b4b32cf5fe6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9d05793ca49eb080dd250ad9ea0c11eb2b37ae16","unresolved":true,"context_lines":[{"line_number":280,"context_line":"        :returns: The created consumer association"},{"line_number":281,"context_line":"        :rtype: :class:`~openstack.key_manager.v1.secret_consumer.SecretConsumer`"},{"line_number":282,"context_line":"        \"\"\""},{"line_number":283,"context_line":"        secret_ref \u003d self._get_secret_ref(secret)"},{"line_number":284,"context_line":"        consumer \u003d _secret_consumer.SecretConsumer.new("},{"line_number":285,"context_line":"            secret_ref\u003dsecret_ref, **attrs"},{"line_number":286,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":3,"id":"184f49cd_5e2d959c","line":283,"updated":"2025-09-09 21:42:02.000000000","message":"I don\u0027t believe we need to support passing secrets by URL as we don\u0027t do this anywhere else. If we drop this functionality then you should be able to use `self._get_resource` for this instead. You will find plenty of examples in e.g. `openstack/compute/v2/_proxy.py`.","commit_id":"62335fc0c3162375383e611e38f44b4b32cf5fe6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9d05793ca49eb080dd250ad9ea0c11eb2b37ae16","unresolved":true,"context_lines":[{"line_number":280,"context_line":"        :returns: The created consumer association"},{"line_number":281,"context_line":"        :rtype: :class:`~openstack.key_manager.v1.secret_consumer.SecretConsumer`"},{"line_number":282,"context_line":"        \"\"\""},{"line_number":283,"context_line":"        secret_ref \u003d self._get_secret_ref(secret)"},{"line_number":284,"context_line":"        consumer \u003d _secret_consumer.SecretConsumer.new("},{"line_number":285,"context_line":"            secret_ref\u003dsecret_ref, **attrs"},{"line_number":286,"context_line":"        )"},{"line_number":287,"context_line":"        return consumer.create(self)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def delete_secret_consumer(self, secret, **attrs):"},{"line_number":290,"context_line":"        \"\"\"Delete a consumer association from a secret"}],"source_content_type":"text/x-python","patch_set":3,"id":"b48628ae_0df8e7e6","line":287,"range":{"start_line":283,"start_character":49,"end_line":287,"end_character":36},"updated":"2025-09-09 21:42:02.000000000","message":"Why are you not using the `self._create` helper here? If there\u0027s a good reason for it, please add a comment to help others understand","commit_id":"62335fc0c3162375383e611e38f44b4b32cf5fe6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9d05793ca49eb080dd250ad9ea0c11eb2b37ae16","unresolved":true,"context_lines":[{"line_number":292,"context_line":"        :param secret: The secret id or :class:`~openstack.key_manager.v1.secret.Secret`."},{"line_number":293,"context_line":"        :param dict attrs: Must include ``service``, ``resource_type``, ``resource_id``."},{"line_number":294,"context_line":"        :returns: ``None``"},{"line_number":295,"context_line":"        \"\"\""},{"line_number":296,"context_line":"        secret_ref \u003d self._get_secret_ref(secret)"},{"line_number":297,"context_line":"        # Create a temporary resource instance for deletion"},{"line_number":298,"context_line":"        consumer \u003d _secret_consumer.SecretConsumer.new("},{"line_number":299,"context_line":"            secret_ref\u003dsecret_ref, **attrs"},{"line_number":300,"context_line":"        )"},{"line_number":301,"context_line":"        consumer.delete(self)"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    def secret_consumers(self, secret, **query):"},{"line_number":304,"context_line":"        \"\"\"List consumers for a secret"}],"source_content_type":"text/x-python","patch_set":3,"id":"36da6b5f_827b8693","line":301,"range":{"start_line":295,"start_character":11,"end_line":301,"end_character":29},"updated":"2025-09-09 21:42:02.000000000","message":"As above: why can\u0027t we use `self._delete` here?","commit_id":"62335fc0c3162375383e611e38f44b4b32cf5fe6"}],"openstack/key_manager/v1/secret_consumer.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9d05793ca49eb080dd250ad9ea0c11eb2b37ae16","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":"bb5f1e67_52d985d9","line":1,"updated":"2025-09-09 21:42:02.000000000","message":"D","commit_id":"62335fc0c3162375383e611e38f44b4b32cf5fe6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9d05793ca49eb080dd250ad9ea0c11eb2b37ae16","unresolved":true,"context_lines":[{"line_number":21,"context_line":"    allow_delete \u003d True"},{"line_number":22,"context_line":"    allow_list \u003d True"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    # DELETE on this endpoint uses a body and does not target a specific id"},{"line_number":25,"context_line":"    requires_id \u003d False"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    # URI parameters"}],"source_content_type":"text/x-python","patch_set":3,"id":"edc71c94_7f8ca2fe","line":24,"updated":"2025-09-09 21:42:02.000000000","message":"Do you need to define this when you\u0027re overriding `delete` below?","commit_id":"62335fc0c3162375383e611e38f44b4b32cf5fe6"}]}
