)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f00fcaa71144089efa89f83df4cd012b537ffbbe","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP: Round s3api listing LastModified to integer resolution"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"TODO: add func and/or s3apicompat test"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"s3api bucket listing elements currently have LastModified values with"},{"line_number":12,"context_line":"millisecond resolution. This is inconsistent with aws, so reduce the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5d796bc8_290c82d6","line":9,"updated":"2022-04-29 22:28:07.000000000","message":"There\u0027ll be an existing test to fix up; you\u0027ll want something like https://paste.opendev.org/show/bWd5h4igZhJhUwmzyfVV/ at least, though it\u0027d probably be good to exercise the workflow we\u0027re actually trying to enable.","commit_id":"93e2f0b79fc34a49441d60c6255ea384a2c8ea95"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e26e8f70ed9a91c250f1d80cdbae5de45e358455","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP: Round s3api listing LastModified to integer resolution"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"TODO: add func and/or s3apicompat test"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"s3api bucket listing elements currently have LastModified values with"},{"line_number":12,"context_line":"millisecond resolution. This is inconsistent with aws, so reduce the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"987cfafa_fb614b48","line":9,"in_reply_to":"5d796bc8_290c82d6","updated":"2022-05-10 10:27:37.000000000","message":"Done","commit_id":"93e2f0b79fc34a49441d60c6255ea384a2c8ea95"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"662ca6b3a5176248f579eaab7f5cbe71e33221a8","unresolved":true,"context_lines":[{"line_number":17,"context_line":"the nearest second to be consistent with the seconds-precision"},{"line_number":18,"context_line":"Last-Modified time header that is returned with an object GET or HEAD."},{"line_number":19,"context_line":"However, we continue to include millisecond digits set to 0 in the"},{"line_number":20,"context_line":"last-modified string, e.g.: \u00272014-06-10T22:47:32.000Z\u0027."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Also, fix the last modified time returned in an object copy response"},{"line_number":23,"context_line":"to be consistent with the last modified time of the object that was"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"987ef580_f1dd713c","line":20,"updated":"2022-05-09 17:22:32.000000000","message":"I feel a little bad sending a false signal of precision (\"2014-06-10T22:47:32Z\" seems more honest), but I think clients are already used to parsing milliseconds. Couple related reviews (though neither has much to say on the matter):\n\n- https://review.opendev.org/c/x/swift3/+/242578\n- https://review.opendev.org/c/x/swift3/+/194419","commit_id":"204b5e01f7dd840db050fb5b17c1b20b024e6bd7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"63a2d5c507ed66b380d6295aa0485176b32898c3","unresolved":false,"context_lines":[{"line_number":17,"context_line":"the nearest second to be consistent with the seconds-precision"},{"line_number":18,"context_line":"Last-Modified time header that is returned with an object GET or HEAD."},{"line_number":19,"context_line":"However, we continue to include millisecond digits set to 0 in the"},{"line_number":20,"context_line":"last-modified string, e.g.: \u00272014-06-10T22:47:32.000Z\u0027."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Also, fix the last modified time returned in an object copy response"},{"line_number":23,"context_line":"to be consistent with the last modified time of the object that was"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"4f140410_29815783","line":20,"in_reply_to":"5e6502da_cfe8b51c","updated":"2022-05-10 10:28:50.000000000","message":"Ack","commit_id":"204b5e01f7dd840db050fb5b17c1b20b024e6bd7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e26e8f70ed9a91c250f1d80cdbae5de45e358455","unresolved":true,"context_lines":[{"line_number":17,"context_line":"the nearest second to be consistent with the seconds-precision"},{"line_number":18,"context_line":"Last-Modified time header that is returned with an object GET or HEAD."},{"line_number":19,"context_line":"However, we continue to include millisecond digits set to 0 in the"},{"line_number":20,"context_line":"last-modified string, e.g.: \u00272014-06-10T22:47:32.000Z\u0027."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Also, fix the last modified time returned in an object copy response"},{"line_number":23,"context_line":"to be consistent with the last modified time of the object that was"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"5e6502da_cfe8b51c","line":20,"in_reply_to":"987ef580_f1dd713c","updated":"2022-05-10 10:27:37.000000000","message":"I sympathise. However, appending \u0027.000Z\u0027 is not a change w.r.t. master and we\u0027re in good company...from aws:\n\n  \u003cLastModified\u003e2021-06-04T11:27:39.000Z\u003c/LastModified\u003e","commit_id":"204b5e01f7dd840db050fb5b17c1b20b024e6bd7"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"15d8e32751120fd0e45b746d9e2d806dc2b851fe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"72987eba_d159235d","updated":"2022-04-29 17:06:52.000000000","message":"needs more test","commit_id":"93e2f0b79fc34a49441d60c6255ea384a2c8ea95"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"92f6ad90e9e84f1440e8a3ed89460eaf0302661d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"faaf44bd_1dc416cc","updated":"2022-05-03 20:15:45.000000000","message":"some tests still need fixing where the old last-modified format is still being asserted","commit_id":"7af15473ab5c3d05f6be84b40fd41b99eb4a20a0"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"662ca6b3a5176248f579eaab7f5cbe71e33221a8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"aad80e7a_937d44d6","updated":"2022-05-09 17:22:32.000000000","message":"I\u0027m content to ship it, though I think I\u0027ll try to get a follow-up out later today.","commit_id":"204b5e01f7dd840db050fb5b17c1b20b024e6bd7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"dfc2254dc3d6b48b3cff045f9fb56c2cd0ce2ce2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"9aa621fc_17eb815a","updated":"2022-05-09 18:41:36.000000000","message":"Proposed https://review.opendev.org/c/openstack/swift/+/841158\n\nWe go to some trouble to make sure we set TZ to UTC in a running server, so I\u0027m not *too* worried about the timezone issue.","commit_id":"204b5e01f7dd840db050fb5b17c1b20b024e6bd7"}],"swift/common/middleware/s3api/controllers/bucket.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"50b5b62c3ed93260ebc74d620c4d6ff3ae6b9824","unresolved":true,"context_lines":[{"line_number":272,"context_line":"    def _transform_last_modified(self, last_modified):"},{"line_number":273,"context_line":"        dt \u003d datetime.datetime.strptime(last_modified, \"%Y-%m-%dT%H:%M:%S.%f\")"},{"line_number":274,"context_line":"        if dt.microsecond:"},{"line_number":275,"context_line":"            dt \u003d dt.replace(second\u003ddt.second + 1)"},{"line_number":276,"context_line":"        return dt.strftime(\"%Y-%m-%dT%H:%M:%SZ\")"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def _add_object(self, req, elem, o, encoding_type, listing_type,"}],"source_content_type":"text/x-python","patch_set":1,"id":"8bab3bbb_b5da41f7","line":275,"updated":"2022-04-29 22:23:50.000000000","message":"Whomp whomp\n\n \u003e\u003e\u003e dt \u003d datetime.datetime.now().replace(second\u003d59, microsecond\u003d1)\n \u003e\u003e\u003e dt.replace(second\u003ddt.second+1)\n Traceback (most recent call last):\n   File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n ValueError: second must be in 0..59\n\nThis should work better?\n\n if dt.microsecond:\n     dt \u003d dt.replace(microsecond\u003d0) + datetime.timedelta(seconds\u003d1)","commit_id":"93e2f0b79fc34a49441d60c6255ea384a2c8ea95"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f6d34eb4cfda98ddd21377a59fbccb739753ef47","unresolved":false,"context_lines":[{"line_number":272,"context_line":"    def _transform_last_modified(self, last_modified):"},{"line_number":273,"context_line":"        dt \u003d datetime.datetime.strptime(last_modified, \"%Y-%m-%dT%H:%M:%S.%f\")"},{"line_number":274,"context_line":"        if dt.microsecond:"},{"line_number":275,"context_line":"            dt \u003d dt.replace(second\u003ddt.second + 1)"},{"line_number":276,"context_line":"        return dt.strftime(\"%Y-%m-%dT%H:%M:%SZ\")"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def _add_object(self, req, elem, o, encoding_type, listing_type,"}],"source_content_type":"text/x-python","patch_set":1,"id":"b9029ba8_3a20c6e9","line":275,"in_reply_to":"261a3145_e5281092","updated":"2022-05-06 16:27:16.000000000","message":"Done","commit_id":"93e2f0b79fc34a49441d60c6255ea384a2c8ea95"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"92f6ad90e9e84f1440e8a3ed89460eaf0302661d","unresolved":true,"context_lines":[{"line_number":272,"context_line":"    def _transform_last_modified(self, last_modified):"},{"line_number":273,"context_line":"        dt \u003d datetime.datetime.strptime(last_modified, \"%Y-%m-%dT%H:%M:%S.%f\")"},{"line_number":274,"context_line":"        if dt.microsecond:"},{"line_number":275,"context_line":"            dt \u003d dt.replace(second\u003ddt.second + 1)"},{"line_number":276,"context_line":"        return dt.strftime(\"%Y-%m-%dT%H:%M:%SZ\")"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def _add_object(self, req, elem, o, encoding_type, listing_type,"}],"source_content_type":"text/x-python","patch_set":1,"id":"261a3145_e5281092","line":275,"in_reply_to":"8bab3bbb_b5da41f7","updated":"2022-05-03 20:15:45.000000000","message":"yup, that was a little too quick and dirty :)","commit_id":"93e2f0b79fc34a49441d60c6255ea384a2c8ea95"}],"swift/common/middleware/s3api/utils.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"92f6ad90e9e84f1440e8a3ed89460eaf0302661d","unresolved":true,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"class S3Timestamp(utils.Timestamp):"},{"line_number":112,"context_line":"    S3_XML_FORMAT \u003d \"%Y-%m-%dT%H:%M:%SZ\""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    @property"},{"line_number":115,"context_line":"    def s3xmlformat(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f7ac3e6_56ad5c1b","line":112,"range":{"start_line":112,"start_character":36,"end_line":112,"end_character":39},"updated":"2022-05-03 20:15:45.000000000","message":"I guess we could choose to make this %S.000Z if we felt that the fractional digits were important, even though fixed at 000 ... but I\u0027m not sure AWS mandates that","commit_id":"7af15473ab5c3d05f6be84b40fd41b99eb4a20a0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"597b32ed217685fc687d4834879af147fdfca214","unresolved":true,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"class S3Timestamp(utils.Timestamp):"},{"line_number":112,"context_line":"    S3_XML_FORMAT \u003d \"%Y-%m-%dT%H:%M:%SZ\""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    @property"},{"line_number":115,"context_line":"    def s3xmlformat(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"a4ab92f0_9ee99ca1","line":112,"range":{"start_line":112,"start_character":36,"end_line":112,"end_character":39},"in_reply_to":"9f7ac3e6_56ad5c1b","updated":"2022-05-06 16:28:22.000000000","message":"done in patchset 4","commit_id":"7af15473ab5c3d05f6be84b40fd41b99eb4a20a0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"63a2d5c507ed66b380d6295aa0485176b32898c3","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"class S3Timestamp(utils.Timestamp):"},{"line_number":112,"context_line":"    S3_XML_FORMAT \u003d \"%Y-%m-%dT%H:%M:%SZ\""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    @property"},{"line_number":115,"context_line":"    def s3xmlformat(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"b0b0d777_b63c5b23","line":112,"range":{"start_line":112,"start_character":36,"end_line":112,"end_character":39},"in_reply_to":"a4ab92f0_9ee99ca1","updated":"2022-05-10 10:28:50.000000000","message":"Done","commit_id":"7af15473ab5c3d05f6be84b40fd41b99eb4a20a0"}],"swift/common/utils.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"92f6ad90e9e84f1440e8a3ed89460eaf0302661d","unresolved":true,"context_lines":[{"line_number":1352,"context_line":"        return isoformat"},{"line_number":1353,"context_line":""},{"line_number":1354,"context_line":"    @classmethod"},{"line_number":1355,"context_line":"    def from_isoformat(cls, date_string):"},{"line_number":1356,"context_line":"        dt \u003d datetime.datetime.strptime(date_string, \"%Y-%m-%dT%H:%M:%S.%f\")"},{"line_number":1357,"context_line":"        dt \u003d dt.replace(tzinfo\u003dUTC)"},{"line_number":1358,"context_line":"        seconds \u003d calendar.timegm(dt.timetuple(), )"}],"source_content_type":"text/x-python","patch_set":2,"id":"98c6919b_10b906fa","line":1355,"updated":"2022-05-03 20:15:45.000000000","message":"I found utils.last_modified_date_to_timestamp after writing this - probably duplicates","commit_id":"7af15473ab5c3d05f6be84b40fd41b99eb4a20a0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f6d34eb4cfda98ddd21377a59fbccb739753ef47","unresolved":false,"context_lines":[{"line_number":1352,"context_line":"        return isoformat"},{"line_number":1353,"context_line":""},{"line_number":1354,"context_line":"    @classmethod"},{"line_number":1355,"context_line":"    def from_isoformat(cls, date_string):"},{"line_number":1356,"context_line":"        dt \u003d datetime.datetime.strptime(date_string, \"%Y-%m-%dT%H:%M:%S.%f\")"},{"line_number":1357,"context_line":"        dt \u003d dt.replace(tzinfo\u003dUTC)"},{"line_number":1358,"context_line":"        seconds \u003d calendar.timegm(dt.timetuple(), )"}],"source_content_type":"text/x-python","patch_set":2,"id":"ae1d0056_23b28e1e","line":1355,"in_reply_to":"98c6919b_10b906fa","updated":"2022-05-06 16:27:16.000000000","message":"Done","commit_id":"7af15473ab5c3d05f6be84b40fd41b99eb4a20a0"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"662ca6b3a5176248f579eaab7f5cbe71e33221a8","unresolved":true,"context_lines":[{"line_number":1525,"context_line":"EPOCH \u003d datetime.datetime(1970, 1, 1)"},{"line_number":1526,"context_line":""},{"line_number":1527,"context_line":""},{"line_number":1528,"context_line":"def last_modified_date_to_timestamp(last_modified_date_str):"},{"line_number":1529,"context_line":"    \"\"\""},{"line_number":1530,"context_line":"    Convert a last modified date (like you\u0027d get from a container listing,"},{"line_number":1531,"context_line":"    e.g. 2014-02-28T23:22:36.698390) to a float."}],"source_content_type":"text/x-python","patch_set":4,"id":"f2097b43_8a19920f","line":1528,"updated":"2022-05-09 17:22:32.000000000","message":"Seems like we could just get rid of this function. I like it better as a class method anyway.","commit_id":"204b5e01f7dd840db050fb5b17c1b20b024e6bd7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e26e8f70ed9a91c250f1d80cdbae5de45e358455","unresolved":false,"context_lines":[{"line_number":1525,"context_line":"EPOCH \u003d datetime.datetime(1970, 1, 1)"},{"line_number":1526,"context_line":""},{"line_number":1527,"context_line":""},{"line_number":1528,"context_line":"def last_modified_date_to_timestamp(last_modified_date_str):"},{"line_number":1529,"context_line":"    \"\"\""},{"line_number":1530,"context_line":"    Convert a last modified date (like you\u0027d get from a container listing,"},{"line_number":1531,"context_line":"    e.g. 2014-02-28T23:22:36.698390) to a float."}],"source_content_type":"text/x-python","patch_set":4,"id":"384ebaff_b2ceba0e","line":1528,"in_reply_to":"52fa83e4_e8904359","updated":"2022-05-10 10:27:37.000000000","message":"I was going to say... :)","commit_id":"204b5e01f7dd840db050fb5b17c1b20b024e6bd7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"dfc2254dc3d6b48b3cff045f9fb56c2cd0ce2ce2","unresolved":false,"context_lines":[{"line_number":1525,"context_line":"EPOCH \u003d datetime.datetime(1970, 1, 1)"},{"line_number":1526,"context_line":""},{"line_number":1527,"context_line":""},{"line_number":1528,"context_line":"def last_modified_date_to_timestamp(last_modified_date_str):"},{"line_number":1529,"context_line":"    \"\"\""},{"line_number":1530,"context_line":"    Convert a last modified date (like you\u0027d get from a container listing,"},{"line_number":1531,"context_line":"    e.g. 2014-02-28T23:22:36.698390) to a float."}],"source_content_type":"text/x-python","patch_set":4,"id":"52fa83e4_e8904359","line":1528,"in_reply_to":"f2097b43_8a19920f","updated":"2022-05-09 18:41:36.000000000","message":"Oh -- for some reason, I thought I was looking at s3api/utils.py -- nvm, this is a more-public interface than I feel comfortable removing on a whim.","commit_id":"204b5e01f7dd840db050fb5b17c1b20b024e6bd7"}],"test/functional/s3api/test_multi_upload.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"662ca6b3a5176248f579eaab7f5cbe71e33221a8","unresolved":true,"context_lines":[{"line_number":264,"context_line":"        self.assertEqual(1, len(listing_last_modified), listing_last_modified)"},{"line_number":265,"context_line":"        self.assertEqual("},{"line_number":266,"context_line":"            listing_last_modified[0], copy_resp_last_modified,"},{"line_number":267,"context_line":"            \u0027%r !\u003d %r\u0027 % (listing_last_modified[0], copy_resp_last_modified))"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        # List Parts"},{"line_number":270,"context_line":"        key, upload_id \u003d uploads[0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a028591_6fd3b6c4","line":267,"updated":"2022-05-09 17:22:32.000000000","message":"We could simplify this all to\n\n self.assertEqual(listing_last_modified, [copy_resp_last_modified])","commit_id":"204b5e01f7dd840db050fb5b17c1b20b024e6bd7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e26e8f70ed9a91c250f1d80cdbae5de45e358455","unresolved":true,"context_lines":[{"line_number":264,"context_line":"        self.assertEqual(1, len(listing_last_modified), listing_last_modified)"},{"line_number":265,"context_line":"        self.assertEqual("},{"line_number":266,"context_line":"            listing_last_modified[0], copy_resp_last_modified,"},{"line_number":267,"context_line":"            \u0027%r !\u003d %r\u0027 % (listing_last_modified[0], copy_resp_last_modified))"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        # List Parts"},{"line_number":270,"context_line":"        key, upload_id \u003d uploads[0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"a2d1c4b9_160957b0","line":267,"in_reply_to":"1a028591_6fd3b6c4","updated":"2022-05-10 10:27:37.000000000","message":"+1","commit_id":"204b5e01f7dd840db050fb5b17c1b20b024e6bd7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"63a2d5c507ed66b380d6295aa0485176b32898c3","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        self.assertEqual(1, len(listing_last_modified), listing_last_modified)"},{"line_number":265,"context_line":"        self.assertEqual("},{"line_number":266,"context_line":"            listing_last_modified[0], copy_resp_last_modified,"},{"line_number":267,"context_line":"            \u0027%r !\u003d %r\u0027 % (listing_last_modified[0], copy_resp_last_modified))"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        # List Parts"},{"line_number":270,"context_line":"        key, upload_id \u003d uploads[0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"0396b5d1_1472052e","line":267,"in_reply_to":"a2d1c4b9_160957b0","updated":"2022-05-10 10:28:50.000000000","message":"Done","commit_id":"204b5e01f7dd840db050fb5b17c1b20b024e6bd7"}],"test/functional/s3api/test_object.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"dfc2254dc3d6b48b3cff045f9fb56c2cd0ce2ce2","unresolved":true,"context_lines":[{"line_number":122,"context_line":"        self.assertTrue(headers[\u0027last-modified\u0027] is not None)"},{"line_number":123,"context_line":"        self.assertEqual("},{"line_number":124,"context_line":"            float(S3Timestamp.from_s3xmlformat(copy_resp_last_modified_xml)),"},{"line_number":125,"context_line":"            mktime(parsedate(headers[\u0027last-modified\u0027])))"},{"line_number":126,"context_line":"        self.assertTrue(headers[\u0027content-type\u0027] is not None)"},{"line_number":127,"context_line":"        self.assertEqual(headers[\u0027content-length\u0027], str(len(content)))"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"862e3554_e30bd3c0","line":125,"updated":"2022-05-09 18:41:36.000000000","message":"I get timezone troubles running locally:\n\ntest.functional.s3api.test_object.TestS3ApiObject.test_object\n-------------------------------------------------------------\n\nCaptured traceback:\n~~~~~~~~~~~~~~~~~~~\n    Traceback (most recent call last):\n\n      File \"/home/tburke/code/swift/test/functional/s3api/test_object.py\", line 123, in test_object\n    self.assertEqual(\n\n      File \"/usr/lib64/python3.9/unittest/case.py\", line 837, in assertEqual\n    assertion_func(first, second, msg\u003dmsg)\n\n      File \"/usr/lib64/python3.9/unittest/case.py\", line 830, in _baseAssertEqual\n    raise self.failureException(msg)\n\n    AssertionError: 1652120520.0 !\u003d 1652145720.0","commit_id":"204b5e01f7dd840db050fb5b17c1b20b024e6bd7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e26e8f70ed9a91c250f1d80cdbae5de45e358455","unresolved":true,"context_lines":[{"line_number":122,"context_line":"        self.assertTrue(headers[\u0027last-modified\u0027] is not None)"},{"line_number":123,"context_line":"        self.assertEqual("},{"line_number":124,"context_line":"            float(S3Timestamp.from_s3xmlformat(copy_resp_last_modified_xml)),"},{"line_number":125,"context_line":"            mktime(parsedate(headers[\u0027last-modified\u0027])))"},{"line_number":126,"context_line":"        self.assertTrue(headers[\u0027content-type\u0027] is not None)"},{"line_number":127,"context_line":"        self.assertEqual(headers[\u0027content-length\u0027], str(len(content)))"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"efffdd5b_4958d9c8","line":125,"in_reply_to":"862e3554_e30bd3c0","updated":"2022-05-10 10:27:37.000000000","message":"ah, good catch, my vsaio is on utc","commit_id":"204b5e01f7dd840db050fb5b17c1b20b024e6bd7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"63a2d5c507ed66b380d6295aa0485176b32898c3","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        self.assertTrue(headers[\u0027last-modified\u0027] is not None)"},{"line_number":123,"context_line":"        self.assertEqual("},{"line_number":124,"context_line":"            float(S3Timestamp.from_s3xmlformat(copy_resp_last_modified_xml)),"},{"line_number":125,"context_line":"            mktime(parsedate(headers[\u0027last-modified\u0027])))"},{"line_number":126,"context_line":"        self.assertTrue(headers[\u0027content-type\u0027] is not None)"},{"line_number":127,"context_line":"        self.assertEqual(headers[\u0027content-length\u0027], str(len(content)))"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"044619bf_b1fa5ecf","line":125,"in_reply_to":"efffdd5b_4958d9c8","updated":"2022-05-10 10:28:50.000000000","message":"Done","commit_id":"204b5e01f7dd840db050fb5b17c1b20b024e6bd7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"662ca6b3a5176248f579eaab7f5cbe71e33221a8","unresolved":true,"context_lines":[{"line_number":793,"context_line":"        status, headers, body \u003d \\"},{"line_number":794,"context_line":"            self.conn.make_request(\u0027GET\u0027, self.bucket, obj, headers\u003dheaders)"},{"line_number":795,"context_line":"        self.assertEqual(status, 200)"},{"line_number":796,"context_line":"        self.assertCommonResponseHeaders(headers)"},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"    def test_get_object_if_match(self):"},{"line_number":799,"context_line":"        obj \u003d \u0027object\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"92ad0031_e1bef2dd","line":796,"updated":"2022-05-09 17:22:32.000000000","message":"Might also be good to check that passing it with If-Modified-Since returns a 304.","commit_id":"204b5e01f7dd840db050fb5b17c1b20b024e6bd7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"63a2d5c507ed66b380d6295aa0485176b32898c3","unresolved":false,"context_lines":[{"line_number":793,"context_line":"        status, headers, body \u003d \\"},{"line_number":794,"context_line":"            self.conn.make_request(\u0027GET\u0027, self.bucket, obj, headers\u003dheaders)"},{"line_number":795,"context_line":"        self.assertEqual(status, 200)"},{"line_number":796,"context_line":"        self.assertCommonResponseHeaders(headers)"},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"    def test_get_object_if_match(self):"},{"line_number":799,"context_line":"        obj \u003d \u0027object\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"93019269_ec7ceb47","line":796,"in_reply_to":"92ad0031_e1bef2dd","updated":"2022-05-10 10:28:50.000000000","message":"Done","commit_id":"204b5e01f7dd840db050fb5b17c1b20b024e6bd7"}],"test/unit/__init__.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"92f6ad90e9e84f1440e8a3ed89460eaf0302661d","unresolved":true,"context_lines":[{"line_number":1044,"context_line":"@contextmanager"},{"line_number":1045,"context_line":"def mock_timestamp_now(now\u003dNone, klass\u003dTimestamp):"},{"line_number":1046,"context_line":"    if now is None:"},{"line_number":1047,"context_line":"        now \u003d klass.now()"},{"line_number":1048,"context_line":"    with mocklib.patch(\u0027swift.common.utils.Timestamp.now\u0027,"},{"line_number":1049,"context_line":"                       classmethod(lambda c: now)):"},{"line_number":1050,"context_line":"        yield now"}],"source_content_type":"text/x-python","patch_set":2,"id":"4fddca4a_34c09c3f","line":1047,"updated":"2022-05-03 20:15:45.000000000","message":"this is so we can mock S3Timestamp instances","commit_id":"7af15473ab5c3d05f6be84b40fd41b99eb4a20a0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"63a2d5c507ed66b380d6295aa0485176b32898c3","unresolved":false,"context_lines":[{"line_number":1044,"context_line":"@contextmanager"},{"line_number":1045,"context_line":"def mock_timestamp_now(now\u003dNone, klass\u003dTimestamp):"},{"line_number":1046,"context_line":"    if now is None:"},{"line_number":1047,"context_line":"        now \u003d klass.now()"},{"line_number":1048,"context_line":"    with mocklib.patch(\u0027swift.common.utils.Timestamp.now\u0027,"},{"line_number":1049,"context_line":"                       classmethod(lambda c: now)):"},{"line_number":1050,"context_line":"        yield now"}],"source_content_type":"text/x-python","patch_set":2,"id":"3d8432d5_daf77bd5","line":1047,"in_reply_to":"4fddca4a_34c09c3f","updated":"2022-05-10 10:28:50.000000000","message":"Ack","commit_id":"7af15473ab5c3d05f6be84b40fd41b99eb4a20a0"}]}
