)]}'
{"swift/common/middleware/s3api/s3request.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"44e4fc4ce197ccd61940cd6bbd776c18c6ba1f0d","unresolved":false,"context_lines":[{"line_number":1338,"context_line":"                    sw_resp.environ[\u0027HTTP_X_TENANT_NAME\u0027],"},{"line_number":1339,"context_line":"                    sw_resp.environ[\u0027HTTP_X_USER_NAME\u0027])"},{"line_number":1340,"context_line":"                if six.PY2 and not isinstance(self.user_id, bytes):"},{"line_number":1341,"context_line":"                    self.user_id \u003d self.user_id.encode(\u0027utf8\u0027)"},{"line_number":1342,"context_line":"            else:"},{"line_number":1343,"context_line":"                # tempauth"},{"line_number":1344,"context_line":"                self.user_id \u003d self.access_key"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfbec78f_d2533138","line":1341,"updated":"2019-05-14 05:52:25.000000000","message":"hmm... it looks py3 compatible code leaks here but... okay. progress ahead sounds nice to have.","commit_id":"4aa71aa25caed34f36fafe2de025425aa1d1e0b2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"78f1948dcbf7b0745a2aefb20dc67fd0256e3160","unresolved":false,"context_lines":[{"line_number":1338,"context_line":"                    sw_resp.environ[\u0027HTTP_X_TENANT_NAME\u0027],"},{"line_number":1339,"context_line":"                    sw_resp.environ[\u0027HTTP_X_USER_NAME\u0027])"},{"line_number":1340,"context_line":"                if six.PY2 and not isinstance(self.user_id, bytes):"},{"line_number":1341,"context_line":"                    self.user_id \u003d self.user_id.encode(\u0027utf8\u0027)"},{"line_number":1342,"context_line":"            else:"},{"line_number":1343,"context_line":"                # tempauth"},{"line_number":1344,"context_line":"                self.user_id \u003d self.access_key"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfbec78f_d80ca7a6","line":1341,"in_reply_to":"dfbec78f_d2533138","updated":"2019-05-14 16:21:07.000000000","message":"Mostly because s3api is now tested under py3 :-)\n\nBacking these two out, I get a failure on py3 like\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nFAIL: test_s3api_with_only_s3_token_in_s3acl (test.unit.common.middleware.s3api.test_s3api.TestS3ApiMiddleware)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n  File \"/home/tburke/code/swift/test/unit/common/middleware/s3api/test_s3api.py\", line 1224, in test_s3api_with_only_s3_token_in_s3acl\n    self.assertEqual(body, b\u0027\u0027)\nAssertionError: b\"\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e\\n[153 chars]ror\u003e\" !\u003d b\u0027\u0027\n-------------------- \u003e\u003e begin captured stdout \u003c\u003c ---------------------\ntest DEBUG: Calling S3Api Middleware\ntest ERROR: name must be a string or None: \nTraceback (most recent call last):\n  File \"/home/tburke/code/swift/swift/common/middleware/s3api/s3api.py\", line 229, in __call__\n    resp \u003d self.handle_request(req)\n  File \"/home/tburke/code/swift/swift/common/middleware/s3api/s3api.py\", line 265, in handle_request\n    res \u003d handler(req)\n  File \"/home/tburke/code/swift/swift/common/middleware/s3api/controllers/bucket.py\", line 280, in PUT\n    resp \u003d req.get_response(self.app)\n  File \"/home/tburke/code/swift/swift/common/middleware/s3api/s3request.py\", line 1549, in get_response\n    app, method, container, obj, headers)\n  File \"/home/tburke/code/swift/swift/common/middleware/s3api/acl_handlers.py\", line 94, in handle_acl\n    return getattr(ah, method)(app)\n  File \"/home/tburke/code/swift/swift/common/middleware/s3api/acl_handlers.py\", line 207, in PUT\n    Owner(self.user_id, self.user_id))\n  File \"/home/tburke/code/swift/swift/common/middleware/s3api/subresource.py\", line 236, in __init__\n    raise TypeError(\u0027name must be a string or None\u0027)\nTypeError: name must be a string or None\n \n--------------------- \u003e\u003e end captured stdout \u003c\u003c ----------------------\n\n\nGranted, that\u0027s because of my changes in subresource to be more careful about types. But If I back *that* out, too, we run into trouble that\u0027s even less obvious:\n\nFAIL: test_s3api_with_only_s3_token_in_s3acl (test.unit.common.middleware.s3api.test_s3api.TestS3ApiMiddleware)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n  File \"/home/tburke/code/swift/test/unit/common/middleware/s3api/test_s3api.py\", line 1224, in test_s3api_with_only_s3_token_in_s3acl\n    self.assertEqual(body, b\u0027\u0027)\nAssertionError: b\"\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e\\n[164 chars]ror\u003e\" !\u003d b\u0027\u0027\n-------------------- \u003e\u003e begin captured stdout \u003c\u003c ---------------------\ntest DEBUG: Calling S3Api Middleware\ntest ERROR: __str__ returned non-string (type bytes): \nTraceback (most recent call last):\n  File \"/home/tburke/code/swift/swift/common/middleware/s3api/s3api.py\", line 229, in __call__\n    resp \u003d self.handle_request(req)\n  File \"/home/tburke/code/swift/swift/common/middleware/s3api/s3api.py\", line 265, in handle_request\n    res \u003d handler(req)\n  File \"/home/tburke/code/swift/swift/common/middleware/s3api/controllers/bucket.py\", line 280, in PUT\n    resp \u003d req.get_response(self.app)\n  File \"/home/tburke/code/swift/swift/common/middleware/s3api/s3request.py\", line 1549, in get_response\n    app, method, container, obj, headers)\n  File \"/home/tburke/code/swift/swift/common/middleware/s3api/acl_handlers.py\", line 94, in handle_acl\n    return getattr(ah, method)(app)\n  File \"/home/tburke/code/swift/swift/common/middleware/s3api/acl_handlers.py\", line 218, in PUT\n    self.req.bucket_acl \u003d req_acl\n  File \"/home/tburke/code/swift/swift/common/middleware/s3api/s3request.py\", line 107, in setter\n    self.headers.update(encode_acl(resource, value))\n  File \"/home/tburke/code/swift/swift/common/middleware/s3api/subresource.py\", line 72, in encode_acl\n    \"Grantee\": str(grant.grantee)}\nTypeError: __str__ returned non-string (type bytes)\n \n--------------------- \u003e\u003e end captured stdout \u003c\u003c ----------------------\n\nIt seemed better to keep everything as strings. Though, now that I think about it some more... sw_resp.environ[\u0027HTTP_X_TENANT_NAME\u0027] should *always* be bytes on py2... I should go fix s3token to not have the same problem keystonemiddleware has: https://bugs.launchpad.net/keystonemiddleware/+bug/1794179","commit_id":"4aa71aa25caed34f36fafe2de025425aa1d1e0b2"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"44e4fc4ce197ccd61940cd6bbd776c18c6ba1f0d","unresolved":false,"context_lines":[{"line_number":1500,"context_line":"            self.user_id \u003d \"%s:%s\" % (sw_resp.environ[\u0027HTTP_X_TENANT_NAME\u0027],"},{"line_number":1501,"context_line":"                                      sw_resp.environ[\u0027HTTP_X_USER_NAME\u0027])"},{"line_number":1502,"context_line":"            if six.PY2 and not isinstance(self.user_id, bytes):"},{"line_number":1503,"context_line":"                self.user_id \u003d self.user_id.encode(\u0027utf8\u0027)"},{"line_number":1504,"context_line":"        else:"},{"line_number":1505,"context_line":"            # tempauth"},{"line_number":1506,"context_line":"            self.user_id \u003d self.access_key"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfbec78f_72328512","line":1503,"updated":"2019-05-14 05:52:25.000000000","message":"ditto","commit_id":"4aa71aa25caed34f36fafe2de025425aa1d1e0b2"}],"swift/common/middleware/s3api/s3token.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"fb39b2a530e4b0a8a8e14110fbb79919ae9f88d5","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        if memcache_client:"},{"line_number":284,"context_line":"            cached_auth_data \u003d memcache_client.get(memcache_token_key)"},{"line_number":285,"context_line":"            if cached_auth_data:"},{"line_number":286,"context_line":"                headers, tenant, secret \u003d cached_auth_data"},{"line_number":287,"context_line":"                if s3_auth_details[\u0027check_signature\u0027](secret):"},{"line_number":288,"context_line":"                    self._logger.debug(\"Cached creds valid\")"},{"line_number":289,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_a3d944f3","line":286,"updated":"2018-12-12 00:18:29.000000000","message":"Note that we should tolerate either three *or* four values here if we have a tagged release between https://review.openstack.org/#/c/603529/ landing and this.","commit_id":"af2e058476253d10369a76f6063bdddbdb63ae2a"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f6159d5180a0948bf870cb0289c58a8d42858ce7","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        if memcache_client:"},{"line_number":284,"context_line":"            cached_auth_data \u003d memcache_client.get(memcache_token_key)"},{"line_number":285,"context_line":"            if cached_auth_data:"},{"line_number":286,"context_line":"                headers, tenant, secret \u003d cached_auth_data"},{"line_number":287,"context_line":"                if s3_auth_details[\u0027check_signature\u0027](secret):"},{"line_number":288,"context_line":"                    self._logger.debug(\"Cached creds valid\")"},{"line_number":289,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_986b81b5","line":286,"in_reply_to":"3f79a3b5_a3d944f3","updated":"2019-03-26 21:10:32.000000000","message":"Done","commit_id":"af2e058476253d10369a76f6063bdddbdb63ae2a"}],"test/unit/common/middleware/s3api/test_s3api.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"5cb703778d4374ba54b48a8dfe57b05cc8d63142","unresolved":false,"context_lines":[{"line_number":1156,"context_line":"            with patch.object(self.auth_token,"},{"line_number":1157,"context_line":"                              \u0027_do_fetch_token\u0027) as mock_fetch:"},{"line_number":1158,"context_line":"                # sanity check"},{"line_number":1159,"context_line":"                self.assertIn(\u0027id\u0027, GOOD_RESPONSE_V2[\u0027access\u0027][\u0027token\u0027])"},{"line_number":1160,"context_line":"                mock_resp \u003d requests.Response()"},{"line_number":1161,"context_line":"                mock_resp._content \u003d json.dumps(GOOD_RESPONSE_V2)"},{"line_number":1162,"context_line":"                mock_resp.status_code \u003d 201"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_e9c15582","line":1159,"updated":"2019-05-03 23:12:07.000000000","message":"interesting sanity check. That is the template for testing?","commit_id":"92b3d93118199e82b64b2a9b7700c21eb6c89ad6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"03261a90c8fa3727667ffa1b707147786133c6ad","unresolved":false,"context_lines":[{"line_number":1156,"context_line":"            with patch.object(self.auth_token,"},{"line_number":1157,"context_line":"                              \u0027_do_fetch_token\u0027) as mock_fetch:"},{"line_number":1158,"context_line":"                # sanity check"},{"line_number":1159,"context_line":"                self.assertIn(\u0027id\u0027, GOOD_RESPONSE_V2[\u0027access\u0027][\u0027token\u0027])"},{"line_number":1160,"context_line":"                mock_resp \u003d requests.Response()"},{"line_number":1161,"context_line":"                mock_resp._content \u003d json.dumps(GOOD_RESPONSE_V2)"},{"line_number":1162,"context_line":"                mock_resp.status_code \u003d 201"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_363b33d2","line":1159,"in_reply_to":"dfbec78f_e9c15582","updated":"2019-05-03 23:42:48.000000000","message":"Yeah -- as much as anything, I just wanted to have a check that we really are faithfully reproducing a v2 response -- because if we aren\u0027t, there\u0027s no token for us to hold on to anyway.","commit_id":"92b3d93118199e82b64b2a9b7700c21eb6c89ad6"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"5cb703778d4374ba54b48a8dfe57b05cc8d63142","unresolved":false,"context_lines":[{"line_number":1180,"context_line":"                # it never even tries to contact keystone"},{"line_number":1181,"context_line":"                self.assertEqual(0, mock_fetch.call_count)"},{"line_number":1182,"context_line":""},{"line_number":1183,"context_line":"    def test_swift3_with_only_s3_token_in_s3acl(self):"},{"line_number":1184,"context_line":"        self.swift \u003d FakeSwift()"},{"line_number":1185,"context_line":"        self.keystone_auth \u003d KeystoneAuth("},{"line_number":1186,"context_line":"            self.swift, {\u0027operator_roles\u0027: \u0027swift-user\u0027})"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_c949f132","line":1183,"range":{"start_line":1183,"start_character":14,"end_line":1183,"end_character":19},"updated":"2019-05-03 23:12:07.000000000","message":"Is Swift3 back? or just looks mis-porting.","commit_id":"92b3d93118199e82b64b2a9b7700c21eb6c89ad6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"03261a90c8fa3727667ffa1b707147786133c6ad","unresolved":false,"context_lines":[{"line_number":1180,"context_line":"                # it never even tries to contact keystone"},{"line_number":1181,"context_line":"                self.assertEqual(0, mock_fetch.call_count)"},{"line_number":1182,"context_line":""},{"line_number":1183,"context_line":"    def test_swift3_with_only_s3_token_in_s3acl(self):"},{"line_number":1184,"context_line":"        self.swift \u003d FakeSwift()"},{"line_number":1185,"context_line":"        self.keystone_auth \u003d KeystoneAuth("},{"line_number":1186,"context_line":"            self.swift, {\u0027operator_roles\u0027: \u0027swift-user\u0027})"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_563827d2","line":1183,"range":{"start_line":1183,"start_character":14,"end_line":1183,"end_character":19},"in_reply_to":"dfbec78f_c949f132","updated":"2019-05-03 23:42:48.000000000","message":"Misporting. Will fix.","commit_id":"92b3d93118199e82b64b2a9b7700c21eb6c89ad6"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"5cb703778d4374ba54b48a8dfe57b05cc8d63142","unresolved":false,"context_lines":[{"line_number":1187,"context_line":"        self.s3_token \u003d S3Token("},{"line_number":1188,"context_line":"            self.keystone_auth, {\u0027auth_uri\u0027: \u0027https://fakehost/identity\u0027})"},{"line_number":1189,"context_line":""},{"line_number":1190,"context_line":"        self.s3api \u003d S3ApiMiddleware(self.s3_token, {\u0027s3_acl\u0027: True})"},{"line_number":1191,"context_line":"        req \u003d Request.blank("},{"line_number":1192,"context_line":"            \u0027/bucket\u0027,"},{"line_number":1193,"context_line":"            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_72ed4e24","line":1190,"range":{"start_line":1190,"start_character":51,"end_line":1190,"end_character":68},"updated":"2019-05-03 23:12:07.000000000","message":"I\u0027m not sure why this change was needed.\n\nself.conf has a bunch of other configuration rather than just s3_acl. and the s3_acl is false in default so...\nOIC. The test is changed actually to \"_only_s3_token_in_s3acl\" so we removes auth_token that is needn\u0027t. Anyway, set s3_acl: True with self.conf might be better tho.","commit_id":"92b3d93118199e82b64b2a9b7700c21eb6c89ad6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"03261a90c8fa3727667ffa1b707147786133c6ad","unresolved":false,"context_lines":[{"line_number":1187,"context_line":"        self.s3_token \u003d S3Token("},{"line_number":1188,"context_line":"            self.keystone_auth, {\u0027auth_uri\u0027: \u0027https://fakehost/identity\u0027})"},{"line_number":1189,"context_line":""},{"line_number":1190,"context_line":"        self.s3api \u003d S3ApiMiddleware(self.s3_token, {\u0027s3_acl\u0027: True})"},{"line_number":1191,"context_line":"        req \u003d Request.blank("},{"line_number":1192,"context_line":"            \u0027/bucket\u0027,"},{"line_number":1193,"context_line":"            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_d6517710","line":1190,"range":{"start_line":1190,"start_character":51,"end_line":1190,"end_character":68},"in_reply_to":"dfbec78f_72ed4e24","updated":"2019-05-03 23:42:48.000000000","message":"Sure, I can fix that.","commit_id":"92b3d93118199e82b64b2a9b7700c21eb6c89ad6"}],"test/unit/common/middleware/s3api/test_s3request.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"5cb703778d4374ba54b48a8dfe57b05cc8d63142","unresolved":false,"context_lines":[{"line_number":271,"context_line":"            # So since the result of S3AclRequest init tests and with this"},{"line_number":272,"context_line":"            # result to_swift_req doesn\u0027t add Authorization header and token"},{"line_number":273,"context_line":"            self.assertNotIn(\u0027s3api.auth_details\u0027, sw_req.environ)"},{"line_number":274,"context_line":"            self.assertNotIn(\u0027X-Auth-Token\u0027, sw_req.headers)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def test_to_swift_req_subrequest_proxy_access_log(self):"},{"line_number":277,"context_line":"        container \u003d \u0027bucket\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_835bbf85","line":274,"updated":"2019-05-03 23:12:07.000000000","message":"OK. no auth-token exists here even after pre-auth checked.","commit_id":"92b3d93118199e82b64b2a9b7700c21eb6c89ad6"}],"test/unit/common/middleware/s3api/test_s3token.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"5cb703778d4374ba54b48a8dfe57b05cc8d63142","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        self.assertTrue("},{"line_number":201,"context_line":"            req.path.startswith(account_path),"},{"line_number":202,"context_line":"            \u0027%r does not start with %r\u0027 % (req.path, account_path))"},{"line_number":203,"context_line":"        self.assertNotIn(\u0027X-Auth-Token\u0027, req.headers)"},{"line_number":204,"context_line":"        expected_headers \u003d {"},{"line_number":205,"context_line":"            \u0027X-Identity-Status\u0027: \u0027Confirmed\u0027,"},{"line_number":206,"context_line":"            \u0027X-Roles\u0027: \u0027swift-user,_member_\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_c39457eb","line":203,"updated":"2019-05-03 23:12:07.000000000","message":"Good cleanup","commit_id":"92b3d93118199e82b64b2a9b7700c21eb6c89ad6"}]}
