)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"2652b44f6e2538a0d9f7d762f11f44b427c954b9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"b0ae0b11_a149962a","updated":"2026-05-26 11:09:45.000000000","message":"Patchset 1 shows the  bug being reproduced:\n```\n testtools.matchers._impl.MismatchError: 5 !\u003d 1: connect_retries\u003d5 was expected but connect_retries\u003d1 was sent to the session. Proxy.request() default of connect_retries\u003d1 is shadowing the configured value\n ```\n https://zuul.opendev.org/t/openstack/build/0ba8943fa06c4e2985f3f051368392d0","commit_id":"125de105a1b0dead389e13ee54e357bd7894aa88"}],"openstack/tests/unit/test_connect_retries_bug.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b0f304126566cb6f87b5c3925114cc46c1e07e3e","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":2,"id":"fd9610e7_ccedf5c3","line":1,"updated":"2026-05-26 11:24:45.000000000","message":"We tend to keep tests in files named after the file containing the function/method/class they are testing. This therefore belongs in `openstack/tests/unit/test_proxy.py`. Can you move it?","commit_id":"b3f2a05382766d773e7ca6241f75581eac8425b6"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"7edbbc20f18e5f3bd91679a5e8f157445b0c4684","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":2,"id":"37f308c2_f08fac50","line":1,"in_reply_to":"fd9610e7_ccedf5c3","updated":"2026-05-26 16:31:35.000000000","message":"sure, done","commit_id":"b3f2a05382766d773e7ca6241f75581eac8425b6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b0f304126566cb6f87b5c3925114cc46c1e07e3e","unresolved":true,"context_lines":[{"line_number":51,"context_line":"        self.session._sdk_connection \u003d self.cloud"},{"line_number":52,"context_line":"        self.session.get_project_id.return_value \u003d \u0027fake_project_id\u0027"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        self.response \u003d mock.Mock()"},{"line_number":55,"context_line":"        self.response.status_code \u003d 200"},{"line_number":56,"context_line":"        self.response.history \u003d []"},{"line_number":57,"context_line":"        self.response.headers \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"18666073_e95547c3","line":54,"updated":"2026-05-26 11:24:45.000000000","message":"Can you spec this also?","commit_id":"b3f2a05382766d773e7ca6241f75581eac8425b6"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"7edbbc20f18e5f3bd91679a5e8f157445b0c4684","unresolved":true,"context_lines":[{"line_number":51,"context_line":"        self.session._sdk_connection \u003d self.cloud"},{"line_number":52,"context_line":"        self.session.get_project_id.return_value \u003d \u0027fake_project_id\u0027"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        self.response \u003d mock.Mock()"},{"line_number":55,"context_line":"        self.response.status_code \u003d 200"},{"line_number":56,"context_line":"        self.response.history \u003d []"},{"line_number":57,"context_line":"        self.response.headers \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"60ec0f52_c05a119e","line":54,"in_reply_to":"18666073_e95547c3","updated":"2026-05-26 16:31:35.000000000","message":"sure, done, I\u0027ve set the object to be spec as `requests.Response`","commit_id":"b3f2a05382766d773e7ca6241f75581eac8425b6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b0f304126566cb6f87b5c3925114cc46c1e07e3e","unresolved":true,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        list(sot._list(FakeResource))"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        # TODO(lp#2154273): should be 5 once the bug is fixed."},{"line_number":88,"context_line":"        self._assert_connect_retries(1)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def test_connect_retries_honored_by_get(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"eae9ab61_5d4fae81","line":87,"updated":"2026-05-26 11:24:45.000000000","message":"nit: You can use the expectedFail decorator for this and remove it in the follow-up, rather than changing your assertion","commit_id":"b3f2a05382766d773e7ca6241f75581eac8425b6"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"7edbbc20f18e5f3bd91679a5e8f157445b0c4684","unresolved":true,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        list(sot._list(FakeResource))"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        # TODO(lp#2154273): should be 5 once the bug is fixed."},{"line_number":88,"context_line":"        self._assert_connect_retries(1)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def test_connect_retries_honored_by_get(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f774801_b3dda97e","line":87,"in_reply_to":"eae9ab61_5d4fae81","updated":"2026-05-26 16:31:35.000000000","message":"good point, done","commit_id":"b3f2a05382766d773e7ca6241f75581eac8425b6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b0f304126566cb6f87b5c3925114cc46c1e07e3e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"cd96df57_71bc4ecb","line":142,"range":{"start_line":79,"start_character":1,"end_line":142,"end_character":1},"updated":"2026-05-26 11:24:45.000000000","message":"All of these are effectively testing the same thing, since the fix is ultimately in `Proxy.request` which all of these call. Can you simplify this down to a single test for that method? You can probably fold in the `_make_proxy` and `_assert_connect_retries` helpers then too","commit_id":"b3f2a05382766d773e7ca6241f75581eac8425b6"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"7edbbc20f18e5f3bd91679a5e8f157445b0c4684","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"af86a53e_bee4aa1e","line":142,"range":{"start_line":79,"start_character":1,"end_line":142,"end_character":1},"in_reply_to":"cd96df57_71bc4ecb","updated":"2026-05-26 16:31:35.000000000","message":"ack, done","commit_id":"b3f2a05382766d773e7ca6241f75581eac8425b6"}]}
