)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5aa3561af107920b53a442897d7b494328186517","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f7d2003b_03d2cf22","updated":"2024-04-03 15:57:56.000000000","message":"Looks like a pretty clean move now.","commit_id":"d61e4729366202f9627565eac82bc4b1088f436d"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"911d3943662d1eddd6d2b0e14192fcab8e2610ba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4be3a701_3b0e3f78","updated":"2024-04-03 14:53:12.000000000","message":"this seems fine","commit_id":"d61e4729366202f9627565eac82bc4b1088f436d"}],"test/unit/__init__.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d6a1607d79911886099eeb78fc03517fc3c9a865","unresolved":true,"context_lines":[{"line_number":1599,"context_line":""},{"line_number":1600,"context_line":""},{"line_number":1601,"context_line":"AppCall \u003d collections.namedtuple(\u0027AppCall\u0027, ["},{"line_number":1602,"context_line":"    \u0027method\u0027, \u0027path\u0027, \u0027query\u0027, \u0027headers\u0027, \u0027body\u0027, \u0027params\u0027])"},{"line_number":1603,"context_line":""},{"line_number":1604,"context_line":""},{"line_number":1605,"context_line":"class FakeInternalClient(internal_client.InternalClient):"}],"source_content_type":"text/x-python","patch_set":1,"id":"e8f091ad_905f55a2","line":1602,"updated":"2024-03-22 15:22:57.000000000","message":"This smells a lot like a FakeSwiftCall from test/common/middleware/helpers.py - can they be unified?","commit_id":"c6f5c3cf143781bd929900f6c0a45419cff699dc"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"838e4e20b7d191036bb3810b7cd02c36a5c1bc2c","unresolved":true,"context_lines":[{"line_number":1599,"context_line":""},{"line_number":1600,"context_line":""},{"line_number":1601,"context_line":"AppCall \u003d collections.namedtuple(\u0027AppCall\u0027, ["},{"line_number":1602,"context_line":"    \u0027method\u0027, \u0027path\u0027, \u0027query\u0027, \u0027headers\u0027, \u0027body\u0027, \u0027params\u0027])"},{"line_number":1603,"context_line":""},{"line_number":1604,"context_line":""},{"line_number":1605,"context_line":"class FakeInternalClient(internal_client.InternalClient):"}],"source_content_type":"text/x-python","patch_set":1,"id":"aabdc7bf_3a4ef34e","line":1602,"range":{"start_line":1602,"start_character":23,"end_line":1602,"end_character":57},"updated":"2024-03-22 15:50:21.000000000","message":"`params` got added -- what\u0027s the difference between that and `query`? I guess... `params` comes in as its own kwarg, while `query` comes as part of the `path`?\n\nWhat if someone calls\n```\nmake_request(\u0027GET\u0027, \u0027/v1/a/c/o?version-id\u003d1234\u0027,\n             params\u003d{\u0027multipart-manifest\u0027: \u0027get\u0027})\n```\n? What does for-realsies `InternalClient` do?","commit_id":"c6f5c3cf143781bd929900f6c0a45419cff699dc"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"31210abc2fff64e94ff737c59fa05eb20a4013d5","unresolved":true,"context_lines":[{"line_number":1599,"context_line":""},{"line_number":1600,"context_line":""},{"line_number":1601,"context_line":"AppCall \u003d collections.namedtuple(\u0027AppCall\u0027, ["},{"line_number":1602,"context_line":"    \u0027method\u0027, \u0027path\u0027, \u0027query\u0027, \u0027headers\u0027, \u0027body\u0027, \u0027params\u0027])"},{"line_number":1603,"context_line":""},{"line_number":1604,"context_line":""},{"line_number":1605,"context_line":"class FakeInternalClient(internal_client.InternalClient):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9368cfa6_b44d4104","line":1602,"range":{"start_line":1602,"start_character":23,"end_line":1602,"end_character":57},"in_reply_to":"aabdc7bf_3a4ef34e","updated":"2024-04-02 14:51:20.000000000","message":"InternalClient constructs a swob Request with the path-including-query-string, then sets Request.params which overwrites the query string.\n\nSince this is capturing a method call rather than a request, I figure it\u0027s ok to capture both the query string and params.\n\nBUT I should have done the move and then made the changes.","commit_id":"c6f5c3cf143781bd929900f6c0a45419cff699dc"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d6a1607d79911886099eeb78fc03517fc3c9a865","unresolved":true,"context_lines":[{"line_number":1616,"context_line":"        path, _, query \u003d path.partition(\u0027?\u0027)"},{"line_number":1617,"context_line":"        self.calls.append(AppCall(method, path, query, headers, body, params))"},{"line_number":1618,"context_line":"        resp \u003d next(self.resp_iter)"},{"line_number":1619,"context_line":"        if isinstance(resp, Exception):"},{"line_number":1620,"context_line":"            raise resp"},{"line_number":1621,"context_line":"        return resp"},{"line_number":1622,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"34aabb2f_9ce38ffc","line":1619,"updated":"2024-03-22 15:22:57.000000000","message":"IIUC this means we cannot use swob.HTTPOk() etc for normal responses, which is unfortunate - perhaps that can be improved?\n\nIdeally we\u0027d be able to register responses in a very similar way/format to FakeSwift","commit_id":"c6f5c3cf143781bd929900f6c0a45419cff699dc"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"414a75f170ce24e52f04ae659a59b9682c8733bd","unresolved":true,"context_lines":[{"line_number":1616,"context_line":"        path, _, query \u003d path.partition(\u0027?\u0027)"},{"line_number":1617,"context_line":"        self.calls.append(AppCall(method, path, query, headers, body, params))"},{"line_number":1618,"context_line":"        resp \u003d next(self.resp_iter)"},{"line_number":1619,"context_line":"        if isinstance(resp, Exception):"},{"line_number":1620,"context_line":"            raise resp"},{"line_number":1621,"context_line":"        return resp"},{"line_number":1622,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"c36f031b_a49cf742","line":1619,"in_reply_to":"34aabb2f_9ce38ffc","updated":"2024-03-22 15:43:21.000000000","message":"```\nif isinstance(resp, Response):\n    return resp\nelif isinstance(resp, Excpetion):\n    raise resp\nelse:\n    return resp\n```\n?","commit_id":"c6f5c3cf143781bd929900f6c0a45419cff699dc"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"31210abc2fff64e94ff737c59fa05eb20a4013d5","unresolved":true,"context_lines":[{"line_number":1616,"context_line":"        path, _, query \u003d path.partition(\u0027?\u0027)"},{"line_number":1617,"context_line":"        self.calls.append(AppCall(method, path, query, headers, body, params))"},{"line_number":1618,"context_line":"        resp \u003d next(self.resp_iter)"},{"line_number":1619,"context_line":"        if isinstance(resp, Exception):"},{"line_number":1620,"context_line":"            raise resp"},{"line_number":1621,"context_line":"        return resp"},{"line_number":1622,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"8226a4dd_b30b5b12","line":1619,"in_reply_to":"c36f031b_a49cf742","updated":"2024-04-02 14:51:20.000000000","message":"Done in follow on patch","commit_id":"c6f5c3cf143781bd929900f6c0a45419cff699dc"}],"test/unit/cli/test_container_deleter.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"911d3943662d1eddd6d2b0e14192fcab8e2610ba","unresolved":true,"context_lines":[{"line_number":26,"context_line":"    \u0027method\u0027, \u0027path\u0027, \u0027query\u0027, \u0027headers\u0027, \u0027body\u0027])"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class FakeInternalClient(internal_client.InternalClient):"},{"line_number":30,"context_line":"    def __init__(self, responses):"},{"line_number":31,"context_line":"        self.resp_iter \u003d iter(responses)"},{"line_number":32,"context_line":"        self.calls \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"482dce5e_223134e6","side":"PARENT","line":29,"updated":"2024-04-03 14:53:12.000000000","message":"test_expirer and test_reconciler also have a FakeInternalClient - how\u0027d you choose this one?  Should the others use the new common Fake?","commit_id":"5ce9accfbfb087ae3703964b77dddcbb2f8dbbc4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4978099c70228ac5062162a66323a5506c52c821","unresolved":true,"context_lines":[{"line_number":26,"context_line":"    \u0027method\u0027, \u0027path\u0027, \u0027query\u0027, \u0027headers\u0027, \u0027body\u0027])"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class FakeInternalClient(internal_client.InternalClient):"},{"line_number":30,"context_line":"    def __init__(self, responses):"},{"line_number":31,"context_line":"        self.resp_iter \u003d iter(responses)"},{"line_number":32,"context_line":"        self.calls \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"0fb70da0_2b91c11b","side":"PARENT","line":29,"in_reply_to":"482dce5e_223134e6","updated":"2024-04-04 11:05:03.000000000","message":"This is the one that had the behaviour closest to what I need. The one in test_expirer doesn\u0027t provide the complete interface, The one in test_reconciler depends on a bespoke fake swift.\n\nMaybe they call all be unified, but at first glance that appears non-trivial.\n\nTHIS one could probably be improved to have a FakeSwift rather than it\u0027s own registry of responses.","commit_id":"5ce9accfbfb087ae3703964b77dddcbb2f8dbbc4"}]}
