)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"343b398ddc365b49aa3a756957066a8cf754ca14","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"c266312f_d304b010","updated":"2023-12-12 15:52:31.000000000","message":"i like the subclass approach a lot - I pushed it a bit further:\n\n903428: wip: use subclasses for S3Acl tests | https://review.opendev.org/c/openstack/swift/+/903428\n\nI think the way you have register(sticky\u003dTrue) implemented you tend to get sysmeta acl headers on error responses.  In my follow up I moved the sticky headers to a different data structure and just add them to successful responses; it may be the same idea just a different approach - but I found it a bit easier to reason about.\n\nMaybe take a look at let me know what you think about squashing these together?","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dfc56d1c08b3c285771851febc6fafeeb8c9ad6e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"1a1bf4a5_6340235c","updated":"2023-12-14 14:56:42.000000000","message":"the updates from 5\u003d\u003e6 are very good!\n\noverall I think this change is doing a lot of helpful stuff","commit_id":"b97cf5309dbbc587bb3ac95d9cf35bce6e70161e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ba68b54fb0efcf397ba19e2fa05f028c0ad8aba6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"219a91ce_2e607008","updated":"2023-12-14 17:50:41.000000000","message":"I think we could keep pushing on this , for example https://review.opendev.org/c/openstack/swift/+/903709?usp\u003dsubmitted-together, but this is a huge step forward and I think it is sufficient to merge.\n\nI find the multiple-mixin pattern (as opposed to linear subclassing) that we\u0027re using here, and already in other places, can prove inconvenient for auto-navigating. For example:\n\n* BaseA calls _some_helper in a test\n* BaseB provides _some_helper\n* TestsX(BaseA, BaseB) runs the test\n\nMy IDE will not auto-navigate to the definition of _some_helper from BaseA. But, I can live with that, and maybe follow-up with some work-around.\n\nIt\u0027s intractable in general because in order to directly inherit the assertion helpers in unittest.TestCase, a class must extend unittest.TestCase, and it then becomes a target for the test runner, rather than the kind of mixin that we\u0027re trying to achieve.","commit_id":"b07d87c4be48ee28b936b7fa14ed3d5f20efabf4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c8eb444c58ae46a32918a1aae4d80223f12682d5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"49d0cf16_28cc070a","updated":"2023-12-14 19:36:30.000000000","message":"this is my favorite version yet.","commit_id":"b07d87c4be48ee28b936b7fa14ed3d5f20efabf4"}],"test/unit/common/middleware/s3api/__init__.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"343b398ddc365b49aa3a756957066a8cf754ca14","unresolved":true,"context_lines":[{"line_number":264,"context_line":"             public_headers, json.dumps([])),"},{"line_number":265,"context_line":"            (\u0027GET\u0027, \u0027/v1/AUTH_test/authenticated\u0027,"},{"line_number":266,"context_line":"             swob.HTTPNoContent, authenticated_headers,"},{"line_number":267,"context_line":"             json.dumps([])),"},{"line_number":268,"context_line":"            (\u0027HEAD\u0027, \u0027/v1/AUTH_test/bucket/object\u0027, swob.HTTPOk,"},{"line_number":269,"context_line":"             object_headers, None)"},{"line_number":270,"context_line":"        ]:"}],"source_content_type":"text/x-python","patch_set":2,"id":"cd041616_2726627b","line":267,"updated":"2023-12-12 15:52:31.000000000","message":"I guess it was pre-existing; but it\u0027s not very realistic for a GET to return 204 with an body like \"[]\"","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c8eb444c58ae46a32918a1aae4d80223f12682d5","unresolved":false,"context_lines":[{"line_number":264,"context_line":"             public_headers, json.dumps([])),"},{"line_number":265,"context_line":"            (\u0027GET\u0027, \u0027/v1/AUTH_test/authenticated\u0027,"},{"line_number":266,"context_line":"             swob.HTTPNoContent, authenticated_headers,"},{"line_number":267,"context_line":"             json.dumps([])),"},{"line_number":268,"context_line":"            (\u0027HEAD\u0027, \u0027/v1/AUTH_test/bucket/object\u0027, swob.HTTPOk,"},{"line_number":269,"context_line":"             object_headers, None)"},{"line_number":270,"context_line":"        ]:"}],"source_content_type":"text/x-python","patch_set":2,"id":"87923615_e70ed177","line":267,"in_reply_to":"cd041616_2726627b","updated":"2023-12-14 19:36:30.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dfc56d1c08b3c285771851febc6fafeeb8c9ad6e","unresolved":true,"context_lines":[{"line_number":271,"context_line":"        def gen_grant(permission):"},{"line_number":272,"context_line":"            # generate Grant with a grantee named by \"permission\""},{"line_number":273,"context_line":"            account_name \u003d \u0027%s:%s\u0027 % (\u0027test\u0027, permission.lower())"},{"line_number":274,"context_line":"            return Grant(User(account_name), permission)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        grants \u003d [gen_grant(perm) for perm in PERMISSIONS]"},{"line_number":277,"context_line":"        owner \u003d Owner(\u0027test:tester\u0027, \u0027test:tester\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"c52c5f0e_b1c338d5","line":274,"updated":"2023-12-14 14:56:42.000000000","message":"yeah there was no reason for this to be a closure.","commit_id":"9f23994fbc4d704119468085eed105122b3bde1f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3156178b0748cbf4fd35289b55c1cff48c3da7c4","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        def gen_grant(permission):"},{"line_number":272,"context_line":"            # generate Grant with a grantee named by \"permission\""},{"line_number":273,"context_line":"            account_name \u003d \u0027%s:%s\u0027 % (\u0027test\u0027, permission.lower())"},{"line_number":274,"context_line":"            return Grant(User(account_name), permission)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        grants \u003d [gen_grant(perm) for perm in PERMISSIONS]"},{"line_number":277,"context_line":"        owner \u003d Owner(\u0027test:tester\u0027, \u0027test:tester\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa42f20f_47e90476","line":274,"in_reply_to":"c52c5f0e_b1c338d5","updated":"2023-12-14 17:01:13.000000000","message":"Done","commit_id":"9f23994fbc4d704119468085eed105122b3bde1f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f5d2f816f15556cd32c730564b48024af6a930bf","unresolved":true,"context_lines":[{"line_number":289,"context_line":"            self.swift.register(\u0027GET\u0027, path, swob.HTTPOk, {}, json.dumps([])),"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        extra_s3acl_reqs \u003d ["},{"line_number":292,"context_line":"            (\u0027TEST\u0027, \u0027/v1/AUTH_test\u0027, swob.HTTPMethodNotAllowed, {}, None),"},{"line_number":293,"context_line":"            (\u0027TEST\u0027, \u0027/v1/AUTH_X\u0027, swob.HTTPMethodNotAllowed, {}, None),"},{"line_number":294,"context_line":"            (\u0027PUT\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPCreated, {}, None),"},{"line_number":295,"context_line":"            (\u0027POST\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPNoContent, {}, None),"},{"line_number":296,"context_line":"            (\u0027DELETE\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPNoContent, {}, None),"}],"source_content_type":"text/x-python","patch_set":5,"id":"6ebb28d0_021e0068","line":293,"range":{"start_line":292,"start_character":12,"end_line":293,"end_character":72},"updated":"2023-12-14 16:17:41.000000000","message":"I\u0027m not sure why these are here - removing them seems to make no difference?","commit_id":"9f23994fbc4d704119468085eed105122b3bde1f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3156178b0748cbf4fd35289b55c1cff48c3da7c4","unresolved":false,"context_lines":[{"line_number":289,"context_line":"            self.swift.register(\u0027GET\u0027, path, swob.HTTPOk, {}, json.dumps([])),"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        extra_s3acl_reqs \u003d ["},{"line_number":292,"context_line":"            (\u0027TEST\u0027, \u0027/v1/AUTH_test\u0027, swob.HTTPMethodNotAllowed, {}, None),"},{"line_number":293,"context_line":"            (\u0027TEST\u0027, \u0027/v1/AUTH_X\u0027, swob.HTTPMethodNotAllowed, {}, None),"},{"line_number":294,"context_line":"            (\u0027PUT\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPCreated, {}, None),"},{"line_number":295,"context_line":"            (\u0027POST\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPNoContent, {}, None),"},{"line_number":296,"context_line":"            (\u0027DELETE\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPNoContent, {}, None),"}],"source_content_type":"text/x-python","patch_set":5,"id":"faa6560b_b707186d","line":293,"range":{"start_line":292,"start_character":12,"end_line":293,"end_character":72},"in_reply_to":"6ebb28d0_021e0068","updated":"2023-12-14 17:01:13.000000000","message":"Done","commit_id":"9f23994fbc4d704119468085eed105122b3bde1f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f5d2f816f15556cd32c730564b48024af6a930bf","unresolved":true,"context_lines":[{"line_number":291,"context_line":"        extra_s3acl_reqs \u003d ["},{"line_number":292,"context_line":"            (\u0027TEST\u0027, \u0027/v1/AUTH_test\u0027, swob.HTTPMethodNotAllowed, {}, None),"},{"line_number":293,"context_line":"            (\u0027TEST\u0027, \u0027/v1/AUTH_X\u0027, swob.HTTPMethodNotAllowed, {}, None),"},{"line_number":294,"context_line":"            (\u0027PUT\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPCreated, {}, None),"},{"line_number":295,"context_line":"            (\u0027POST\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPNoContent, {}, None),"},{"line_number":296,"context_line":"            (\u0027DELETE\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPNoContent, {}, None),"},{"line_number":297,"context_line":"        ]"},{"line_number":298,"context_line":"        for method, path, response_class, headers, body in extra_s3acl_reqs:"},{"line_number":299,"context_line":"            self.swift.register(method, path, response_class, headers, body)"}],"source_content_type":"text/x-python","patch_set":5,"id":"a47e7efa_3d3f7bf2","line":296,"range":{"start_line":294,"start_character":12,"end_line":296,"end_character":76},"updated":"2023-12-14 16:17:41.000000000","message":"these are already registered by the super class setUp","commit_id":"9f23994fbc4d704119468085eed105122b3bde1f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dfc56d1c08b3c285771851febc6fafeeb8c9ad6e","unresolved":true,"context_lines":[{"line_number":293,"context_line":"            (\u0027TEST\u0027, \u0027/v1/AUTH_X\u0027, swob.HTTPMethodNotAllowed, {}, None),"},{"line_number":294,"context_line":"            (\u0027PUT\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPCreated, {}, None),"},{"line_number":295,"context_line":"            (\u0027POST\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPNoContent, {}, None),"},{"line_number":296,"context_line":"            (\u0027DELETE\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPNoContent, {}, None),"},{"line_number":297,"context_line":"        ]"},{"line_number":298,"context_line":"        for method, path, response_class, headers, body in extra_s3acl_reqs:"},{"line_number":299,"context_line":"            self.swift.register(method, path, response_class, headers, body)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ea277595_4861e7f0","line":296,"updated":"2023-12-14 14:56:42.000000000","message":"wow, so the put/post/delete just wasn\u0027t needed *at all* !?","commit_id":"9f23994fbc4d704119468085eed105122b3bde1f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3156178b0748cbf4fd35289b55c1cff48c3da7c4","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        extra_s3acl_reqs \u003d ["},{"line_number":292,"context_line":"            (\u0027TEST\u0027, \u0027/v1/AUTH_test\u0027, swob.HTTPMethodNotAllowed, {}, None),"},{"line_number":293,"context_line":"            (\u0027TEST\u0027, \u0027/v1/AUTH_X\u0027, swob.HTTPMethodNotAllowed, {}, None),"},{"line_number":294,"context_line":"            (\u0027PUT\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPCreated, {}, None),"},{"line_number":295,"context_line":"            (\u0027POST\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPNoContent, {}, None),"},{"line_number":296,"context_line":"            (\u0027DELETE\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPNoContent, {}, None),"},{"line_number":297,"context_line":"        ]"},{"line_number":298,"context_line":"        for method, path, response_class, headers, body in extra_s3acl_reqs:"},{"line_number":299,"context_line":"            self.swift.register(method, path, response_class, headers, body)"}],"source_content_type":"text/x-python","patch_set":5,"id":"a1e2658a_236ac63b","line":296,"range":{"start_line":294,"start_character":12,"end_line":296,"end_character":76},"in_reply_to":"a47e7efa_3d3f7bf2","updated":"2023-12-14 17:01:13.000000000","message":"Done","commit_id":"9f23994fbc4d704119468085eed105122b3bde1f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3156178b0748cbf4fd35289b55c1cff48c3da7c4","unresolved":false,"context_lines":[{"line_number":293,"context_line":"            (\u0027TEST\u0027, \u0027/v1/AUTH_X\u0027, swob.HTTPMethodNotAllowed, {}, None),"},{"line_number":294,"context_line":"            (\u0027PUT\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPCreated, {}, None),"},{"line_number":295,"context_line":"            (\u0027POST\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPNoContent, {}, None),"},{"line_number":296,"context_line":"            (\u0027DELETE\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPNoContent, {}, None),"},{"line_number":297,"context_line":"        ]"},{"line_number":298,"context_line":"        for method, path, response_class, headers, body in extra_s3acl_reqs:"},{"line_number":299,"context_line":"            self.swift.register(method, path, response_class, headers, body)"}],"source_content_type":"text/x-python","patch_set":5,"id":"601bd8af_8e7f0507","line":296,"in_reply_to":"ea277595_4861e7f0","updated":"2023-12-14 17:01:13.000000000","message":"Done","commit_id":"9f23994fbc4d704119468085eed105122b3bde1f"}],"test/unit/common/middleware/s3api/test_bucket.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e0481b75f9d42f87a58c0fd4b3e9df3548768be4","unresolved":true,"context_lines":[{"line_number":1519,"context_line":"        self.assertNotIn((\u0027DELETE\u0027, \u0027/v1/AUTH_test/bucket\u0027), called)"},{"line_number":1520,"context_line":""},{"line_number":1521,"context_line":""},{"line_number":1522,"context_line":"class TestS3ApiBucketAcl(S3ApiTestCaseAcl):"},{"line_number":1523,"context_line":"    def test_bucket_PUT_with_canned_s3acl(self):"},{"line_number":1524,"context_line":"        account \u003d \u0027test:tester\u0027"},{"line_number":1525,"context_line":"        acl \u003d \\"}],"source_content_type":"text/x-python","patch_set":2,"id":"b0a5b703_1906819e","line":1522,"updated":"2023-12-04 11:53:43.000000000","message":"for now I just converted some s3acl_only tests","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"}],"test/unit/common/middleware/s3api/test_obj.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"343b398ddc365b49aa3a756957066a8cf754ca14","unresolved":true,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def _do_test_object_policy_index_logging(self, bucket_policy_index):"},{"line_number":189,"context_line":"        self.logger.clear()"},{"line_number":190,"context_line":"        self._register_bucket_policy_index_head(\u0027bucket\u0027, bucket_policy_index)"},{"line_number":191,"context_line":"        req \u003d Request.blank(\u0027/bucket/object\u0027,"},{"line_number":192,"context_line":"                            headers\u003d{\u0027Authorization\u0027: \u0027AWS test:tester:hmac\u0027,"},{"line_number":193,"context_line":"                                     \u0027Date\u0027: self.get_date_header()})"}],"source_content_type":"text/x-python","patch_set":2,"id":"2eee4489_ea4859fc","side":"PARENT","line":190,"updated":"2023-12-12 15:52:31.000000000","message":"maybe given how this test was written it\u0027s reasonable to mutate the existing registtered bucket response w/i the helper.","commit_id":"966340aeedfd5cc7246f57083ea6eacb62c2eae1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"343b398ddc365b49aa3a756957066a8cf754ca14","unresolved":true,"context_lines":[{"line_number":90,"context_line":"        status, headers, body \u003d self.call_s3api(req)"},{"line_number":91,"context_line":"        self.assertEqual(status.split()[0], \u0027200\u0027)"},{"line_number":92,"context_line":"        # we\u0027ll want this for logging"},{"line_number":93,"context_line":"        self._assert_policy_index(req.headers, headers, bucket_policy_index)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        unexpected_headers \u003d []"},{"line_number":96,"context_line":"        for key, val in self.response_headers.items():"}],"source_content_type":"text/x-python","patch_set":2,"id":"56f5cf3c_3ed098df","line":93,"updated":"2023-12-12 15:52:31.000000000","message":"i think it\u0027d be reasonable to use self.bucket_policy_index here","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c8eb444c58ae46a32918a1aae4d80223f12682d5","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        status, headers, body \u003d self.call_s3api(req)"},{"line_number":91,"context_line":"        self.assertEqual(status.split()[0], \u0027200\u0027)"},{"line_number":92,"context_line":"        # we\u0027ll want this for logging"},{"line_number":93,"context_line":"        self._assert_policy_index(req.headers, headers, bucket_policy_index)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        unexpected_headers \u003d []"},{"line_number":96,"context_line":"        for key, val in self.response_headers.items():"}],"source_content_type":"text/x-python","patch_set":2,"id":"bb066b1a_be2340fa","line":93,"in_reply_to":"56f5cf3c_3ed098df","updated":"2023-12-14 19:36:30.000000000","message":"Done","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f5d2f816f15556cd32c730564b48024af6a930bf","unresolved":true,"context_lines":[{"line_number":1754,"context_line":"        status, headers, body \u003d self.call_s3api(req)"},{"line_number":1755,"context_line":"        self.assertEqual(status, \u0027403 Forbidden\u0027)"},{"line_number":1756,"context_line":"        self.assertEqual(self._get_error_code(body), \u0027SignatureDoesNotMatch\u0027)"},{"line_number":1757,"context_line":"        # XXX make tearDown happy"},{"line_number":1758,"context_line":"        self.app.remote_user \u003d \u0027foo\u0027"},{"line_number":1759,"context_line":""},{"line_number":1760,"context_line":"    def test_object_GET_with_s3acl_and_keystone(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bc5d69ff_b9236532","line":1757,"updated":"2023-12-14 16:17:41.000000000","message":"it\u0027s only happy if the test passes, better to mock remote_user #willfix","commit_id":"9f23994fbc4d704119468085eed105122b3bde1f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1dc06d2d2acc56f367cd30f66fbf2aec855b06e8","unresolved":false,"context_lines":[{"line_number":1754,"context_line":"        status, headers, body \u003d self.call_s3api(req)"},{"line_number":1755,"context_line":"        self.assertEqual(status, \u0027403 Forbidden\u0027)"},{"line_number":1756,"context_line":"        self.assertEqual(self._get_error_code(body), \u0027SignatureDoesNotMatch\u0027)"},{"line_number":1757,"context_line":"        # XXX make tearDown happy"},{"line_number":1758,"context_line":"        self.app.remote_user \u003d \u0027foo\u0027"},{"line_number":1759,"context_line":""},{"line_number":1760,"context_line":"    def test_object_GET_with_s3acl_and_keystone(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"e9bcbc50_a60fdd51","line":1757,"in_reply_to":"bc5d69ff_b9236532","updated":"2023-12-14 17:44:07.000000000","message":"Done","commit_id":"9f23994fbc4d704119468085eed105122b3bde1f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c8eb444c58ae46a32918a1aae4d80223f12682d5","unresolved":true,"context_lines":[{"line_number":1751,"context_line":"                            headers\u003d{\u0027Authorization\u0027: \u0027AWS test:tester:hmac\u0027,"},{"line_number":1752,"context_line":"                                     \u0027Date\u0027: self.get_date_header()})"},{"line_number":1753,"context_line":"        with patch.object(self.app, \u0027remote_user\u0027, None):"},{"line_number":1754,"context_line":"            status, headers, body \u003d self.call_s3api(req)"},{"line_number":1755,"context_line":"        self.assertEqual(status, \u0027403 Forbidden\u0027)"},{"line_number":1756,"context_line":"        self.assertEqual(self._get_error_code(body), \u0027SignatureDoesNotMatch\u0027)"},{"line_number":1757,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"e98ee798_7ca01c68","line":1754,"updated":"2023-12-14 19:36:30.000000000","message":"oh a patch.object is always nice","commit_id":"b07d87c4be48ee28b936b7fa14ed3d5f20efabf4"}],"test/unit/common/middleware/s3api/test_s3_acl.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3156178b0748cbf4fd35289b55c1cff48c3da7c4","unresolved":true,"context_lines":[{"line_number":175,"context_line":"        account \u003d \u0027test\u0027"},{"line_number":176,"context_line":"        owner_name \u003d \u0027%s:tester\u0027 % account"},{"line_number":177,"context_line":"        self.default_owner \u003d Owner(owner_name, owner_name)"},{"line_number":178,"context_line":"        generate_s3acl_environ(account, self.swift, self.default_owner)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def tearDown(self):"},{"line_number":181,"context_line":"        self.s3api.conf.s3_acl \u003d False"}],"source_content_type":"text/x-python","patch_set":6,"id":"92e9aea8_108aaeb5","side":"PARENT","line":178,"updated":"2023-12-14 17:01:13.000000000","message":"this looks like it is repeating the S3ApiTestCaseAcl setUp","commit_id":"1c31973d33223978b5ae096eeb46f809465cea5e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c8eb444c58ae46a32918a1aae4d80223f12682d5","unresolved":true,"context_lines":[{"line_number":107,"context_line":"        generate_s3acl_environ(account, self.swift, self.default_owner)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def tearDown(self):"},{"line_number":110,"context_line":"        self.s3api.conf.s3_acl \u003d False"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def test_bucket_acl_PUT_with_other_owner(self):"},{"line_number":113,"context_line":"        req \u003d Request.blank(\u0027/bucket?acl\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"8b2c90a8_f8479d3e","line":110,"updated":"2023-12-14 19:36:30.000000000","message":"ok, i guess this was all duplicated","commit_id":"b97cf5309dbbc587bb3ac95d9cf35bce6e70161e"}],"test/unit/common/middleware/test_helpers.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f5d2f816f15556cd32c730564b48024af6a930bf","unresolved":true,"context_lines":[{"line_number":696,"context_line":"            self.assertEqual(\u0027Baz\u0027, resp.headers[\u0027X-Foo\u0027])"},{"line_number":697,"context_line":""},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"class S3ApiHelperTestCase(unittest.TestCase):"},{"line_number":700,"context_line":"    def setUp(self):"},{"line_number":701,"context_line":"        self.method \u003d \u0027HEAD\u0027"},{"line_number":702,"context_line":"        self.path \u003d \u0027/v1/AUTH_test/bucket\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba99c6a8_98fdac42","line":699,"updated":"2023-12-14 16:17:41.000000000","message":"rename","commit_id":"9f23994fbc4d704119468085eed105122b3bde1f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3156178b0748cbf4fd35289b55c1cff48c3da7c4","unresolved":false,"context_lines":[{"line_number":696,"context_line":"            self.assertEqual(\u0027Baz\u0027, resp.headers[\u0027X-Foo\u0027])"},{"line_number":697,"context_line":""},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"class S3ApiHelperTestCase(unittest.TestCase):"},{"line_number":700,"context_line":"    def setUp(self):"},{"line_number":701,"context_line":"        self.method \u003d \u0027HEAD\u0027"},{"line_number":702,"context_line":"        self.path \u003d \u0027/v1/AUTH_test/bucket\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"ef25efc4_9644aa6d","line":699,"in_reply_to":"ba99c6a8_98fdac42","updated":"2023-12-14 17:01:13.000000000","message":"Done","commit_id":"9f23994fbc4d704119468085eed105122b3bde1f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f5d2f816f15556cd32c730564b48024af6a930bf","unresolved":true,"context_lines":[{"line_number":732,"context_line":""},{"line_number":733,"context_line":"        self._check_headers(swift, self.method, self.path, orig_headers)"},{"line_number":734,"context_line":""},{"line_number":735,"context_line":"    def test_fake_swift_sysmeta_overwrite(self):"},{"line_number":736,"context_line":"        swift \u003d FakeSwift()"},{"line_number":737,"context_line":"        orig_headers \u003d HeaderKeyDict()"},{"line_number":738,"context_line":"        orig_headers.update({sysmeta_header(\u0027container\u0027, \u0027acl\u0027): \u0027test\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"118ac402_20074a4e","line":735,"updated":"2023-12-14 16:17:41.000000000","message":"this test doesn\u0027t seem useful anymore","commit_id":"9f23994fbc4d704119468085eed105122b3bde1f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3156178b0748cbf4fd35289b55c1cff48c3da7c4","unresolved":false,"context_lines":[{"line_number":732,"context_line":""},{"line_number":733,"context_line":"        self._check_headers(swift, self.method, self.path, orig_headers)"},{"line_number":734,"context_line":""},{"line_number":735,"context_line":"    def test_fake_swift_sysmeta_overwrite(self):"},{"line_number":736,"context_line":"        swift \u003d FakeSwift()"},{"line_number":737,"context_line":"        orig_headers \u003d HeaderKeyDict()"},{"line_number":738,"context_line":"        orig_headers.update({sysmeta_header(\u0027container\u0027, \u0027acl\u0027): \u0027test\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"4dfebee6_7112df2e","line":735,"in_reply_to":"118ac402_20074a4e","updated":"2023-12-14 17:01:13.000000000","message":"Done","commit_id":"9f23994fbc4d704119468085eed105122b3bde1f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dfc56d1c08b3c285771851febc6fafeeb8c9ad6e","unresolved":true,"context_lines":[{"line_number":724,"context_line":""},{"line_number":725,"context_line":"class TestFakeSwiftStickyHeaders(unittest.TestCase):"},{"line_number":726,"context_line":"    def setUp(self):"},{"line_number":727,"context_line":"        self.swift \u003d FakeSwift()"},{"line_number":728,"context_line":"        self.path \u003d \u0027/v1/AUTH_test/bucket\u0027"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"    def _check_headers(self, method, path, exp_headers):"}],"source_content_type":"text/x-python","patch_set":6,"id":"490e9ff3_d8c21a40","line":727,"updated":"2023-12-14 14:56:42.000000000","message":"oh, that\u0027s helpful.","commit_id":"b97cf5309dbbc587bb3ac95d9cf35bce6e70161e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1dc06d2d2acc56f367cd30f66fbf2aec855b06e8","unresolved":false,"context_lines":[{"line_number":724,"context_line":""},{"line_number":725,"context_line":"class TestFakeSwiftStickyHeaders(unittest.TestCase):"},{"line_number":726,"context_line":"    def setUp(self):"},{"line_number":727,"context_line":"        self.swift \u003d FakeSwift()"},{"line_number":728,"context_line":"        self.path \u003d \u0027/v1/AUTH_test/bucket\u0027"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"    def _check_headers(self, method, path, exp_headers):"}],"source_content_type":"text/x-python","patch_set":6,"id":"dd6de7ae_5186ee54","line":727,"in_reply_to":"490e9ff3_d8c21a40","updated":"2023-12-14 17:44:07.000000000","message":"Acknowledged","commit_id":"b97cf5309dbbc587bb3ac95d9cf35bce6e70161e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dfc56d1c08b3c285771851febc6fafeeb8c9ad6e","unresolved":true,"context_lines":[{"line_number":727,"context_line":"        self.swift \u003d FakeSwift()"},{"line_number":728,"context_line":"        self.path \u003d \u0027/v1/AUTH_test/bucket\u0027"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"    def _check_headers(self, method, path, exp_headers):"},{"line_number":731,"context_line":"        captured_headers \u003d {}"},{"line_number":732,"context_line":""},{"line_number":733,"context_line":"        def start_response(status, resp_headers):"}],"source_content_type":"text/x-python","patch_set":6,"id":"a56184f5_5deb5c97","line":730,"updated":"2023-12-14 14:56:42.000000000","message":"clarifying rename; kudos.","commit_id":"b97cf5309dbbc587bb3ac95d9cf35bce6e70161e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1dc06d2d2acc56f367cd30f66fbf2aec855b06e8","unresolved":false,"context_lines":[{"line_number":727,"context_line":"        self.swift \u003d FakeSwift()"},{"line_number":728,"context_line":"        self.path \u003d \u0027/v1/AUTH_test/bucket\u0027"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"    def _check_headers(self, method, path, exp_headers):"},{"line_number":731,"context_line":"        captured_headers \u003d {}"},{"line_number":732,"context_line":""},{"line_number":733,"context_line":"        def start_response(status, resp_headers):"}],"source_content_type":"text/x-python","patch_set":6,"id":"a23bd8bc_6ca5af83","line":730,"in_reply_to":"a56184f5_5deb5c97","updated":"2023-12-14 17:44:07.000000000","message":"Acknowledged","commit_id":"b97cf5309dbbc587bb3ac95d9cf35bce6e70161e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dfc56d1c08b3c285771851febc6fafeeb8c9ad6e","unresolved":true,"context_lines":[{"line_number":757,"context_line":"        self.swift.register(\u0027POST\u0027, self.path, HTTPOk, {}, None)"},{"line_number":758,"context_line":"        self._check_headers(\u0027POST\u0027, self.path, {})"},{"line_number":759,"context_line":"        self.swift.register(\u0027DELETE\u0027, self.path, HTTPOk, {}, None)"},{"line_number":760,"context_line":"        self._check_headers(\u0027DELETE\u0027, self.path, {})"},{"line_number":761,"context_line":""},{"line_number":762,"context_line":"    def test_sticky_headers_match_path(self):"},{"line_number":763,"context_line":"        other_path \u003d self.path + \u0027-other\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"b98f7cd9_5eb75f8d","line":760,"updated":"2023-12-14 14:56:42.000000000","message":"quite nice.","commit_id":"b97cf5309dbbc587bb3ac95d9cf35bce6e70161e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1dc06d2d2acc56f367cd30f66fbf2aec855b06e8","unresolved":false,"context_lines":[{"line_number":757,"context_line":"        self.swift.register(\u0027POST\u0027, self.path, HTTPOk, {}, None)"},{"line_number":758,"context_line":"        self._check_headers(\u0027POST\u0027, self.path, {})"},{"line_number":759,"context_line":"        self.swift.register(\u0027DELETE\u0027, self.path, HTTPOk, {}, None)"},{"line_number":760,"context_line":"        self._check_headers(\u0027DELETE\u0027, self.path, {})"},{"line_number":761,"context_line":""},{"line_number":762,"context_line":"    def test_sticky_headers_match_path(self):"},{"line_number":763,"context_line":"        other_path \u003d self.path + \u0027-other\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"cc5fc0b4_79e6d396","line":760,"in_reply_to":"b98f7cd9_5eb75f8d","updated":"2023-12-14 17:44:07.000000000","message":"Acknowledged","commit_id":"b97cf5309dbbc587bb3ac95d9cf35bce6e70161e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dfc56d1c08b3c285771851febc6fafeeb8c9ad6e","unresolved":true,"context_lines":[{"line_number":797,"context_line":"        })"},{"line_number":798,"context_line":"        exp_headers.update(sticky_headers)"},{"line_number":799,"context_line":"        self.swift.update_sticky_response_headers(self.path, sticky_headers)"},{"line_number":800,"context_line":"        self._check_headers(\u0027HEAD\u0027, self.path, exp_headers)"},{"line_number":801,"context_line":""},{"line_number":802,"context_line":"    def test_sticky_headers_add_to_response_headers(self):"},{"line_number":803,"context_line":"        sticky_headers \u003d HeaderKeyDict({"}],"source_content_type":"text/x-python","patch_set":6,"id":"6ea026fb_6290e0d7","line":800,"updated":"2023-12-14 14:56:42.000000000","message":"I had forgotten about this one - good test!","commit_id":"b97cf5309dbbc587bb3ac95d9cf35bce6e70161e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1dc06d2d2acc56f367cd30f66fbf2aec855b06e8","unresolved":false,"context_lines":[{"line_number":797,"context_line":"        })"},{"line_number":798,"context_line":"        exp_headers.update(sticky_headers)"},{"line_number":799,"context_line":"        self.swift.update_sticky_response_headers(self.path, sticky_headers)"},{"line_number":800,"context_line":"        self._check_headers(\u0027HEAD\u0027, self.path, exp_headers)"},{"line_number":801,"context_line":""},{"line_number":802,"context_line":"    def test_sticky_headers_add_to_response_headers(self):"},{"line_number":803,"context_line":"        sticky_headers \u003d HeaderKeyDict({"}],"source_content_type":"text/x-python","patch_set":6,"id":"d6a1abdc_96e9db14","line":800,"in_reply_to":"6ea026fb_6290e0d7","updated":"2023-12-14 17:44:07.000000000","message":"Acknowledged","commit_id":"b97cf5309dbbc587bb3ac95d9cf35bce6e70161e"}]}
