Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-s3transfer for openSUSE:Factory checked in at 2025-03-01 19:16:07 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-s3transfer (Old) and /work/SRC/openSUSE:Factory/.python-s3transfer.new.19136 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-s3transfer" Sat Mar 1 19:16:07 2025 rev:35 rq:1249237 version:0.11.2 Changes: -------- --- /work/SRC/openSUSE:Factory/python-s3transfer/python-s3transfer.changes 2025-01-22 16:32:01.851221336 +0100 +++ /work/SRC/openSUSE:Factory/.python-s3transfer.new.19136/python-s3transfer.changes 2025-03-01 19:16:18.356480150 +0100 @@ -1,0 +2,7 @@ +Mon Feb 3 09:29:32 UTC 2025 - John Paul Adrian Glaubitz <adrian.glaub...@suse.com> + +- Update to version 0.11.2 + * bugfix:upload: Only set a default checksum if the ``request_checksum_calculation`` + config is set to ``when_supported``. Fixes (boto/s3transfer#327). + +------------------------------------------------------------------- Old: ---- s3transfer-0.11.1.tar.gz New: ---- s3transfer-0.11.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-s3transfer.spec ++++++ --- /var/tmp/diff_new_pack.3ZLmlf/_old 2025-03-01 19:16:18.800498577 +0100 +++ /var/tmp/diff_new_pack.3ZLmlf/_new 2025-03-01 19:16:18.804498743 +0100 @@ -18,7 +18,7 @@ %{?sle15_python_module_pythons} Name: python-s3transfer -Version: 0.11.1 +Version: 0.11.2 Release: 0 Summary: Python S3 transfer manager License: Apache-2.0 ++++++ s3transfer-0.11.1.tar.gz -> s3transfer-0.11.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/s3transfer-0.11.1/PKG-INFO new/s3transfer-0.11.2/PKG-INFO --- old/s3transfer-0.11.1/PKG-INFO 2025-01-16 20:14:38.242988600 +0100 +++ new/s3transfer-0.11.2/PKG-INFO 2025-01-23 20:07:42.875888300 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: s3transfer -Version: 0.11.1 +Version: 0.11.2 Summary: An Amazon S3 Transfer Manager Home-page: https://github.com/boto/s3transfer Author: Amazon Web Services diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/s3transfer-0.11.1/s3transfer/__init__.py new/s3transfer-0.11.2/s3transfer/__init__.py --- old/s3transfer-0.11.1/s3transfer/__init__.py 2025-01-16 20:14:38.000000000 +0100 +++ new/s3transfer-0.11.2/s3transfer/__init__.py 2025-01-23 20:07:42.000000000 +0100 @@ -145,7 +145,7 @@ from s3transfer.exceptions import RetriesExceededError, S3UploadFailedError __author__ = 'Amazon Web Services' -__version__ = '0.11.1' +__version__ = '0.11.2' class NullHandler(logging.Handler): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/s3transfer-0.11.1/s3transfer/manager.py new/s3transfer-0.11.2/s3transfer/manager.py --- old/s3transfer-0.11.1/s3transfer/manager.py 2025-01-16 20:10:58.000000000 +0100 +++ new/s3transfer-0.11.2/s3transfer/manager.py 2025-01-23 20:07:42.000000000 +0100 @@ -519,7 +519,11 @@ ) def _add_operation_defaults(self, extra_args): - set_default_checksum_algorithm(extra_args) + if ( + self.client.meta.config.request_checksum_calculation + == "when_supported" + ): + set_default_checksum_algorithm(extra_args) def _submit_transfer( self, call_args, submission_task_cls, extra_main_kwargs=None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/s3transfer-0.11.1/s3transfer.egg-info/PKG-INFO new/s3transfer-0.11.2/s3transfer.egg-info/PKG-INFO --- old/s3transfer-0.11.1/s3transfer.egg-info/PKG-INFO 2025-01-16 20:14:38.000000000 +0100 +++ new/s3transfer-0.11.2/s3transfer.egg-info/PKG-INFO 2025-01-23 20:07:42.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: s3transfer -Version: 0.11.1 +Version: 0.11.2 Summary: An Amazon S3 Transfer Manager Home-page: https://github.com/boto/s3transfer Author: Amazon Web Services diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/s3transfer-0.11.1/tests/functional/test_upload.py new/s3transfer-0.11.2/tests/functional/test_upload.py --- old/s3transfer-0.11.1/tests/functional/test_upload.py 2025-01-16 20:10:58.000000000 +0100 +++ new/s3transfer-0.11.2/tests/functional/test_upload.py 2025-01-23 20:07:42.000000000 +0100 @@ -19,6 +19,7 @@ from botocore.awsrequest import AWSRequest from botocore.client import Config from botocore.exceptions import ClientError +from botocore.httpchecksum import DEFAULT_CHECKSUM_ALGORITHM from botocore.stub import ANY from s3transfer.manager import TransferConfig, TransferManager @@ -143,7 +144,7 @@ __test__ = True def add_put_object_response_with_default_expected_params( - self, extra_expected_params=None, bucket=None + self, extra_expected_params=None, bucket=None, include_checksum=True ): if bucket is None: bucket = self.bucket @@ -152,8 +153,9 @@ 'Body': ANY, 'Bucket': bucket, 'Key': self.key, - 'ChecksumAlgorithm': 'CRC32', } + if include_checksum: + expected_params["ChecksumAlgorithm"] = DEFAULT_CHECKSUM_ALGORITHM if extra_expected_params: expected_params.update(extra_expected_params) upload_response = self.create_stubbed_responses()[0] @@ -187,6 +189,46 @@ self.assert_expected_client_calls_were_correct() self.assert_put_object_body_was_correct() + def test_upload_with_default_checksum_when_supported(self): + # Reset client to configure `request_checksum_calculation` to "when_supported". + self.reset_stubber_with_new_client( + {'config': Config(request_checksum_calculation="when_supported")} + ) + self.client.meta.events.register( + 'before-parameter-build.s3.*', self.collect_body + ) + self._manager = TransferManager(self.client, self.config) + + self.add_put_object_response_with_default_expected_params( + include_checksum=True + ) + future = self.manager.upload( + self.filename, self.bucket, self.key, self.extra_args + ) + future.result() + self.assert_expected_client_calls_were_correct() + self.assert_put_object_body_was_correct() + + def test_upload_with_default_checksum_when_required(self): + # Reset client to configure `request_checksum_calculation` to "when_required". + self.reset_stubber_with_new_client( + {'config': Config(request_checksum_calculation="when_required")} + ) + self.client.meta.events.register( + 'before-parameter-build.s3.*', self.collect_body + ) + self._manager = TransferManager(self.client, self.config) + + self.add_put_object_response_with_default_expected_params( + include_checksum=False + ) + future = self.manager.upload( + self.filename, self.bucket, self.key, self.extra_args + ) + future.result() + self.assert_expected_client_calls_were_correct() + self.assert_put_object_body_was_correct() + def test_upload_with_s3express_default_checksum(self): s3express_bucket = "mytestbucket--usw2-az6--x-s3" self.assertFalse("ChecksumAlgorithm" in self.extra_args) @@ -370,9 +412,7 @@ self.assertEqual(self.sent_bodies, expected_contents) def add_create_multipart_response_with_default_expected_params( - self, - extra_expected_params=None, - bucket=None, + self, extra_expected_params=None, bucket=None, include_checksum=True ): if bucket is None: bucket = self.bucket @@ -380,8 +420,9 @@ expected_params = { 'Bucket': bucket, 'Key': self.key, - 'ChecksumAlgorithm': 'CRC32', } + if include_checksum: + expected_params["ChecksumAlgorithm"] = DEFAULT_CHECKSUM_ALGORITHM if extra_expected_params: expected_params.update(extra_expected_params) response = self.create_stubbed_responses()[0] @@ -389,9 +430,7 @@ self.stubber.add_response(**response) def add_upload_part_responses_with_default_expected_params( - self, - extra_expected_params=None, - bucket=None, + self, extra_expected_params=None, bucket=None, include_checksum=True ): if bucket is None: bucket = self.bucket @@ -406,50 +445,48 @@ 'UploadId': self.multipart_id, 'Body': ANY, 'PartNumber': i + 1, - 'ChecksumAlgorithm': 'CRC32', } + if include_checksum: + expected_params["ChecksumAlgorithm"] = ( + DEFAULT_CHECKSUM_ALGORITHM + ) if extra_expected_params: expected_params.update(extra_expected_params) - name = expected_params['ChecksumAlgorithm'] - checksum_member = f'Checksum{name.upper()}' - response = upload_part_response['service_response'] - response[checksum_member] = f'sum{i+1}==' + # If ChecksumAlgorithm is in expected parameters, add checksum to the response + checksum_algorithm = expected_params.get('ChecksumAlgorithm') + if checksum_algorithm: + checksum_member = f'Checksum{checksum_algorithm.upper()}' + response = upload_part_response['service_response'] + response[checksum_member] = f'sum{i+1}==' upload_part_response['expected_params'] = expected_params self.stubber.add_response(**upload_part_response) def add_complete_multipart_response_with_default_expected_params( - self, - extra_expected_params=None, - bucket=None, + self, extra_expected_params=None, bucket=None, include_checksum=True ): if bucket is None: bucket = self.bucket + num_parts = 3 + parts = [] + for part_num in range(1, num_parts + 1): + part = { + 'ETag': f'etag-{part_num}', + 'PartNumber': part_num, + } + if include_checksum: + part[f"Checksum{DEFAULT_CHECKSUM_ALGORITHM}"] = ( + f"sum{part_num}==" + ) + parts.append(part) + expected_params = { 'Bucket': bucket, 'Key': self.key, 'UploadId': self.multipart_id, - 'MultipartUpload': { - 'Parts': [ - { - 'ETag': 'etag-1', - 'PartNumber': 1, - 'ChecksumCRC32': 'sum1==', - }, - { - 'ETag': 'etag-2', - 'PartNumber': 2, - 'ChecksumCRC32': 'sum2==', - }, - { - 'ETag': 'etag-3', - 'PartNumber': 3, - 'ChecksumCRC32': 'sum3==', - }, - ] - }, + 'MultipartUpload': {'Parts': parts}, } if extra_expected_params: expected_params.update(extra_expected_params) @@ -759,5 +796,55 @@ future = self.manager.upload( self.filename, self.bucket, self.key, self.extra_args ) + future.result() + self.assert_expected_client_calls_were_correct() + + def test_multipart_upload_with_default_checksum_when_supported(self): + # Reset client to configure `request_checksum_calculation` to "when_supported". + self.reset_stubber_with_new_client( + {'config': Config(request_checksum_calculation="when_supported")} + ) + self.client.meta.events.register( + 'before-parameter-build.s3.*', self.collect_body + ) + self._manager = TransferManager(self.client, self.config) + + self.add_create_multipart_response_with_default_expected_params( + include_checksum=True + ) + self.add_upload_part_responses_with_default_expected_params( + include_checksum=True + ) + self.add_complete_multipart_response_with_default_expected_params() + + future = self.manager.upload( + self.filename, self.bucket, self.key, self.extra_args + ) + future.result() + self.assert_expected_client_calls_were_correct() + + def test_multipart_upload_with_default_checksum_when_required(self): + # Reset client to configure `request_checksum_calculation` to "when_required". + self.reset_stubber_with_new_client( + {'config': Config(request_checksum_calculation="when_required")} + ) + self.client.meta.events.register( + 'before-parameter-build.s3.*', self.collect_body + ) + self._manager = TransferManager(self.client, self.config) + + self.add_create_multipart_response_with_default_expected_params( + include_checksum=False + ) + self.add_upload_part_responses_with_default_expected_params( + include_checksum=False + ) + self.add_complete_multipart_response_with_default_expected_params( + include_checksum=False + ) + + future = self.manager.upload( + self.filename, self.bucket, self.key, self.extra_args + ) future.result() self.assert_expected_client_calls_were_correct()