)]}'
{"swiftclient/service.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7a77987057b8a2af299e871e4c68f9c18d58c88b","unresolved":false,"context_lines":[{"line_number":1475,"context_line":"                                   response_dict\u003dresults_dict)"},{"line_number":1476,"context_line":""},{"line_number":1477,"context_line":"            if options[\u0027checksum\u0027] and etag and etag !\u003d contents.get_md5sum():"},{"line_number":1478,"context_line":"                raise SwiftError(\u0027Segment {0}: upload verification failed: \u0027"},{"line_number":1479,"context_line":"                                 \u0027md5 mismatch, local {1} !\u003d remote {2} :\u0027"},{"line_number":1480,"context_line":"                                 \u0027remote segment has not been removed.\u0027"},{"line_number":1481,"context_line":"                                 .format(segment_index,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_8e7bd179","line":1478,"updated":"2015-02-26 14:27:32.000000000","message":"+1 for including the index","commit_id":"57363e13db04f17812775db58c5783e769def2d6"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c110c96d40ea08859d74ee37a4fa9fd33f0dc39d","unresolved":false,"context_lines":[{"line_number":1476,"context_line":""},{"line_number":1477,"context_line":"            if options[\u0027checksum\u0027] and etag and etag !\u003d contents.get_md5sum():"},{"line_number":1478,"context_line":"                raise SwiftError(\u0027Segment {0}: upload verification failed: \u0027"},{"line_number":1479,"context_line":"                                 \u0027md5 mismatch, local {1} !\u003d remote {2} :\u0027"},{"line_number":1480,"context_line":"                                 \u0027remote segment has not been removed.\u0027"},{"line_number":1481,"context_line":"                                 .format(segment_index,"},{"line_number":1482,"context_line":"                                         contents.get_md5sum(),"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_50a2b24b","line":1479,"updated":"2015-03-03 05:20:13.000000000","message":"the space before the : looks *super* weird to me, maybe just stick the remote bit in parentheses?","commit_id":"e2f88f91e48c6d80f01654f065f6184f53b912da"},{"author":{"_account_id":13470,"name":"Daniel Wakefield","email":"dan@danw.eu","username":"danw"},"change_message_id":"d967c3963ffa84acb1e964317902db2b4efae30c","unresolved":false,"context_lines":[{"line_number":1476,"context_line":""},{"line_number":1477,"context_line":"            if options[\u0027checksum\u0027] and etag and etag !\u003d contents.get_md5sum():"},{"line_number":1478,"context_line":"                raise SwiftError(\u0027Segment {0}: upload verification failed: \u0027"},{"line_number":1479,"context_line":"                                 \u0027md5 mismatch, local {1} !\u003d remote {2} :\u0027"},{"line_number":1480,"context_line":"                                 \u0027remote segment has not been removed.\u0027"},{"line_number":1481,"context_line":"                                 .format(segment_index,"},{"line_number":1482,"context_line":"                                         contents.get_md5sum(),"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_c8c42b94","line":1479,"in_reply_to":"ba7be1f8_50a2b24b","updated":"2015-03-03 13:44:11.000000000","message":"Done","commit_id":"e2f88f91e48c6d80f01654f065f6184f53b912da"}],"tests/unit/test_service.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c110c96d40ea08859d74ee37a4fa9fd33f0dc39d","unresolved":false,"context_lines":[{"line_number":801,"context_line":""},{"line_number":802,"context_line":"            # For whatever reason mtime varies between reads. Check they are"},{"line_number":803,"context_line":"            # within 0.1 second of each other is enough for accuracy and doesnt"},{"line_number":804,"context_line":"            # risk intermittent test failures."},{"line_number":805,"context_line":"            mtime \u003d float(r[\u0027headers\u0027][\u0027x-object-meta-mtime\u0027])"},{"line_number":806,"context_line":"            self.assertAlmostEqual(mtime, expected_mtime, delta\u003d0.1)"},{"line_number":807,"context_line":"            del r[\u0027headers\u0027][\u0027x-object-meta-mtime\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_535abc2a","line":804,"updated":"2015-03-03 05:20:13.000000000","message":"bah, separate unrelated change.\n\nIt\u0027s not \"whatever reason\" - you\u0027re trying to tighten up a built-in race - the expected_mtime is calling time, then we\u0027re doing some mocking, creating a class and calling a method which might do some other filesystem stats and the like - it should be quick but it depends on the system running the test.","commit_id":"e2f88f91e48c6d80f01654f065f6184f53b912da"},{"author":{"_account_id":13470,"name":"Daniel Wakefield","email":"dan@danw.eu","username":"danw"},"change_message_id":"d967c3963ffa84acb1e964317902db2b4efae30c","unresolved":false,"context_lines":[{"line_number":801,"context_line":""},{"line_number":802,"context_line":"            # For whatever reason mtime varies between reads. Check they are"},{"line_number":803,"context_line":"            # within 0.1 second of each other is enough for accuracy and doesnt"},{"line_number":804,"context_line":"            # risk intermittent test failures."},{"line_number":805,"context_line":"            mtime \u003d float(r[\u0027headers\u0027][\u0027x-object-meta-mtime\u0027])"},{"line_number":806,"context_line":"            self.assertAlmostEqual(mtime, expected_mtime, delta\u003d0.1)"},{"line_number":807,"context_line":"            del r[\u0027headers\u0027][\u0027x-object-meta-mtime\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_a38558d0","line":804,"in_reply_to":"ba7be1f8_535abc2a","updated":"2015-03-03 13:44:11.000000000","message":"Somewhat yes, Alistair made a comment here\nhttps://review.openstack.org/#/c/129254/13/tests/unit/test_service.py  \nwondering if AlmostEqual was required so I thought a clearer comment might help. \n\nThe deltas used in the two AlmostEqual calls are also different so I tested and observed a max delta of ~0.0005 but I would be happy to increase the delta value to take into account slower machines, Would 1 second be suitable?\n\nOr would you prefer it be submitted as a separate patch.","commit_id":"e2f88f91e48c6d80f01654f065f6184f53b912da"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ab00677baab44951e5b362850f6a27600274680b","unresolved":false,"context_lines":[{"line_number":801,"context_line":""},{"line_number":802,"context_line":"            # For whatever reason mtime varies between reads. Check they are"},{"line_number":803,"context_line":"            # within 0.1 second of each other is enough for accuracy and doesnt"},{"line_number":804,"context_line":"            # risk intermittent test failures."},{"line_number":805,"context_line":"            mtime \u003d float(r[\u0027headers\u0027][\u0027x-object-meta-mtime\u0027])"},{"line_number":806,"context_line":"            self.assertAlmostEqual(mtime, expected_mtime, delta\u003d0.1)"},{"line_number":807,"context_line":"            del r[\u0027headers\u0027][\u0027x-object-meta-mtime\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_00a19ef7","line":804,"in_reply_to":"ba7be1f8_a38558d0","updated":"2015-03-03 21:22:53.000000000","message":"lol!  see happened to me too - I didn\u0027t register to me that this test came in with the md5 validation, so it seemed unrelated :P\n\nI\u0027m fine tightening this up to 500ms or so - or maybe taking a time before and after and validating the mtime used for the upload is between that window.","commit_id":"e2f88f91e48c6d80f01654f065f6184f53b912da"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c110c96d40ea08859d74ee37a4fa9fd33f0dc39d","unresolved":false,"context_lines":[{"line_number":851,"context_line":""},{"line_number":852,"context_line":"            self.assertEqual(r[\u0027success\u0027], False)"},{"line_number":853,"context_line":"            self.assertIn(\u0027error\u0027, r)"},{"line_number":854,"context_line":"            self.assertTrue(r[\u0027error\u0027].value.find(\u0027md5 mismatch\u0027) \u003e\u003d 0)"},{"line_number":855,"context_line":""},{"line_number":856,"context_line":"            self.assertEqual(mock_conn.put_object.call_count, 1)"},{"line_number":857,"context_line":"            expected_headers \u003d {\u0027x-object-meta-mtime\u0027: mock.ANY}"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_b348585d","line":854,"updated":"2015-03-03 05:20:13.000000000","message":"nit: self.assertIn(\u0027md5 mismatch\u0027, str(r[\u0027error\u0027]))","commit_id":"e2f88f91e48c6d80f01654f065f6184f53b912da"},{"author":{"_account_id":13470,"name":"Daniel Wakefield","email":"dan@danw.eu","username":"danw"},"change_message_id":"d967c3963ffa84acb1e964317902db2b4efae30c","unresolved":false,"context_lines":[{"line_number":851,"context_line":""},{"line_number":852,"context_line":"            self.assertEqual(r[\u0027success\u0027], False)"},{"line_number":853,"context_line":"            self.assertIn(\u0027error\u0027, r)"},{"line_number":854,"context_line":"            self.assertTrue(r[\u0027error\u0027].value.find(\u0027md5 mismatch\u0027) \u003e\u003d 0)"},{"line_number":855,"context_line":""},{"line_number":856,"context_line":"            self.assertEqual(mock_conn.put_object.call_count, 1)"},{"line_number":857,"context_line":"            expected_headers \u003d {\u0027x-object-meta-mtime\u0027: mock.ANY}"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_c3688cbc","line":854,"in_reply_to":"ba7be1f8_b348585d","updated":"2015-03-03 13:44:11.000000000","message":"Done","commit_id":"e2f88f91e48c6d80f01654f065f6184f53b912da"}],"tests/unit/test_shell.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7a77987057b8a2af299e871e4c68f9c18d58c88b","unresolved":false,"context_lines":[{"line_number":464,"context_line":"        connection.return_value.head_container.return_value \u003d {"},{"line_number":465,"context_line":"            \u0027x-storage-policy\u0027: \u0027one\u0027}"},{"line_number":466,"context_line":"        connection.return_value.attempts \u003d 0"},{"line_number":467,"context_line":"        argv \u003d [\"\", \"upload\", \"--ignore-checksum\", \"container\", self.tmpfile]"},{"line_number":468,"context_line":"        connection.return_value.head_object.side_effect \u003d ["},{"line_number":469,"context_line":"            {\u0027x-static-large-object\u0027: \u0027true\u0027,  # For the upload call"},{"line_number":470,"context_line":"             \u0027content-length\u0027: \u00272\u0027},"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_ee3c4d31","line":467,"updated":"2015-02-26 14:27:32.000000000","message":"why did this option need to be added - isn\u0027t the returned value EMPTY_ETAG correct?","commit_id":"57363e13db04f17812775db58c5783e769def2d6"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c110c96d40ea08859d74ee37a4fa9fd33f0dc39d","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        connection.return_value.head_container.return_value \u003d {"},{"line_number":466,"context_line":"            \u0027x-storage-policy\u0027: \u0027one\u0027}"},{"line_number":467,"context_line":"        connection.return_value.attempts \u003d 0"},{"line_number":468,"context_line":"        argv \u003d [\"\", \"upload\", \"--ignore-checksum\", \"container\", self.tmpfile]"},{"line_number":469,"context_line":"        connection.return_value.head_object.side_effect \u003d ["},{"line_number":470,"context_line":"            {\u0027x-static-large-object\u0027: \u0027true\u0027,  # For the upload call"},{"line_number":471,"context_line":"             \u0027content-length\u0027: \u00272\u0027},"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_53f63cfa","line":468,"updated":"2015-03-03 05:20:13.000000000","message":"don\u0027t see why this was added here?","commit_id":"e2f88f91e48c6d80f01654f065f6184f53b912da"},{"author":{"_account_id":13470,"name":"Daniel Wakefield","email":"dan@danw.eu","username":"danw"},"change_message_id":"d967c3963ffa84acb1e964317902db2b4efae30c","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        connection.return_value.head_container.return_value \u003d {"},{"line_number":466,"context_line":"            \u0027x-storage-policy\u0027: \u0027one\u0027}"},{"line_number":467,"context_line":"        connection.return_value.attempts \u003d 0"},{"line_number":468,"context_line":"        argv \u003d [\"\", \"upload\", \"--ignore-checksum\", \"container\", self.tmpfile]"},{"line_number":469,"context_line":"        connection.return_value.head_object.side_effect \u003d ["},{"line_number":470,"context_line":"            {\u0027x-static-large-object\u0027: \u0027true\u0027,  # For the upload call"},{"line_number":471,"context_line":"             \u0027content-length\u0027: \u00272\u0027},"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_639b6018","line":468,"in_reply_to":"ba7be1f8_53f63cfa","updated":"2015-03-03 13:44:11.000000000","message":"Done","commit_id":"e2f88f91e48c6d80f01654f065f6184f53b912da"}],"tests/unit/utils.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7a77987057b8a2af299e871e4c68f9c18d58c88b","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from swiftclient import client as c"},{"line_number":27,"context_line":"from swiftclient import shell as s"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"EMPTY_ETAG \u003d \u0027d41d8cd98f00b204e9800998ecf8427e\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def fake_get_auth_keystone(expected_os_options\u003dNone, exc\u003dNone,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_ae85f5cf","line":29,"updated":"2015-02-26 14:27:32.000000000","message":"thank you!","commit_id":"57363e13db04f17812775db58c5783e769def2d6"},{"author":{"_account_id":9216,"name":"Joel Wright","email":"joel.wright@gmail.com","username":"jjw-sohonet"},"change_message_id":"3ef0a670d9604b28565f6ea1c51ed38ca4836948","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from swiftclient import client as c"},{"line_number":27,"context_line":"from swiftclient import shell as s"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"EMPTY_ETAG \u003d \u0027d41d8cd98f00b204e9800998ecf8427e\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def fake_get_auth_keystone(expected_os_options\u003dNone, exc\u003dNone,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba7be1f8_a300a666","line":29,"updated":"2015-02-26 16:15:49.000000000","message":"Could we move the definition of EMPTY_ETAG into swiftclient.utils so that we can also use this definition in client and service?","commit_id":"0f80b67d1ff0aeb64a539a8769002f49c82b17d5"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c110c96d40ea08859d74ee37a4fa9fd33f0dc39d","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from requests import RequestException"},{"line_number":23,"context_line":"from requests.structures import CaseInsensitiveDict"},{"line_number":24,"context_line":"from time import sleep"},{"line_number":25,"context_line":"from six.moves import reload_module"},{"line_number":26,"context_line":"from six.moves.urllib.parse import urlparse, ParseResult"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_b3bbf80d","line":24,"updated":"2015-03-03 05:20:13.000000000","message":"nit: I could probably get behind moving the requests imports - but why time?","commit_id":"e2f88f91e48c6d80f01654f065f6184f53b912da"},{"author":{"_account_id":13470,"name":"Daniel Wakefield","email":"dan@danw.eu","username":"danw"},"change_message_id":"d967c3963ffa84acb1e964317902db2b4efae30c","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from requests import RequestException"},{"line_number":23,"context_line":"from requests.structures import CaseInsensitiveDict"},{"line_number":24,"context_line":"from time import sleep"},{"line_number":25,"context_line":"from six.moves import reload_module"},{"line_number":26,"context_line":"from six.moves.urllib.parse import urlparse, ParseResult"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_9d46f379","line":24,"in_reply_to":"ba7be1f8_b3bbf80d","updated":"2015-03-03 13:44:11.000000000","message":"My bad, isort was using the wrong config, splitting to \u0027import\u0027 and \u0027from * import\u0027 grouped by stdlib/3rd party and local. \nI\u0027ll just change things back to how they where with the addition of EMPTY_ETAG.","commit_id":"e2f88f91e48c6d80f01654f065f6184f53b912da"}]}
