)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"e3c41879b5bf7f9b019c1bf65cb98163e962b172","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":54,"id":"4909a782_42f78923","updated":"2026-08-07 15:18:58.000000000","message":"Small issue - the requested algorithm gets lost when reporting back to the user if it is not (yet) supported by Swift, which might be irritating. For example:\n\n```\nDATE\u003d$(date -R)\nSIG\u003d$(printf \u0027PUT\\n\\n\\n%s\\nx-amz-checksum-xxhash64:AAAAAAAAAAA\u003d\\n/bucket/obj\u0027 \"$DATE\" | openssl sha1 -hmac testing -binary | base64)\ncurl -s -X PUT -H \"Date: $DATE\" -H \"Authorization: AWS test:tester:$SIG\" -H \"x-amz-checksum-xxhash64: AAAAAAAAAAA\u003d\" http://localhost:8080/bucket/obj\n```\n\nThis returns:\n```\n\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e\n\u003cError\u003e\u003cCode\u003eNotImplemented\u003c/Code\u003e\u003cMessage\u003eThe None algorithm is not supported.\u003c/Message\u003e\u003cRequestId\u003etx9ee42807301a49399061d-006a75f614\u003c/RequestId\u003e\u003c/Error\u003e\n```\n\nIdea how to fix in: 1000114: sq? s3api: name the algorithm when it has no allowlist entry | https://review.opendev.org/c/openstack/swift/+/1000114","commit_id":"ffe7e07d7d24b019c78d8cbb78dea76ce23ac763"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"55fa14dff8beffee5390767f45db6f982e45b121","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":54,"id":"142e10ff_51af5fe0","in_reply_to":"4909a782_42f78923","updated":"2026-08-07 21:23:16.000000000","message":"Oh yea we don\u0027t want this \u0027None\u0027 action, thanks for catching this!","commit_id":"ffe7e07d7d24b019c78d8cbb78dea76ce23ac763"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"2d27489e31b86533710056e5df5a70e21b8efbe2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":58,"id":"e0aa601c_42ba01c9","updated":"2026-08-18 15:59:16.000000000","message":"I think we need to clarify what the intent is - right now this might break a COPY request.\n\nThere are two options:\n\na) which checksum a client may request\nb) which checksums the cluster supports\n\nI think it should be a) - this would only reject requests with invalid checksums.\nHowever, right now it is b) - and it breaks copying data if a checksum was supported in the past but no longer is. `CopyObject` computes with the on-disk stored algorithm, but if that algorithm is now longer allowed you get a 501 (GET/HEAD still work).\n\nHere is a reproducer on a SAIO:\n```\nexport AWS_ENDPOINT_URL\u003dhttp://127.0.0.1:8080\nexport AWS_ACCESS_KEY_ID\u003dtest:tester\nexport AWS_SECRET_ACCESS_KEY\u003dtesting\n\naws s3api create-bucket --bucket repro\naws s3api put-object --bucket repro --key k --body /etc/hosts --checksum-algorithm SHA256\naws s3api copy-object --bucket repro --key k1 --copy-source repro/k     # works\n\n# now add to [filter:s3api] in /etc/swift/proxy-server/proxy-server.conf.d/20_settings.conf: \n# allowed_checksum_algorithms \u003d crc32\n\nswift-init proxy restart\naws s3api head-object --bucket repro --key k # works\naws s3api copy-object --bucket repro --key k2 --copy-source repro/k  # 501\n```","commit_id":"71bde9e950b1059e68ff0c71bd9ea64251856c5a"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"f268db08de3105ea005bd4f5efefc40d3137404d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":58,"id":"f16153f8_d265574a","in_reply_to":"d2d5acd5_a55cd3e4","updated":"2026-08-18 18:53:38.000000000","message":"I think a better approach to this is to have a function\n`is_checksum_requestable(checksum_header,req)`\nThat can verify if the client can use this checksum. This would mean to update the call sites who get checksum headers from client (PutObject, CreateMultiUploadPart","commit_id":"71bde9e950b1059e68ff0c71bd9ea64251856c5a"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"84705804ca300b3a260a17b3efde72205c9dc957","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":58,"id":"d2d5acd5_a55cd3e4","in_reply_to":"e0aa601c_42ba01c9","updated":"2026-08-18 16:57:10.000000000","message":"I think this is actually more clear too, this is a clear case where the server accepted the checksum but now cannot compute it. I will update the commit message to better reflect the intent of this patch","commit_id":"71bde9e950b1059e68ff0c71bd9ea64251856c5a"}],"swift/common/middleware/s3api/s3request.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3f0bc7d8f079df00ab7e1ec7f24f1fa253ec722a","unresolved":false,"context_lines":[{"line_number":1606,"context_line":"                \u0027checksum algorithm.\u0027 % ("},{"line_number":1607,"context_line":"                    checksum_type, checksum_algorithm.lower()))"},{"line_number":1608,"context_line":"        if checksum_type \u003d\u003d CHECKSUM_TYPE_FULL_OBJECT:"},{"line_number":1609,"context_line":"            checksum_header \u003d checksum_header_from_algorithm(checksum_algorithm)"},{"line_number":1610,"context_line":"            try:"},{"line_number":1611,"context_line":"                checksum_hasher \u003d CHECKSUMS_BY_HEADER[checksum_header]()"},{"line_number":1612,"context_line":"            except NotImplementedError:"}],"source_content_type":"text/x-python","patch_set":16,"id":"86de71b9_dbb3c5e6","line":1609,"updated":"2026-07-09 19:33:15.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"be991aff16092ec328247667eb3e29f2c2d52838"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7d7df176007289e9a2d8d8cc25b315b66339511b","unresolved":false,"context_lines":[{"line_number":1932,"context_line":"        Install a callback to persist checksum metadata after validation."},{"line_number":1933,"context_line":"        If checksum calculation fails (say for instance, the connection drops),"},{"line_number":1934,"context_line":"        the PUT fails before a checksum is recorded, so no checksum sysmeta is"},{"line_number":1935,"context_line":"        persisted. Once Swift reads in the entire object, the checksum is finshed"},{"line_number":1936,"context_line":"        and sysmeta is attached to the uploaded whole-object body."},{"line_number":1937,"context_line":"        :param checksum_type: The type of checksum to persist."},{"line_number":1938,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":25,"id":"07ed534d_ad78e97a","line":1935,"updated":"2026-07-20 22:21:45.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"9d5be2d81fb5cfefb989c2794dd991f97cb17dcf"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7d7df176007289e9a2d8d8cc25b315b66339511b","unresolved":false,"context_lines":[{"line_number":1951,"context_line":"    def calculate_checksum_metadata(self, checksum_header,"},{"line_number":1952,"context_line":"                                    checksum_type\u003dNone):"},{"line_number":1953,"context_line":"        \"\"\""},{"line_number":1954,"context_line":"        Specify that in this S3Request, we need to calcuate the checksum for the"},{"line_number":1955,"context_line":"        object because the client did not specify any checksum algorithm."},{"line_number":1956,"context_line":"        :param checksum_header: The header to calcuated for this object."},{"line_number":1957,"context_line":"        :param checksum_type: The type of this checksum for this object."}],"source_content_type":"text/x-python","patch_set":25,"id":"c11ccad9_7376a235","line":1954,"updated":"2026-07-20 22:21:45.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"9d5be2d81fb5cfefb989c2794dd991f97cb17dcf"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"55d8117614a1e4dba84e6850fbcfa92ed029668f","unresolved":false,"context_lines":[{"line_number":1775,"context_line":"        here."},{"line_number":1776,"context_line":"        \"\"\""},{"line_number":1777,"context_line":"        return ("},{"line_number":1778,"context_line":"            self._should_handle_request_checksum(self.method) and \\"},{"line_number":1779,"context_line":"            checksum_header is None and"},{"line_number":1780,"context_line":"            checksum_trailer is None)"},{"line_number":1781,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"cc2acbc1_8bab268b","line":1778,"updated":"2026-07-21 01:15:29.000000000","message":"pep8: E502 the backslash is redundant between brackets","commit_id":"343b593cd95dcca5b554752202dac73aeac5fef2"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"24ebd1f166214b511f5d29632bc8a92adddcc8f5","unresolved":false,"context_lines":[{"line_number":1946,"context_line":"        Specify that in this S3Request, we need to calculate the checksum for"},{"line_number":1947,"context_line":"        the object because the client did not specify any checksum algorithm."},{"line_number":1948,"context_line":""},{"line_number":1949,"context_line":"        If request parsing already installed a CalculatingChecksumInput wrapper,"},{"line_number":1950,"context_line":"        replace that wrapper rather than putting another on top of it."},{"line_number":1951,"context_line":"        Let\u0027s not compute two checksum algorithms for one S3Request. Controllers"},{"line_number":1952,"context_line":"        may discover a more specific checksum algorithm, such as an UploadPart request"}],"source_content_type":"text/x-python","patch_set":32,"id":"d76e5bfc_54f430a4","line":1949,"updated":"2026-07-21 23:35:20.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"c2747d532d26d72b1a3878a165e60c81c4b9bad2"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"24ebd1f166214b511f5d29632bc8a92adddcc8f5","unresolved":false,"context_lines":[{"line_number":1948,"context_line":""},{"line_number":1949,"context_line":"        If request parsing already installed a CalculatingChecksumInput wrapper,"},{"line_number":1950,"context_line":"        replace that wrapper rather than putting another on top of it."},{"line_number":1951,"context_line":"        Let\u0027s not compute two checksum algorithms for one S3Request. Controllers"},{"line_number":1952,"context_line":"        may discover a more specific checksum algorithm, such as an UploadPart request"},{"line_number":1953,"context_line":"        deciding to use the algorithm on the MPU manifest, before the body is read."},{"line_number":1954,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"cec20367_afe118d5","line":1951,"updated":"2026-07-21 23:35:20.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"c2747d532d26d72b1a3878a165e60c81c4b9bad2"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"24ebd1f166214b511f5d29632bc8a92adddcc8f5","unresolved":false,"context_lines":[{"line_number":1949,"context_line":"        If request parsing already installed a CalculatingChecksumInput wrapper,"},{"line_number":1950,"context_line":"        replace that wrapper rather than putting another on top of it."},{"line_number":1951,"context_line":"        Let\u0027s not compute two checksum algorithms for one S3Request. Controllers"},{"line_number":1952,"context_line":"        may discover a more specific checksum algorithm, such as an UploadPart request"},{"line_number":1953,"context_line":"        deciding to use the algorithm on the MPU manifest, before the body is read."},{"line_number":1954,"context_line":""},{"line_number":1955,"context_line":"        :param checksum_header: The header to calculate for this object."}],"source_content_type":"text/x-python","patch_set":32,"id":"661ea9bb_bb129178","line":1952,"updated":"2026-07-21 23:35:20.000000000","message":"pep8: E501 line too long (86 \u003e 79 characters)","commit_id":"c2747d532d26d72b1a3878a165e60c81c4b9bad2"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"24ebd1f166214b511f5d29632bc8a92adddcc8f5","unresolved":false,"context_lines":[{"line_number":1950,"context_line":"        replace that wrapper rather than putting another on top of it."},{"line_number":1951,"context_line":"        Let\u0027s not compute two checksum algorithms for one S3Request. Controllers"},{"line_number":1952,"context_line":"        may discover a more specific checksum algorithm, such as an UploadPart request"},{"line_number":1953,"context_line":"        deciding to use the algorithm on the MPU manifest, before the body is read."},{"line_number":1954,"context_line":""},{"line_number":1955,"context_line":"        :param checksum_header: The header to calculate for this object."},{"line_number":1956,"context_line":"        :param checksum_type: The type of this checksum for this object."}],"source_content_type":"text/x-python","patch_set":32,"id":"42128b11_3d8889a6","line":1953,"updated":"2026-07-21 23:35:20.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"c2747d532d26d72b1a3878a165e60c81c4b9bad2"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"24ebd1f166214b511f5d29632bc8a92adddcc8f5","unresolved":false,"context_lines":[{"line_number":1957,"context_line":"        \"\"\""},{"line_number":1958,"context_line":"        checksum_header \u003d checksum_header.lower()"},{"line_number":1959,"context_line":"        checksum_hasher \u003d _get_checksum_hasher(checksum_header,"},{"line_number":1960,"context_line":"            self.conf.allowed_checksum_algorithms)"},{"line_number":1961,"context_line":"        calculating_input \u003d self.environ[\u0027wsgi.input\u0027]"},{"line_number":1962,"context_line":"        should_replace_wrapper \u003d isinstance("},{"line_number":1963,"context_line":"            calculating_input, CalculatingChecksumInput)"}],"source_content_type":"text/x-python","patch_set":32,"id":"6cb14b24_a1dc2c7e","line":1960,"updated":"2026-07-21 23:35:20.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"c2747d532d26d72b1a3878a165e60c81c4b9bad2"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9527d19760c23975381926d3bc4518358b72738f","unresolved":false,"context_lines":[{"line_number":1958,"context_line":"        \"\"\""},{"line_number":1959,"context_line":"        checksum_header \u003d checksum_header.lower()"},{"line_number":1960,"context_line":"        checksum_hasher \u003d _get_checksum_hasher(checksum_header,"},{"line_number":1961,"context_line":"            self.conf.allowed_checksum_algorithms)"},{"line_number":1962,"context_line":"        calculating_input \u003d self.environ[\u0027wsgi.input\u0027]"},{"line_number":1963,"context_line":"        replacing_wrapper \u003d isinstance("},{"line_number":1964,"context_line":"            calculating_input, CalculatingChecksumInput)"}],"source_content_type":"text/x-python","patch_set":33,"id":"e0a47c4a_a8a48f68","line":1961,"updated":"2026-07-22 04:13:19.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"a53ff160fc6d1d3a44608d6645008639d2f8bf5f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"50b167d2fc696b3220d5c6d68022629315e0e914","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    \u0027x-static-large-object\u0027,"},{"line_number":120,"context_line":"))"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"def _get_checksum_hasher(header, allowed_checksum_algorithms):"},{"line_number":123,"context_line":"    algorithm \u003d CHECKSUM_ALGORITHM_BY_HEADER.get(header)"},{"line_number":124,"context_line":"    if algorithm not in allowed_checksum_algorithms:"},{"line_number":125,"context_line":"        raise S3NotImplemented(\u0027The %s algorithm is not supported.\u0027 % header)"}],"source_content_type":"text/x-python","patch_set":45,"id":"f6e03d37_edd4bdf7","line":122,"updated":"2026-07-28 18:57:25.000000000","message":"pep8: E302 expected 2 blank lines, found 1","commit_id":"04f2ec801fff2cfa2fe64550d18080eb0ad06034"}],"swift/common/middleware/s3api/utils.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7dbb43946299f79337ed93c0956f1c528251588f","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    \u0027x-amz-checksum-sha1\u0027: \u0027ChecksumSHA1\u0027,"},{"line_number":81,"context_line":"    \u0027x-amz-checksum-sha256\u0027: \u0027ChecksumSHA256\u0027,"},{"line_number":82,"context_line":"}"},{"line_number":83,"context_line":"def checksum_header_from_algorithm(algorithm):"},{"line_number":84,"context_line":"    \"\"\""},{"line_number":85,"context_line":"    Return the canonical x-amz-checksum-* header for an S3 checksum algorithm."},{"line_number":86,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"b496424e_83a4cf1d","line":83,"updated":"2026-07-06 20:52:03.000000000","message":"pep8: E302 expected 2 blank lines, found 0","commit_id":"32c4ff5cf4ec6eccb7c8c41456b8a70402d1e284"}],"test/s3api/test_object_checksums.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7dbb43946299f79337ed93c0956f1c528251588f","unresolved":false,"context_lines":[{"line_number":798,"context_line":"        self.assertNotIn(\u0027StorageClass\u0027, resp)"},{"line_number":799,"context_line":"        self.assertNotIn(\u0027ObjectSize\u0027, resp)"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"class ObjectChecksumMPUCompositeMixin(object):"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"    def test_mpu_create_composite_checksum_type_headers(self):"},{"line_number":804,"context_line":"        self._test_mpu_create_checksum_type_headers(\u0027COMPOSITE\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"daac5b14_9abcaf03","line":801,"updated":"2026-07-06 20:52:03.000000000","message":"pep8: E302 expected 2 blank lines, found 1","commit_id":"32c4ff5cf4ec6eccb7c8c41456b8a70402d1e284"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3f0bc7d8f079df00ab7e1ec7f24f1fa253ec722a","unresolved":false,"context_lines":[{"line_number":1466,"context_line":"                \u0027recomputation\u0027)"},{"line_number":1467,"context_line":""},{"line_number":1468,"context_line":"        algorithm \u003d \u0027CRC32\u0027"},{"line_number":1469,"context_line":"        src_name \u003d self.create_name(\u0027mpu-copy-full-object-checksum-mismatch-src\u0027)"},{"line_number":1470,"context_line":"        dst_name \u003d self.create_name(\u0027mpu-copy-full-object-checksum-mismatch-dst\u0027)"},{"line_number":1471,"context_line":"        put_resp \u003d self.client.put_object("},{"line_number":1472,"context_line":"            Bucket\u003dself.bucket_name,"}],"source_content_type":"text/x-python","patch_set":16,"id":"3410a4d8_7c6d7a35","line":1469,"updated":"2026-07-09 19:33:15.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"be991aff16092ec328247667eb3e29f2c2d52838"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3f0bc7d8f079df00ab7e1ec7f24f1fa253ec722a","unresolved":false,"context_lines":[{"line_number":1467,"context_line":""},{"line_number":1468,"context_line":"        algorithm \u003d \u0027CRC32\u0027"},{"line_number":1469,"context_line":"        src_name \u003d self.create_name(\u0027mpu-copy-full-object-checksum-mismatch-src\u0027)"},{"line_number":1470,"context_line":"        dst_name \u003d self.create_name(\u0027mpu-copy-full-object-checksum-mismatch-dst\u0027)"},{"line_number":1471,"context_line":"        put_resp \u003d self.client.put_object("},{"line_number":1472,"context_line":"            Bucket\u003dself.bucket_name,"},{"line_number":1473,"context_line":"            Key\u003dsrc_name,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ccad4b48_337b7ac8","line":1470,"updated":"2026-07-09 19:33:15.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"be991aff16092ec328247667eb3e29f2c2d52838"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"051f937966071c4cdf8399663e50b33718fc0612","unresolved":false,"context_lines":[{"line_number":1234,"context_line":"            \u0027ResponseMetadata\u0027][\u0027HTTPStatusCode\u0027])"},{"line_number":1235,"context_line":""},{"line_number":1236,"context_line":""},{"line_number":1237,"context_line":"    def test_mpu_full_object_upload_part_checksum_optional(self):"},{"line_number":1238,"context_line":"        algorithm \u003d \u0027CRC32\u0027"},{"line_number":1239,"context_line":"        if anycrc is None:"},{"line_number":1240,"context_line":"            raise SkipTest("}],"source_content_type":"text/x-python","patch_set":39,"id":"892454c7_564c3c07","line":1237,"updated":"2026-07-27 16:51:33.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"699b55de179df86bc9a29e01583858eb75f39aad"}],"test/unit/common/middleware/s3api/test_s3request.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3f0bc7d8f079df00ab7e1ec7f24f1fa253ec722a","unresolved":false,"context_lines":[{"line_number":2769,"context_line":"                                     \u0027X-Amz-Checksum-Type\u0027: \u0027full_object\u0027})"},{"line_number":2770,"context_line":""},{"line_number":2771,"context_line":"        with mock.patch.object(checksum, \u0027crc32_combine_anycrc\u0027, None):"},{"line_number":2772,"context_line":"            with self.assertRaises(S3NotImplemented) as cm:"},{"line_number":2773,"context_line":"                S3Request(req.environ)"},{"line_number":2774,"context_line":""},{"line_number":2775,"context_line":"    def test_mpu_initiate_crc32_default_checksum_type(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"ecd42ce2_751d2f66","line":2772,"updated":"2026-07-09 19:33:15.000000000","message":"pep8: F841 local variable \u0027cm\u0027 is assigned to but never used","commit_id":"be991aff16092ec328247667eb3e29f2c2d52838"}]}
