)]}'
{"swift/common/middleware/s3api/s3response.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7e1f2e0bb2d25febc015c5b0adfb5a18364e6d68","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":81,"context_line":"        swob.Response.__init__(self, *args, **kwargs)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        sw_sysmeta_headers \u003d swob.HeaderKeyDict()"},{"line_number":84,"context_line":"        sw_headers \u003d swob.HeaderKeyDict()"},{"line_number":85,"context_line":"        headers \u003d HeaderKeyDict()"},{"line_number":86,"context_line":"        self.is_slo \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfdaf3ff_d96b071d","side":"PARENT","line":83,"updated":"2019-01-10 21:48:15.000000000","message":"I agree given the behavior this wasn\u0027t a great name","commit_id":"4781b80b1ca26d977e8a731ffe63e689b2e4338c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7e1f2e0bb2d25febc015c5b0adfb5a18364e6d68","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            self.etag \u003d self.etag"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        # Used for pure swift header handling at the request layer"},{"line_number":157,"context_line":"        self.sw_headers \u003d sw_headers"},{"line_number":158,"context_line":"        self.sysmeta_headers \u003d s3_sysmeta_headers"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfdaf3ff_195bcf87","line":157,"updated":"2019-01-10 21:48:15.000000000","message":"Why isn\u0027t this just the original unmolested headers rather than just a subset?","commit_id":"29b877de712cc6baf0cfb41bfa53ae018b04de8b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cea023b56e9c758623f5932c1960b69915329c7f","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            self.etag \u003d self.etag"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        # Used for pure swift header handling at the request layer"},{"line_number":157,"context_line":"        self.sw_headers \u003d sw_headers"},{"line_number":158,"context_line":"        self.sysmeta_headers \u003d s3_sysmeta_headers"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_cba356ff","line":157,"in_reply_to":"bfdaf3ff_195bcf87","updated":"2019-01-31 19:51:57.000000000","message":"¯\\_(ツ)_/¯\n\nThat\u0027s just the way it\u0027s been... and since we overwrote self.headers on L150, we don\u0027t even *have* the complete set in one place anymore...","commit_id":"29b877de712cc6baf0cfb41bfa53ae018b04de8b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7e1f2e0bb2d25febc015c5b0adfb5a18364e6d68","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        # Used for pure swift header handling at the request layer"},{"line_number":157,"context_line":"        self.sw_headers \u003d sw_headers"},{"line_number":158,"context_line":"        self.sysmeta_headers \u003d s3_sysmeta_headers"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    @classmethod"},{"line_number":161,"context_line":"    def from_swift_resp(cls, sw_resp):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfdaf3ff_b972c310","line":158,"updated":"2019-01-10 21:48:15.000000000","message":"well, but... it\u0027s NOT *swift* sysmeta_headers","commit_id":"29b877de712cc6baf0cfb41bfa53ae018b04de8b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cea023b56e9c758623f5932c1960b69915329c7f","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        # Used for pure swift header handling at the request layer"},{"line_number":157,"context_line":"        self.sw_headers \u003d sw_headers"},{"line_number":158,"context_line":"        self.sysmeta_headers \u003d s3_sysmeta_headers"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    @classmethod"},{"line_number":161,"context_line":"    def from_swift_resp(cls, sw_resp):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_0b795e92","line":158,"in_reply_to":"bfdaf3ff_b972c310","updated":"2019-01-31 19:51:57.000000000","message":"Nope :-(\n\nBut then, this isn\u0027t a plain-old swob.Response, either -- it\u0027s a S3Response, and I *guess* I\u0027m OK with saying that S3Response.sysmeta_headers will just be the S3-specific sysmeta headers?\n\nIDK... I kinda want to get rid of S3Request/S3Response entirely... but I think it\u0027s going to take a good bit of work. https://review.openstack.org/#/c/613452/ is maybe a decent first step toward that?","commit_id":"29b877de712cc6baf0cfb41bfa53ae018b04de8b"}],"test/unit/common/middleware/s3api/test_s3response.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7e1f2e0bb2d25febc015c5b0adfb5a18364e6d68","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                {sysmeta_prefix(_server_type) + \u0027test\u0027: \u0027ok\u0027})"},{"line_number":56,"context_line":"            self.assertEqual(expected_headers, s3resp.sysmeta_headers)"},{"line_number":57,"context_line":"            self.assertIn(\u0027x-%s-sysmeta-test-s3api\u0027 % _server_type,"},{"line_number":58,"context_line":"                          s3resp.sw_headers)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def test_response_s3api_sysmeta_from_swift3_sysmeta(self):"},{"line_number":61,"context_line":"        for _server_type in (\u0027object\u0027, \u0027container\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfdaf3ff_591397b9","line":58,"updated":"2019-01-10 21:48:15.000000000","message":"maybe it\u0027s just me, but x-object-sysmeta-test-s3api vs x-object-sysmeta-s3api-test is kinda subtle\n\n... also assertIn is kinda weak IMHO\n\n\tdiff --git a/test/unit/common/middleware/s3api/test_s3response.py b/test/unit/common/middleware/s3api/test_s3response.py\n\tindex 4c6a854b1..b503c9ede 100644\n\t--- a/test/unit/common/middleware/s3api/test_s3response.py\n\t+++ b/test/unit/common/middleware/s3api/test_s3response.py\n\t@@ -54,8 +54,11 @@ class TestResponse(unittest.TestCase):\n\t\t     expected_headers \u003d HeaderKeyDict(\n\t\t\t {sysmeta_prefix(_server_type) + \u0027test\u0027: \u0027ok\u0027})\n\t\t     self.assertEqual(expected_headers, s3resp.sysmeta_headers)\n\t-            self.assertIn(\u0027x-%s-sysmeta-test-s3api\u0027 % _server_type,\n\t-                          s3resp.sw_headers)\n\t+            self.assertEqual(HeaderKeyDict({\n\t+                \u0027Content-Length\u0027: \u00270\u0027,\n\t+                \u0027Content-Type\u0027: \u0027text/html; charset\u003dUTF-8\u0027,\n\t+                \u0027X-%s-Sysmeta-Test-S3Api\u0027 % _server_type: \u0027ok\u0027,\n\t+            }), s3resp.sw_headers)\n\t \n\t     def test_response_s3api_sysmeta_from_swift3_sysmeta(self):\n\t\t for _server_type in (\u0027object\u0027, \u0027container\u0027):","commit_id":"29b877de712cc6baf0cfb41bfa53ae018b04de8b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"571fde485ac877d4f74a5aee06276d1917731933","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                {sysmeta_prefix(_server_type) + \u0027test\u0027: \u0027ok\u0027})"},{"line_number":56,"context_line":"            self.assertEqual(expected_headers, s3resp.sysmeta_headers)"},{"line_number":57,"context_line":"            self.assertIn(\u0027x-%s-sysmeta-test-s3api\u0027 % _server_type,"},{"line_number":58,"context_line":"                          s3resp.sw_headers)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def test_response_s3api_sysmeta_from_swift3_sysmeta(self):"},{"line_number":61,"context_line":"        for _server_type in (\u0027object\u0027, \u0027container\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_9e6772eb","line":58,"in_reply_to":"9fdfeff1_6b4eea38","updated":"2019-04-02 16:51:14.000000000","message":"yeah, value trade off here is about literal assertions being more descriptive vs. coupling/maintainability...\n\nI find updating some amount of test code across module boundaries is both reasonable and healthy - it validates you\u0027re doing some amount of integration testing!  When that happens I find tests with literal/explicit assertions to be easiest to update quickly.  If a lot of tests make similarly explicit assertions I either use macros/search to fix them quickly or take the opportunity to DRY out the tests with helpers a little bit.\n\nI\u0027m not an ideologue; I think it\u0027s reasonable if different people\u0027s experiences lead to different preferences.","commit_id":"29b877de712cc6baf0cfb41bfa53ae018b04de8b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cea023b56e9c758623f5932c1960b69915329c7f","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                {sysmeta_prefix(_server_type) + \u0027test\u0027: \u0027ok\u0027})"},{"line_number":56,"context_line":"            self.assertEqual(expected_headers, s3resp.sysmeta_headers)"},{"line_number":57,"context_line":"            self.assertIn(\u0027x-%s-sysmeta-test-s3api\u0027 % _server_type,"},{"line_number":58,"context_line":"                          s3resp.sw_headers)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def test_response_s3api_sysmeta_from_swift3_sysmeta(self):"},{"line_number":61,"context_line":"        for _server_type in (\u0027object\u0027, \u0027container\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_6b4eea38","line":58,"in_reply_to":"bfdaf3ff_591397b9","updated":"2019-01-31 19:51:57.000000000","message":"...so we\u0027d have tight coupling with what swob.Response does in __init__? I mean... maybe it\u0027s still worthwhile... but it seems weird.\n\n\u003e x-object-sysmeta-test-s3api vs x-object-sysmeta-s3api-test is kinda subtle\n\nOTOH, it demonstrates that we\u0027re not doing a naive\n\n \u0027s3api\u0027 in header.lower()\n\ncheck...","commit_id":"29b877de712cc6baf0cfb41bfa53ae018b04de8b"}]}
