)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1871e73b5045fe8d36fb5fbd3e2f5722166c070e","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     indianwhocodes \u003cnairashwin952013@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2023-03-27 13:57:35 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"allow x-open-expired on POST requests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I5d218dbc41ce896d9fffa13d3a1dbcf3f28768f3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"11182b4b_2deb1f48","line":7,"updated":"2023-03-28 11:52:15.000000000","message":"Your commit message could be more informative 😊\n\nThere\u0027s some great guidelines for writing commit messages here https://wiki.openstack.org/wiki/GitCommitMessages \n\nIn this case, I think it would be useful to at least say why the header is being allowed on POSTs and what effect it might have. For example:\n\n  A POST request to an object with an \"x-open-expired: true\"\n  header will be accepted by the object server even if the\n  object has expired, provided the object has not yet been deleted\n  by the expirer. A POST request to an object replaces\n  all existing metadata, so in the case of an expired object\n  the POST will remove the existing X-Delete-At metadata, thus\n  restoring the object. The POST may of course also include a new\n  X-Delete-At time.\n  \nYou may also want to refer to the previous patch that added x-open-expired support to the GET path. The \u0027Related-Change\u0027 tag is often used for this, citing a gerrit ID, so in this case:\n\n  Related-Change: Ibe7dde0e3bf587d77e14808b169c02f8fb3dddb3","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9c24f3f2c3fcbf55f6f426bb57d7fe18ee406b2f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     indianwhocodes \u003cnairashwin952013@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2023-03-27 13:57:35 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"allow x-open-expired on POST requests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I5d218dbc41ce896d9fffa13d3a1dbcf3f28768f3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"b326c723_722be230","line":7,"in_reply_to":"11182b4b_2deb1f48","updated":"2023-04-06 11:00:29.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     indianwhocodes \u003cnairashwin952013@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2023-03-27 13:57:35 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"allow x-open-expired on POST requests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I5d218dbc41ce896d9fffa13d3a1dbcf3f28768f3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"d8430c81_7b4221df","line":7,"in_reply_to":"11182b4b_2deb1f48","updated":"2023-08-17 16:13:54.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9edb22cac1807dccf5e89ae5ae1d73b5c3a35bc9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"ac2d32eb_f6c8a805","updated":"2023-03-20 13:50:44.000000000","message":"In principle this change makes sense and is consistent with https://review.opendev.org/c/openstack/swift/+/874710, but there\u0027s some things to fix.\n\nA unit test under test/unit/proxy/ would be good.","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1871e73b5045fe8d36fb5fbd3e2f5722166c070e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"0096f309_d4534824","updated":"2023-03-28 11:52:15.000000000","message":"@Ashwin, keep going, I think there are some good learning opportunities as you work on this patch. ","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9c24f3f2c3fcbf55f6f426bb57d7fe18ee406b2f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"b2eab742_619eba16","updated":"2023-04-06 11:00:29.000000000","message":"@Ashwin thanks for the update\n\nThere\u0027s just the test in https://review.opendev.org/c/openstack/swift/+/877434/12..16/test/unit/obj/test_server.py to straighten out (as we discussed, give up modifying the existing test and copy/modify to a new one), then I think this will be good to go.","commit_id":"a0bc63b4cce963a7b682174ca10d1d18f98f99a5"}],"swift/obj/server.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9edb22cac1807dccf5e89ae5ae1d73b5c3a35bc9","unresolved":true,"context_lines":[{"line_number":643,"context_line":"        if new_delete_at and new_delete_at \u003c req_timestamp \\"},{"line_number":644,"context_line":"                and x_backend_open_expired:"},{"line_number":645,"context_line":"            return HTTPBadRequest(body\u003d\u0027X-Delete-At in past\u0027, request\u003drequest,"},{"line_number":646,"context_line":"                                  content_type\u003d\u0027text/plain\u0027)"},{"line_number":647,"context_line":"        next_part_power \u003d request.headers.get(\u0027X-Backend-Next-Part-Power\u0027)"},{"line_number":648,"context_line":"        try:"},{"line_number":649,"context_line":"            disk_file \u003d self.get_diskfile("}],"source_content_type":"text/x-python","patch_set":3,"id":"98b9525c_e68d1193","line":646,"updated":"2023-03-20 13:50:44.000000000","message":"this line of code cannot be reached. If the condition at line 643 is true:\n\n  if new_delete_at and new_delete_at \u003c req_timestamp \\\n                and x_backend_open_expired\n                \nthen we already returned at line 641","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":643,"context_line":"        if new_delete_at and new_delete_at \u003c req_timestamp \\"},{"line_number":644,"context_line":"                and x_backend_open_expired:"},{"line_number":645,"context_line":"            return HTTPBadRequest(body\u003d\u0027X-Delete-At in past\u0027, request\u003drequest,"},{"line_number":646,"context_line":"                                  content_type\u003d\u0027text/plain\u0027)"},{"line_number":647,"context_line":"        next_part_power \u003d request.headers.get(\u0027X-Backend-Next-Part-Power\u0027)"},{"line_number":648,"context_line":"        try:"},{"line_number":649,"context_line":"            disk_file \u003d self.get_diskfile("}],"source_content_type":"text/x-python","patch_set":3,"id":"5c7326a2_918fa9cb","line":646,"in_reply_to":"98b9525c_e68d1193","updated":"2023-08-17 16:13:54.000000000","message":"Ack","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1871e73b5045fe8d36fb5fbd3e2f5722166c070e","unresolved":false,"context_lines":[{"line_number":643,"context_line":"        if new_delete_at and new_delete_at \u003c req_timestamp \\"},{"line_number":644,"context_line":"                and x_backend_open_expired:"},{"line_number":645,"context_line":"            return HTTPBadRequest(body\u003d\u0027X-Delete-At in past\u0027, request\u003drequest,"},{"line_number":646,"context_line":"                                  content_type\u003d\u0027text/plain\u0027)"},{"line_number":647,"context_line":"        next_part_power \u003d request.headers.get(\u0027X-Backend-Next-Part-Power\u0027)"},{"line_number":648,"context_line":"        try:"},{"line_number":649,"context_line":"            disk_file \u003d self.get_diskfile("}],"source_content_type":"text/x-python","patch_set":3,"id":"9f1a6c01_f356a1ee","line":646,"in_reply_to":"98b9525c_e68d1193","updated":"2023-03-28 11:52:15.000000000","message":"Done","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9edb22cac1807dccf5e89ae5ae1d73b5c3a35bc9","unresolved":true,"context_lines":[{"line_number":418,"context_line":"        container_partition, container_nodes, container_path \u003d \\"},{"line_number":419,"context_line":"            self._get_update_target(req, container_info)"},{"line_number":420,"context_line":"        req.acl \u003d container_info[\u0027write_acl\u0027]"},{"line_number":421,"context_line":"        if \u0027x-open-expired\u0027 in req.headers:"},{"line_number":422,"context_line":"            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \u0027true\u0027"},{"line_number":423,"context_line":"        if \u0027swift.authorize\u0027 in req.environ:"},{"line_number":424,"context_line":"            aresp \u003d req.environ[\u0027swift.authorize\u0027](req)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf1db8e0_064cb976","line":421,"updated":"2023-03-20 13:50:44.000000000","message":"same as my comment here https://review.opendev.org/c/openstack/swift/+/874710/comment/fa9f7aef_e3c5216f/ , please add a check that the header value is truthy","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        container_partition, container_nodes, container_path \u003d \\"},{"line_number":419,"context_line":"            self._get_update_target(req, container_info)"},{"line_number":420,"context_line":"        req.acl \u003d container_info[\u0027write_acl\u0027]"},{"line_number":421,"context_line":"        if \u0027x-open-expired\u0027 in req.headers:"},{"line_number":422,"context_line":"            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \u0027true\u0027"},{"line_number":423,"context_line":"        if \u0027swift.authorize\u0027 in req.environ:"},{"line_number":424,"context_line":"            aresp \u003d req.environ[\u0027swift.authorize\u0027](req)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1afd9360_07ca784e","line":421,"in_reply_to":"bf1db8e0_064cb976","updated":"2023-08-17 16:13:54.000000000","message":"Ack","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        container_partition, container_nodes, container_path \u003d \\"},{"line_number":419,"context_line":"            self._get_update_target(req, container_info)"},{"line_number":420,"context_line":"        req.acl \u003d container_info[\u0027write_acl\u0027]"},{"line_number":421,"context_line":"        if \u0027x-open-expired\u0027 in req.headers:"},{"line_number":422,"context_line":"            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \u0027true\u0027"},{"line_number":423,"context_line":"        if \u0027swift.authorize\u0027 in req.environ:"},{"line_number":424,"context_line":"            aresp \u003d req.environ[\u0027swift.authorize\u0027](req)"}],"source_content_type":"text/x-python","patch_set":3,"id":"0efff85b_82eec290","line":421,"in_reply_to":"bf1db8e0_064cb976","updated":"2023-04-03 11:49:39.000000000","message":"Done","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1871e73b5045fe8d36fb5fbd3e2f5722166c070e","unresolved":true,"context_lines":[{"line_number":251,"context_line":"        if config_true_value(req.headers.get(\u0027x-open-expired\u0027)):"},{"line_number":252,"context_line":"            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \u0027true\u0027"},{"line_number":253,"context_line":"        else:"},{"line_number":254,"context_line":"            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \u0027false\u0027"},{"line_number":255,"context_line":"        if \u0027swift.authorize\u0027 in req.environ:"},{"line_number":256,"context_line":"            aresp \u003d req.environ[\u0027swift.authorize\u0027](req)"},{"line_number":257,"context_line":"            if aresp:"}],"source_content_type":"text/x-python","patch_set":10,"id":"f35d81a9_0a6a1f00","line":254,"updated":"2023-03-28 11:52:15.000000000","message":"IMHO it would be sufficient to just not send the header when it\u0027s false.\n\nIf you do want to always send it you could write:\n\n  req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \\\n      str(config_true_value(req.headers.get(\u0027x-open-expired\u0027)))","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        if config_true_value(req.headers.get(\u0027x-open-expired\u0027)):"},{"line_number":252,"context_line":"            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \u0027true\u0027"},{"line_number":253,"context_line":"        else:"},{"line_number":254,"context_line":"            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \u0027false\u0027"},{"line_number":255,"context_line":"        if \u0027swift.authorize\u0027 in req.environ:"},{"line_number":256,"context_line":"            aresp \u003d req.environ[\u0027swift.authorize\u0027](req)"},{"line_number":257,"context_line":"            if aresp:"}],"source_content_type":"text/x-python","patch_set":10,"id":"263785b2_bcb71ebb","line":254,"in_reply_to":"f35d81a9_0a6a1f00","updated":"2023-08-17 16:13:54.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        if config_true_value(req.headers.get(\u0027x-open-expired\u0027)):"},{"line_number":252,"context_line":"            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \u0027true\u0027"},{"line_number":253,"context_line":"        else:"},{"line_number":254,"context_line":"            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \u0027false\u0027"},{"line_number":255,"context_line":"        if \u0027swift.authorize\u0027 in req.environ:"},{"line_number":256,"context_line":"            aresp \u003d req.environ[\u0027swift.authorize\u0027](req)"},{"line_number":257,"context_line":"            if aresp:"}],"source_content_type":"text/x-python","patch_set":10,"id":"5b8c1f83_3bb316d1","line":254,"in_reply_to":"f35d81a9_0a6a1f00","updated":"2023-04-03 11:49:39.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1871e73b5045fe8d36fb5fbd3e2f5722166c070e","unresolved":true,"context_lines":[{"line_number":423,"context_line":"        if config_true_value(req.headers.get(\u0027x-open-expired\u0027)):"},{"line_number":424,"context_line":"            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \u0027true\u0027"},{"line_number":425,"context_line":"        else:"},{"line_number":426,"context_line":"            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \u0027false\u0027"},{"line_number":427,"context_line":"        if \u0027swift.authorize\u0027 in req.environ:"},{"line_number":428,"context_line":"            aresp \u003d req.environ[\u0027swift.authorize\u0027](req)"},{"line_number":429,"context_line":"            if aresp:"}],"source_content_type":"text/x-python","patch_set":10,"id":"ca1fa403_f69b904d","line":426,"updated":"2023-03-28 11:52:15.000000000","message":"as above, I\u0027d suggest just not sending the header to backend when false","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":false,"context_lines":[{"line_number":423,"context_line":"        if config_true_value(req.headers.get(\u0027x-open-expired\u0027)):"},{"line_number":424,"context_line":"            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \u0027true\u0027"},{"line_number":425,"context_line":"        else:"},{"line_number":426,"context_line":"            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \u0027false\u0027"},{"line_number":427,"context_line":"        if \u0027swift.authorize\u0027 in req.environ:"},{"line_number":428,"context_line":"            aresp \u003d req.environ[\u0027swift.authorize\u0027](req)"},{"line_number":429,"context_line":"            if aresp:"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f602354_eab50f1f","line":426,"in_reply_to":"ca1fa403_f69b904d","updated":"2023-04-03 11:49:39.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":423,"context_line":"        if config_true_value(req.headers.get(\u0027x-open-expired\u0027)):"},{"line_number":424,"context_line":"            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \u0027true\u0027"},{"line_number":425,"context_line":"        else:"},{"line_number":426,"context_line":"            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \u0027false\u0027"},{"line_number":427,"context_line":"        if \u0027swift.authorize\u0027 in req.environ:"},{"line_number":428,"context_line":"            aresp \u003d req.environ[\u0027swift.authorize\u0027](req)"},{"line_number":429,"context_line":"            if aresp:"}],"source_content_type":"text/x-python","patch_set":10,"id":"ea0afa40_b8dbfc75","line":426,"in_reply_to":"ca1fa403_f69b904d","updated":"2023-08-17 16:13:54.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":true,"context_lines":[{"line_number":250,"context_line":"        req.headers[\u0027X-Backend-Storage-Policy-Index\u0027] \u003d policy_index"},{"line_number":251,"context_line":"        if config_true_value(req.headers.get(\u0027x-open-expired\u0027)):"},{"line_number":252,"context_line":"            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \\"},{"line_number":253,"context_line":"                str(config_true_value(req.headers.get(\u0027x-open-expired\u0027)))"},{"line_number":254,"context_line":"        if \u0027swift.authorize\u0027 in req.environ:"},{"line_number":255,"context_line":"            aresp \u003d req.environ[\u0027swift.authorize\u0027](req)"},{"line_number":256,"context_line":"            if aresp:"}],"source_content_type":"text/x-python","patch_set":12,"id":"4a843c28_beb6a493","line":253,"updated":"2023-04-03 11:49:39.000000000","message":"ah, I can see how my previous comments resulted in some confusion :/\n\nNow that you are only sending the header when it is true (my preference), it is simpler and sufficient to write:\n\n  if config_true_value(req.headers.get(\u0027x-open-expired\u0027)):\n            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \u0027true\u0027\n            \ni.e. what you had before\n\n\n(the point I was trying to make in the previous comment was:\n\nIf you wanted to send the backend header when it is true or false (not my preference) then you could write:\n\n\n  req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \\\n                str(config_true_value(req.headers.get(\u0027x-open-expired\u0027)))\n                \nwithout the preceding:\n\n  if config_true_value(req.headers.get(\u0027x-open-expired\u0027)):\n\n)","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        req.headers[\u0027X-Backend-Storage-Policy-Index\u0027] \u003d policy_index"},{"line_number":251,"context_line":"        if config_true_value(req.headers.get(\u0027x-open-expired\u0027)):"},{"line_number":252,"context_line":"            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \\"},{"line_number":253,"context_line":"                str(config_true_value(req.headers.get(\u0027x-open-expired\u0027)))"},{"line_number":254,"context_line":"        if \u0027swift.authorize\u0027 in req.environ:"},{"line_number":255,"context_line":"            aresp \u003d req.environ[\u0027swift.authorize\u0027](req)"},{"line_number":256,"context_line":"            if aresp:"}],"source_content_type":"text/x-python","patch_set":12,"id":"69367259_b7aaea9f","line":253,"in_reply_to":"4a843c28_beb6a493","updated":"2023-08-17 16:13:54.000000000","message":"Ack","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9c24f3f2c3fcbf55f6f426bb57d7fe18ee406b2f","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        req.headers[\u0027X-Backend-Storage-Policy-Index\u0027] \u003d policy_index"},{"line_number":251,"context_line":"        if config_true_value(req.headers.get(\u0027x-open-expired\u0027)):"},{"line_number":252,"context_line":"            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \\"},{"line_number":253,"context_line":"                str(config_true_value(req.headers.get(\u0027x-open-expired\u0027)))"},{"line_number":254,"context_line":"        if \u0027swift.authorize\u0027 in req.environ:"},{"line_number":255,"context_line":"            aresp \u003d req.environ[\u0027swift.authorize\u0027](req)"},{"line_number":256,"context_line":"            if aresp:"}],"source_content_type":"text/x-python","patch_set":12,"id":"e3c1b2ae_628ecf83","line":253,"in_reply_to":"4a843c28_beb6a493","updated":"2023-04-06 11:00:29.000000000","message":"Done","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":true,"context_lines":[{"line_number":421,"context_line":"        req.acl \u003d container_info[\u0027write_acl\u0027]"},{"line_number":422,"context_line":"        if config_true_value(req.headers.get(\u0027x-open-expired\u0027)):"},{"line_number":423,"context_line":"            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \\"},{"line_number":424,"context_line":"                str(config_true_value(req.headers.get(\u0027x-open-expired\u0027)))"},{"line_number":425,"context_line":"        if \u0027swift.authorize\u0027 in req.environ:"},{"line_number":426,"context_line":"            aresp \u003d req.environ[\u0027swift.authorize\u0027](req)"},{"line_number":427,"context_line":"            if aresp:"}],"source_content_type":"text/x-python","patch_set":12,"id":"e00fd784_b5638644","line":424,"updated":"2023-04-03 11:49:39.000000000","message":"same comment as line 423","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        req.acl \u003d container_info[\u0027write_acl\u0027]"},{"line_number":422,"context_line":"        if config_true_value(req.headers.get(\u0027x-open-expired\u0027)):"},{"line_number":423,"context_line":"            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \\"},{"line_number":424,"context_line":"                str(config_true_value(req.headers.get(\u0027x-open-expired\u0027)))"},{"line_number":425,"context_line":"        if \u0027swift.authorize\u0027 in req.environ:"},{"line_number":426,"context_line":"            aresp \u003d req.environ[\u0027swift.authorize\u0027](req)"},{"line_number":427,"context_line":"            if aresp:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3b5ccaf1_57d4b265","line":424,"in_reply_to":"e00fd784_b5638644","updated":"2023-08-17 16:13:54.000000000","message":"Done","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9c24f3f2c3fcbf55f6f426bb57d7fe18ee406b2f","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        req.acl \u003d container_info[\u0027write_acl\u0027]"},{"line_number":422,"context_line":"        if config_true_value(req.headers.get(\u0027x-open-expired\u0027)):"},{"line_number":423,"context_line":"            req.headers[\u0027X-Backend-Open-Expired\u0027] \u003d \\"},{"line_number":424,"context_line":"                str(config_true_value(req.headers.get(\u0027x-open-expired\u0027)))"},{"line_number":425,"context_line":"        if \u0027swift.authorize\u0027 in req.environ:"},{"line_number":426,"context_line":"            aresp \u003d req.environ[\u0027swift.authorize\u0027](req)"},{"line_number":427,"context_line":"            if aresp:"}],"source_content_type":"text/x-python","patch_set":12,"id":"62d7c618_bde9b35a","line":424,"in_reply_to":"e00fd784_b5638644","updated":"2023-04-06 11:00:29.000000000","message":"Done","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"}],"test/functional/test_object.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9edb22cac1807dccf5e89ae5ae1d73b5c3a35bc9","unresolved":true,"context_lines":[{"line_number":536,"context_line":""},{"line_number":537,"context_line":"        resp \u003d retry(post_with_x_open_expired)"},{"line_number":538,"context_line":"        resp.read()"},{"line_number":539,"context_line":"        # verify object is still expired"},{"line_number":540,"context_line":"        self.assertEqual(resp.status, 202)"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"        # To avoid an error when the object deletion in tearDown(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"4ac72521_da9fb4a2","line":539,"range":{"start_line":539,"start_character":27,"end_line":539,"end_character":32},"updated":"2023-03-20 13:50:44.000000000","message":"comment is wrong - the 202 response only verifies that the POST was accepted","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":536,"context_line":""},{"line_number":537,"context_line":"        resp \u003d retry(post_with_x_open_expired)"},{"line_number":538,"context_line":"        resp.read()"},{"line_number":539,"context_line":"        # verify object is still expired"},{"line_number":540,"context_line":"        self.assertEqual(resp.status, 202)"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"        # To avoid an error when the object deletion in tearDown(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"7e55c934_ffe5045e","line":539,"range":{"start_line":539,"start_character":27,"end_line":539,"end_character":32},"in_reply_to":"4ac72521_da9fb4a2","updated":"2023-08-17 16:13:54.000000000","message":"Ack","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":false,"context_lines":[{"line_number":536,"context_line":""},{"line_number":537,"context_line":"        resp \u003d retry(post_with_x_open_expired)"},{"line_number":538,"context_line":"        resp.read()"},{"line_number":539,"context_line":"        # verify object is still expired"},{"line_number":540,"context_line":"        self.assertEqual(resp.status, 202)"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"        # To avoid an error when the object deletion in tearDown(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"52168bc9_dcd51324","line":539,"range":{"start_line":539,"start_character":27,"end_line":539,"end_character":32},"in_reply_to":"4ac72521_da9fb4a2","updated":"2023-04-03 11:49:39.000000000","message":"Done","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9edb22cac1807dccf5e89ae5ae1d73b5c3a35bc9","unresolved":true,"context_lines":[{"line_number":538,"context_line":"        resp.read()"},{"line_number":539,"context_line":"        # verify object is still expired"},{"line_number":540,"context_line":"        self.assertEqual(resp.status, 202)"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"        # To avoid an error when the object deletion in tearDown(),"},{"line_number":543,"context_line":"        # the object is added again."},{"line_number":544,"context_line":"        resp \u003d retry(put)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa411d34_db5c18e3","line":541,"updated":"2023-03-20 13:50:44.000000000","message":"you need to add another GET here without x-open-expired to verify that the object can now be read, and also check the X-Delete-At header has been set as expected by the POST.","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":538,"context_line":"        resp.read()"},{"line_number":539,"context_line":"        # verify object is still expired"},{"line_number":540,"context_line":"        self.assertEqual(resp.status, 202)"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"        # To avoid an error when the object deletion in tearDown(),"},{"line_number":543,"context_line":"        # the object is added again."},{"line_number":544,"context_line":"        resp \u003d retry(put)"}],"source_content_type":"text/x-python","patch_set":3,"id":"e9d37148_06b4cce4","line":541,"in_reply_to":"fa411d34_db5c18e3","updated":"2023-08-17 16:13:54.000000000","message":"Done","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1871e73b5045fe8d36fb5fbd3e2f5722166c070e","unresolved":false,"context_lines":[{"line_number":538,"context_line":"        resp.read()"},{"line_number":539,"context_line":"        # verify object is still expired"},{"line_number":540,"context_line":"        self.assertEqual(resp.status, 202)"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"        # To avoid an error when the object deletion in tearDown(),"},{"line_number":543,"context_line":"        # the object is added again."},{"line_number":544,"context_line":"        resp \u003d retry(put)"}],"source_content_type":"text/x-python","patch_set":3,"id":"f1cb5460_f6bdc958","line":541,"in_reply_to":"fa411d34_db5c18e3","updated":"2023-03-28 11:52:15.000000000","message":"Done","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1871e73b5045fe8d36fb5fbd3e2f5722166c070e","unresolved":true,"context_lines":[{"line_number":506,"context_line":"                {\u0027X-Auth-Token\u0027: token, \u0027X-Open-Expired\u0027: True})"},{"line_number":507,"context_line":"            return check_response(conn)"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        def get_with_x_open_expired_false(url, token, parsed, conn):"},{"line_number":510,"context_line":"            conn.request("},{"line_number":511,"context_line":"                \u0027GET\u0027,"},{"line_number":512,"context_line":"                \u0027%s/%s/%s\u0027 % (parsed.path, self.container, \u0027x_delete_at\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"9bbc300d_176ac705","line":509,"updated":"2023-03-28 11:52:15.000000000","message":"this should be in the previous patch, but it\u0027s ok and better that it is added somewhere :) Maybe the two patches will be squashed at some point anyway?","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":false,"context_lines":[{"line_number":506,"context_line":"                {\u0027X-Auth-Token\u0027: token, \u0027X-Open-Expired\u0027: True})"},{"line_number":507,"context_line":"            return check_response(conn)"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        def get_with_x_open_expired_false(url, token, parsed, conn):"},{"line_number":510,"context_line":"            conn.request("},{"line_number":511,"context_line":"                \u0027GET\u0027,"},{"line_number":512,"context_line":"                \u0027%s/%s/%s\u0027 % (parsed.path, self.container, \u0027x_delete_at\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"6897957b_86ea5538","line":509,"in_reply_to":"9bbc300d_176ac705","updated":"2023-04-03 11:49:39.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":506,"context_line":"                {\u0027X-Auth-Token\u0027: token, \u0027X-Open-Expired\u0027: True})"},{"line_number":507,"context_line":"            return check_response(conn)"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        def get_with_x_open_expired_false(url, token, parsed, conn):"},{"line_number":510,"context_line":"            conn.request("},{"line_number":511,"context_line":"                \u0027GET\u0027,"},{"line_number":512,"context_line":"                \u0027%s/%s/%s\u0027 % (parsed.path, self.container, \u0027x_delete_at\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"8d0300b2_d153f417","line":509,"in_reply_to":"9bbc300d_176ac705","updated":"2023-08-17 16:13:54.000000000","message":"I understand that you wanted these changes squashed in the previous patch chain but it has become harder to track which changes need to be stacked on top of\nref: https://review.opendev.org/c/openstack/swift/+/874710/19\n\nSo I made all the changes in the follow-up here","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1871e73b5045fe8d36fb5fbd3e2f5722166c070e","unresolved":true,"context_lines":[{"line_number":512,"context_line":"                \u0027%s/%s/%s\u0027 % (parsed.path, self.container, \u0027x_delete_at\u0027),"},{"line_number":513,"context_line":"                \u0027\u0027,"},{"line_number":514,"context_line":"                {\u0027X-Auth-Token\u0027: token, \u0027X-Open-Expired\u0027: False})"},{"line_number":515,"context_line":"            return check_response(conn)"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"        def post_with_x_open_expired(url, token, parsed, conn):"},{"line_number":518,"context_line":"            dt \u003d datetime.datetime.now()"}],"source_content_type":"text/x-python","patch_set":10,"id":"ca44ed9a_ba9259a5","line":515,"updated":"2023-03-28 11:52:15.000000000","message":"how about avoiding the new helper methods by making the existing helper more helpful:\n\n  def get(url, token, parsed, conn, extra_headers\u003dNone):\n      headers \u003d {\u0027X-Auth-Token\u0027: token}\n      if extra_headers:\n          headers.update(extra_headers)\n      conn.request(\n          \u0027GET\u0027,\n          \u0027%s/%s/%s\u0027 % (parsed.path, self.container, \u0027x_delete_at\u0027),\n          \u0027\u0027,\n          headers)\n      return check_response(conn)\n      \nthen you can call:\n \n  retry(get, extra_headers\u003d{\u0027X-Open-Expired\u0027: True})\n\nor\n\n  retry(get, extra_headers\u003d{\u0027X-Open-Expired\u0027: False})\n\nwhich is more succinct.","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":512,"context_line":"                \u0027%s/%s/%s\u0027 % (parsed.path, self.container, \u0027x_delete_at\u0027),"},{"line_number":513,"context_line":"                \u0027\u0027,"},{"line_number":514,"context_line":"                {\u0027X-Auth-Token\u0027: token, \u0027X-Open-Expired\u0027: False})"},{"line_number":515,"context_line":"            return check_response(conn)"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"        def post_with_x_open_expired(url, token, parsed, conn):"},{"line_number":518,"context_line":"            dt \u003d datetime.datetime.now()"}],"source_content_type":"text/x-python","patch_set":10,"id":"c0791c29_8fab5ab3","line":515,"in_reply_to":"ca44ed9a_ba9259a5","updated":"2023-08-17 16:13:54.000000000","message":"Ack","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":false,"context_lines":[{"line_number":512,"context_line":"                \u0027%s/%s/%s\u0027 % (parsed.path, self.container, \u0027x_delete_at\u0027),"},{"line_number":513,"context_line":"                \u0027\u0027,"},{"line_number":514,"context_line":"                {\u0027X-Auth-Token\u0027: token, \u0027X-Open-Expired\u0027: False})"},{"line_number":515,"context_line":"            return check_response(conn)"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"        def post_with_x_open_expired(url, token, parsed, conn):"},{"line_number":518,"context_line":"            dt \u003d datetime.datetime.now()"}],"source_content_type":"text/x-python","patch_set":10,"id":"5241784f_a070f296","line":515,"in_reply_to":"ca44ed9a_ba9259a5","updated":"2023-04-03 11:49:39.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1871e73b5045fe8d36fb5fbd3e2f5722166c070e","unresolved":true,"context_lines":[{"line_number":526,"context_line":"                 \u0027Content-Length\u0027: \u00270\u0027,"},{"line_number":527,"context_line":"                 \u0027X-Delete-At\u0027: delete_time,"},{"line_number":528,"context_line":"                 \u0027X-Open-Expired\u0027: True})"},{"line_number":529,"context_line":"            return check_response(conn)"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"        resp \u003d retry(get)"},{"line_number":532,"context_line":"        resp.read()"}],"source_content_type":"text/x-python","patch_set":10,"id":"068b3c71_0e7f0f90","line":529,"updated":"2023-03-28 11:52:15.000000000","message":"It would be good to also try a POST with x_open_expired \u003d false\n\nI would suggest the same as for your get_* helper methods i.e. parameterise one post helper:\n\n  def post_with_x_open_expired(url, token, parsed, conn, extra_headers \u003d{})\n      etc...","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":526,"context_line":"                 \u0027Content-Length\u0027: \u00270\u0027,"},{"line_number":527,"context_line":"                 \u0027X-Delete-At\u0027: delete_time,"},{"line_number":528,"context_line":"                 \u0027X-Open-Expired\u0027: True})"},{"line_number":529,"context_line":"            return check_response(conn)"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"        resp \u003d retry(get)"},{"line_number":532,"context_line":"        resp.read()"}],"source_content_type":"text/x-python","patch_set":10,"id":"50352a9e_f928201b","line":529,"in_reply_to":"068b3c71_0e7f0f90","updated":"2023-08-17 16:13:54.000000000","message":"Ack","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":false,"context_lines":[{"line_number":526,"context_line":"                 \u0027Content-Length\u0027: \u00270\u0027,"},{"line_number":527,"context_line":"                 \u0027X-Delete-At\u0027: delete_time,"},{"line_number":528,"context_line":"                 \u0027X-Open-Expired\u0027: True})"},{"line_number":529,"context_line":"            return check_response(conn)"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"        resp \u003d retry(get)"},{"line_number":532,"context_line":"        resp.read()"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff87a984_f9f73815","line":529,"in_reply_to":"068b3c71_0e7f0f90","updated":"2023-04-03 11:49:39.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1871e73b5045fe8d36fb5fbd3e2f5722166c070e","unresolved":true,"context_lines":[{"line_number":543,"context_line":"        resp \u003d retry(get_with_x_open_expired)"},{"line_number":544,"context_line":"        resp.read()"},{"line_number":545,"context_line":"        # read the expired object with magic x-open-expired header"},{"line_number":546,"context_line":"        self.assertEqual(resp.status, 200)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"        resp \u003d retry(get)"},{"line_number":549,"context_line":"        resp.read()"}],"source_content_type":"text/x-python","patch_set":10,"id":"4ac61e9a_805bc585","line":546,"updated":"2023-03-28 11:52:15.000000000","message":"we ought to have same assertion for HEAD (strictly this should be in the previous patch)\n\n(again, parameterise the head() helper method with extra_headers)","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":543,"context_line":"        resp \u003d retry(get_with_x_open_expired)"},{"line_number":544,"context_line":"        resp.read()"},{"line_number":545,"context_line":"        # read the expired object with magic x-open-expired header"},{"line_number":546,"context_line":"        self.assertEqual(resp.status, 200)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"        resp \u003d retry(get)"},{"line_number":549,"context_line":"        resp.read()"}],"source_content_type":"text/x-python","patch_set":10,"id":"5848b70c_85b85963","line":546,"in_reply_to":"4ac61e9a_805bc585","updated":"2023-08-17 16:13:54.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":false,"context_lines":[{"line_number":543,"context_line":"        resp \u003d retry(get_with_x_open_expired)"},{"line_number":544,"context_line":"        resp.read()"},{"line_number":545,"context_line":"        # read the expired object with magic x-open-expired header"},{"line_number":546,"context_line":"        self.assertEqual(resp.status, 200)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"        resp \u003d retry(get)"},{"line_number":549,"context_line":"        resp.read()"}],"source_content_type":"text/x-python","patch_set":10,"id":"94cc9db7_d5f64c9b","line":546,"in_reply_to":"4ac61e9a_805bc585","updated":"2023-04-03 11:49:39.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1871e73b5045fe8d36fb5fbd3e2f5722166c070e","unresolved":true,"context_lines":[{"line_number":550,"context_line":"        # verify object is still expired"},{"line_number":551,"context_line":"        self.assertEqual(resp.status, 404)"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"        # verify object is still expired if x-open-expire is False"},{"line_number":554,"context_line":"        resp \u003d retry(get_with_x_open_expired_false)"},{"line_number":555,"context_line":"        resp.read()"},{"line_number":556,"context_line":"        self.assertEqual(resp.status, 404)"}],"source_content_type":"text/x-python","patch_set":10,"id":"a127d331_d7950308","line":553,"updated":"2023-03-28 11:52:15.000000000","message":"+1, check both false and true 😊","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":false,"context_lines":[{"line_number":550,"context_line":"        # verify object is still expired"},{"line_number":551,"context_line":"        self.assertEqual(resp.status, 404)"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"        # verify object is still expired if x-open-expire is False"},{"line_number":554,"context_line":"        resp \u003d retry(get_with_x_open_expired_false)"},{"line_number":555,"context_line":"        resp.read()"},{"line_number":556,"context_line":"        self.assertEqual(resp.status, 404)"}],"source_content_type":"text/x-python","patch_set":10,"id":"361810ae_25fcb1e7","line":553,"in_reply_to":"a127d331_d7950308","updated":"2023-04-03 11:49:39.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":550,"context_line":"        # verify object is still expired"},{"line_number":551,"context_line":"        self.assertEqual(resp.status, 404)"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"        # verify object is still expired if x-open-expire is False"},{"line_number":554,"context_line":"        resp \u003d retry(get_with_x_open_expired_false)"},{"line_number":555,"context_line":"        resp.read()"},{"line_number":556,"context_line":"        self.assertEqual(resp.status, 404)"}],"source_content_type":"text/x-python","patch_set":10,"id":"68bae7d5_43f01a53","line":553,"in_reply_to":"a127d331_d7950308","updated":"2023-08-17 16:13:54.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":true,"context_lines":[{"line_number":563,"context_line":""},{"line_number":564,"context_line":"        resp \u003d retry(head, extra_headers\u003d{\u0027X-Open-Expired\u0027: True})"},{"line_number":565,"context_line":"        resp.read()"},{"line_number":566,"context_line":"        self.assertEqual(resp.status, 200)"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"        resp \u003d retry(post, extra_headers\u003d{\u0027X-Open-Expired\u0027: False})"},{"line_number":569,"context_line":"        resp.read()"}],"source_content_type":"text/x-python","patch_set":12,"id":"4d53913c_b2ab285e","line":566,"updated":"2023-04-03 11:49:39.000000000","message":"+1, nice sequence of assertions!","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":563,"context_line":""},{"line_number":564,"context_line":"        resp \u003d retry(head, extra_headers\u003d{\u0027X-Open-Expired\u0027: True})"},{"line_number":565,"context_line":"        resp.read()"},{"line_number":566,"context_line":"        self.assertEqual(resp.status, 200)"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"        resp \u003d retry(post, extra_headers\u003d{\u0027X-Open-Expired\u0027: False})"},{"line_number":569,"context_line":"        resp.read()"}],"source_content_type":"text/x-python","patch_set":12,"id":"b854c722_e506495a","line":566,"in_reply_to":"4d53913c_b2ab285e","updated":"2023-08-17 16:13:54.000000000","message":"Ack","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9c24f3f2c3fcbf55f6f426bb57d7fe18ee406b2f","unresolved":false,"context_lines":[{"line_number":563,"context_line":""},{"line_number":564,"context_line":"        resp \u003d retry(head, extra_headers\u003d{\u0027X-Open-Expired\u0027: True})"},{"line_number":565,"context_line":"        resp.read()"},{"line_number":566,"context_line":"        self.assertEqual(resp.status, 200)"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"        resp \u003d retry(post, extra_headers\u003d{\u0027X-Open-Expired\u0027: False})"},{"line_number":569,"context_line":"        resp.read()"}],"source_content_type":"text/x-python","patch_set":12,"id":"7d2e54ab_a8c343fe","line":566,"in_reply_to":"4d53913c_b2ab285e","updated":"2023-04-06 11:00:29.000000000","message":"Done","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":true,"context_lines":[{"line_number":570,"context_line":"        # verify object is not updated and remains deleted"},{"line_number":571,"context_line":"        self.assertEqual(resp.status, 404)"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"        resp \u003d retry(post, extra_headers\u003d{\u0027X-Open-Expired\u0027: True})"},{"line_number":574,"context_line":"        resp.read()"},{"line_number":575,"context_line":"        # verify object is updated with later delete time"},{"line_number":576,"context_line":"        self.assertEqual(resp.status, 202)"}],"source_content_type":"text/x-python","patch_set":12,"id":"0fbcbad2_adc1a1b1","line":573,"updated":"2023-04-03 11:49:39.000000000","message":"maybe send some new metadata with the POST so that we can check the POST really did succeed:\n\n  extra_headers\u003d{\u0027X-Open-Expired\u0027: True,\n                 \u0027X-Object-Meta-Test\u0027: \u0027restored!\u0027}\n  \nthen when you do the get and head below you can assert:\n\n\n  self.assertEqual(resp.headers[\u0027x-object-meta-test\u0027], \u0027restored!\u0027)\n  self.assertNotIn(\u0027x-delete-at\u0027, resp.headers)","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":570,"context_line":"        # verify object is not updated and remains deleted"},{"line_number":571,"context_line":"        self.assertEqual(resp.status, 404)"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"        resp \u003d retry(post, extra_headers\u003d{\u0027X-Open-Expired\u0027: True})"},{"line_number":574,"context_line":"        resp.read()"},{"line_number":575,"context_line":"        # verify object is updated with later delete time"},{"line_number":576,"context_line":"        self.assertEqual(resp.status, 202)"}],"source_content_type":"text/x-python","patch_set":12,"id":"429d0364_e3a743b8","line":573,"in_reply_to":"0fbcbad2_adc1a1b1","updated":"2023-08-17 16:13:54.000000000","message":"Ack. But x-delete-at will still be present since the post request has x-delete-at in its request unless we remove it entirely, the post just delays the delete-at \"time\"","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9c24f3f2c3fcbf55f6f426bb57d7fe18ee406b2f","unresolved":false,"context_lines":[{"line_number":570,"context_line":"        # verify object is not updated and remains deleted"},{"line_number":571,"context_line":"        self.assertEqual(resp.status, 404)"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"        resp \u003d retry(post, extra_headers\u003d{\u0027X-Open-Expired\u0027: True})"},{"line_number":574,"context_line":"        resp.read()"},{"line_number":575,"context_line":"        # verify object is updated with later delete time"},{"line_number":576,"context_line":"        self.assertEqual(resp.status, 202)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fcae401d_ab0fbfc8","line":573,"in_reply_to":"0fbcbad2_adc1a1b1","updated":"2023-04-06 11:00:29.000000000","message":"Done","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":true,"context_lines":[{"line_number":572,"context_line":""},{"line_number":573,"context_line":"        resp \u003d retry(post, extra_headers\u003d{\u0027X-Open-Expired\u0027: True})"},{"line_number":574,"context_line":"        resp.read()"},{"line_number":575,"context_line":"        # verify object is updated with later delete time"},{"line_number":576,"context_line":"        self.assertEqual(resp.status, 202)"},{"line_number":577,"context_line":""},{"line_number":578,"context_line":"        # verify object is restored and you can do normal GET"}],"source_content_type":"text/x-python","patch_set":12,"id":"3465c7be_4d995d1d","line":575,"range":{"start_line":575,"start_character":8,"end_line":575,"end_character":57},"updated":"2023-04-03 11:49:39.000000000","message":"the object now has NO delete time","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":572,"context_line":""},{"line_number":573,"context_line":"        resp \u003d retry(post, extra_headers\u003d{\u0027X-Open-Expired\u0027: True})"},{"line_number":574,"context_line":"        resp.read()"},{"line_number":575,"context_line":"        # verify object is updated with later delete time"},{"line_number":576,"context_line":"        self.assertEqual(resp.status, 202)"},{"line_number":577,"context_line":""},{"line_number":578,"context_line":"        # verify object is restored and you can do normal GET"}],"source_content_type":"text/x-python","patch_set":12,"id":"943e8f17_c37e3490","line":575,"range":{"start_line":575,"start_character":8,"end_line":575,"end_character":57},"in_reply_to":"3465c7be_4d995d1d","updated":"2023-08-17 16:13:54.000000000","message":"Ack","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9c24f3f2c3fcbf55f6f426bb57d7fe18ee406b2f","unresolved":false,"context_lines":[{"line_number":572,"context_line":""},{"line_number":573,"context_line":"        resp \u003d retry(post, extra_headers\u003d{\u0027X-Open-Expired\u0027: True})"},{"line_number":574,"context_line":"        resp.read()"},{"line_number":575,"context_line":"        # verify object is updated with later delete time"},{"line_number":576,"context_line":"        self.assertEqual(resp.status, 202)"},{"line_number":577,"context_line":""},{"line_number":578,"context_line":"        # verify object is restored and you can do normal GET"}],"source_content_type":"text/x-python","patch_set":12,"id":"ce8cdea6_cea62b31","line":575,"range":{"start_line":575,"start_character":8,"end_line":575,"end_character":57},"in_reply_to":"3465c7be_4d995d1d","updated":"2023-04-06 11:00:29.000000000","message":"Done","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9c24f3f2c3fcbf55f6f426bb57d7fe18ee406b2f","unresolved":true,"context_lines":[{"line_number":580,"context_line":"        resp.read()"},{"line_number":581,"context_line":"        self.assertEqual(resp.status, 200)"},{"line_number":582,"context_line":"        self.assertIn(\u0027X-Object-Meta-Test\u0027, resp.headers)"},{"line_number":583,"context_line":"        self.assertEqual(resp.headers[\u0027x-object-meta-test\u0027], \u0027restored!\u0027)"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"        # verify object is restored and you can do normal HEAD"},{"line_number":586,"context_line":"        resp \u003d retry(head)"}],"source_content_type":"text/x-python","patch_set":16,"id":"c1b727ba_e946eb0b","line":583,"updated":"2023-04-06 11:00:29.000000000","message":"same assertions could be made for the following HEAD request","commit_id":"a0bc63b4cce963a7b682174ca10d1d18f98f99a5"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":580,"context_line":"        resp.read()"},{"line_number":581,"context_line":"        self.assertEqual(resp.status, 200)"},{"line_number":582,"context_line":"        self.assertIn(\u0027X-Object-Meta-Test\u0027, resp.headers)"},{"line_number":583,"context_line":"        self.assertEqual(resp.headers[\u0027x-object-meta-test\u0027], \u0027restored!\u0027)"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"        # verify object is restored and you can do normal HEAD"},{"line_number":586,"context_line":"        resp \u003d retry(head)"}],"source_content_type":"text/x-python","patch_set":16,"id":"d0266acb_8f933c58","line":583,"in_reply_to":"c1b727ba_e946eb0b","updated":"2023-08-17 16:13:54.000000000","message":"Ack","commit_id":"a0bc63b4cce963a7b682174ca10d1d18f98f99a5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9c24f3f2c3fcbf55f6f426bb57d7fe18ee406b2f","unresolved":true,"context_lines":[{"line_number":586,"context_line":"        resp \u003d retry(head)"},{"line_number":587,"context_line":"        resp.read()"},{"line_number":588,"context_line":"        self.assertEqual(resp.status, 200)"},{"line_number":589,"context_line":"        # verify object is updated with advanced delete time"},{"line_number":590,"context_line":"        self.assertIn(\u0027X-Delete-At\u0027, resp.headers)"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"        # To avoid an error when the object deletion in tearDown(),"}],"source_content_type":"text/x-python","patch_set":16,"id":"6d30f06d_56cb6cc2","line":589,"updated":"2023-04-06 11:00:29.000000000","message":"where did the delete time get advanced? AFAICT it is always set to same value in the post() method","commit_id":"a0bc63b4cce963a7b682174ca10d1d18f98f99a5"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":true,"context_lines":[{"line_number":586,"context_line":"        resp \u003d retry(head)"},{"line_number":587,"context_line":"        resp.read()"},{"line_number":588,"context_line":"        self.assertEqual(resp.status, 200)"},{"line_number":589,"context_line":"        # verify object is updated with advanced delete time"},{"line_number":590,"context_line":"        self.assertIn(\u0027X-Delete-At\u0027, resp.headers)"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"        # To avoid an error when the object deletion in tearDown(),"}],"source_content_type":"text/x-python","patch_set":16,"id":"f6df5ddd_01c3ca23","line":589,"in_reply_to":"6d30f06d_56cb6cc2","updated":"2023-08-17 16:13:54.000000000","message":"The advanced delete time was made at the POST request and was verified with the GETs and HEADs","commit_id":"a0bc63b4cce963a7b682174ca10d1d18f98f99a5"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"acda5f4c4838d618e651cab8782e6254f729077d","unresolved":false,"context_lines":[{"line_number":586,"context_line":"        resp \u003d retry(head)"},{"line_number":587,"context_line":"        resp.read()"},{"line_number":588,"context_line":"        self.assertEqual(resp.status, 200)"},{"line_number":589,"context_line":"        # verify object is updated with advanced delete time"},{"line_number":590,"context_line":"        self.assertIn(\u0027X-Delete-At\u0027, resp.headers)"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"        # To avoid an error when the object deletion in tearDown(),"}],"source_content_type":"text/x-python","patch_set":16,"id":"dfff2e7a_66ab0c75","line":589,"in_reply_to":"f6df5ddd_01c3ca23","updated":"2023-10-25 21:04:07.000000000","message":"Done","commit_id":"a0bc63b4cce963a7b682174ca10d1d18f98f99a5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9c24f3f2c3fcbf55f6f426bb57d7fe18ee406b2f","unresolved":true,"context_lines":[{"line_number":587,"context_line":"        resp.read()"},{"line_number":588,"context_line":"        self.assertEqual(resp.status, 200)"},{"line_number":589,"context_line":"        # verify object is updated with advanced delete time"},{"line_number":590,"context_line":"        self.assertIn(\u0027X-Delete-At\u0027, resp.headers)"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"        # To avoid an error when the object deletion in tearDown(),"},{"line_number":593,"context_line":"        # the object is added again."}],"source_content_type":"text/x-python","patch_set":16,"id":"0c42da4d_27beb525","line":590,"updated":"2023-04-06 11:00:29.000000000","message":"could also assert the value of the X-Delete-At, and same assertions cold be made for the preceding GET","commit_id":"a0bc63b4cce963a7b682174ca10d1d18f98f99a5"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"acda5f4c4838d618e651cab8782e6254f729077d","unresolved":false,"context_lines":[{"line_number":587,"context_line":"        resp.read()"},{"line_number":588,"context_line":"        self.assertEqual(resp.status, 200)"},{"line_number":589,"context_line":"        # verify object is updated with advanced delete time"},{"line_number":590,"context_line":"        self.assertIn(\u0027X-Delete-At\u0027, resp.headers)"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"        # To avoid an error when the object deletion in tearDown(),"},{"line_number":593,"context_line":"        # the object is added again."}],"source_content_type":"text/x-python","patch_set":16,"id":"a06d9271_5e79353b","line":590,"in_reply_to":"0c42da4d_27beb525","updated":"2023-10-25 21:04:07.000000000","message":"Done","commit_id":"a0bc63b4cce963a7b682174ca10d1d18f98f99a5"}],"test/unit/obj/test_server.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9edb22cac1807dccf5e89ae5ae1d73b5c3a35bc9","unresolved":true,"context_lines":[{"line_number":6688,"context_line":"            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027POST\u0027},"},{"line_number":6689,"context_line":"            headers\u003d{\u0027X-Timestamp\u0027: normalize_timestamp(the_time),"},{"line_number":6690,"context_line":"                     \u0027x-backend-open-expired\u0027: \u0027true\u0027,"},{"line_number":6691,"context_line":"                     \u0027x-delete-at\u0027: str(delete_at_timestamp + 70)})"},{"line_number":6692,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":6693,"context_line":"        self.assertEqual(resp.status_int, 202)"},{"line_number":6694,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"a0e9e626_0b73d299","line":6691,"updated":"2023-03-20 13:50:44.000000000","message":"I think it would be useful to have a similar test case with no x-delete-at header to verify that posting to an expired object is not conditional on also sending x-delete-at","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":6688,"context_line":"            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027POST\u0027},"},{"line_number":6689,"context_line":"            headers\u003d{\u0027X-Timestamp\u0027: normalize_timestamp(the_time),"},{"line_number":6690,"context_line":"                     \u0027x-backend-open-expired\u0027: \u0027true\u0027,"},{"line_number":6691,"context_line":"                     \u0027x-delete-at\u0027: str(delete_at_timestamp + 70)})"},{"line_number":6692,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":6693,"context_line":"        self.assertEqual(resp.status_int, 202)"},{"line_number":6694,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"19ddbcb3_f8c0ba97","line":6691,"in_reply_to":"a0e9e626_0b73d299","updated":"2023-08-17 16:13:54.000000000","message":"Its is not conditional for a POST but to clarify  the updated delete_at timestamp will be stuck and x-open-expired is not in the metadata. It simply allows us to modify the delete_at value to a later date if the user chooses it to be.","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9edb22cac1807dccf5e89ae5ae1d73b5c3a35bc9","unresolved":true,"context_lines":[{"line_number":6691,"context_line":"                     \u0027x-delete-at\u0027: str(delete_at_timestamp + 70)})"},{"line_number":6692,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":6693,"context_line":"        self.assertEqual(resp.status_int, 202)"},{"line_number":6694,"context_line":""},{"line_number":6695,"context_line":"        # You cannot POST to an expired object with an x-open-expired header"},{"line_number":6696,"context_line":"        # if the x_delete_at value is in the past"},{"line_number":6697,"context_line":"        now +\u003d 2"}],"source_content_type":"text/x-python","patch_set":3,"id":"0413778e_c9c4ec85","line":6694,"updated":"2023-03-20 13:50:44.000000000","message":"you need to do a HEAD here to verify that the POSTed metadata stuck","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":6691,"context_line":"                     \u0027x-delete-at\u0027: str(delete_at_timestamp + 70)})"},{"line_number":6692,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":6693,"context_line":"        self.assertEqual(resp.status_int, 202)"},{"line_number":6694,"context_line":""},{"line_number":6695,"context_line":"        # You cannot POST to an expired object with an x-open-expired header"},{"line_number":6696,"context_line":"        # if the x_delete_at value is in the past"},{"line_number":6697,"context_line":"        now +\u003d 2"}],"source_content_type":"text/x-python","patch_set":3,"id":"de95aa88_c5289bae","line":6694,"in_reply_to":"0413778e_c9c4ec85","updated":"2023-08-17 16:13:54.000000000","message":"Ack","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":false,"context_lines":[{"line_number":6691,"context_line":"                     \u0027x-delete-at\u0027: str(delete_at_timestamp + 70)})"},{"line_number":6692,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":6693,"context_line":"        self.assertEqual(resp.status_int, 202)"},{"line_number":6694,"context_line":""},{"line_number":6695,"context_line":"        # You cannot POST to an expired object with an x-open-expired header"},{"line_number":6696,"context_line":"        # if the x_delete_at value is in the past"},{"line_number":6697,"context_line":"        now +\u003d 2"}],"source_content_type":"text/x-python","patch_set":3,"id":"2f822997_80a2bbe6","line":6694,"in_reply_to":"0413778e_c9c4ec85","updated":"2023-04-03 11:49:39.000000000","message":"Done","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9edb22cac1807dccf5e89ae5ae1d73b5c3a35bc9","unresolved":true,"context_lines":[{"line_number":6700,"context_line":"        req \u003d Request.blank("},{"line_number":6701,"context_line":"            \u0027/sda1/p/a/c/o\u0027,"},{"line_number":6702,"context_line":"            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027POST\u0027},"},{"line_number":6703,"context_line":"            headers\u003d{\u0027X-Timestamp\u0027: normalize_timestamp(the_time),"},{"line_number":6704,"context_line":"                     \u0027x-backend-open-expired\u0027: \u0027true\u0027,"},{"line_number":6705,"context_line":"                     \u0027x-delete-at\u0027: str(delete_at_timestamp - 50)})"},{"line_number":6706,"context_line":"        resp \u003d req.get_response(self.object_controller)"}],"source_content_type":"text/x-python","patch_set":3,"id":"f0854797_6bf09b2e","line":6703,"range":{"start_line":6703,"start_character":56,"end_line":6703,"end_character":64},"updated":"2023-03-20 13:50:44.000000000","message":"this request is going to fail (but with a 409) even if the x-delete-at is in the future, because the request timestamp is the same as the previous successful POST.\n\nBe sure to increment the timestamp of every POST request as the test progresses.","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":6700,"context_line":"        req \u003d Request.blank("},{"line_number":6701,"context_line":"            \u0027/sda1/p/a/c/o\u0027,"},{"line_number":6702,"context_line":"            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027POST\u0027},"},{"line_number":6703,"context_line":"            headers\u003d{\u0027X-Timestamp\u0027: normalize_timestamp(the_time),"},{"line_number":6704,"context_line":"                     \u0027x-backend-open-expired\u0027: \u0027true\u0027,"},{"line_number":6705,"context_line":"                     \u0027x-delete-at\u0027: str(delete_at_timestamp - 50)})"},{"line_number":6706,"context_line":"        resp \u003d req.get_response(self.object_controller)"}],"source_content_type":"text/x-python","patch_set":3,"id":"68e0ffc6_defd0341","line":6703,"range":{"start_line":6703,"start_character":56,"end_line":6703,"end_character":64},"in_reply_to":"f0854797_6bf09b2e","updated":"2023-08-17 16:13:54.000000000","message":"Ack","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":false,"context_lines":[{"line_number":6700,"context_line":"        req \u003d Request.blank("},{"line_number":6701,"context_line":"            \u0027/sda1/p/a/c/o\u0027,"},{"line_number":6702,"context_line":"            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027POST\u0027},"},{"line_number":6703,"context_line":"            headers\u003d{\u0027X-Timestamp\u0027: normalize_timestamp(the_time),"},{"line_number":6704,"context_line":"                     \u0027x-backend-open-expired\u0027: \u0027true\u0027,"},{"line_number":6705,"context_line":"                     \u0027x-delete-at\u0027: str(delete_at_timestamp - 50)})"},{"line_number":6706,"context_line":"        resp \u003d req.get_response(self.object_controller)"}],"source_content_type":"text/x-python","patch_set":3,"id":"6f78b5ab_f2cedafc","line":6703,"range":{"start_line":6703,"start_character":56,"end_line":6703,"end_character":64},"in_reply_to":"f0854797_6bf09b2e","updated":"2023-04-03 11:49:39.000000000","message":"Done","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9edb22cac1807dccf5e89ae5ae1d73b5c3a35bc9","unresolved":true,"context_lines":[{"line_number":6706,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":6707,"context_line":"        self.assertEqual(resp.status_int, 400)"},{"line_number":6708,"context_line":""},{"line_number":6709,"context_line":"        # ...unless sending an x-backend-replication header...which lets you"},{"line_number":6710,"context_line":"        # modify x-delete-at"},{"line_number":6711,"context_line":"        now +\u003d 2"},{"line_number":6712,"context_line":"        recreate_test_object(now)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dd1f7eb0_cfea6a68","line":6709,"updated":"2023-03-20 13:50:44.000000000","message":"this comment doesn\u0027t make sense any more - the \u0027unless\u0027 refers to line 6671","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":false,"context_lines":[{"line_number":6706,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":6707,"context_line":"        self.assertEqual(resp.status_int, 400)"},{"line_number":6708,"context_line":""},{"line_number":6709,"context_line":"        # ...unless sending an x-backend-replication header...which lets you"},{"line_number":6710,"context_line":"        # modify x-delete-at"},{"line_number":6711,"context_line":"        now +\u003d 2"},{"line_number":6712,"context_line":"        recreate_test_object(now)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f75f6be_954448bf","line":6709,"in_reply_to":"dd1f7eb0_cfea6a68","updated":"2023-04-03 11:49:39.000000000","message":"Done","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":6706,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":6707,"context_line":"        self.assertEqual(resp.status_int, 400)"},{"line_number":6708,"context_line":""},{"line_number":6709,"context_line":"        # ...unless sending an x-backend-replication header...which lets you"},{"line_number":6710,"context_line":"        # modify x-delete-at"},{"line_number":6711,"context_line":"        now +\u003d 2"},{"line_number":6712,"context_line":"        recreate_test_object(now)"}],"source_content_type":"text/x-python","patch_set":3,"id":"b34ace2a_7c8e9b55","line":6709,"in_reply_to":"dd1f7eb0_cfea6a68","updated":"2023-08-17 16:13:54.000000000","message":"yes the unless refers to line 6671 but i just realised that this test has gotten very big but i find this test-case very expletive for people who want to be more pragmatic with understanding \u0027x-delete-at\u0027 and the some other request headers we support in our API structure. nevertheless i have re-edited the comment and explained the test conditions more precisely","commit_id":"36cfddfce1bd0aeb2330a5719c509a924bcbb946"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":true,"context_lines":[{"line_number":6697,"context_line":"            \u0027/sda1/p/a/c/o\u0027,"},{"line_number":6698,"context_line":"            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027HEAD\u0027},"},{"line_number":6699,"context_line":"            headers\u003d{\u0027X-Timestamp\u0027: normalize_timestamp(the_time),"},{"line_number":6700,"context_line":"                     \u0027x-backend-open-expired\u0027: \u0027true\u0027})"},{"line_number":6701,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":6702,"context_line":"        self.assertEqual(resp.status_int, 200)"},{"line_number":6703,"context_line":"        self.assertEqual(resp.headers.get(\u0027x-delete-at\u0027),"}],"source_content_type":"text/x-python","patch_set":12,"id":"05322d3a_0e95ed1f","line":6700,"updated":"2023-04-03 11:49:39.000000000","message":"the x-backend-open-expired should not be needed now that the delete-at-time has been advanced","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":6697,"context_line":"            \u0027/sda1/p/a/c/o\u0027,"},{"line_number":6698,"context_line":"            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027HEAD\u0027},"},{"line_number":6699,"context_line":"            headers\u003d{\u0027X-Timestamp\u0027: normalize_timestamp(the_time),"},{"line_number":6700,"context_line":"                     \u0027x-backend-open-expired\u0027: \u0027true\u0027})"},{"line_number":6701,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":6702,"context_line":"        self.assertEqual(resp.status_int, 200)"},{"line_number":6703,"context_line":"        self.assertEqual(resp.headers.get(\u0027x-delete-at\u0027),"}],"source_content_type":"text/x-python","patch_set":12,"id":"1b094965_a72c131c","line":6700,"in_reply_to":"05322d3a_0e95ed1f","updated":"2023-08-17 16:13:54.000000000","message":"Ack","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":true,"context_lines":[{"line_number":6705,"context_line":"        # You cannot POST to an expired object with an x-open-expired header"},{"line_number":6706,"context_line":"        # if the x_delete_at value is in the past"},{"line_number":6707,"context_line":"        now +\u003d 2"},{"line_number":6708,"context_line":"        recreate_test_object(now)"},{"line_number":6709,"context_line":"        the_time \u003d delete_at_timestamp + 5"},{"line_number":6710,"context_line":"        req \u003d Request.blank("},{"line_number":6711,"context_line":"            \u0027/sda1/p/a/c/o\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"64910fad_20c994d8","line":6708,"updated":"2023-04-03 11:49:39.000000000","message":"be careful here... recreate_test_object only recreates the data file, it does not replace a *newer* meta file that was written by a POST :\n\n* the last POST was at delete_timestamp + 1. \n* The PUT in recreate_object is made at now which is \u003c (delete_timestamp + 1) \n* so the object metadata is still what was set by the POST !\n* i.e. delete-at time is still delete_timestamp + 70\n\nYou next make a POST with timestamp \u003d the_time \u003d delete_at_timestamp + 5 i.e. this POST only fails because the x-delete-at time is in the past, and the x-backend-open-expired is not relevant because the object has not expired.\n\nI think it would be more interesting if the next POST was after the object expired (i.e timestamp \u003e delete_timestamp + 70), so that the assertion is \"sending opening an expired object doesn\u0027t break the check on delete-at being in the past\"","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":6705,"context_line":"        # You cannot POST to an expired object with an x-open-expired header"},{"line_number":6706,"context_line":"        # if the x_delete_at value is in the past"},{"line_number":6707,"context_line":"        now +\u003d 2"},{"line_number":6708,"context_line":"        recreate_test_object(now)"},{"line_number":6709,"context_line":"        the_time \u003d delete_at_timestamp + 5"},{"line_number":6710,"context_line":"        req \u003d Request.blank("},{"line_number":6711,"context_line":"            \u0027/sda1/p/a/c/o\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"fd85160b_4cccdd82","line":6708,"in_reply_to":"64910fad_20c994d8","updated":"2023-08-17 16:13:54.000000000","message":"Ack, but i expect the server to emit a 400 even if we have \u0027x-backend-open-expired\u0027: \u0027true\u0027 since we don not want to break the existing API behavior, the POST is merely to restore the object with an updated delete-at time but not to break the api such that we are able to update the delete-at metadata of an object to the past using the \"magic\" header.","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":true,"context_lines":[{"line_number":6725,"context_line":"            \u0027/sda1/p/a/c/o\u0027,"},{"line_number":6726,"context_line":"            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027POST\u0027},"},{"line_number":6727,"context_line":"            headers\u003d{\u0027X-Timestamp\u0027: normalize_timestamp(the_time),"},{"line_number":6728,"context_line":"                     \u0027x-backend-replication\u0027: \u0027true\u0027,"},{"line_number":6729,"context_line":"                     \u0027x-delete-at\u0027: str(delete_at_timestamp + 100)})"},{"line_number":6730,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":6731,"context_line":"        self.assertEqual(resp.status_int, 202)"}],"source_content_type":"text/x-python","patch_set":12,"id":"b0723772_aedbc40b","line":6728,"updated":"2023-04-03 11:49:39.000000000","message":"because the delete-at time is already delete_timestamp + 70, this request will succeed WITHOUT \u0027x-backend-replication\u0027: \u0027true\u0027 :(\n\nIMHO, this test is now changing the object state to the point where it is hard to understand (or write) the test. I would suggest going back to the original test, making a *copy* and hacking that to do ONLY the x-backend-open-expired testing. That leaves the x-backend-replication testing unchanged.\n\nIn fact, perhaps the new test_POST_with_x_open_expired_only can be developed for that purpose?\n\nHappy to discuss/explain further.","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":6725,"context_line":"            \u0027/sda1/p/a/c/o\u0027,"},{"line_number":6726,"context_line":"            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027POST\u0027},"},{"line_number":6727,"context_line":"            headers\u003d{\u0027X-Timestamp\u0027: normalize_timestamp(the_time),"},{"line_number":6728,"context_line":"                     \u0027x-backend-replication\u0027: \u0027true\u0027,"},{"line_number":6729,"context_line":"                     \u0027x-delete-at\u0027: str(delete_at_timestamp + 100)})"},{"line_number":6730,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":6731,"context_line":"        self.assertEqual(resp.status_int, 202)"}],"source_content_type":"text/x-python","patch_set":12,"id":"36a76cee_cff6f28b","line":6728,"in_reply_to":"b0723772_aedbc40b","updated":"2023-08-17 16:13:54.000000000","message":"Done","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":true,"context_lines":[{"line_number":6822,"context_line":"            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027POST\u0027},"},{"line_number":6823,"context_line":"            headers\u003d{\u0027X-Timestamp\u0027: normalize_timestamp(the_time),"},{"line_number":6824,"context_line":"                     \u0027x-delete-at\u0027: delete_at_timestamp,"},{"line_number":6825,"context_line":"                     \u0027x-backend-open-expired\u0027: \u0027true\u0027})"},{"line_number":6826,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":6827,"context_line":"        self.assertEqual(resp.status_int, 202)"},{"line_number":6828,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"49bcc716_59941bd9","line":6825,"range":{"start_line":6825,"start_character":21,"end_line":6825,"end_character":53},"updated":"2023-04-03 11:49:39.000000000","message":"test passes when this header is false or deleted: the object does not yet have a delete-at time","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":6822,"context_line":"            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027POST\u0027},"},{"line_number":6823,"context_line":"            headers\u003d{\u0027X-Timestamp\u0027: normalize_timestamp(the_time),"},{"line_number":6824,"context_line":"                     \u0027x-delete-at\u0027: delete_at_timestamp,"},{"line_number":6825,"context_line":"                     \u0027x-backend-open-expired\u0027: \u0027true\u0027})"},{"line_number":6826,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":6827,"context_line":"        self.assertEqual(resp.status_int, 202)"},{"line_number":6828,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3ebc6393_aa0748a7","line":6825,"range":{"start_line":6825,"start_character":21,"end_line":6825,"end_character":53},"in_reply_to":"49bcc716_59941bd9","updated":"2023-08-17 16:13:54.000000000","message":"Done","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"}],"test/unit/proxy/controllers/test_obj.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1871e73b5045fe8d36fb5fbd3e2f5722166c070e","unresolved":true,"context_lines":[{"line_number":747,"context_line":"        self.assertEqual(resp.status_int, 404)"},{"line_number":748,"context_line":"        return fake_conn.requests"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"    def test_x_open_expired(self):"},{"line_number":751,"context_line":"        for method in (\u0027GET\u0027, \u0027HEAD\u0027):"},{"line_number":752,"context_line":"            requests \u003d self._test_x_open_expired(method)"},{"line_number":753,"context_line":"            for r in requests:"}],"source_content_type":"text/x-python","patch_set":10,"id":"edb2fd6b_db4dbdf1","line":750,"updated":"2023-03-28 11:52:15.000000000","message":"Can I encourage you to run the unit tests before pushing to gerrit, particularly the test files that you have changed.\n\n  E               AssertionError: \u0027X-Backend-Open-Expired\u0027 unexpectedly found in {\u0027Host\u0027: \u0027localhost:80\u0027, \u0027X-Trans-Id\u0027: \u0027tx4119900392c6427f846e6-006422d383\u0027, \u0027X-Backend-Storage-Policy-Index\u0027: \u00270\u0027, \u0027X-Backend-Open-Expired\u0027: \u0027false\u0027, \u0027X-Timestamp\u0027: \u00271680003971.75779\u0027, \u0027Connection\u0027: \u0027close\u0027, \u0027User-Agent\u0027: \u0027proxy-server 98208\u0027, \u0027Referer\u0027: \u0027GET http://localhost/v1/a/c/o\u0027}\n\ntest_obj.py:755: AssertionError\n\n\nThis failure may be cleared up by just not sending the backend header when it is false,","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":747,"context_line":"        self.assertEqual(resp.status_int, 404)"},{"line_number":748,"context_line":"        return fake_conn.requests"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"    def test_x_open_expired(self):"},{"line_number":751,"context_line":"        for method in (\u0027GET\u0027, \u0027HEAD\u0027):"},{"line_number":752,"context_line":"            requests \u003d self._test_x_open_expired(method)"},{"line_number":753,"context_line":"            for r in requests:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3512e887_adcb1948","line":750,"in_reply_to":"edb2fd6b_db4dbdf1","updated":"2023-08-17 16:13:54.000000000","message":"Ack","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":false,"context_lines":[{"line_number":747,"context_line":"        self.assertEqual(resp.status_int, 404)"},{"line_number":748,"context_line":"        return fake_conn.requests"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"    def test_x_open_expired(self):"},{"line_number":751,"context_line":"        for method in (\u0027GET\u0027, \u0027HEAD\u0027):"},{"line_number":752,"context_line":"            requests \u003d self._test_x_open_expired(method)"},{"line_number":753,"context_line":"            for r in requests:"}],"source_content_type":"text/x-python","patch_set":10,"id":"b8376da9_7325eeca","line":750,"in_reply_to":"edb2fd6b_db4dbdf1","updated":"2023-04-03 11:49:39.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1871e73b5045fe8d36fb5fbd3e2f5722166c070e","unresolved":true,"context_lines":[{"line_number":785,"context_line":"            self.assertEqual(r[\u0027headers\u0027][\u0027X-Open-Expired\u0027], \u0027true\u0027)"},{"line_number":786,"context_line":"            self.assertNotIn(\u0027X-Backend-Open-Expired\u0027, r[\u0027headers\u0027])"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"        # we don\u0027t support x-open-expired on POST (yet?)"},{"line_number":789,"context_line":"        req \u003d swift.common.swob.Request.blank("},{"line_number":790,"context_line":"            \u0027/v1/a/c/o\u0027, method\u003d\u0027POST\u0027, headers\u003d{\u0027X-Open-Expired\u0027: \u0027true\u0027})"},{"line_number":791,"context_line":"        codes \u003d [202] * self.obj_ring.replicas"}],"source_content_type":"text/x-python","patch_set":10,"id":"e8ba0be2_fa59f036","line":788,"updated":"2023-03-28 11:52:15.000000000","message":"this isn\u0027t true anymore, so I\u0027d expect these assertions to fail","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":785,"context_line":"            self.assertEqual(r[\u0027headers\u0027][\u0027X-Open-Expired\u0027], \u0027true\u0027)"},{"line_number":786,"context_line":"            self.assertNotIn(\u0027X-Backend-Open-Expired\u0027, r[\u0027headers\u0027])"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"        # we don\u0027t support x-open-expired on POST (yet?)"},{"line_number":789,"context_line":"        req \u003d swift.common.swob.Request.blank("},{"line_number":790,"context_line":"            \u0027/v1/a/c/o\u0027, method\u003d\u0027POST\u0027, headers\u003d{\u0027X-Open-Expired\u0027: \u0027true\u0027})"},{"line_number":791,"context_line":"        codes \u003d [202] * self.obj_ring.replicas"}],"source_content_type":"text/x-python","patch_set":10,"id":"e62257cf_720da61c","line":788,"in_reply_to":"e8ba0be2_fa59f036","updated":"2023-08-17 16:13:54.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":false,"context_lines":[{"line_number":785,"context_line":"            self.assertEqual(r[\u0027headers\u0027][\u0027X-Open-Expired\u0027], \u0027true\u0027)"},{"line_number":786,"context_line":"            self.assertNotIn(\u0027X-Backend-Open-Expired\u0027, r[\u0027headers\u0027])"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"        # we don\u0027t support x-open-expired on POST (yet?)"},{"line_number":789,"context_line":"        req \u003d swift.common.swob.Request.blank("},{"line_number":790,"context_line":"            \u0027/v1/a/c/o\u0027, method\u003d\u0027POST\u0027, headers\u003d{\u0027X-Open-Expired\u0027: \u0027true\u0027})"},{"line_number":791,"context_line":"        codes \u003d [202] * self.obj_ring.replicas"}],"source_content_type":"text/x-python","patch_set":10,"id":"e95eec5d_57888c21","line":788,"in_reply_to":"e8ba0be2_fa59f036","updated":"2023-04-03 11:49:39.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1871e73b5045fe8d36fb5fbd3e2f5722166c070e","unresolved":true,"context_lines":[{"line_number":1862,"context_line":"                                               \u0027X-Open-Expired\u0027: True})"},{"line_number":1863,"context_line":"        req_head \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027HEAD\u0027, body\u003db\u0027\u0027,"},{"line_number":1864,"context_line":"                                      headers\u003d{\u0027Content-Type\u0027: \u0027foo/bar\u0027,"},{"line_number":1865,"context_line":"                                               \u0027X-TimeStamp\u0027: t_post})"},{"line_number":1866,"context_line":"        req_head_open_expired \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027HEAD\u0027,"},{"line_number":1867,"context_line":"                                                   body\u003db\u0027\u0027,"},{"line_number":1868,"context_line":"                                                   headers\u003d{"}],"source_content_type":"text/x-python","patch_set":10,"id":"6620c9b4_66c073ca","line":1865,"range":{"start_line":1865,"start_character":62,"end_line":1865,"end_character":68},"updated":"2023-03-28 11:52:15.000000000","message":"I\u0027m confused by the HEAD requests being at t_post","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":1862,"context_line":"                                               \u0027X-Open-Expired\u0027: True})"},{"line_number":1863,"context_line":"        req_head \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027HEAD\u0027, body\u003db\u0027\u0027,"},{"line_number":1864,"context_line":"                                      headers\u003d{\u0027Content-Type\u0027: \u0027foo/bar\u0027,"},{"line_number":1865,"context_line":"                                               \u0027X-TimeStamp\u0027: t_post})"},{"line_number":1866,"context_line":"        req_head_open_expired \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027HEAD\u0027,"},{"line_number":1867,"context_line":"                                                   body\u003db\u0027\u0027,"},{"line_number":1868,"context_line":"                                                   headers\u003d{"}],"source_content_type":"text/x-python","patch_set":10,"id":"5bec0f7d_0112a5f1","line":1865,"range":{"start_line":1865,"start_character":62,"end_line":1865,"end_character":68},"in_reply_to":"6620c9b4_66c073ca","updated":"2023-08-17 16:13:54.000000000","message":"Ack","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":false,"context_lines":[{"line_number":1862,"context_line":"                                               \u0027X-Open-Expired\u0027: True})"},{"line_number":1863,"context_line":"        req_head \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027HEAD\u0027, body\u003db\u0027\u0027,"},{"line_number":1864,"context_line":"                                      headers\u003d{\u0027Content-Type\u0027: \u0027foo/bar\u0027,"},{"line_number":1865,"context_line":"                                               \u0027X-TimeStamp\u0027: t_post})"},{"line_number":1866,"context_line":"        req_head_open_expired \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027HEAD\u0027,"},{"line_number":1867,"context_line":"                                                   body\u003db\u0027\u0027,"},{"line_number":1868,"context_line":"                                                   headers\u003d{"}],"source_content_type":"text/x-python","patch_set":10,"id":"97f9df1a_2d4cdfeb","line":1865,"range":{"start_line":1865,"start_character":62,"end_line":1865,"end_character":68},"in_reply_to":"6620c9b4_66c073ca","updated":"2023-04-03 11:49:39.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1871e73b5045fe8d36fb5fbd3e2f5722166c070e","unresolved":true,"context_lines":[{"line_number":1872,"context_line":"                                                       \u0027X-Open-Expired\u0027: True"},{"line_number":1873,"context_line":"                                                   })"},{"line_number":1874,"context_line":""},{"line_number":1875,"context_line":"        req_false_open_expired \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027HEAD\u0027,"},{"line_number":1876,"context_line":"                                                    body\u003db\u0027\u0027,"},{"line_number":1877,"context_line":"                                                    headers\u003d{"},{"line_number":1878,"context_line":"                                                        \u0027Content-Type\u0027:"}],"source_content_type":"text/x-python","patch_set":10,"id":"e9c18a60_cb804bf0","line":1875,"updated":"2023-03-28 11:52:15.000000000","message":"to make this prettier, you could create the headers dict first rather than inline in the Request.blank args,\n\nand/or, hit return after \u0027swob.Request.blank(\u0027","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":1872,"context_line":"                                                       \u0027X-Open-Expired\u0027: True"},{"line_number":1873,"context_line":"                                                   })"},{"line_number":1874,"context_line":""},{"line_number":1875,"context_line":"        req_false_open_expired \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027HEAD\u0027,"},{"line_number":1876,"context_line":"                                                    body\u003db\u0027\u0027,"},{"line_number":1877,"context_line":"                                                    headers\u003d{"},{"line_number":1878,"context_line":"                                                        \u0027Content-Type\u0027:"}],"source_content_type":"text/x-python","patch_set":10,"id":"852de697_6d7d1ff7","line":1875,"in_reply_to":"e9c18a60_cb804bf0","updated":"2023-08-17 16:13:54.000000000","message":"Ack","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":false,"context_lines":[{"line_number":1872,"context_line":"                                                       \u0027X-Open-Expired\u0027: True"},{"line_number":1873,"context_line":"                                                   })"},{"line_number":1874,"context_line":""},{"line_number":1875,"context_line":"        req_false_open_expired \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027HEAD\u0027,"},{"line_number":1876,"context_line":"                                                    body\u003db\u0027\u0027,"},{"line_number":1877,"context_line":"                                                    headers\u003d{"},{"line_number":1878,"context_line":"                                                        \u0027Content-Type\u0027:"}],"source_content_type":"text/x-python","patch_set":10,"id":"b6e4bb4c_d9023f97","line":1875,"in_reply_to":"e9c18a60_cb804bf0","updated":"2023-04-03 11:49:39.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1871e73b5045fe8d36fb5fbd3e2f5722166c070e","unresolved":true,"context_lines":[{"line_number":1882,"context_line":""},{"line_number":1883,"context_line":"        # req_get \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027GET\u0027, body\u003db\u0027\u0027,"},{"line_number":1884,"context_line":"        #                          headers\u003d{\u0027Content-Type\u0027: \u0027foo/bar\u0027,"},{"line_number":1885,"context_line":"        #                                   \u0027X-TimeStamp\u0027: t_post})"},{"line_number":1886,"context_line":"        put_headers \u003d []"},{"line_number":1887,"context_line":"        post_headers \u003d []"},{"line_number":1888,"context_line":"        head_headers \u003d []"}],"source_content_type":"text/x-python","patch_set":10,"id":"6c37a0fd_801135bd","line":1885,"updated":"2023-03-28 11:52:15.000000000","message":"needs deleting?","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":false,"context_lines":[{"line_number":1882,"context_line":""},{"line_number":1883,"context_line":"        # req_get \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027GET\u0027, body\u003db\u0027\u0027,"},{"line_number":1884,"context_line":"        #                          headers\u003d{\u0027Content-Type\u0027: \u0027foo/bar\u0027,"},{"line_number":1885,"context_line":"        #                                   \u0027X-TimeStamp\u0027: t_post})"},{"line_number":1886,"context_line":"        put_headers \u003d []"},{"line_number":1887,"context_line":"        post_headers \u003d []"},{"line_number":1888,"context_line":"        head_headers \u003d []"}],"source_content_type":"text/x-python","patch_set":10,"id":"27dab454_e8a7cb21","line":1885,"in_reply_to":"6c37a0fd_801135bd","updated":"2023-04-03 11:49:39.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":1882,"context_line":""},{"line_number":1883,"context_line":"        # req_get \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027GET\u0027, body\u003db\u0027\u0027,"},{"line_number":1884,"context_line":"        #                          headers\u003d{\u0027Content-Type\u0027: \u0027foo/bar\u0027,"},{"line_number":1885,"context_line":"        #                                   \u0027X-TimeStamp\u0027: t_post})"},{"line_number":1886,"context_line":"        put_headers \u003d []"},{"line_number":1887,"context_line":"        post_headers \u003d []"},{"line_number":1888,"context_line":"        head_headers \u003d []"}],"source_content_type":"text/x-python","patch_set":10,"id":"dc1e31d6_cf849042","line":1885,"in_reply_to":"6c37a0fd_801135bd","updated":"2023-08-17 16:13:54.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1871e73b5045fe8d36fb5fbd3e2f5722166c070e","unresolved":true,"context_lines":[{"line_number":1886,"context_line":"        put_headers \u003d []"},{"line_number":1887,"context_line":"        post_headers \u003d []"},{"line_number":1888,"context_line":"        head_headers \u003d []"},{"line_number":1889,"context_line":"        get_headers \u003d []"},{"line_number":1890,"context_line":""},{"line_number":1891,"context_line":"        def capture_headers(ip, port, device, part, method, path, headers,"},{"line_number":1892,"context_line":"                            **kwargs):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5326ec48_9ff6729c","line":1889,"updated":"2023-03-28 11:52:15.000000000","message":"you could use a collections.defaultdict here:\n\n  headers \u003d collections.defaultdict(list)\n  \nand then in capture_headers method:\n\n  headers[method].append(headers)","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":false,"context_lines":[{"line_number":1886,"context_line":"        put_headers \u003d []"},{"line_number":1887,"context_line":"        post_headers \u003d []"},{"line_number":1888,"context_line":"        head_headers \u003d []"},{"line_number":1889,"context_line":"        get_headers \u003d []"},{"line_number":1890,"context_line":""},{"line_number":1891,"context_line":"        def capture_headers(ip, port, device, part, method, path, headers,"},{"line_number":1892,"context_line":"                            **kwargs):"}],"source_content_type":"text/x-python","patch_set":10,"id":"fd7d91a4_c38af0da","line":1889,"in_reply_to":"5326ec48_9ff6729c","updated":"2023-04-03 11:49:39.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":1886,"context_line":"        put_headers \u003d []"},{"line_number":1887,"context_line":"        post_headers \u003d []"},{"line_number":1888,"context_line":"        head_headers \u003d []"},{"line_number":1889,"context_line":"        get_headers \u003d []"},{"line_number":1890,"context_line":""},{"line_number":1891,"context_line":"        def capture_headers(ip, port, device, part, method, path, headers,"},{"line_number":1892,"context_line":"                            **kwargs):"}],"source_content_type":"text/x-python","patch_set":10,"id":"fc91d08c_43c2a41b","line":1889,"in_reply_to":"5326ec48_9ff6729c","updated":"2023-08-17 16:13:54.000000000","message":"I shortened the test to cover only the POST scenario since we also have a functional test that provides a much more enhanced coverage.","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1871e73b5045fe8d36fb5fbd3e2f5722166c070e","unresolved":true,"context_lines":[{"line_number":1907,"context_line":"        with set_http_connect(*codes, give_connect\u003dcapture_headers):"},{"line_number":1908,"context_line":"            resp \u003d req.get_response(self.app)"},{"line_number":1909,"context_line":"        self.assertEqual(resp.status_int, 201)"},{"line_number":1910,"context_line":"        for given_headers in put_headers:"},{"line_number":1911,"context_line":"            self.assertEqual(given_headers.get(\u0027X-Delete-At\u0027), t)"},{"line_number":1912,"context_line":"            self.assertIn(\u0027X-Delete-At-Host\u0027, given_headers)"},{"line_number":1913,"context_line":"            self.assertIn(\u0027X-Delete-At-Device\u0027, given_headers)"}],"source_content_type":"text/x-python","patch_set":10,"id":"d6161eda_d0203177","line":1910,"updated":"2023-03-28 11:52:15.000000000","message":"this will pass if put_headers is empty\n\nmaybe assert the length of put_headers?\n\nsame for all the other header types following...","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":1907,"context_line":"        with set_http_connect(*codes, give_connect\u003dcapture_headers):"},{"line_number":1908,"context_line":"            resp \u003d req.get_response(self.app)"},{"line_number":1909,"context_line":"        self.assertEqual(resp.status_int, 201)"},{"line_number":1910,"context_line":"        for given_headers in put_headers:"},{"line_number":1911,"context_line":"            self.assertEqual(given_headers.get(\u0027X-Delete-At\u0027), t)"},{"line_number":1912,"context_line":"            self.assertIn(\u0027X-Delete-At-Host\u0027, given_headers)"},{"line_number":1913,"context_line":"            self.assertIn(\u0027X-Delete-At-Device\u0027, given_headers)"}],"source_content_type":"text/x-python","patch_set":10,"id":"0e807e60_f25d54de","line":1910,"in_reply_to":"d6161eda_d0203177","updated":"2023-08-17 16:13:54.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":false,"context_lines":[{"line_number":1907,"context_line":"        with set_http_connect(*codes, give_connect\u003dcapture_headers):"},{"line_number":1908,"context_line":"            resp \u003d req.get_response(self.app)"},{"line_number":1909,"context_line":"        self.assertEqual(resp.status_int, 201)"},{"line_number":1910,"context_line":"        for given_headers in put_headers:"},{"line_number":1911,"context_line":"            self.assertEqual(given_headers.get(\u0027X-Delete-At\u0027), t)"},{"line_number":1912,"context_line":"            self.assertIn(\u0027X-Delete-At-Host\u0027, given_headers)"},{"line_number":1913,"context_line":"            self.assertIn(\u0027X-Delete-At-Device\u0027, given_headers)"}],"source_content_type":"text/x-python","patch_set":10,"id":"2a8e872d_fc211b2a","line":1910,"in_reply_to":"d6161eda_d0203177","updated":"2023-04-03 11:49:39.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1871e73b5045fe8d36fb5fbd3e2f5722166c070e","unresolved":true,"context_lines":[{"line_number":1915,"context_line":"            self.assertIn(\u0027X-Delete-At-Container\u0027, given_headers)"},{"line_number":1916,"context_line":""},{"line_number":1917,"context_line":"        with set_http_connect(*post_codes, give_connect\u003dcapture_headers):"},{"line_number":1918,"context_line":"            resp \u003d req_post.get_response(self.app)"},{"line_number":1919,"context_line":"        self.assertEqual(resp.status_int, 202)"},{"line_number":1920,"context_line":"        for given_headers in post_headers:"},{"line_number":1921,"context_line":"            self.assertEqual(given_headers.get(\u0027X-Delete-At\u0027), t_later)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a308843_102fb6aa","line":1918,"updated":"2023-03-28 11:52:15.000000000","message":"this is the only case we\u0027re really interested in covering with this test, I think?\n\nThe requests in this test create no state, so there doesn\u0027t need to be a series of requests simulating PUTting the object then POSTing. We just want to assert that if a POST request is passed to the app with X-Open-Expired \u003d true|false then the captured request has the expected backend header.","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":false,"context_lines":[{"line_number":1915,"context_line":"            self.assertIn(\u0027X-Delete-At-Container\u0027, given_headers)"},{"line_number":1916,"context_line":""},{"line_number":1917,"context_line":"        with set_http_connect(*post_codes, give_connect\u003dcapture_headers):"},{"line_number":1918,"context_line":"            resp \u003d req_post.get_response(self.app)"},{"line_number":1919,"context_line":"        self.assertEqual(resp.status_int, 202)"},{"line_number":1920,"context_line":"        for given_headers in post_headers:"},{"line_number":1921,"context_line":"            self.assertEqual(given_headers.get(\u0027X-Delete-At\u0027), t_later)"}],"source_content_type":"text/x-python","patch_set":10,"id":"52d50888_56c64844","line":1918,"in_reply_to":"5a308843_102fb6aa","updated":"2023-04-03 11:49:39.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":1915,"context_line":"            self.assertIn(\u0027X-Delete-At-Container\u0027, given_headers)"},{"line_number":1916,"context_line":""},{"line_number":1917,"context_line":"        with set_http_connect(*post_codes, give_connect\u003dcapture_headers):"},{"line_number":1918,"context_line":"            resp \u003d req_post.get_response(self.app)"},{"line_number":1919,"context_line":"        self.assertEqual(resp.status_int, 202)"},{"line_number":1920,"context_line":"        for given_headers in post_headers:"},{"line_number":1921,"context_line":"            self.assertEqual(given_headers.get(\u0027X-Delete-At\u0027), t_later)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5d6d9e9a_e9328ae4","line":1918,"in_reply_to":"5a308843_102fb6aa","updated":"2023-08-17 16:13:54.000000000","message":"You\u0027re correct. I have shortened the test to cover only the POST scenario and to head after the post has been successful","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1871e73b5045fe8d36fb5fbd3e2f5722166c070e","unresolved":true,"context_lines":[{"line_number":1922,"context_line":"            self.assertIn(\u0027X-Delete-At-Host\u0027, given_headers)"},{"line_number":1923,"context_line":"            self.assertIn(\u0027X-Delete-At-Device\u0027, given_headers)"},{"line_number":1924,"context_line":"            self.assertIn(\u0027X-Delete-At-Partition\u0027, given_headers)"},{"line_number":1925,"context_line":"            self.assertIn(\u0027X-Delete-At-Container\u0027, given_headers)"},{"line_number":1926,"context_line":""},{"line_number":1927,"context_line":"        with set_http_connect(*head_codes, give_connect\u003dcapture_headers):"},{"line_number":1928,"context_line":"            resp \u003d req_head.get_response(self.app)"}],"source_content_type":"text/x-python","patch_set":10,"id":"0b6c95d3_b585cb3b","line":1925,"updated":"2023-03-28 11:52:15.000000000","message":"also\n\n  self.assertEqual(given_headers.get(\u0027X-Backend-Open-Expired\u0027), \u0027true\u0027)","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":1922,"context_line":"            self.assertIn(\u0027X-Delete-At-Host\u0027, given_headers)"},{"line_number":1923,"context_line":"            self.assertIn(\u0027X-Delete-At-Device\u0027, given_headers)"},{"line_number":1924,"context_line":"            self.assertIn(\u0027X-Delete-At-Partition\u0027, given_headers)"},{"line_number":1925,"context_line":"            self.assertIn(\u0027X-Delete-At-Container\u0027, given_headers)"},{"line_number":1926,"context_line":""},{"line_number":1927,"context_line":"        with set_http_connect(*head_codes, give_connect\u003dcapture_headers):"},{"line_number":1928,"context_line":"            resp \u003d req_head.get_response(self.app)"}],"source_content_type":"text/x-python","patch_set":10,"id":"110bb559_d280fff9","line":1925,"in_reply_to":"0b6c95d3_b585cb3b","updated":"2023-08-17 16:13:54.000000000","message":"Ack","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":false,"context_lines":[{"line_number":1922,"context_line":"            self.assertIn(\u0027X-Delete-At-Host\u0027, given_headers)"},{"line_number":1923,"context_line":"            self.assertIn(\u0027X-Delete-At-Device\u0027, given_headers)"},{"line_number":1924,"context_line":"            self.assertIn(\u0027X-Delete-At-Partition\u0027, given_headers)"},{"line_number":1925,"context_line":"            self.assertIn(\u0027X-Delete-At-Container\u0027, given_headers)"},{"line_number":1926,"context_line":""},{"line_number":1927,"context_line":"        with set_http_connect(*head_codes, give_connect\u003dcapture_headers):"},{"line_number":1928,"context_line":"            resp \u003d req_head.get_response(self.app)"}],"source_content_type":"text/x-python","patch_set":10,"id":"f09c1a59_46b2e554","line":1925,"in_reply_to":"0b6c95d3_b585cb3b","updated":"2023-04-03 11:49:39.000000000","message":"Done","commit_id":"8f25ec328b457ed8e58f866b70c2b2d0e71b4cc9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":true,"context_lines":[{"line_number":1851,"context_line":"        t \u003d str(int(time.time() + 30))"},{"line_number":1852,"context_line":"        t_later \u003d str(int(time.time() + 300))"},{"line_number":1853,"context_line":"        t_head \u003d str(int(time.time() + 200))"},{"line_number":1854,"context_line":"        # ts \u003d utils.Timestamp.now().normal"},{"line_number":1855,"context_line":"        req_post \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027PUT\u0027, body\u003db\u0027\u0027,"},{"line_number":1856,"context_line":"                                      headers\u003d{\u0027Content-Type\u0027: \u0027foo/bar\u0027,"},{"line_number":1857,"context_line":"                                               \u0027X-Delete-At\u0027: t,"}],"source_content_type":"text/x-python","patch_set":12,"id":"2c1326ad_54e5ef20","line":1854,"updated":"2023-04-03 11:49:39.000000000","message":"please delete unused code","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":1851,"context_line":"        t \u003d str(int(time.time() + 30))"},{"line_number":1852,"context_line":"        t_later \u003d str(int(time.time() + 300))"},{"line_number":1853,"context_line":"        t_head \u003d str(int(time.time() + 200))"},{"line_number":1854,"context_line":"        # ts \u003d utils.Timestamp.now().normal"},{"line_number":1855,"context_line":"        req_post \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027PUT\u0027, body\u003db\u0027\u0027,"},{"line_number":1856,"context_line":"                                      headers\u003d{\u0027Content-Type\u0027: \u0027foo/bar\u0027,"},{"line_number":1857,"context_line":"                                               \u0027X-Delete-At\u0027: t,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bb73edc5_ace0aaf2","line":1854,"in_reply_to":"2c1326ad_54e5ef20","updated":"2023-08-17 16:13:54.000000000","message":"Done","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9c24f3f2c3fcbf55f6f426bb57d7fe18ee406b2f","unresolved":false,"context_lines":[{"line_number":1851,"context_line":"        t \u003d str(int(time.time() + 30))"},{"line_number":1852,"context_line":"        t_later \u003d str(int(time.time() + 300))"},{"line_number":1853,"context_line":"        t_head \u003d str(int(time.time() + 200))"},{"line_number":1854,"context_line":"        # ts \u003d utils.Timestamp.now().normal"},{"line_number":1855,"context_line":"        req_post \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027PUT\u0027, body\u003db\u0027\u0027,"},{"line_number":1856,"context_line":"                                      headers\u003d{\u0027Content-Type\u0027: \u0027foo/bar\u0027,"},{"line_number":1857,"context_line":"                                               \u0027X-Delete-At\u0027: t,"}],"source_content_type":"text/x-python","patch_set":12,"id":"e376f3ea_fbb5535b","line":1854,"in_reply_to":"2c1326ad_54e5ef20","updated":"2023-04-06 11:00:29.000000000","message":"Done","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":true,"context_lines":[{"line_number":1852,"context_line":"        t_later \u003d str(int(time.time() + 300))"},{"line_number":1853,"context_line":"        t_head \u003d str(int(time.time() + 200))"},{"line_number":1854,"context_line":"        # ts \u003d utils.Timestamp.now().normal"},{"line_number":1855,"context_line":"        req_post \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027PUT\u0027, body\u003db\u0027\u0027,"},{"line_number":1856,"context_line":"                                      headers\u003d{\u0027Content-Type\u0027: \u0027foo/bar\u0027,"},{"line_number":1857,"context_line":"                                               \u0027X-Delete-At\u0027: t,"},{"line_number":1858,"context_line":"                                               \u0027X-Open-Expired\u0027: True})"}],"source_content_type":"text/x-python","patch_set":12,"id":"81aee701_17dbb800","line":1855,"range":{"start_line":1855,"start_character":59,"end_line":1855,"end_character":63},"updated":"2023-04-03 11:49:39.000000000","message":"PUT? should be POST","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9c24f3f2c3fcbf55f6f426bb57d7fe18ee406b2f","unresolved":false,"context_lines":[{"line_number":1852,"context_line":"        t_later \u003d str(int(time.time() + 300))"},{"line_number":1853,"context_line":"        t_head \u003d str(int(time.time() + 200))"},{"line_number":1854,"context_line":"        # ts \u003d utils.Timestamp.now().normal"},{"line_number":1855,"context_line":"        req_post \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027PUT\u0027, body\u003db\u0027\u0027,"},{"line_number":1856,"context_line":"                                      headers\u003d{\u0027Content-Type\u0027: \u0027foo/bar\u0027,"},{"line_number":1857,"context_line":"                                               \u0027X-Delete-At\u0027: t,"},{"line_number":1858,"context_line":"                                               \u0027X-Open-Expired\u0027: True})"}],"source_content_type":"text/x-python","patch_set":12,"id":"ac014a70_62f42673","line":1855,"range":{"start_line":1855,"start_character":59,"end_line":1855,"end_character":63},"in_reply_to":"81aee701_17dbb800","updated":"2023-04-06 11:00:29.000000000","message":"Done","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":1852,"context_line":"        t_later \u003d str(int(time.time() + 300))"},{"line_number":1853,"context_line":"        t_head \u003d str(int(time.time() + 200))"},{"line_number":1854,"context_line":"        # ts \u003d utils.Timestamp.now().normal"},{"line_number":1855,"context_line":"        req_post \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027PUT\u0027, body\u003db\u0027\u0027,"},{"line_number":1856,"context_line":"                                      headers\u003d{\u0027Content-Type\u0027: \u0027foo/bar\u0027,"},{"line_number":1857,"context_line":"                                               \u0027X-Delete-At\u0027: t,"},{"line_number":1858,"context_line":"                                               \u0027X-Open-Expired\u0027: True})"}],"source_content_type":"text/x-python","patch_set":12,"id":"ef7b8aaa_5bdff916","line":1855,"range":{"start_line":1855,"start_character":59,"end_line":1855,"end_character":63},"in_reply_to":"81aee701_17dbb800","updated":"2023-08-17 16:13:54.000000000","message":"Done","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":true,"context_lines":[{"line_number":1879,"context_line":"        with set_http_connect(*post_codes, give_connect\u003dcapture_headers):"},{"line_number":1880,"context_line":"            resp \u003d req_post.get_response(self.app)"},{"line_number":1881,"context_line":"        self.assertEqual(resp.status_int, 202)"},{"line_number":1882,"context_line":"        self.assertEqual(len(post_headers), 0)"},{"line_number":1883,"context_line":""},{"line_number":1884,"context_line":"        for given_headers in post_headers:"},{"line_number":1885,"context_line":"            self.assertEqual(given_headers.get(\u0027X-Delete-At\u0027), t_later)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1571497d_bcfb1022","line":1882,"range":{"start_line":1882,"start_character":43,"end_line":1882,"end_character":45},"updated":"2023-04-03 11:49:39.000000000","message":"this asserts there are no post_headers","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":1879,"context_line":"        with set_http_connect(*post_codes, give_connect\u003dcapture_headers):"},{"line_number":1880,"context_line":"            resp \u003d req_post.get_response(self.app)"},{"line_number":1881,"context_line":"        self.assertEqual(resp.status_int, 202)"},{"line_number":1882,"context_line":"        self.assertEqual(len(post_headers), 0)"},{"line_number":1883,"context_line":""},{"line_number":1884,"context_line":"        for given_headers in post_headers:"},{"line_number":1885,"context_line":"            self.assertEqual(given_headers.get(\u0027X-Delete-At\u0027), t_later)"}],"source_content_type":"text/x-python","patch_set":12,"id":"f47f7d91_bc743531","line":1882,"range":{"start_line":1882,"start_character":43,"end_line":1882,"end_character":45},"in_reply_to":"1571497d_bcfb1022","updated":"2023-08-17 16:13:54.000000000","message":"Ack","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9c24f3f2c3fcbf55f6f426bb57d7fe18ee406b2f","unresolved":false,"context_lines":[{"line_number":1879,"context_line":"        with set_http_connect(*post_codes, give_connect\u003dcapture_headers):"},{"line_number":1880,"context_line":"            resp \u003d req_post.get_response(self.app)"},{"line_number":1881,"context_line":"        self.assertEqual(resp.status_int, 202)"},{"line_number":1882,"context_line":"        self.assertEqual(len(post_headers), 0)"},{"line_number":1883,"context_line":""},{"line_number":1884,"context_line":"        for given_headers in post_headers:"},{"line_number":1885,"context_line":"            self.assertEqual(given_headers.get(\u0027X-Delete-At\u0027), t_later)"}],"source_content_type":"text/x-python","patch_set":12,"id":"855bb5b3_f9b1cf93","line":1882,"range":{"start_line":1882,"start_character":43,"end_line":1882,"end_character":45},"in_reply_to":"1571497d_bcfb1022","updated":"2023-04-06 11:00:29.000000000","message":"Done","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":true,"context_lines":[{"line_number":1881,"context_line":"        self.assertEqual(resp.status_int, 202)"},{"line_number":1882,"context_line":"        self.assertEqual(len(post_headers), 0)"},{"line_number":1883,"context_line":""},{"line_number":1884,"context_line":"        for given_headers in post_headers:"},{"line_number":1885,"context_line":"            self.assertEqual(given_headers.get(\u0027X-Delete-At\u0027), t_later)"},{"line_number":1886,"context_line":"            self.assertIn(\u0027X-Delete-At-Host\u0027, given_headers)"},{"line_number":1887,"context_line":"            self.assertIn(\u0027X-Delete-At-Device\u0027, given_headers)"}],"source_content_type":"text/x-python","patch_set":12,"id":"cf2c225f_b90bee39","line":1884,"range":{"start_line":1884,"start_character":8,"end_line":1884,"end_character":41},"updated":"2023-04-03 11:49:39.000000000","message":"...there are no post_headers!","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":1881,"context_line":"        self.assertEqual(resp.status_int, 202)"},{"line_number":1882,"context_line":"        self.assertEqual(len(post_headers), 0)"},{"line_number":1883,"context_line":""},{"line_number":1884,"context_line":"        for given_headers in post_headers:"},{"line_number":1885,"context_line":"            self.assertEqual(given_headers.get(\u0027X-Delete-At\u0027), t_later)"},{"line_number":1886,"context_line":"            self.assertIn(\u0027X-Delete-At-Host\u0027, given_headers)"},{"line_number":1887,"context_line":"            self.assertIn(\u0027X-Delete-At-Device\u0027, given_headers)"}],"source_content_type":"text/x-python","patch_set":12,"id":"2bb621d5_659b5cf4","line":1884,"range":{"start_line":1884,"start_character":8,"end_line":1884,"end_character":41},"in_reply_to":"cf2c225f_b90bee39","updated":"2023-08-17 16:13:54.000000000","message":"Ack","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9c24f3f2c3fcbf55f6f426bb57d7fe18ee406b2f","unresolved":false,"context_lines":[{"line_number":1881,"context_line":"        self.assertEqual(resp.status_int, 202)"},{"line_number":1882,"context_line":"        self.assertEqual(len(post_headers), 0)"},{"line_number":1883,"context_line":""},{"line_number":1884,"context_line":"        for given_headers in post_headers:"},{"line_number":1885,"context_line":"            self.assertEqual(given_headers.get(\u0027X-Delete-At\u0027), t_later)"},{"line_number":1886,"context_line":"            self.assertIn(\u0027X-Delete-At-Host\u0027, given_headers)"},{"line_number":1887,"context_line":"            self.assertIn(\u0027X-Delete-At-Device\u0027, given_headers)"}],"source_content_type":"text/x-python","patch_set":12,"id":"319ca21e_488d0ec1","line":1884,"range":{"start_line":1884,"start_character":8,"end_line":1884,"end_character":41},"in_reply_to":"cf2c225f_b90bee39","updated":"2023-04-06 11:00:29.000000000","message":"Done","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5ab0d7fce5a38584860a54a08309c817fc7487d1","unresolved":true,"context_lines":[{"line_number":1890,"context_line":"            self.assertEqual(given_headers.get(\u0027X-Backend-Open-Expired\u0027),"},{"line_number":1891,"context_line":"                             \u0027true\u0027)"},{"line_number":1892,"context_line":""},{"line_number":1893,"context_line":"        with set_http_connect(*open_expire_head_codes,"},{"line_number":1894,"context_line":"                              give_connect\u003dcapture_headers):"},{"line_number":1895,"context_line":"            resp \u003d req_head_open_expired.get_response(self.app)"},{"line_number":1896,"context_line":"        self.assertEqual(resp.status_int, 200)"},{"line_number":1897,"context_line":"        self.assertEqual(resp.is_success, True)"},{"line_number":1898,"context_line":""},{"line_number":1899,"context_line":"    def test_PUT_converts_delete_after_to_delete_at(self):"},{"line_number":1900,"context_line":"        req \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027PUT\u0027, body\u003db\u0027\u0027,"},{"line_number":1901,"context_line":"                                 headers\u003d{\u0027Content-Type\u0027: \u0027foo/bar\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"01df3567_b5366c81","line":1898,"range":{"start_line":1893,"start_character":1,"end_line":1898,"end_character":0},"updated":"2023-04-03 11:49:39.000000000","message":"I don\u0027t think this is needed - HEAD behavior is already tested in test_x_open_expired","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"cae9cd949e1d02958ef4e1e461894131c557c466","unresolved":false,"context_lines":[{"line_number":1890,"context_line":"            self.assertEqual(given_headers.get(\u0027X-Backend-Open-Expired\u0027),"},{"line_number":1891,"context_line":"                             \u0027true\u0027)"},{"line_number":1892,"context_line":""},{"line_number":1893,"context_line":"        with set_http_connect(*open_expire_head_codes,"},{"line_number":1894,"context_line":"                              give_connect\u003dcapture_headers):"},{"line_number":1895,"context_line":"            resp \u003d req_head_open_expired.get_response(self.app)"},{"line_number":1896,"context_line":"        self.assertEqual(resp.status_int, 200)"},{"line_number":1897,"context_line":"        self.assertEqual(resp.is_success, True)"},{"line_number":1898,"context_line":""},{"line_number":1899,"context_line":"    def test_PUT_converts_delete_after_to_delete_at(self):"},{"line_number":1900,"context_line":"        req \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027PUT\u0027, body\u003db\u0027\u0027,"},{"line_number":1901,"context_line":"                                 headers\u003d{\u0027Content-Type\u0027: \u0027foo/bar\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"0a0e7cb7_5674aa3d","line":1898,"range":{"start_line":1893,"start_character":1,"end_line":1898,"end_character":0},"in_reply_to":"01df3567_b5366c81","updated":"2023-08-17 16:13:54.000000000","message":"Ack","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9c24f3f2c3fcbf55f6f426bb57d7fe18ee406b2f","unresolved":false,"context_lines":[{"line_number":1890,"context_line":"            self.assertEqual(given_headers.get(\u0027X-Backend-Open-Expired\u0027),"},{"line_number":1891,"context_line":"                             \u0027true\u0027)"},{"line_number":1892,"context_line":""},{"line_number":1893,"context_line":"        with set_http_connect(*open_expire_head_codes,"},{"line_number":1894,"context_line":"                              give_connect\u003dcapture_headers):"},{"line_number":1895,"context_line":"            resp \u003d req_head_open_expired.get_response(self.app)"},{"line_number":1896,"context_line":"        self.assertEqual(resp.status_int, 200)"},{"line_number":1897,"context_line":"        self.assertEqual(resp.is_success, True)"},{"line_number":1898,"context_line":""},{"line_number":1899,"context_line":"    def test_PUT_converts_delete_after_to_delete_at(self):"},{"line_number":1900,"context_line":"        req \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027PUT\u0027, body\u003db\u0027\u0027,"},{"line_number":1901,"context_line":"                                 headers\u003d{\u0027Content-Type\u0027: \u0027foo/bar\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"361bc809_dc6b268c","line":1898,"range":{"start_line":1893,"start_character":1,"end_line":1898,"end_character":0},"in_reply_to":"01df3567_b5366c81","updated":"2023-04-06 11:00:29.000000000","message":"Done","commit_id":"e86a976a412007b780beab2f8b5941cf3fa5dd72"}]}
