)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"756852a9c398bb59e56712801082a10b65e6d336","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"384d791b_7ccebd25","updated":"2026-06-19 16:15:12.000000000","message":"Can we get docs for these new methods in `doc/source/user/proxies/placement.rst`? I have a few others requests also","commit_id":"ca891c6e9f64b21eadc5b2d97eb576094b65d1e8"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@g.softbank.co.jp","username":"masa"},"change_message_id":"395dff12465eec8c94a0cca7bf66bf3cc191b7fe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"6657ac79_5ed9f22d","updated":"2026-06-22 07:39:53.000000000","message":"Thanks for the quick review. Updated the doc, too.","commit_id":"ca891c6e9f64b21eadc5b2d97eb576094b65d1e8"}],"openstack/placement/v1/_proxy.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"756852a9c398bb59e56712801082a10b65e6d336","unresolved":true,"context_lines":[{"line_number":18,"context_line":"from openstack.placement.v1 import resource_provider as _resource_provider"},{"line_number":19,"context_line":"from openstack.placement.v1 import ("},{"line_number":20,"context_line":"    resource_provider_inventory as _resource_provider_inventory,"},{"line_number":21,"context_line":")"},{"line_number":22,"context_line":"from openstack.placement.v1 import ("},{"line_number":23,"context_line":"    resource_provider_trait as _rp_trait,"},{"line_number":24,"context_line":")"},{"line_number":25,"context_line":"from openstack.placement.v1 import trait as _trait"},{"line_number":26,"context_line":"from openstack import proxy"},{"line_number":27,"context_line":"from openstack import resource"}],"source_content_type":"text/x-python","patch_set":1,"id":"3acc94a4_2fa31744","line":24,"range":{"start_line":21,"start_character":1,"end_line":24,"end_character":1},"updated":"2026-06-19 16:15:12.000000000","message":"```suggestion\n)\nfrom openstack.placement.v1 import resource_provider_trait as _rp_trait\n```","commit_id":"ca891c6e9f64b21eadc5b2d97eb576094b65d1e8"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@g.softbank.co.jp","username":"masa"},"change_message_id":"395dff12465eec8c94a0cca7bf66bf3cc191b7fe","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from openstack.placement.v1 import resource_provider as _resource_provider"},{"line_number":19,"context_line":"from openstack.placement.v1 import ("},{"line_number":20,"context_line":"    resource_provider_inventory as _resource_provider_inventory,"},{"line_number":21,"context_line":")"},{"line_number":22,"context_line":"from openstack.placement.v1 import ("},{"line_number":23,"context_line":"    resource_provider_trait as _rp_trait,"},{"line_number":24,"context_line":")"},{"line_number":25,"context_line":"from openstack.placement.v1 import trait as _trait"},{"line_number":26,"context_line":"from openstack import proxy"},{"line_number":27,"context_line":"from openstack import resource"}],"source_content_type":"text/x-python","patch_set":1,"id":"473fef8f_0d748d66","line":24,"range":{"start_line":21,"start_character":1,"end_line":24,"end_character":1},"in_reply_to":"3acc94a4_2fa31744","updated":"2026-06-22 07:39:53.000000000","message":"Done","commit_id":"ca891c6e9f64b21eadc5b2d97eb576094b65d1e8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"756852a9c398bb59e56712801082a10b65e6d336","unresolved":true,"context_lines":[{"line_number":569,"context_line":"        :returns: An instance of"},{"line_number":570,"context_line":"            :class:`~openstack.placement.v1.resource_provider_trait.ResourceProviderTrait`."},{"line_number":571,"context_line":"        \"\"\""},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"        res \u003d self._get_resource("},{"line_number":574,"context_line":"            _resource_provider.ResourceProvider, resource_provider"},{"line_number":575,"context_line":"        )"},{"line_number":576,"context_line":"        return self._get("},{"line_number":577,"context_line":"            _rp_trait.ResourceProviderTrait,"},{"line_number":578,"context_line":"            resource_provider_id\u003dres.id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9251f18b_e505ed51","line":575,"range":{"start_line":572,"start_character":1,"end_line":575,"end_character":9},"updated":"2026-06-19 16:15:12.000000000","message":"We don\u0027t need to construct the entire object just to pull the ID\n\n```suggestion\n\n        res \u003d resource.Resource._get_id(resource_provider)\n```","commit_id":"ca891c6e9f64b21eadc5b2d97eb576094b65d1e8"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@g.softbank.co.jp","username":"masa"},"change_message_id":"395dff12465eec8c94a0cca7bf66bf3cc191b7fe","unresolved":false,"context_lines":[{"line_number":569,"context_line":"        :returns: An instance of"},{"line_number":570,"context_line":"            :class:`~openstack.placement.v1.resource_provider_trait.ResourceProviderTrait`."},{"line_number":571,"context_line":"        \"\"\""},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"        res \u003d self._get_resource("},{"line_number":574,"context_line":"            _resource_provider.ResourceProvider, resource_provider"},{"line_number":575,"context_line":"        )"},{"line_number":576,"context_line":"        return self._get("},{"line_number":577,"context_line":"            _rp_trait.ResourceProviderTrait,"},{"line_number":578,"context_line":"            resource_provider_id\u003dres.id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"f2af3315_eea95b7c","line":575,"range":{"start_line":572,"start_character":1,"end_line":575,"end_character":9},"in_reply_to":"9251f18b_e505ed51","updated":"2026-06-22 07:39:53.000000000","message":"Done","commit_id":"ca891c6e9f64b21eadc5b2d97eb576094b65d1e8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"756852a9c398bb59e56712801082a10b65e6d336","unresolved":true,"context_lines":[{"line_number":577,"context_line":"            _rp_trait.ResourceProviderTrait,"},{"line_number":578,"context_line":"            resource_provider_id\u003dres.id,"},{"line_number":579,"context_line":"            requires_id\u003dFalse,"},{"line_number":580,"context_line":"        )"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"    def set_resource_provider_trait("},{"line_number":583,"context_line":"        self,"},{"line_number":584,"context_line":"        resource_provider_trait: _rp_trait.ResourceProviderTrait,"},{"line_number":585,"context_line":"        **attrs: Any,"},{"line_number":586,"context_line":"    ) -\u003e _rp_trait.ResourceProviderTrait:"},{"line_number":587,"context_line":"        \"\"\"Update a resource provider\u0027s trait"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"        :param resource_provider_trait: An instance of"}],"source_content_type":"text/x-python","patch_set":1,"id":"14d863cf_80cf5c8b","line":586,"range":{"start_line":580,"start_character":9,"end_line":586,"end_character":41},"updated":"2026-06-19 16:15:12.000000000","message":"How would you actually call this? Have you tested it?","commit_id":"ca891c6e9f64b21eadc5b2d97eb576094b65d1e8"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@g.softbank.co.jp","username":"masa"},"change_message_id":"395dff12465eec8c94a0cca7bf66bf3cc191b7fe","unresolved":true,"context_lines":[{"line_number":577,"context_line":"            _rp_trait.ResourceProviderTrait,"},{"line_number":578,"context_line":"            resource_provider_id\u003dres.id,"},{"line_number":579,"context_line":"            requires_id\u003dFalse,"},{"line_number":580,"context_line":"        )"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"    def set_resource_provider_trait("},{"line_number":583,"context_line":"        self,"},{"line_number":584,"context_line":"        resource_provider_trait: _rp_trait.ResourceProviderTrait,"},{"line_number":585,"context_line":"        **attrs: Any,"},{"line_number":586,"context_line":"    ) -\u003e _rp_trait.ResourceProviderTrait:"},{"line_number":587,"context_line":"        \"\"\"Update a resource provider\u0027s trait"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"        :param resource_provider_trait: An instance of"}],"source_content_type":"text/x-python","patch_set":1,"id":"b1191fe2_a56f45cc","line":586,"range":{"start_line":580,"start_character":9,"end_line":586,"end_character":41},"in_reply_to":"14d863cf_80cf5c8b","updated":"2026-06-22 07:39:53.000000000","message":"Yes, I tested it with the devstack using the following sample code.\n\n```\ndef make_connection()\n    return connection.Connection(..snip..)\n\ndef main():\n    conn \u003d make_connection()\n    rp \u003d conn.placement.get_resource_provider(\u0027dd989229-6ffe-45b9-8beb-eff683134a27\u0027)\n    rp_trait \u003d conn.placement.get_resource_provider_trait(rp)\n    print(rp)\n    print(rp_trait)\n    \n    new_trait \u003d [t for t in rp_trait.traits]\n    new_trait.append(\"CUSTOM_TEST\")\n    \n    conn.placement.set_resource_provider_trait(rp_trait, traits\u003dnew_trait)\n    print(rp_trait)\n    \n    return\n```","commit_id":"ca891c6e9f64b21eadc5b2d97eb576094b65d1e8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3e3dfabe6781f4414df922145130abf6cf5b1b2d","unresolved":false,"context_lines":[{"line_number":577,"context_line":"            _rp_trait.ResourceProviderTrait,"},{"line_number":578,"context_line":"            resource_provider_id\u003dres.id,"},{"line_number":579,"context_line":"            requires_id\u003dFalse,"},{"line_number":580,"context_line":"        )"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"    def set_resource_provider_trait("},{"line_number":583,"context_line":"        self,"},{"line_number":584,"context_line":"        resource_provider_trait: _rp_trait.ResourceProviderTrait,"},{"line_number":585,"context_line":"        **attrs: Any,"},{"line_number":586,"context_line":"    ) -\u003e _rp_trait.ResourceProviderTrait:"},{"line_number":587,"context_line":"        \"\"\"Update a resource provider\u0027s trait"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"        :param resource_provider_trait: An instance of"}],"source_content_type":"text/x-python","patch_set":1,"id":"594bf8f5_b4c95c4b","line":586,"range":{"start_line":580,"start_character":9,"end_line":586,"end_character":41},"in_reply_to":"b1191fe2_a56f45cc","updated":"2026-06-22 08:23:15.000000000","message":"Acknowledged","commit_id":"ca891c6e9f64b21eadc5b2d97eb576094b65d1e8"}]}
