)]}'
{"test/unit/obj/test_server.py":[{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"3070c645c5450810854181eef0e819f8939e3326","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        req.body \u003d \u0027VERIFY\u0027"},{"line_number":195,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":196,"context_line":"        self.assertEqual(resp.status_int, 201)"},{"line_number":197,"context_line":"        self.assertEqual(dict(resp.headers), {"},{"line_number":198,"context_line":"            \u0027Content-Type\u0027: \u0027text/html; charset\u003dUTF-8\u0027,"},{"line_number":199,"context_line":"            \u0027Content-Length\u0027: str(len(resp.body)),"},{"line_number":200,"context_line":"            \u0027Etag\u0027: \u0027\"%s\"\u0027 % md5(\u0027VERIFY\u0027).hexdigest(),"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_6c04f47d","line":197,"updated":"2016-08-20 19:32:08.000000000","message":"interesting.  resp.headers is a HeaderKeyDict, so I see here you are using dict() for the comparison.  I am curious why that is needed.  I tested without the dict(), and things still succeed, but I assume there might be some added \"goodness\" here in comparing as dict instead of HeaderKeyDict?","commit_id":"2a32b2795ef9a26e55e157f4d4af431a7b5354b4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5a33d3c5f662e978446c7ed624f1d3a1ce7240b2","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        req.body \u003d \u0027VERIFY\u0027"},{"line_number":195,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":196,"context_line":"        self.assertEqual(resp.status_int, 201)"},{"line_number":197,"context_line":"        self.assertEqual(dict(resp.headers), {"},{"line_number":198,"context_line":"            \u0027Content-Type\u0027: \u0027text/html; charset\u003dUTF-8\u0027,"},{"line_number":199,"context_line":"            \u0027Content-Length\u0027: str(len(resp.body)),"},{"line_number":200,"context_line":"            \u0027Etag\u0027: \u0027\"%s\"\u0027 % md5(\u0027VERIFY\u0027).hexdigest(),"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_e83470fc","line":197,"in_reply_to":"1ac06dbe_6c04f47d","updated":"2016-08-26 00:47:05.000000000","message":"Prettier formatting when it fails :-)\n\nFor example, if you drop the quotes around the etag, you\u0027ll get a traceback like\n\n Traceback (most recent call last):\n   File \"/vagrant/swift/test/unit/obj/test_server.py\", line 204, in test_POST_update_meta\n     \u0027X-Object-Meta-Two\u0027: \u0027Two\u0027,\n AssertionError: {\u0027Content-Length\u0027: \u00270\u0027, \u0027Etag\u0027: \u0027\"0b4c12d7e0a73840c1c4f148fda3b037\"\u0027, \u0027X-Object- [truncated]... !\u003d {\u0027Content-Length\u0027: \u00270\u0027, \u0027X-Object-Sysmeta-Color\u0027: \u0027blue\u0027, \u0027Etag\u0027: \u00270b4c12d7e0a73 [truncated]...\n   {\u0027Content-Length\u0027: \u00270\u0027,\n    \u0027Content-Type\u0027: \u0027text/html; charset\u003dUTF-8\u0027,\n -  \u0027Etag\u0027: \u0027\"0b4c12d7e0a73840c1c4f148fda3b037\"\u0027,\n ?           -                                -\n \n +  \u0027Etag\u0027: \u00270b4c12d7e0a73840c1c4f148fda3b037\u0027,\n    \u0027X-Object-Meta-1\u0027: \u0027One\u0027,\n    \u0027X-Object-Meta-Two\u0027: \u0027Two\u0027,\n    \u0027X-Object-Sysmeta-Color\u0027: \u0027blue\u0027}\n\ninstead of\n\n Traceback (most recent call last):\n   File \"/vagrant/swift/test/unit/obj/test_server.py\", line 204, in test_POST_update_meta\n     \u0027X-Object-Meta-Two\u0027: \u0027Two\u0027,\n AssertionError: {\u0027Content-Length\u0027: \u00270\u0027, \u0027X-Object-Sysmeta-Color\u0027: \u0027blue\u0027, \u0027Etag\u0027: \u0027\"0b4c12d7e0a73840c1c4f148fda3b037\"\u0027, \u0027X-Object-Meta-1\u0027: \u0027One\u0027, \u0027Content-Type\u0027: \u0027text/html; charset\u003dUTF-8\u0027, \u0027X-Object-Meta-Two\u0027: \u0027Two\u0027} !\u003d {\u0027Content-Length\u0027: \u00270\u0027, \u0027X-Object-Sysmeta-Color\u0027: \u0027blue\u0027, \u0027Etag\u0027: \u00270b4c12d7e0a73840c1c4f148fda3b037\u0027, \u0027X-Object-Meta-1\u0027: \u0027One\u0027, \u0027Content-Type\u0027: \u0027text/html; charset\u003dUTF-8\u0027, \u0027X-Object-Meta-Two\u0027: \u0027Two\u0027}","commit_id":"2a32b2795ef9a26e55e157f4d4af431a7b5354b4"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"3070c645c5450810854181eef0e819f8939e3326","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        self.assertEqual(dict(resp.headers), {"},{"line_number":198,"context_line":"            \u0027Content-Type\u0027: \u0027text/html; charset\u003dUTF-8\u0027,"},{"line_number":199,"context_line":"            \u0027Content-Length\u0027: str(len(resp.body)),"},{"line_number":200,"context_line":"            \u0027Etag\u0027: \u0027\"%s\"\u0027 % md5(\u0027VERIFY\u0027).hexdigest(),"},{"line_number":201,"context_line":"        })"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        post_timestamp \u003d normalize_timestamp(time())"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_0cc62067","line":200,"updated":"2016-08-20 19:32:08.000000000","message":"This md5 could be a constant.  it is calculated several times here.","commit_id":"2a32b2795ef9a26e55e157f4d4af431a7b5354b4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5a33d3c5f662e978446c7ed624f1d3a1ce7240b2","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        self.assertEqual(dict(resp.headers), {"},{"line_number":198,"context_line":"            \u0027Content-Type\u0027: \u0027text/html; charset\u003dUTF-8\u0027,"},{"line_number":199,"context_line":"            \u0027Content-Length\u0027: str(len(resp.body)),"},{"line_number":200,"context_line":"            \u0027Etag\u0027: \u0027\"%s\"\u0027 % md5(\u0027VERIFY\u0027).hexdigest(),"},{"line_number":201,"context_line":"        })"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        post_timestamp \u003d normalize_timestamp(time())"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_23afcb95","line":200,"in_reply_to":"1ac06dbe_0cc62067","updated":"2016-08-26 00:47:05.000000000","message":"Done","commit_id":"2a32b2795ef9a26e55e157f4d4af431a7b5354b4"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"3070c645c5450810854181eef0e819f8939e3326","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            \u0027X-Object-Meta-3\u0027: \u0027Three\u0027,"},{"line_number":229,"context_line":"            \u0027X-Object-Meta-4\u0027: \u0027Four\u0027,"},{"line_number":230,"context_line":"            \u0027Foo\u0027: \u0027fooheader\u0027,"},{"line_number":231,"context_line":"            \u0027Bar\u0027: \u0027barheader\u0027,"},{"line_number":232,"context_line":"            \u0027Content-Encoding\u0027: \u0027gzip\u0027,"},{"line_number":233,"context_line":"            \u0027X-Backend-Timestamp\u0027: post_timestamp,"},{"line_number":234,"context_line":"            \u0027X-Timestamp\u0027: post_timestamp,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_87cf8baf","line":231,"updated":"2016-08-20 19:32:08.000000000","message":"If this set of headers is attempting to cover all different types, you could add a transient header here as well.","commit_id":"2a32b2795ef9a26e55e157f4d4af431a7b5354b4"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"1d10d299c80d61614865593028b7bbfebe7534ed","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            \u0027X-Object-Meta-3\u0027: \u0027Three\u0027,"},{"line_number":229,"context_line":"            \u0027X-Object-Meta-4\u0027: \u0027Four\u0027,"},{"line_number":230,"context_line":"            \u0027Foo\u0027: \u0027fooheader\u0027,"},{"line_number":231,"context_line":"            \u0027Bar\u0027: \u0027barheader\u0027,"},{"line_number":232,"context_line":"            \u0027Content-Encoding\u0027: \u0027gzip\u0027,"},{"line_number":233,"context_line":"            \u0027X-Backend-Timestamp\u0027: post_timestamp,"},{"line_number":234,"context_line":"            \u0027X-Timestamp\u0027: post_timestamp,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_4e85abab","line":231,"in_reply_to":"1ac06dbe_87cf8baf","updated":"2016-08-20 23:56:50.000000000","message":"oops - i got a little confused here.  I am also reviewing the change to include transient on responses.","commit_id":"2a32b2795ef9a26e55e157f4d4af431a7b5354b4"}]}
