)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"dc41a6f9935a91b7f46ba44370ae75f68b48effa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"bf7bb467_7e74abfe","updated":"2026-08-27 13:48:17.000000000","message":"I love it, but I have a few concerns.","commit_id":"56dde733bc2fa3fe0d46067b93a6462b07858de6"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"e903c8ef6a3cb10c54560d7254671de437de8ec8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"9759cee3_28665f89","updated":"2026-09-04 07:45:44.000000000","message":"Looks good, thank you!!","commit_id":"89b54462861077989f89f26af08ca5b4a2218371"}],"glance/common/auth.py":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"dc41a6f9935a91b7f46ba44370ae75f68b48effa","unresolved":true,"context_lines":[{"line_number":69,"context_line":"class KeystoneStrategy(BaseStrategy):"},{"line_number":70,"context_line":"    def __init__(self, creds, insecure\u003dFalse):"},{"line_number":71,"context_line":"        self.creds \u003d creds"},{"line_number":72,"context_line":"        self.insecure \u003d insecure"},{"line_number":73,"context_line":"        super(KeystoneStrategy, self).__init__()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def check_auth_params(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"8fd3df93_1a0de33c","line":72,"range":{"start_line":72,"start_character":24,"end_line":72,"end_character":32},"updated":"2026-08-27 13:48:17.000000000","message":"I think self.insecure is never used anywhere now, is it?","commit_id":"56dde733bc2fa3fe0d46067b93a6462b07858de6"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"115fe978df11da98d60e0ab63881f34cb5d5d151","unresolved":false,"context_lines":[{"line_number":69,"context_line":"class KeystoneStrategy(BaseStrategy):"},{"line_number":70,"context_line":"    def __init__(self, creds, insecure\u003dFalse):"},{"line_number":71,"context_line":"        self.creds \u003d creds"},{"line_number":72,"context_line":"        self.insecure \u003d insecure"},{"line_number":73,"context_line":"        super(KeystoneStrategy, self).__init__()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def check_auth_params(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"67855705_4cebf688","line":72,"range":{"start_line":72,"start_character":24,"end_line":72,"end_character":32},"in_reply_to":"8fd3df93_1a0de33c","updated":"2026-08-27 17:41:51.000000000","message":"Oh yes. Fixed it.","commit_id":"56dde733bc2fa3fe0d46067b93a6462b07858de6"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"dc41a6f9935a91b7f46ba44370ae75f68b48effa","unresolved":true,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def check_auth_params(self):"},{"line_number":76,"context_line":"        for required in (\u0027username\u0027, \u0027password\u0027, \u0027auth_url\u0027, \u0027project\u0027,"},{"line_number":77,"context_line":"                         \u0027strategy\u0027):"},{"line_number":78,"context_line":"            if self.creds.get(required) is None:"},{"line_number":79,"context_line":"                raise exception.MissingCredentialError(required\u003drequired)"},{"line_number":80,"context_line":"        if self.creds[\u0027strategy\u0027] !\u003d \u0027keystone\u0027:"}],"source_content_type":"text/x-python","patch_set":10,"id":"cbe1c1e6_08f1c708","line":77,"range":{"start_line":77,"start_character":35,"end_line":77,"end_character":36},"updated":"2026-08-27 13:48:17.000000000","message":"Are user_domain_id and project_domain_id no longer required?","commit_id":"56dde733bc2fa3fe0d46067b93a6462b07858de6"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"115fe978df11da98d60e0ab63881f34cb5d5d151","unresolved":true,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def check_auth_params(self):"},{"line_number":76,"context_line":"        for required in (\u0027username\u0027, \u0027password\u0027, \u0027auth_url\u0027, \u0027project\u0027,"},{"line_number":77,"context_line":"                         \u0027strategy\u0027):"},{"line_number":78,"context_line":"            if self.creds.get(required) is None:"},{"line_number":79,"context_line":"                raise exception.MissingCredentialError(required\u003drequired)"},{"line_number":80,"context_line":"        if self.creds[\u0027strategy\u0027] !\u003d \u0027keystone\u0027:"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa246902_00d91628","line":77,"range":{"start_line":77,"start_character":35,"end_line":77,"end_character":36},"in_reply_to":"cbe1c1e6_08f1c708","updated":"2026-08-27 17:41:51.000000000","message":"keystoneauth omits these keys when the keys are not set, and keystone implicitly uses its default domain. So when we use keystoneauth these options are not needed.","commit_id":"56dde733bc2fa3fe0d46067b93a6462b07858de6"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"dc41a6f9935a91b7f46ba44370ae75f68b48effa","unresolved":true,"context_lines":[{"line_number":87,"context_line":"        self.check_auth_params()"},{"line_number":88,"context_line":"        self._auth(self.creds[\u0027auth_url\u0027])"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _auth(self, auth_url):"},{"line_number":91,"context_line":"        auth \u003d generic.Password("},{"line_number":92,"context_line":"            username\u003dself.creds[\u0027username\u0027],"},{"line_number":93,"context_line":"            user_domain_id\u003dself.creds.get(\u0027user_domain_id\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"2dd521ed_cda3e38c","line":90,"range":{"start_line":90,"start_character":20,"end_line":90,"end_character":28},"updated":"2026-08-27 13:48:17.000000000","message":"From a design point of view, it\u0027s weird to pass self.creds[\u0027auth_url\u0027] to this method, and then access self.creds[*] in it. Also, \"authenticate()\" is now just two line long. Why not just shove everything in authenticate()?","commit_id":"56dde733bc2fa3fe0d46067b93a6462b07858de6"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"115fe978df11da98d60e0ab63881f34cb5d5d151","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        self.check_auth_params()"},{"line_number":88,"context_line":"        self._auth(self.creds[\u0027auth_url\u0027])"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _auth(self, auth_url):"},{"line_number":91,"context_line":"        auth \u003d generic.Password("},{"line_number":92,"context_line":"            username\u003dself.creds[\u0027username\u0027],"},{"line_number":93,"context_line":"            user_domain_id\u003dself.creds.get(\u0027user_domain_id\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"eb740ba1_86e7d601","line":90,"range":{"start_line":90,"start_character":20,"end_line":90,"end_character":28},"in_reply_to":"2dd521ed_cda3e38c","updated":"2026-08-27 17:41:51.000000000","message":"That makes sense. Updated these methods accordingly.","commit_id":"56dde733bc2fa3fe0d46067b93a6462b07858de6"}],"requirements.txt":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"dc41a6f9935a91b7f46ba44370ae75f68b48effa","unresolved":true,"context_lines":[{"line_number":12,"context_line":"Routes\u003e\u003d2.3.1 # MIT"},{"line_number":13,"context_line":"WebOb\u003e\u003d1.8.1 # MIT"},{"line_number":14,"context_line":"alembic\u003e\u003d0.9.6 # MIT"},{"line_number":15,"context_line":"httplib2\u003e\u003d0.9.1 # MIT"},{"line_number":16,"context_line":"oslo.config\u003e\u003d8.1.0 # Apache-2.0"},{"line_number":17,"context_line":"oslo.concurrency\u003e\u003d4.5.1 # Apache-2.0"},{"line_number":18,"context_line":"oslo.context\u003e\u003d2.22.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":10,"id":"0ff0434d_73be940d","side":"PARENT","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":8},"updated":"2026-08-27 13:48:17.000000000","message":"Nice.","commit_id":"0b7ca4e9b412a9503f97335c45c8460058ddb930"}],"test-requirements.txt":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"dc41a6f9935a91b7f46ba44370ae75f68b48effa","unresolved":true,"context_lines":[{"line_number":5,"context_line":"coverage!\u003d4.4,\u003e\u003d4.0 # Apache-2.0"},{"line_number":6,"context_line":"ddt\u003e\u003d1.0.1 # MIT"},{"line_number":7,"context_line":"fixtures\u003e\u003d3.0.0 # Apache-2.0/BSD"},{"line_number":8,"context_line":"httplib2\u003e\u003d0.9.1 # MIT"},{"line_number":9,"context_line":"requests\u003e\u003d2.18.0 # Apache-2.0"},{"line_number":10,"context_line":"testresources\u003e\u003d2.0.0 # Apache-2.0/BSD"},{"line_number":11,"context_line":"testscenarios\u003e\u003d0.4 # Apache-2.0/BSD"}],"source_content_type":"text/plain","patch_set":10,"id":"814064ba_775467ac","line":8,"range":{"start_line":8,"start_character":0,"end_line":8,"end_character":8},"updated":"2026-08-27 13:48:17.000000000","message":"Why? \"tox -epy3\" works fine without it on my env.","commit_id":"56dde733bc2fa3fe0d46067b93a6462b07858de6"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"115fe978df11da98d60e0ab63881f34cb5d5d151","unresolved":false,"context_lines":[{"line_number":5,"context_line":"coverage!\u003d4.4,\u003e\u003d4.0 # Apache-2.0"},{"line_number":6,"context_line":"ddt\u003e\u003d1.0.1 # MIT"},{"line_number":7,"context_line":"fixtures\u003e\u003d3.0.0 # Apache-2.0/BSD"},{"line_number":8,"context_line":"httplib2\u003e\u003d0.9.1 # MIT"},{"line_number":9,"context_line":"requests\u003e\u003d2.18.0 # Apache-2.0"},{"line_number":10,"context_line":"testresources\u003e\u003d2.0.0 # Apache-2.0/BSD"},{"line_number":11,"context_line":"testscenarios\u003e\u003d0.4 # Apache-2.0/BSD"}],"source_content_type":"text/plain","patch_set":10,"id":"f05b2228_2ddeccfc","line":8,"range":{"start_line":8,"start_character":0,"end_line":8,"end_character":8},"in_reply_to":"814064ba_775467ac","updated":"2026-08-27 17:41:51.000000000","message":"I vaguely remember this was used in a different test code when I implemented this change, but it seems the library is no longer used. I\u0027ll drop it.","commit_id":"56dde733bc2fa3fe0d46067b93a6462b07858de6"}]}
