)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":39300,"name":"Olessya Khussainova","display_name":"Olessya Khussainova","email":"olessya.khussainova@ps.kz","username":"Cellofun"},"change_message_id":"01543deeed08bc5828a4127abd7dd6d45cd82aba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"16188863_0a10c0ab","updated":"2026-08-19 15:11:07.000000000","message":"Thanks, LGTM!","commit_id":"b17c653ebeafb6f6812688d5c0e95c7b12740a20"}],"troveclient/common.py":[{"author":{"_account_id":39300,"name":"Olessya Khussainova","display_name":"Olessya Khussainova","email":"olessya.khussainova@ps.kz","username":"Cellofun"},"change_message_id":"07a79891576dbdea16b6bdbb591251dd45caf285","unresolved":true,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def special_chars_encode(str):"},{"line_number":55,"context_line":"    return parse.quote(str.replace(\u0027.\u0027, \u0027%2E\u0027).replace(\u0027/\u0027, \u0027%2F\u0027), safe\u003d\"\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"39989c40_2f2d5c96","line":55,"updated":"2026-08-18 11:54:11.000000000","message":"Looks like `.` and `/` are double encoded here because they are replaced before `parse.quote()`. Maybe we should use something like `parse.quote(str, safe\u003d\"\").replace(\".\", \"%2E\")`, since `safe\u003d\"\"` already encodes `/` as `%2F`?","commit_id":"bb5c65f2364e89a930c37cb5066e866be2b90ac5"},{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"erkin.mussurmankulov@ps.kz","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"05bdfc702fcbe75810b426ea08bcdcad34f4bea5","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def special_chars_encode(str):"},{"line_number":55,"context_line":"    return parse.quote(str.replace(\u0027.\u0027, \u0027%2E\u0027).replace(\u0027/\u0027, \u0027%2F\u0027), safe\u003d\"\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"e787f61d_c84bc884","line":55,"in_reply_to":"39989c40_2f2d5c96","updated":"2026-08-19 13:49:07.000000000","message":"Oops, it was an experiment with the previous API endpoints. It was added accidentally and should not be in this MR. Removed.","commit_id":"bb5c65f2364e89a930c37cb5066e866be2b90ac5"}],"troveclient/tests/test_users.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7625eca685cbaa914a05af3bb2e114f9720f4843","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        self.users.api.client.get.assert_not_called()"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    def test_list_access_new_api_with_hostname(self):"},{"line_number":260,"context_line":"        post_mock \u003d self._get_mock_method()"},{"line_number":261,"context_line":"        self._resp.status_code \u003d 200"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        response_body \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"a064f3a2_f095a3ad","line":260,"updated":"2026-08-11 14:54:35.000000000","message":"pep8: F841 local variable \u0027post_mock\u0027 is assigned to but never used","commit_id":"9d40ccd1077e5336d4c2d616e01abcb2de929066"}]}
