)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"da6108fbefb9b805d9951c64c7803fdb766f42a4","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch enables to show a timestamp as a last-modified header"},{"line_number":10,"context_line":"generated from x-backend-put-timestamp header from container-server."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Note that the last-modifiedd header will be changed only when a"},{"line_number":13,"context_line":"request for container (PUT container or POST container) comes into"},{"line_number":14,"context_line":"Swift. i.e. some requests for objects (e.g. PUT object, POST object)"},{"line_number":15,"context_line":"will never affect the last-modified value."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"9a8ffd7b_982a752b","line":12,"updated":"2015-11-25 21:30:29.000000000","message":"typo: s/modifiedd/modified/","commit_id":"316c3c0fac2da59017fe4fe5329eee92f796517e"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"e9b46ea9c2787068db1c6301cd27a6ca3e214a9e","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch enables to show a timestamp as a last-modified header"},{"line_number":10,"context_line":"generated from x-backend-put-timestamp header from container-server."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Note that the last-modifiedd header will be changed only when a"},{"line_number":13,"context_line":"request for container (PUT container or POST container) comes into"},{"line_number":14,"context_line":"Swift. i.e. some requests for objects (e.g. PUT object, POST object)"},{"line_number":15,"context_line":"will never affect the last-modified value."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"9a8ffd7b_0de59fda","line":12,"in_reply_to":"9a8ffd7b_982a752b","updated":"2015-11-27 08:46:16.000000000","message":"Will fix","commit_id":"316c3c0fac2da59017fe4fe5329eee92f796517e"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"db5218cb3ef2e116236ed7fa9f0f6d69f88eaaa0","unresolved":false,"context_lines":[{"line_number":12,"context_line":"Note that the last-modifiedd header will be changed only when a"},{"line_number":13,"context_line":"request for container (PUT container or POST container) comes into"},{"line_number":14,"context_line":"Swift. i.e. some requests for objects (e.g. PUT object, POST object)"},{"line_number":15,"context_line":"will never affect the last-modified value."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I9971bf90d24eee8921f67c02b7e2c80fd8995623"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"9a8ffd7b_94cea22c","line":15,"updated":"2015-11-26 11:49:40.000000000","message":"This is technically correct; however if someone uses python-swiftclient to upload objects, it does a PUT to the container in advance (to make sure the container exists). Therefore the timestamp will be close to the one of the latest object when using python-swiftclient.\n\nMaybe you can add a small note about this?","commit_id":"316c3c0fac2da59017fe4fe5329eee92f796517e"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"e9b46ea9c2787068db1c6301cd27a6ca3e214a9e","unresolved":false,"context_lines":[{"line_number":12,"context_line":"Note that the last-modifiedd header will be changed only when a"},{"line_number":13,"context_line":"request for container (PUT container or POST container) comes into"},{"line_number":14,"context_line":"Swift. i.e. some requests for objects (e.g. PUT object, POST object)"},{"line_number":15,"context_line":"will never affect the last-modified value."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I9971bf90d24eee8921f67c02b7e2c80fd8995623"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"9a8ffd7b_8d6aef7f","line":15,"in_reply_to":"9a8ffd7b_94cea22c","updated":"2015-11-27 08:46:16.000000000","message":"Exactly, swiftclient will do so. yes, I\u0027ll add a note for that. Nice catch!","commit_id":"316c3c0fac2da59017fe4fe5329eee92f796517e"}],"swift/container/server.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"31ce089f9261f0d27e5f0794ed851686c2bbcb9f","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        headers[\u0027Content-Type\u0027] \u003d out_content_type"},{"line_number":419,"context_line":"        resp \u003d HTTPNoContent(request\u003dreq, headers\u003dheaders, charset\u003d\u0027utf-8\u0027)"},{"line_number":420,"context_line":"        resp.last_modified \u003d math.ceil("},{"line_number":421,"context_line":"            float(headers[\u0027X-Backend-PUT-Timestamp\u0027]))"},{"line_number":422,"context_line":"        return resp"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    def update_data_record(self, record):"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_2dccc234","line":421,"updated":"2016-06-06 13:08:07.000000000","message":"You should use X-PUT-Timestamp.\n\nX-Backend-PUT-Timestamp is the internal format of the timestamp and may have the offset part e.g. 1234567890/12345_00001 and will not cast to a float. See gen_resp_headers. X-PUT-Timestamp uses the normal format which is just a time value. Both represent the same time (as far as client is concerned).\n\nTry changing FORCE_INTERNAL to True here https://github.com/openstack/swift/blob/b37205fe2d7f634d4adaff817df5c331a19a161e/swift/common/utils.py#L701-L701 and you will see tests fail because this line blows up.","commit_id":"530ec77788f824f8fd4db6582d70295df197a774"}],"swift/proxy/controllers/container.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f312076c1ba746ab89f94c566684e3229147cff7","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                    del resp.headers[key]"},{"line_number":110,"context_line":"        if is_success(resp.status_int):"},{"line_number":111,"context_line":"            # X-Put-Timestamp will be filtered at BaseController so"},{"line_number":112,"context_line":"            # use X-Backend-Put-Timestamp, instead."},{"line_number":113,"context_line":"            resp.last_modified \u003d math.ceil("},{"line_number":114,"context_line":"                float(Timestamp(resp.headers[\u0027X-Backend-Put-Timestamp\u0027])))"},{"line_number":115,"context_line":"        return resp"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a2fa921_3d6921bf","line":112,"updated":"2015-10-06 15:25:47.000000000","message":"shouldn\u0027t we just fix base.py to not filter a header that it seems we know do want to expose to clients?","commit_id":"eb11ce6474f11c401f3daff652e00e9025f4eed5"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"26a7554cfeaf06b89d78e33a45082adde946ae05","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                    del resp.headers[key]"},{"line_number":110,"context_line":"        if is_success(resp.status_int):"},{"line_number":111,"context_line":"            # X-Put-Timestamp will be filtered at BaseController so"},{"line_number":112,"context_line":"            # use X-Backend-Put-Timestamp, instead."},{"line_number":113,"context_line":"            resp.last_modified \u003d math.ceil("},{"line_number":114,"context_line":"                float(Timestamp(resp.headers[\u0027X-Backend-Put-Timestamp\u0027])))"},{"line_number":115,"context_line":"        return resp"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a2fa921_da3dfa8f","line":112,"in_reply_to":"7a2fa921_267a1b78","updated":"2015-10-09 11:08:25.000000000","message":"Reading at container server[1], X-Put-Timestamp and X-Backend-Put-Timestamp seems to be set a same value when the container exists and this condition should be in successful \nGET so we *might* be able to use X-Put-Timestamp if we can remove the filter at [2]\n\nActually, the filter seems to exist on too old swift so I\u0027m not sure (and don\u0027t know) the reason why we don\u0027t want to show x-put-timestamp for users and I\u0027m bit worried it would break something else. In addition, right now, that\u0027s enough to use X-Backend-Put-Timestamp and it\u0027s absolutely used in Swift. (not for users) That\u0027s why I bet this seems safety and reasonable way to achieve my intention.\n\n1: https://github.com/openstack/swift/blob/master/swift/container/server.py#L48-L72\n\n2: https://github.com/openstack/swift/blob/master/swift/proxy/controllers/base.py#L74","commit_id":"eb11ce6474f11c401f3daff652e00e9025f4eed5"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"c417f4a72c0d586e538f07f01c6a9b831bb09744","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                    del resp.headers[key]"},{"line_number":110,"context_line":"        if is_success(resp.status_int):"},{"line_number":111,"context_line":"            # X-Put-Timestamp will be filtered at BaseController so"},{"line_number":112,"context_line":"            # use X-Backend-Put-Timestamp, instead."},{"line_number":113,"context_line":"            resp.last_modified \u003d math.ceil("},{"line_number":114,"context_line":"                float(Timestamp(resp.headers[\u0027X-Backend-Put-Timestamp\u0027])))"},{"line_number":115,"context_line":"        return resp"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a2fa921_267a1b78","line":112,"in_reply_to":"7a2fa921_3d6921bf","updated":"2015-10-08 07:19:07.000000000","message":"I think the filtering is done on the PUT, ie. X-Put-Timestamp is not updated, but X-Backend-Put-Timestamp is?","commit_id":"eb11ce6474f11c401f3daff652e00e9025f4eed5"}],"test/functional/tests.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"da6108fbefb9b805d9951c64c7803fdb766f42a4","unresolved":false,"context_lines":[{"line_number":737,"context_line":"        self.assertNotEqual(t1, t2)"},{"line_number":738,"context_line":"        eventlet.sleep(1)"},{"line_number":739,"context_line":""},{"line_number":740,"context_line":"        # PUT ojbect doesn\u0027t change container last modified timestamp"},{"line_number":741,"context_line":"        obj \u003d container.file(Utils.create_name())"},{"line_number":742,"context_line":"        self.assertTrue("},{"line_number":743,"context_line":"            obj.write(\"aaaaa\", hdrs\u003d{\u0027Content-Type\u0027: \u0027text/plain\u0027}))"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_387ee919","line":740,"updated":"2015-11-25 21:30:29.000000000","message":"typo: s/ojbect/object/","commit_id":"316c3c0fac2da59017fe4fe5329eee92f796517e"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"e9b46ea9c2787068db1c6301cd27a6ca3e214a9e","unresolved":false,"context_lines":[{"line_number":737,"context_line":"        self.assertNotEqual(t1, t2)"},{"line_number":738,"context_line":"        eventlet.sleep(1)"},{"line_number":739,"context_line":""},{"line_number":740,"context_line":"        # PUT ojbect doesn\u0027t change container last modified timestamp"},{"line_number":741,"context_line":"        obj \u003d container.file(Utils.create_name())"},{"line_number":742,"context_line":"        self.assertTrue("},{"line_number":743,"context_line":"            obj.write(\"aaaaa\", hdrs\u003d{\u0027Content-Type\u0027: \u0027text/plain\u0027}))"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_2d850306","line":740,"in_reply_to":"9a8ffd7b_387ee919","updated":"2015-11-27 08:46:16.000000000","message":"will fix","commit_id":"316c3c0fac2da59017fe4fe5329eee92f796517e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"da6108fbefb9b805d9951c64c7803fdb766f42a4","unresolved":false,"context_lines":[{"line_number":744,"context_line":"        info \u003d container.info()"},{"line_number":745,"context_line":"        t3 \u003d info[\u0027last_modified\u0027]"},{"line_number":746,"context_line":"        self.assertEqual(t2, t3)"},{"line_number":747,"context_line":"        eventlet.sleep(1)"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"        # POST ojbect also doesn\u0027t change container last modified timestamp"},{"line_number":750,"context_line":"        self.assertTrue("}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_586acd1b","line":747,"updated":"2015-11-25 21:30:29.000000000","message":"Do we need this last sleep? Wouldn\u0027t the sleep before object-PUT ensure the last part of the test is still valid?","commit_id":"316c3c0fac2da59017fe4fe5329eee92f796517e"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"e9b46ea9c2787068db1c6301cd27a6ca3e214a9e","unresolved":false,"context_lines":[{"line_number":744,"context_line":"        info \u003d container.info()"},{"line_number":745,"context_line":"        t3 \u003d info[\u0027last_modified\u0027]"},{"line_number":746,"context_line":"        self.assertEqual(t2, t3)"},{"line_number":747,"context_line":"        eventlet.sleep(1)"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"        # POST ojbect also doesn\u0027t change container last modified timestamp"},{"line_number":750,"context_line":"        self.assertTrue("}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_6d8f8b2a","line":747,"in_reply_to":"9a8ffd7b_586acd1b","updated":"2015-11-27 08:46:16.000000000","message":"Oh, yeah. we don\u0027t need this because we don\u0027t have another PUT after this. (These sleep are needed to increment the timpstamp) Nice catch!","commit_id":"316c3c0fac2da59017fe4fe5329eee92f796517e"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"39bb41cec773957204d8d19684ca35502deda8b9","unresolved":false,"context_lines":[{"line_number":744,"context_line":"        info \u003d container.info()"},{"line_number":745,"context_line":"        t3 \u003d info[\u0027last_modified\u0027]"},{"line_number":746,"context_line":"        self.assertEqual(t2, t3)"},{"line_number":747,"context_line":"        eventlet.sleep(1)"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"        # POST ojbect also doesn\u0027t change container last modified timestamp"},{"line_number":750,"context_line":"        self.assertTrue("}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_3071d8a8","line":747,"in_reply_to":"9a8ffd7b_6d8f8b2a","updated":"2015-11-27 08:58:50.000000000","message":"Plus, L746 ensures the last_modified timestamp is more than 1 sec before.","commit_id":"316c3c0fac2da59017fe4fe5329eee92f796517e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"31ce089f9261f0d27e5f0794ed851686c2bbcb9f","unresolved":false,"context_lines":[{"line_number":807,"context_line":"        t3 \u003d info[\u0027last_modified\u0027]"},{"line_number":808,"context_line":"        self.assertEqual(t2, t3)"},{"line_number":809,"context_line":""},{"line_number":810,"context_line":"        # POST ojbect also doesn\u0027t change container last modified timestamp"},{"line_number":811,"context_line":"        self.assertTrue("},{"line_number":812,"context_line":"            obj.sync_metadata({\u0027us\u0027: \u0027austin\u0027}))"},{"line_number":813,"context_line":"        info \u003d container.info()"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_4332baf2","line":810,"updated":"2016-06-06 13:08:07.000000000","message":"s/ojbect/object/","commit_id":"530ec77788f824f8fd4db6582d70295df197a774"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"1d2d31d0bb250fd272f0a5ef3ffec177dc04caa3","unresolved":false,"context_lines":[{"line_number":807,"context_line":"        t3 \u003d info[\u0027last_modified\u0027]"},{"line_number":808,"context_line":"        self.assertEqual(t2, t3)"},{"line_number":809,"context_line":""},{"line_number":810,"context_line":"        # POST ojbect also doesn\u0027t change container last modified timestamp"},{"line_number":811,"context_line":"        self.assertTrue("},{"line_number":812,"context_line":"            obj.sync_metadata({\u0027us\u0027: \u0027austin\u0027}))"},{"line_number":813,"context_line":"        info \u003d container.info()"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_4de91914","line":810,"in_reply_to":"7aa08908_4332baf2","updated":"2016-06-07 08:20:48.000000000","message":"thx! done.","commit_id":"530ec77788f824f8fd4db6582d70295df197a774"}],"test/unit/container/test_server.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"31ce089f9261f0d27e5f0794ed851686c2bbcb9f","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        start \u003d int(time.time())"},{"line_number":185,"context_line":"        ts \u003d (Timestamp(t).internal for t in itertools.count(start))"},{"line_number":186,"context_line":"        req \u003d Request.blank(\u0027/sda1/p/a/c\u0027, method\u003d\u0027PUT\u0027, headers\u003d{"},{"line_number":187,"context_line":"            \u0027x-timestamp\u0027: next(ts)})"},{"line_number":188,"context_line":"        req.get_response(self.controller)"},{"line_number":189,"context_line":"        req \u003d Request.blank(\u0027/sda1/p/a/c\u0027, method\u003d\u0027HEAD\u0027)"},{"line_number":190,"context_line":"        response \u003d req.get_response(self.controller)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_83e2e2d3","line":187,"updated":"2016-06-06 13:08:07.000000000","message":"maybe one of these tests could be parameterised to create the container with an offset timestamp, something like:\n\n  req \u003d Request.blank(\u0027/sda1/p/a/c\u0027, method\u003d\u0027PUT\u0027, headers\u003d{\n            \u0027x-timestamp\u0027: Timestamp(next(ts), offset).internal})","commit_id":"530ec77788f824f8fd4db6582d70295df197a774"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"1d2d31d0bb250fd272f0a5ef3ffec177dc04caa3","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        start \u003d int(time.time())"},{"line_number":185,"context_line":"        ts \u003d (Timestamp(t).internal for t in itertools.count(start))"},{"line_number":186,"context_line":"        req \u003d Request.blank(\u0027/sda1/p/a/c\u0027, method\u003d\u0027PUT\u0027, headers\u003d{"},{"line_number":187,"context_line":"            \u0027x-timestamp\u0027: next(ts)})"},{"line_number":188,"context_line":"        req.get_response(self.controller)"},{"line_number":189,"context_line":"        req \u003d Request.blank(\u0027/sda1/p/a/c\u0027, method\u003d\u0027HEAD\u0027)"},{"line_number":190,"context_line":"        response \u003d req.get_response(self.controller)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_6d67b525","line":187,"in_reply_to":"7aa08908_83e2e2d3","updated":"2016-06-07 08:20:48.000000000","message":"Good catch, I saw some errors you explained around X-Backend-Put-Timestamp implementation in swift/container/server.py with offset timestamp. I\u0027ll change there as you suggested and add some tests for avoiding regression. Thanks.","commit_id":"530ec77788f824f8fd4db6582d70295df197a774"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"86b39b3fdde82b80224cc8e22193f212cc503875","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        req.get_response(self.controller)"},{"line_number":234,"context_line":"        self._test_head(Timestamp(start), ts)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def test_HEAD_timestamp_with_offset(self):"},{"line_number":237,"context_line":"        start \u003d int(time.time())"},{"line_number":238,"context_line":"        ts \u003d (Timestamp(t, offset\u003d1).internal for t in itertools.count(start))"},{"line_number":239,"context_line":"        req \u003d Request.blank(\u0027/sda1/p/a/c\u0027, method\u003d\u0027PUT\u0027, headers\u003d{"}],"source_content_type":"text/x-python","patch_set":14,"id":"7aa08908_24c6629a","line":236,"updated":"2016-06-07 09:12:57.000000000","message":"nice","commit_id":"197fe6c5aa428d2d46f0833464e1eae0a7c90cf1"}],"test/unit/proxy/test_server.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"da6108fbefb9b805d9951c64c7803fdb766f42a4","unresolved":false,"context_lines":[{"line_number":6957,"context_line":"                    self.assertTrue(\u0027x-works\u0027 in res.headers)"},{"line_number":6958,"context_line":"                    self.assertEqual(res.headers[\u0027x-works\u0027], \u0027yes\u0027)"},{"line_number":6959,"context_line":"                if expected \u003c 300:"},{"line_number":6960,"context_line":"                    self.assertTrue(\u0027last-modified\u0027 in res.headers)"},{"line_number":6961,"context_line":"                    self.assertEqual(res.headers[\u0027last-modified\u0027],"},{"line_number":6962,"context_line":"                                     \u0027Thu, 01 Jan 1970 00:00:01 GMT\u0027)"},{"line_number":6963,"context_line":"                if c_expected:"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_185205de","line":6960,"updated":"2015-11-25 21:30:29.000000000","message":"nit: self.assertIn(\u0027last-modified\u0027, res.headers)","commit_id":"316c3c0fac2da59017fe4fe5329eee92f796517e"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"e9b46ea9c2787068db1c6301cd27a6ca3e214a9e","unresolved":false,"context_lines":[{"line_number":6957,"context_line":"                    self.assertTrue(\u0027x-works\u0027 in res.headers)"},{"line_number":6958,"context_line":"                    self.assertEqual(res.headers[\u0027x-works\u0027], \u0027yes\u0027)"},{"line_number":6959,"context_line":"                if expected \u003c 300:"},{"line_number":6960,"context_line":"                    self.assertTrue(\u0027last-modified\u0027 in res.headers)"},{"line_number":6961,"context_line":"                    self.assertEqual(res.headers[\u0027last-modified\u0027],"},{"line_number":6962,"context_line":"                                     \u0027Thu, 01 Jan 1970 00:00:01 GMT\u0027)"},{"line_number":6963,"context_line":"                if c_expected:"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_edc93b5a","line":6960,"in_reply_to":"9a8ffd7b_185205de","updated":"2015-11-27 08:46:16.000000000","message":"Will fix (and L6988 too)","commit_id":"316c3c0fac2da59017fe4fe5329eee92f796517e"}]}
