)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5a83409e5a7f375fd8391f649fed358f61bd888","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"2b2fcfb9_d1e016ba","updated":"2023-12-19 01:42:02.000000000","message":"there a bunch of work to do here still, but I think what\u0027s here is mostly helpful","commit_id":"3269fb664d6cb54abd46bdfe615dd887d6d512d7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0c6904f5ee9536248d66896b83f5a66fa0d638cd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"4af96d5a_7f5e7144","updated":"2023-12-19 15:54:52.000000000","message":"I think we lost some stuff from ps3-\u003e4","commit_id":"6a6293b359b26a8b8dd7943ecdd2320abe88c248"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5269fae4a61bbf209d99fa44ec468f37017eaa38","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"371f3e8f_1ccbe477","updated":"2024-02-05 17:50:21.000000000","message":"I think these changes have either made it into https://review.opendev.org/c/openstack/swift/+/894580 or been superseded in its current patchset.","commit_id":"b41f59bbb2b3d84ff19ca889cbc140b73fa06564"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"31bc4863f943d9522f477e64bc8b58bdfb5b3a5f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"8c0de6e2_d5a167a1","updated":"2023-12-20 01:27:35.000000000","message":"I think when I squash there\u0027s there\u0027s still going to be some un-resolved feedback that will probably still be worth considering in the context of the flattened patch.  i.e. I think this error handling is somewhat conservative.","commit_id":"b41f59bbb2b3d84ff19ca889cbc140b73fa06564"}],"swift/common/middleware/s3api/controllers/obj.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5269fae4a61bbf209d99fa44ec468f37017eaa38","unresolved":true,"context_lines":[{"line_number":52,"context_line":"    resp.status \u003d HTTP_PARTIAL_CONTENT"},{"line_number":53,"context_line":"    resp.headers[\u0027Content-Range\u0027] \u003d \\"},{"line_number":54,"context_line":"        \u0027bytes 0-%d/%s\u0027 % (int(resp.headers[\u0027Content-Length\u0027]) - 1,"},{"line_number":55,"context_line":"                           resp.headers[\u0027Content-Length\u0027])"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class ObjectController(Controller):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fe4e0e95_4837db31","line":55,"updated":"2024-02-05 17:50:21.000000000","message":"Done here https://review.opendev.org/c/openstack/swift/+/894580/94/swift/common/middleware/s3api/controllers/obj.py#110","commit_id":"b41f59bbb2b3d84ff19ca889cbc140b73fa06564"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"074172b4e6cadaea6dc1d7518a9099652533a8f1","unresolved":true,"context_lines":[{"line_number":133,"context_line":"        if part_number:"},{"line_number":134,"context_line":"            if resp.is_slo:"},{"line_number":135,"context_line":"                try:"},{"line_number":136,"context_line":"                    if int(part_number) \u003e 10000:"},{"line_number":137,"context_line":"                        raise InvalidPartArgument(part_number)"},{"line_number":138,"context_line":"                except (ValueError, TypeError):"},{"line_number":139,"context_line":"                    raise InvalidPartArgument(part_number)"}],"source_content_type":"text/x-python","patch_set":6,"id":"a89e0914_87ec8ca5","line":136,"updated":"2023-12-19 19:03:54.000000000","message":"I couldn\u0027t convince myself that this was covered by any test - SLO will check if part_number \u003e number parts, but if that check fails then I\u0027m not sure we end up in this line - but it\u0027s late and I may be wrong.\n\nAlso, I\u0027m not convinced we should enforce this. IIUC max parts is configurable and could have been set \u003e 10000. Yes, AWS enforces 10000, but if (and my \u0027if\u0027 may be wrong!) swift could *ever* allow an MPU with \u003e10000 parts to be created, then it must allow them to be read. IMHO.\n\nIn other words, if we only get here when SLO was happy to return the part, why are we then refusing to return it?","commit_id":"b41f59bbb2b3d84ff19ca889cbc140b73fa06564"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5269fae4a61bbf209d99fa44ec468f37017eaa38","unresolved":true,"context_lines":[{"line_number":133,"context_line":"        if part_number:"},{"line_number":134,"context_line":"            if resp.is_slo:"},{"line_number":135,"context_line":"                try:"},{"line_number":136,"context_line":"                    if int(part_number) \u003e 10000:"},{"line_number":137,"context_line":"                        raise InvalidPartArgument(part_number)"},{"line_number":138,"context_line":"                except (ValueError, TypeError):"},{"line_number":139,"context_line":"                    raise InvalidPartArgument(part_number)"}],"source_content_type":"text/x-python","patch_set":6,"id":"168c4ad7_6d66b151","line":136,"in_reply_to":"3ae2f543_7bd9743e","updated":"2024-02-05 17:50:21.000000000","message":"this was taken care of by https://review.opendev.org/c/openstack/swift/+/904127 and squashed to parent","commit_id":"b41f59bbb2b3d84ff19ca889cbc140b73fa06564"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"78215065cde1342b4d9b850f52c8ff164d7bf46c","unresolved":true,"context_lines":[{"line_number":133,"context_line":"        if part_number:"},{"line_number":134,"context_line":"            if resp.is_slo:"},{"line_number":135,"context_line":"                try:"},{"line_number":136,"context_line":"                    if int(part_number) \u003e 10000:"},{"line_number":137,"context_line":"                        raise InvalidPartArgument(part_number)"},{"line_number":138,"context_line":"                except (ValueError, TypeError):"},{"line_number":139,"context_line":"                    raise InvalidPartArgument(part_number)"}],"source_content_type":"text/x-python","patch_set":6,"id":"8d07b394_a60341dc","line":136,"in_reply_to":"43854162_322e9c28","updated":"2023-12-20 14:31:41.000000000","message":"from AWS it\u0027s 400 for \u003e 10000 and 416 for \u003e num_parts\n\nbut IIUC we only get here is SLO returned 206 so we should not enforce any limits","commit_id":"b41f59bbb2b3d84ff19ca889cbc140b73fa06564"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"bfef8c6908ec40b2b643753937b242f92eb43523","unresolved":true,"context_lines":[{"line_number":133,"context_line":"        if part_number:"},{"line_number":134,"context_line":"            if resp.is_slo:"},{"line_number":135,"context_line":"                try:"},{"line_number":136,"context_line":"                    if int(part_number) \u003e 10000:"},{"line_number":137,"context_line":"                        raise InvalidPartArgument(part_number)"},{"line_number":138,"context_line":"                except (ValueError, TypeError):"},{"line_number":139,"context_line":"                    raise InvalidPartArgument(part_number)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3ae2f543_7bd9743e","line":136,"in_reply_to":"8d07b394_a60341dc","updated":"2023-12-20 14:37:22.000000000","message":"see https://review.opendev.org/c/openstack/swift/+/904127","commit_id":"b41f59bbb2b3d84ff19ca889cbc140b73fa06564"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"31bc4863f943d9522f477e64bc8b58bdfb5b3a5f","unresolved":true,"context_lines":[{"line_number":133,"context_line":"        if part_number:"},{"line_number":134,"context_line":"            if resp.is_slo:"},{"line_number":135,"context_line":"                try:"},{"line_number":136,"context_line":"                    if int(part_number) \u003e 10000:"},{"line_number":137,"context_line":"                        raise InvalidPartArgument(part_number)"},{"line_number":138,"context_line":"                except (ValueError, TypeError):"},{"line_number":139,"context_line":"                    raise InvalidPartArgument(part_number)"}],"source_content_type":"text/x-python","patch_set":6,"id":"43854162_322e9c28","line":136,"in_reply_to":"a89e0914_87ec8ca5","updated":"2023-12-20 01:27:35.000000000","message":"I think that\u0027s the right take; if s3api and slo let you create it you can read it\n\nI think I now also understand it\u0027s the same error for partNumber \u003e num_parts or partNumber \u003e 10001 so it\u0027s not really necessary to do any different translation?","commit_id":"b41f59bbb2b3d84ff19ca889cbc140b73fa06564"}],"swift/common/middleware/s3api/s3request.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5269fae4a61bbf209d99fa44ec468f37017eaa38","unresolved":true,"context_lines":[{"line_number":1431,"context_line":"                **self.signature_does_not_match_kwargs())"},{"line_number":1432,"context_line":"        if status \u003d\u003d HTTP_FORBIDDEN:"},{"line_number":1433,"context_line":"            raise AccessDenied(reason\u003d\u0027forbidden\u0027)"},{"line_number":1434,"context_line":"        if status \u003d\u003d HTTP_REQUESTED_RANGE_NOT_SATISFIABLE:"},{"line_number":1435,"context_line":"            err_str \u003d err_msg.decode(\u0027utf8\u0027)"},{"line_number":1436,"context_line":"            if \u0027partNumber\u0027 in self.params:"},{"line_number":1437,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"390102f5_b9052728","line":1434,"updated":"2024-02-05 17:50:21.000000000","message":"Done \nsee https://review.opendev.org/c/openstack/swift/+/904127/2/swift/common/middleware/s3api/s3request.py#1468","commit_id":"b41f59bbb2b3d84ff19ca889cbc140b73fa06564"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4a74980339ac615aea9f738e0f0a99067850bf1d","unresolved":true,"context_lines":[{"line_number":1437,"context_line":"                try:"},{"line_number":1438,"context_line":"                    part_num \u003d int(self.params[\u0027partNumber\u0027])"},{"line_number":1439,"context_line":"                except ValueError:"},{"line_number":1440,"context_line":"                    raise InvalidPartArgument(self.params[\u0027partNumber\u0027])"},{"line_number":1441,"context_line":"                if part_num \u003e 10000:"},{"line_number":1442,"context_line":"                    raise InvalidPartArgument(self.params[\u0027partNumber\u0027])"},{"line_number":1443,"context_line":"                if \u0027The requested part number is not satisfiable\u0027 in err_str:"}],"source_content_type":"text/x-python","patch_set":6,"id":"58a470f9_7ceb4d5b","line":1440,"updated":"2023-12-19 19:29:16.000000000","message":"not sure how we\u0027d get here without already having a Bad Request, but no harm I guess","commit_id":"b41f59bbb2b3d84ff19ca889cbc140b73fa06564"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5269fae4a61bbf209d99fa44ec468f37017eaa38","unresolved":false,"context_lines":[{"line_number":1437,"context_line":"                try:"},{"line_number":1438,"context_line":"                    part_num \u003d int(self.params[\u0027partNumber\u0027])"},{"line_number":1439,"context_line":"                except ValueError:"},{"line_number":1440,"context_line":"                    raise InvalidPartArgument(self.params[\u0027partNumber\u0027])"},{"line_number":1441,"context_line":"                if part_num \u003e 10000:"},{"line_number":1442,"context_line":"                    raise InvalidPartArgument(self.params[\u0027partNumber\u0027])"},{"line_number":1443,"context_line":"                if \u0027The requested part number is not satisfiable\u0027 in err_str:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3dc5c74d_84d78c88","line":1440,"in_reply_to":"58a470f9_7ceb4d5b","updated":"2024-02-05 17:50:21.000000000","message":"Done","commit_id":"b41f59bbb2b3d84ff19ca889cbc140b73fa06564"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4a74980339ac615aea9f738e0f0a99067850bf1d","unresolved":true,"context_lines":[{"line_number":1438,"context_line":"                    part_num \u003d int(self.params[\u0027partNumber\u0027])"},{"line_number":1439,"context_line":"                except ValueError:"},{"line_number":1440,"context_line":"                    raise InvalidPartArgument(self.params[\u0027partNumber\u0027])"},{"line_number":1441,"context_line":"                if part_num \u003e 10000:"},{"line_number":1442,"context_line":"                    raise InvalidPartArgument(self.params[\u0027partNumber\u0027])"},{"line_number":1443,"context_line":"                if \u0027The requested part number is not satisfiable\u0027 in err_str:"},{"line_number":1444,"context_line":"                    raise InvalidPartNumber()"}],"source_content_type":"text/x-python","patch_set":6,"id":"7240be09_cbd36156","line":1441,"updated":"2023-12-19 19:29:16.000000000","message":"ok so SLO was happy to return 416 but s3api wants to \u0027upgrade\u0027 to 400","commit_id":"b41f59bbb2b3d84ff19ca889cbc140b73fa06564"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5269fae4a61bbf209d99fa44ec468f37017eaa38","unresolved":false,"context_lines":[{"line_number":1438,"context_line":"                    part_num \u003d int(self.params[\u0027partNumber\u0027])"},{"line_number":1439,"context_line":"                except ValueError:"},{"line_number":1440,"context_line":"                    raise InvalidPartArgument(self.params[\u0027partNumber\u0027])"},{"line_number":1441,"context_line":"                if part_num \u003e 10000:"},{"line_number":1442,"context_line":"                    raise InvalidPartArgument(self.params[\u0027partNumber\u0027])"},{"line_number":1443,"context_line":"                if \u0027The requested part number is not satisfiable\u0027 in err_str:"},{"line_number":1444,"context_line":"                    raise InvalidPartNumber()"}],"source_content_type":"text/x-python","patch_set":6,"id":"2f8b157e_1e467e35","line":1441,"in_reply_to":"7240be09_cbd36156","updated":"2024-02-05 17:50:21.000000000","message":"Done","commit_id":"b41f59bbb2b3d84ff19ca889cbc140b73fa06564"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4a74980339ac615aea9f738e0f0a99067850bf1d","unresolved":true,"context_lines":[{"line_number":1440,"context_line":"                    raise InvalidPartArgument(self.params[\u0027partNumber\u0027])"},{"line_number":1441,"context_line":"                if part_num \u003e 10000:"},{"line_number":1442,"context_line":"                    raise InvalidPartArgument(self.params[\u0027partNumber\u0027])"},{"line_number":1443,"context_line":"                if \u0027The requested part number is not satisfiable\u0027 in err_str:"},{"line_number":1444,"context_line":"                    raise InvalidPartNumber()"},{"line_number":1445,"context_line":"            raise InvalidRange()"},{"line_number":1446,"context_line":"        if status \u003d\u003d HTTP_SERVICE_UNAVAILABLE:"}],"source_content_type":"text/x-python","patch_set":6,"id":"31532791_d0863c85","line":1443,"updated":"2023-12-19 19:29:16.000000000","message":"what happen to a HEAD, which has no err_str? I think it drops through to InvalidRange, which is also 416, and it doesn\u0027t matter what the body would have been cos it\u0027s not sent","commit_id":"b41f59bbb2b3d84ff19ca889cbc140b73fa06564"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5269fae4a61bbf209d99fa44ec468f37017eaa38","unresolved":false,"context_lines":[{"line_number":1440,"context_line":"                    raise InvalidPartArgument(self.params[\u0027partNumber\u0027])"},{"line_number":1441,"context_line":"                if part_num \u003e 10000:"},{"line_number":1442,"context_line":"                    raise InvalidPartArgument(self.params[\u0027partNumber\u0027])"},{"line_number":1443,"context_line":"                if \u0027The requested part number is not satisfiable\u0027 in err_str:"},{"line_number":1444,"context_line":"                    raise InvalidPartNumber()"},{"line_number":1445,"context_line":"            raise InvalidRange()"},{"line_number":1446,"context_line":"        if status \u003d\u003d HTTP_SERVICE_UNAVAILABLE:"}],"source_content_type":"text/x-python","patch_set":6,"id":"d25232ad_95e4e09c","line":1443,"in_reply_to":"31532791_d0863c85","updated":"2024-02-05 17:50:21.000000000","message":"Done","commit_id":"b41f59bbb2b3d84ff19ca889cbc140b73fa06564"}],"swift/common/middleware/s3api/s3response.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5269fae4a61bbf209d99fa44ec468f37017eaa38","unresolved":true,"context_lines":[{"line_number":459,"context_line":"                   \u00271 and 10000, inclusive\u0027)"},{"line_number":460,"context_line":"        super(InvalidArgument, self).__init__(err_msg,"},{"line_number":461,"context_line":"                                              argument_name\u003d\u0027partNumber\u0027,"},{"line_number":462,"context_line":"                                              argument_value\u003dvalue)"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"class InvalidPart(ErrorResponse):"}],"source_content_type":"text/x-python","patch_set":6,"id":"449affda_8bdcc13b","line":462,"updated":"2024-02-05 17:50:21.000000000","message":"this change is in https://review.opendev.org/c/openstack/swift/+/894580/94/swift/common/middleware/s3api/s3response.py#454","commit_id":"b41f59bbb2b3d84ff19ca889cbc140b73fa06564"}],"test/unit/common/middleware/s3api/__init__.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"62db7cad9c372d87701458abb7c69d73ff4307a5","unresolved":true,"context_lines":[{"line_number":43,"context_line":"            self.app \u003d other_app"},{"line_number":44,"context_line":"            other_app.app \u003d self.swift"},{"line_number":45,"context_line":"        else:"},{"line_number":46,"context_line":"            self.app \u003d self.swift"},{"line_number":47,"context_line":"        self.logger \u003d self.swift.logger"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _update_s3_path_info(self, env):"}],"source_content_type":"text/x-python","patch_set":2,"id":"455a2f73_03a923ea","line":46,"updated":"2023-12-18 16:36:43.000000000","message":"I\u0027m not pleased with this. I\u0027d rather FakeApp was just a middleware and FakeSwift was created separately, then all the apps got stitched together. But this seems to work for now.\n\nThe point of this change is that FakeApp is auth, and as such it\u0027s handle_request should be called before middlewares like SLO. Otherwise the account re-writing doesn\u0027t happen before a request reaches SLO.","commit_id":"788a4e5156fb6671e1f0e4170316b821992a4a36"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5a83409e5a7f375fd8391f649fed358f61bd888","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            self.app \u003d other_app"},{"line_number":44,"context_line":"            other_app.app \u003d self.swift"},{"line_number":45,"context_line":"        else:"},{"line_number":46,"context_line":"            self.app \u003d self.swift"},{"line_number":47,"context_line":"        self.logger \u003d self.swift.logger"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _update_s3_path_info(self, env):"}],"source_content_type":"text/x-python","patch_set":2,"id":"07f1330f_8d6ab34b","line":46,"in_reply_to":"455a2f73_03a923ea","updated":"2023-12-19 01:42:02.000000000","message":"Acknowledged","commit_id":"788a4e5156fb6671e1f0e4170316b821992a4a36"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5a83409e5a7f375fd8391f649fed358f61bd888","unresolved":true,"context_lines":[{"line_number":38,"context_line":"    def __init__(self):"},{"line_number":39,"context_line":"        self.remote_user \u003d \u0027authorized\u0027"},{"line_number":40,"context_line":"        self._pipeline_final_app \u003d self"},{"line_number":41,"context_line":"        self.swift \u003d FakeSwift()"},{"line_number":42,"context_line":"        self.logger \u003d self.swift.logger"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _update_s3_path_info(self, env):"}],"source_content_type":"text/x-python","patch_set":3,"id":"92ccbc5d_020b22df","side":"PARENT","line":41,"updated":"2023-12-19 01:42:02.000000000","message":"getting this out of here is the big win","commit_id":"059517f49abbd7534e00a427d30472c361f6056d"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"31bc4863f943d9522f477e64bc8b58bdfb5b3a5f","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def __init__(self):"},{"line_number":39,"context_line":"        self.remote_user \u003d \u0027authorized\u0027"},{"line_number":40,"context_line":"        self._pipeline_final_app \u003d self"},{"line_number":41,"context_line":"        self.swift \u003d FakeSwift()"},{"line_number":42,"context_line":"        self.logger \u003d self.swift.logger"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _update_s3_path_info(self, env):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5b48bbff_70422bd6","side":"PARENT","line":41,"in_reply_to":"92ccbc5d_020b22df","updated":"2023-12-20 01:27:35.000000000","message":"Acknowledged","commit_id":"059517f49abbd7534e00a427d30472c361f6056d"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5a83409e5a7f375fd8391f649fed358f61bd888","unresolved":true,"context_lines":[{"line_number":115,"context_line":"        self.swift \u003d FakeSwift()"},{"line_number":116,"context_line":"        self.app \u003d self._wrap_app(self.swift)"},{"line_number":117,"context_line":"        self.app._pipeline_final_app \u003d self.swift"},{"line_number":118,"context_line":"        self.s3api \u003d filter_factory({}, **self.conf)(self.app)"},{"line_number":119,"context_line":"        self.logger \u003d self.s3api.logger \u003d self.swift.logger"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        # if you change the registered acl response for /bucket or"}],"source_content_type":"text/x-python","patch_set":3,"id":"af44f161_b97d3ae6","line":118,"updated":"2023-12-19 01:42:02.000000000","message":"we could spell all this half-a-dozen ways at least; I\u0027m fine with this or w/e","commit_id":"3269fb664d6cb54abd46bdfe615dd887d6d512d7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"31bc4863f943d9522f477e64bc8b58bdfb5b3a5f","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        self.swift \u003d FakeSwift()"},{"line_number":116,"context_line":"        self.app \u003d self._wrap_app(self.swift)"},{"line_number":117,"context_line":"        self.app._pipeline_final_app \u003d self.swift"},{"line_number":118,"context_line":"        self.s3api \u003d filter_factory({}, **self.conf)(self.app)"},{"line_number":119,"context_line":"        self.logger \u003d self.s3api.logger \u003d self.swift.logger"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        # if you change the registered acl response for /bucket or"}],"source_content_type":"text/x-python","patch_set":3,"id":"ddefa19c_8449313e","line":118,"in_reply_to":"516928d3_50396445","updated":"2023-12-20 01:27:35.000000000","message":"Acknowledged","commit_id":"3269fb664d6cb54abd46bdfe615dd887d6d512d7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0940b617ca37dacec2fefe3f7f0ec6e737f2fd27","unresolved":true,"context_lines":[{"line_number":115,"context_line":"        self.swift \u003d FakeSwift()"},{"line_number":116,"context_line":"        self.app \u003d self._wrap_app(self.swift)"},{"line_number":117,"context_line":"        self.app._pipeline_final_app \u003d self.swift"},{"line_number":118,"context_line":"        self.s3api \u003d filter_factory({}, **self.conf)(self.app)"},{"line_number":119,"context_line":"        self.logger \u003d self.s3api.logger \u003d self.swift.logger"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        # if you change the registered acl response for /bucket or"}],"source_content_type":"text/x-python","patch_set":3,"id":"516928d3_50396445","line":118,"in_reply_to":"af44f161_b97d3ae6","updated":"2023-12-19 16:13:29.000000000","message":"I like this","commit_id":"3269fb664d6cb54abd46bdfe615dd887d6d512d7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0c6904f5ee9536248d66896b83f5a66fa0d638cd","unresolved":true,"context_lines":[{"line_number":38,"context_line":"    def __init__(self, other_app\u003dNone):"},{"line_number":39,"context_line":"        self.remote_user \u003d \u0027authorized\u0027"},{"line_number":40,"context_line":"        self._pipeline_final_app \u003d self"},{"line_number":41,"context_line":"        self.swift \u003d FakeSwift()"},{"line_number":42,"context_line":"        if other_app:"},{"line_number":43,"context_line":"            self.app \u003d other_app"},{"line_number":44,"context_line":"            other_app.app \u003d self.swift"}],"source_content_type":"text/x-python","patch_set":4,"id":"31f579da_07b5b306","line":41,"updated":"2023-12-19 15:54:52.000000000","message":"did you want to revert this? I rather liked it getting pulled out.","commit_id":"6a6293b359b26a8b8dd7943ecdd2320abe88c248"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"31bc4863f943d9522f477e64bc8b58bdfb5b3a5f","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def __init__(self, other_app\u003dNone):"},{"line_number":39,"context_line":"        self.remote_user \u003d \u0027authorized\u0027"},{"line_number":40,"context_line":"        self._pipeline_final_app \u003d self"},{"line_number":41,"context_line":"        self.swift \u003d FakeSwift()"},{"line_number":42,"context_line":"        if other_app:"},{"line_number":43,"context_line":"            self.app \u003d other_app"},{"line_number":44,"context_line":"            other_app.app \u003d self.swift"}],"source_content_type":"text/x-python","patch_set":4,"id":"85fc7fe8_5a522122","line":41,"in_reply_to":"2e226363_8bcebcd2","updated":"2023-12-20 01:27:35.000000000","message":"Acknowledged","commit_id":"6a6293b359b26a8b8dd7943ecdd2320abe88c248"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d0c5eafc5f1d0487106fd29708726b716e12272","unresolved":true,"context_lines":[{"line_number":38,"context_line":"    def __init__(self, other_app\u003dNone):"},{"line_number":39,"context_line":"        self.remote_user \u003d \u0027authorized\u0027"},{"line_number":40,"context_line":"        self._pipeline_final_app \u003d self"},{"line_number":41,"context_line":"        self.swift \u003d FakeSwift()"},{"line_number":42,"context_line":"        if other_app:"},{"line_number":43,"context_line":"            self.app \u003d other_app"},{"line_number":44,"context_line":"            other_app.app \u003d self.swift"}],"source_content_type":"text/x-python","patch_set":4,"id":"2e226363_8bcebcd2","line":41,"in_reply_to":"31f579da_07b5b306","updated":"2023-12-19 16:47:44.000000000","message":"no I screwed up sorry","commit_id":"6a6293b359b26a8b8dd7943ecdd2320abe88c248"}],"test/unit/common/middleware/s3api/test_multi_get.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"62db7cad9c372d87701458abb7c69d73ff4307a5","unresolved":true,"context_lines":[{"line_number":27,"context_line":"class TestMpuGET(S3ApiTestCase):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def _make_app(self):"},{"line_number":30,"context_line":"        self.slo \u003d slo.filter_factory({\u0027rate_limit_under_size\u0027: \u00270\u0027})(None)"},{"line_number":31,"context_line":"        return super(TestMpuGET, self)._make_app(self.slo)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"c52c9671_35c7dd9b","line":30,"updated":"2023-12-18 16:36:43.000000000","message":"it\u0027s not great that we have to pass None as an arg to get an instance of SLO, but that will be fixed up by the FakeApp. The change is necessary to get the \"auth\" to rewrite the request path account *before* it reaches SLO.","commit_id":"788a4e5156fb6671e1f0e4170316b821992a4a36"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d0c5eafc5f1d0487106fd29708726b716e12272","unresolved":false,"context_lines":[{"line_number":27,"context_line":"class TestMpuGET(S3ApiTestCase):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def _make_app(self):"},{"line_number":30,"context_line":"        self.slo \u003d slo.filter_factory({\u0027rate_limit_under_size\u0027: \u00270\u0027})(None)"},{"line_number":31,"context_line":"        return super(TestMpuGET, self)._make_app(self.slo)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"f6f4d9a4_7dc015e6","line":30,"in_reply_to":"c52c9671_35c7dd9b","updated":"2023-12-19 16:47:44.000000000","message":"Done","commit_id":"788a4e5156fb6671e1f0e4170316b821992a4a36"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0940b617ca37dacec2fefe3f7f0ec6e737f2fd27","unresolved":true,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def _wrap_app(self, app):"},{"line_number":76,"context_line":"        self.slo \u003d slo.filter_factory({\u0027rate_limit_under_size\u0027: \u00270\u0027})(app)"},{"line_number":77,"context_line":"        return super(TestMpuGETorHEAD, self)._wrap_app(self.slo)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def setUp(self):"},{"line_number":80,"context_line":"        # this will call our _wrap_app"}],"source_content_type":"text/x-python","patch_set":3,"id":"df600ec9_bb48d45d","line":77,"updated":"2023-12-19 16:13:29.000000000","message":"right, wrap the apps in the desired order, get rid if the silly delegation to FakeApp to build us a pipeline","commit_id":"3269fb664d6cb54abd46bdfe615dd887d6d512d7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"31bc4863f943d9522f477e64bc8b58bdfb5b3a5f","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def _wrap_app(self, app):"},{"line_number":76,"context_line":"        self.slo \u003d slo.filter_factory({\u0027rate_limit_under_size\u0027: \u00270\u0027})(app)"},{"line_number":77,"context_line":"        return super(TestMpuGETorHEAD, self)._wrap_app(self.slo)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def setUp(self):"},{"line_number":80,"context_line":"        # this will call our _wrap_app"}],"source_content_type":"text/x-python","patch_set":3,"id":"beb93cc3_340efd51","line":77,"in_reply_to":"df600ec9_bb48d45d","updated":"2023-12-20 01:27:35.000000000","message":"Acknowledged","commit_id":"3269fb664d6cb54abd46bdfe615dd887d6d512d7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5a83409e5a7f375fd8391f649fed358f61bd888","unresolved":true,"context_lines":[{"line_number":229,"context_line":"            \u0027Date\u0027: self.get_date_header()"},{"line_number":230,"context_line":"        })"},{"line_number":231,"context_line":"        status, headers, body \u003d self.call_s3api(req)"},{"line_number":232,"context_line":"        self.assertEqual(status.split()[0], \u0027400\u0027)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"class TestVersionedMpuGETorHEAD(S3ApiTestCase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ec865b1b_ef0169c3","line":232,"updated":"2023-12-19 01:42:02.000000000","message":"having noted that the s3api-cross-compat tests are failing functionally in the gate because of HEAD?part-number requests loosing their query string; I\u0027m now thinking we should get some S3ApiTestCaseAcl up in this module","commit_id":"3269fb664d6cb54abd46bdfe615dd887d6d512d7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"31bc4863f943d9522f477e64bc8b58bdfb5b3a5f","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            \u0027Date\u0027: self.get_date_header()"},{"line_number":230,"context_line":"        })"},{"line_number":231,"context_line":"        status, headers, body \u003d self.call_s3api(req)"},{"line_number":232,"context_line":"        self.assertEqual(status.split()[0], \u0027400\u0027)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"class TestVersionedMpuGETorHEAD(S3ApiTestCase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"c6d852da_36b61cdd","line":232,"in_reply_to":"ec865b1b_ef0169c3","updated":"2023-12-20 01:27:35.000000000","message":"Done","commit_id":"3269fb664d6cb54abd46bdfe615dd887d6d512d7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0940b617ca37dacec2fefe3f7f0ec6e737f2fd27","unresolved":true,"context_lines":[{"line_number":238,"context_line":"        self.sym \u003d symlink.filter_factory({})(app)"},{"line_number":239,"context_line":"        self.sym.logger \u003d self.swift.logger"},{"line_number":240,"context_line":"        self.ov \u003d ov.ObjectVersioningMiddleware(self.sym, {})"},{"line_number":241,"context_line":"        self.ov.logger \u003d self.swift.logger"},{"line_number":242,"context_line":"        self.slo \u003d slo.filter_factory({\u0027rate_limit_under_size\u0027: \u00270\u0027})(self.ov)"},{"line_number":243,"context_line":"        self.slo.logger \u003d self.swift.logger"},{"line_number":244,"context_line":"        return super(TestVersionedMpuGETorHEAD, self)._wrap_app(self.slo)"}],"source_content_type":"text/x-python","patch_set":3,"id":"afdebc9b_6998a224","line":241,"updated":"2023-12-19 16:13:29.000000000","message":"some middleware constructors accept an optional logger arg, but we\u0027ve not been consistent with that pattern so none of these do :/","commit_id":"3269fb664d6cb54abd46bdfe615dd887d6d512d7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"31bc4863f943d9522f477e64bc8b58bdfb5b3a5f","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        self.sym \u003d symlink.filter_factory({})(app)"},{"line_number":239,"context_line":"        self.sym.logger \u003d self.swift.logger"},{"line_number":240,"context_line":"        self.ov \u003d ov.ObjectVersioningMiddleware(self.sym, {})"},{"line_number":241,"context_line":"        self.ov.logger \u003d self.swift.logger"},{"line_number":242,"context_line":"        self.slo \u003d slo.filter_factory({\u0027rate_limit_under_size\u0027: \u00270\u0027})(self.ov)"},{"line_number":243,"context_line":"        self.slo.logger \u003d self.swift.logger"},{"line_number":244,"context_line":"        return super(TestVersionedMpuGETorHEAD, self)._wrap_app(self.slo)"}],"source_content_type":"text/x-python","patch_set":3,"id":"e84a5b18_effe6dd0","line":241,"in_reply_to":"afdebc9b_6998a224","updated":"2023-12-20 01:27:35.000000000","message":"Acknowledged","commit_id":"3269fb664d6cb54abd46bdfe615dd887d6d512d7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5a83409e5a7f375fd8391f649fed358f61bd888","unresolved":true,"context_lines":[{"line_number":241,"context_line":"        self.ov.logger \u003d self.swift.logger"},{"line_number":242,"context_line":"        self.slo \u003d slo.filter_factory({\u0027rate_limit_under_size\u0027: \u00270\u0027})(self.ov)"},{"line_number":243,"context_line":"        self.slo.logger \u003d self.swift.logger"},{"line_number":244,"context_line":"        return super(TestVersionedMpuGETorHEAD, self)._wrap_app(self.slo)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    def setUp(self):"},{"line_number":247,"context_line":"        # this will call our _wrap_app"}],"source_content_type":"text/x-python","patch_set":3,"id":"aaf70e4f_71570455","line":244,"updated":"2023-12-19 01:42:02.000000000","message":"I haven\u0027t tried to make _wrap_app work with more than one layer of TestCase composibility - but the fact that you can \"super into more wrapping from your base class\" and it just keeps building up the onion towards s3api(pipeline) seems promising.","commit_id":"3269fb664d6cb54abd46bdfe615dd887d6d512d7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"31bc4863f943d9522f477e64bc8b58bdfb5b3a5f","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        self.ov.logger \u003d self.swift.logger"},{"line_number":242,"context_line":"        self.slo \u003d slo.filter_factory({\u0027rate_limit_under_size\u0027: \u00270\u0027})(self.ov)"},{"line_number":243,"context_line":"        self.slo.logger \u003d self.swift.logger"},{"line_number":244,"context_line":"        return super(TestVersionedMpuGETorHEAD, self)._wrap_app(self.slo)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    def setUp(self):"},{"line_number":247,"context_line":"        # this will call our _wrap_app"}],"source_content_type":"text/x-python","patch_set":3,"id":"92936f14_b89d0537","line":244,"in_reply_to":"aaf70e4f_71570455","updated":"2023-12-20 01:27:35.000000000","message":"Acknowledged","commit_id":"3269fb664d6cb54abd46bdfe615dd887d6d512d7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5a83409e5a7f375fd8391f649fed358f61bd888","unresolved":true,"context_lines":[{"line_number":341,"context_line":"            (\u0027GET\u0027, \u0027/v1/AUTH_test/bucket+segments/mpu/X2/5\u0027"},{"line_number":342,"context_line":"             \u0027?multipart-manifest\u003dget\u0027),"},{"line_number":343,"context_line":"        ], self.swift.calls)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def test_mpu_HEAD_last_version(self):"},{"line_number":346,"context_line":"        req \u003d swob.Request.blank(\u0027/bucket/mpu\u0027, method\u003d\u0027HEAD\u0027, headers\u003d{"},{"line_number":347,"context_line":"            \u0027Authorization\u0027: \u0027AWS test:tester:hmac\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ae7e20a0_81bd5182","line":344,"updated":"2023-12-19 01:42:02.000000000","message":"might be useful to add some asserts on swift.calls to make sure these tests are doing what we think they are.","commit_id":"3269fb664d6cb54abd46bdfe615dd887d6d512d7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"31bc4863f943d9522f477e64bc8b58bdfb5b3a5f","unresolved":false,"context_lines":[{"line_number":341,"context_line":"            (\u0027GET\u0027, \u0027/v1/AUTH_test/bucket+segments/mpu/X2/5\u0027"},{"line_number":342,"context_line":"             \u0027?multipart-manifest\u003dget\u0027),"},{"line_number":343,"context_line":"        ], self.swift.calls)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def test_mpu_HEAD_last_version(self):"},{"line_number":346,"context_line":"        req \u003d swob.Request.blank(\u0027/bucket/mpu\u0027, method\u003d\u0027HEAD\u0027, headers\u003d{"},{"line_number":347,"context_line":"            \u0027Authorization\u0027: \u0027AWS test:tester:hmac\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"b59c270e_bdadb647","line":344,"in_reply_to":"ae7e20a0_81bd5182","updated":"2023-12-20 01:27:35.000000000","message":"Done","commit_id":"3269fb664d6cb54abd46bdfe615dd887d6d512d7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0c6904f5ee9536248d66896b83f5a66fa0d638cd","unresolved":true,"context_lines":[{"line_number":449,"context_line":"            (\u0027GET\u0027, \u0027/v1/AUTH_test/\\x00versions\\x00bucket/\\x00mpu\\x00%s\u0027"},{"line_number":450,"context_line":"             \u0027?part-number\u003d5\u0027 % ("},{"line_number":451,"context_line":"                 ~utils.Timestamp(self.version_ids[2])).normal),"},{"line_number":452,"context_line":"        ], self.swift.calls)"}],"source_content_type":"text/x-python","patch_set":3,"id":"988fe31c_dc0a9b31","line":452,"updated":"2023-12-19 15:54:52.000000000","message":"I\u0027m a little disappointed this got pulled; I\u0027m assuming it was a git-hicup rather than them causing some problem.","commit_id":"3269fb664d6cb54abd46bdfe615dd887d6d512d7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d0c5eafc5f1d0487106fd29708726b716e12272","unresolved":true,"context_lines":[{"line_number":449,"context_line":"            (\u0027GET\u0027, \u0027/v1/AUTH_test/\\x00versions\\x00bucket/\\x00mpu\\x00%s\u0027"},{"line_number":450,"context_line":"             \u0027?part-number\u003d5\u0027 % ("},{"line_number":451,"context_line":"                 ~utils.Timestamp(self.version_ids[2])).normal),"},{"line_number":452,"context_line":"        ], self.swift.calls)"}],"source_content_type":"text/x-python","patch_set":3,"id":"a68a6a2d_d2529125","line":452,"in_reply_to":"988fe31c_dc0a9b31","updated":"2023-12-19 16:47:44.000000000","message":"my bad, fixed now","commit_id":"3269fb664d6cb54abd46bdfe615dd887d6d512d7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"31bc4863f943d9522f477e64bc8b58bdfb5b3a5f","unresolved":false,"context_lines":[{"line_number":449,"context_line":"            (\u0027GET\u0027, \u0027/v1/AUTH_test/\\x00versions\\x00bucket/\\x00mpu\\x00%s\u0027"},{"line_number":450,"context_line":"             \u0027?part-number\u003d5\u0027 % ("},{"line_number":451,"context_line":"                 ~utils.Timestamp(self.version_ids[2])).normal),"},{"line_number":452,"context_line":"        ], self.swift.calls)"}],"source_content_type":"text/x-python","patch_set":3,"id":"2ad7e48c_04bcbf04","line":452,"in_reply_to":"a68a6a2d_d2529125","updated":"2023-12-20 01:27:35.000000000","message":"Acknowledged","commit_id":"3269fb664d6cb54abd46bdfe615dd887d6d512d7"}]}
