)]}'
{"id":"openstack%2Fpython-keystoneclient~995828","triplet_id":"openstack%2Fpython-keystoneclient~master~I9b7cb2005c557451eedeb43c46c9930952ba1f16","project":"openstack/python-keystoneclient","branch":"master","hashtags":[],"change_id":"I9b7cb2005c557451eedeb43c46c9930952ba1f16","subject":"Fix docs build","status":"NEW","created":"2026-07-02 14:08:17.000000000","updated":"2026-07-02 17:21:47.000000000","submit_type":"MERGE_IF_NECESSARY","mergeable":true,"submittable":false,"total_comment_count":0,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"c3634b076b543f210302cabc2247a0306ccd0d6e","_number":995828,"virtual_id_number":995828,"owner":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"actions":{},"labels":{"Verified":{"recommended":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"tag":"autogenerated:zuul:check","value":1,"date":"2026-07-02 17:21:47.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","value":1,"default_value":0,"optional":true},"Code-Review":{"all":[{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","default_value":0,"optional":true},"Workflow":{"all":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-07-02 17:21:47.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"REVIEWER"}],"messages":[{"id":"35c102f9124f05253f9a5a37d1a12c178f01a25d","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"date":"2026-07-02 14:08:17.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"c3634b076b543f210302cabc2247a0306ccd0d6e","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-02 17:21:47.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/470e6a5cfe77414ea447ba604ead7350\n\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/579f164062c741378ce5392eb9b9ca33 : SUCCESS in 3m 50s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/aec20bf4d3bc4197be264e3abe94498f : SUCCESS in 2m 42s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/c9c64ce2802c414d8fdd2d257bfd0bd9 : SUCCESS in 2m 46s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/450bea17c2fd4ef3b030feeced216690 : SUCCESS in 3m 26s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/01e99bca01594b0b800635956fa13e18 : SUCCESS in 3m 55s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/c59972d79409492aa6ec87f60980f921 : SUCCESS in 4m 28s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/db44ae379138466e8060e31f3ada265e : SUCCESS in 58m 07s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/17c89b76ca4244ecbf50d7bd9f83e406 : SUCCESS in 2m 58s\n- keystoneclient-devstack-functional https://zuul.opendev.org/t/openstack/build/f3c5fa16b6bf41298722ac5e35a68dc6 : SUCCESS in 18m 03s","accounts_in_message":[],"_revision_number":1}],"current_revision_number":1,"current_revision":"c9a81357d032f993f71134da7a8930d5ef046cd8","revisions":{"c9a81357d032f993f71134da7a8930d5ef046cd8":{"kind":"REWORK","_number":1,"created":"2026-07-02 14:08:17.000000000","uploader":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"ref":"refs/changes/28/995828/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/python-keystoneclient","ref":"refs/changes/28/995828/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/python-keystoneclient refs/changes/28/995828/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/python-keystoneclient refs/changes/28/995828/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/python-keystoneclient refs/changes/28/995828/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/python-keystoneclient refs/changes/28/995828/1"}}},"commit":{"parents":[{"commit":"f44b8aead35b2731fae7577ccd038d6e3bee80fc","subject":"Merge \"reno: Update master for unmaintained/2024.1\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-keystoneclient/commit/f44b8aead35b2731fae7577ccd038d6e3bee80fc"}]}],"author":{"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","date":"2026-07-02 14:01:26.000000000","tz":120},"committer":{"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","date":"2026-07-02 14:08:01.000000000","tz":120},"subject":"Fix docs build","message":"Fix docs build\n\nThe @removals.remove decorator wraps the HTTPClient class in a proxy or\nwrapper function to inject deprecation warnings dynamically.\n\nDuring the build, Sphinx\u0027s autodoc scans HTTPClient. To check for type\nhints it calls Python\u0027s standard inspect.get_annotations() function.\nBecause HTTPClient is now wrapped by a decorator, inspect looks at it\nand assumes it is a callable function wrapper. In Python 3.10+,\nthe inspect module handles functions by doing this under the hood:\n\n```python\ndict.get(obj.__dict__, \u0027__annotations__\u0027, None)\n```\n\nThe wrapper is smart enough to delegate attribute lookups back down to\nthe underlying class. So when inspect asks for obj.__dict__, the wrapper\nhands back the class\u0027s dictionary. As we established, a class dictionary\nin Python 3 is an immutable mappingproxy.\n\nPython\u0027s unbound dict.get() method strictly demands a standard, mutable\ndictionary. When it receives the mappingproxy, it instantly triggers:\n\n```\nWARNING: Failed to get a constructor signature for\nkeystoneclient.client.HTTPClient: descriptor \u0027get\u0027 for \u0027dict\u0027 objects\ndoesn\u0027t apply to a \u0027mappingproxy\u0027 object\n```\n\nOverride the decorator for Spinx build to be a harmless passthrough.\n\nAlso migrate from the sphinxcontrib.apidoc to sphinx.ext.apidoc as\nrecommended by the project docs.\n\nChange-Id: I9b7cb2005c557451eedeb43c46c9930952ba1f16\nSigned-off-by: Artem Goncharov \u003cartem.goncharov@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-keystoneclient/commit/c9a81357d032f993f71134da7a8930d5ef046cd8"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/python-keystoneclient/commit/c9a81357d032f993f71134da7a8930d5ef046cd8"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"OK","labels":[{"label":"Verified","status":"MAY","applied_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"MAY"},{"label":"Workflow","status":"MAY"}]}],"submit_requirements":[{"name":"Verified","description":"Verified in gate by CI","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Verified\u003dMAX","label:Verified\u003dMIN"],"atom_explanations":{"label:Verified\u003dMAX":"","label:Verified\u003dMIN":""}}},{"name":"Code-Review","description":"Code reviewed by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX AND -label:Code-Review\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Code-Review\u003dMAX","label:Code-Review\u003dMIN"],"atom_explanations":{"label:Code-Review\u003dMAX":"","label:Code-Review\u003dMIN":""}}},{"name":"Workflow","description":"Approved for gate by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Workflow\u003dMAX AND -label:Workflow\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Workflow\u003dMAX","label:Workflow\u003dMIN"],"atom_explanations":{"label:Workflow\u003dMAX":"","label:Workflow\u003dMIN":""}}}]}
