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 2024-03-14 17:42:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-s3transfer (Old)
 and      /work/SRC/openSUSE:Factory/.python-s3transfer.new.1905 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-s3transfer"

Thu Mar 14 17:42:22 2024 rev:28 rq:1156949 version:0.10.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-s3transfer/python-s3transfer.changes      
2023-12-25 19:04:34.671901408 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-s3transfer.new.1905/python-s3transfer.changes
    2024-03-14 17:42:28.943708039 +0100
@@ -1,0 +2,16 @@
+Mon Mar  4 14:00:49 UTC 2024 - Robert Schweikert <rjsch...@suse.com>
+
+- Drop Provides for SLE 15 SP4 and openSUSE Leap 15.4 and later
+
+-------------------------------------------------------------------
+Wed Jan 31 22:45:39 UTC 2024 - Robert Schweikert <rjsch...@suse.com>
+
+- Switch to Python 3.11 build in SLE 15 SP4 and openSUSE Leap 15.4 and
+  later (jsc#PCT-371).
+- Switch to wheel build
+- Update to 0.10.0
+  * feature:``s3``: Added CRT support for S3 Express One Zone
+- From 0.9.0
+  * feature:Python: End of support for Python 3.7
+
+-------------------------------------------------------------------

Old:
----
  s3transfer-0.8.2.tar.gz

New:
----
  s3transfer-0.10.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-s3transfer.spec ++++++
--- /var/tmp/diff_new_pack.qqX5i6/_old  2024-03-14 17:42:29.467727252 +0100
+++ /var/tmp/diff_new_pack.qqX5i6/_new  2024-03-14 17:42:29.467727252 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-s3transfer
 #
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -16,10 +16,9 @@
 #
 
 
-%{?!python_module:%define python_module() python-%{**} python3-%{**}}
-%define skip_python2 1
+%{?sle15_python_module_pythons}
 Name:           python-s3transfer
-Version:        0.8.2
+Version:        0.10.0
 Release:        0
 Summary:        Python S3 transfer manager
 License:        Apache-2.0
@@ -27,15 +26,18 @@
 URL:            https://github.com/boto/s3transfer
 Source0:        
https://files.pythonhosted.org/packages/source/s/s3transfer/s3transfer-%{version}.tar.gz
 BuildRequires:  %{python_module botocore >= 1.33.2}
+BuildRequires:  %{python_module pip}
 BuildRequires:  %{python_module pytest}
 BuildRequires:  %{python_module setuptools}
+BuildRequires:  %{python_module wheel}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
-Requires:       python-botocore <= 2.0.0
-Requires:       python-botocore >= 1.33.2
 Requires:       python-requests
+Requires:       (python-botocore >= 1.33.2 with python-botocore <= 2.0.0)
 BuildArch:      noarch
-
+%if 0%{?sle_version} >= 150400
+Obsoletes:      python3-s3transfer < %{version}
+%endif
 %python_subpackages
 
 %description
@@ -47,10 +49,10 @@
 rm -rf tests/integration
 
 %build
-%python_build
+%pyproject_wheel
 
 %install
-%python_install
+%pyproject_install
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
 
 %check
@@ -61,5 +63,5 @@
 %license LICENSE.txt
 %doc README.rst
 %{python_sitelib}/s3transfer/
-%{python_sitelib}/s3transfer-%{version}-py*.egg-info
+%{python_sitelib}/s3transfer-%{version}*-info
 

++++++ s3transfer-0.8.2.tar.gz -> s3transfer-0.10.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/s3transfer-0.8.2/PKG-INFO 
new/s3transfer-0.10.0/PKG-INFO
--- old/s3transfer-0.8.2/PKG-INFO       2023-11-29 20:43:09.000000000 +0100
+++ new/s3transfer-0.10.0/PKG-INFO      2023-12-21 20:12:29.487909300 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: s3transfer
-Version: 0.8.2
+Version: 0.10.0
 Summary: An Amazon S3 Transfer Manager
 Home-page: https://github.com/boto/s3transfer
 Author: Amazon Web Services
@@ -14,13 +14,12 @@
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3 :: Only
-Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: Python :: 3.11
 Classifier: Programming Language :: Python :: 3.12
-Requires-Python: >= 3.7
+Requires-Python: >= 3.8
 Provides-Extra: crt
 License-File: LICENSE.txt
 License-File: NOTICE.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/s3transfer-0.8.2/s3transfer/__init__.py 
new/s3transfer-0.10.0/s3transfer/__init__.py
--- old/s3transfer-0.8.2/s3transfer/__init__.py 2023-11-29 20:43:09.000000000 
+0100
+++ new/s3transfer-0.10.0/s3transfer/__init__.py        2023-12-21 
20:12:29.000000000 +0100
@@ -144,7 +144,7 @@
 from s3transfer.exceptions import RetriesExceededError, S3UploadFailedError
 
 __author__ = 'Amazon Web Services'
-__version__ = '0.8.2'
+__version__ = '0.10.0'
 
 
 class NullHandler(logging.Handler):
@@ -681,7 +681,6 @@
 
 
 class S3Transfer:
-
     ALLOWED_DOWNLOAD_ARGS = [
         'VersionId',
         'SSECustomerAlgorithm',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/s3transfer-0.8.2/s3transfer/crt.py 
new/s3transfer-0.10.0/s3transfer/crt.py
--- old/s3transfer-0.8.2/s3transfer/crt.py      2023-11-29 20:43:09.000000000 
+0100
+++ new/s3transfer-0.10.0/s3transfer/crt.py     2023-12-21 20:12:29.000000000 
+0100
@@ -18,7 +18,12 @@
 import awscrt.s3
 import botocore.awsrequest
 import botocore.session
-from awscrt.auth import AwsCredentials, AwsCredentialsProvider
+from awscrt.auth import (
+    AwsCredentials,
+    AwsCredentialsProvider,
+    AwsSigningAlgorithm,
+    AwsSigningConfig,
+)
 from awscrt.io import (
     ClientBootstrap,
     ClientTlsContext,
@@ -35,7 +40,12 @@
 from s3transfer.constants import MB
 from s3transfer.exceptions import TransferNotDoneError
 from s3transfer.futures import BaseTransferFuture, BaseTransferMeta
-from s3transfer.utils import CallArgs, OSUtils, get_callbacks
+from s3transfer.utils import (
+    CallArgs,
+    OSUtils,
+    get_callbacks,
+    is_s3express_bucket,
+)
 
 logger = logging.getLogger(__name__)
 
@@ -148,6 +158,7 @@
         tls_mode=tls_mode,
         tls_connection_options=tls_connection_options,
         throughput_target_gbps=target_gbps,
+        enable_s3express=True,
     )
 
 
@@ -807,7 +818,7 @@
         on_done_before_calls,
         on_done_after_calls,
     ):
-        return {
+        make_request_args = {
             'request': self._request_serializer.serialize_http_request(
                 request_type, future
             ),
@@ -819,6 +830,11 @@
             ),
             'on_progress': self.get_crt_callback(future, 'progress'),
         }
+        if is_s3express_bucket(call_args.bucket):
+            make_request_args['signing_config'] = AwsSigningConfig(
+                algorithm=AwsSigningAlgorithm.V4_S3EXPRESS
+            )
+        return make_request_args
 
 
 class RenameTempFileHandler:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/s3transfer-0.8.2/s3transfer/futures.py 
new/s3transfer-0.10.0/s3transfer/futures.py
--- old/s3transfer-0.8.2/s3transfer/futures.py  2023-11-29 20:38:58.000000000 
+0100
+++ new/s3transfer-0.10.0/s3transfer/futures.py 2023-12-21 20:10:16.000000000 
+0100
@@ -505,6 +505,7 @@
             than concurrent.futures.Future.add_done_callback that requires
             a single argument for the future.
         """
+
         # The done callback for concurrent.futures.Future will always pass a
         # the future in as the only argument. So we need to create the
         # proper signature wrapper that will invoke the callback provided.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/s3transfer-0.8.2/s3transfer.egg-info/PKG-INFO 
new/s3transfer-0.10.0/s3transfer.egg-info/PKG-INFO
--- old/s3transfer-0.8.2/s3transfer.egg-info/PKG-INFO   2023-11-29 
20:43:09.000000000 +0100
+++ new/s3transfer-0.10.0/s3transfer.egg-info/PKG-INFO  2023-12-21 
20:12:29.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: s3transfer
-Version: 0.8.2
+Version: 0.10.0
 Summary: An Amazon S3 Transfer Manager
 Home-page: https://github.com/boto/s3transfer
 Author: Amazon Web Services
@@ -14,13 +14,12 @@
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3 :: Only
-Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: Python :: 3.11
 Classifier: Programming Language :: Python :: 3.12
-Requires-Python: >= 3.7
+Requires-Python: >= 3.8
 Provides-Extra: crt
 License-File: LICENSE.txt
 License-File: NOTICE.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/s3transfer-0.8.2/setup.py 
new/s3transfer-0.10.0/setup.py
--- old/s3transfer-0.8.2/setup.py       2023-11-29 20:40:28.000000000 +0100
+++ new/s3transfer-0.10.0/setup.py      2023-12-21 20:10:16.000000000 +0100
@@ -33,7 +33,7 @@
         'crt': 'botocore[crt]>=1.33.2,<2.0a.0',
     },
     license="Apache License 2.0",
-    python_requires=">= 3.7",
+    python_requires=">= 3.8",
     classifiers=[
         'Development Status :: 3 - Alpha',
         'Intended Audience :: Developers',
@@ -42,7 +42,6 @@
         'Programming Language :: Python',
         'Programming Language :: Python :: 3',
         'Programming Language :: Python :: 3 :: Only',
-        'Programming Language :: Python :: 3.7',
         'Programming Language :: Python :: 3.8',
         'Programming Language :: Python :: 3.9',
         'Programming Language :: Python :: 3.10',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/s3transfer-0.8.2/tests/functional/test_copy.py 
new/s3transfer-0.10.0/tests/functional/test_copy.py
--- old/s3transfer-0.8.2/tests/functional/test_copy.py  2023-11-29 
20:40:28.000000000 +0100
+++ new/s3transfer-0.10.0/tests/functional/test_copy.py 2023-12-21 
20:10:16.000000000 +0100
@@ -84,7 +84,6 @@
         expected_create_mpu_params=None,
         expected_complete_mpu_params=None,
     ):
-
         # Add all responses needed to do the copy of the object.
         # Should account for both ranged and nonranged downloads.
         stubbed_responses = self.create_stubbed_responses()[1:]
@@ -497,7 +496,6 @@
     def _add_params_to_expected_params(
         self, add_copy_kwargs, operation_types, new_params
     ):
-
         expected_params_to_update = []
         for operation_type in operation_types:
             add_copy_kwargs_key = 'expected_' + operation_type + '_params'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/s3transfer-0.8.2/tests/functional/test_crt.py 
new/s3transfer-0.10.0/tests/functional/test_crt.py
--- old/s3transfer-0.8.2/tests/functional/test_crt.py   2023-11-29 
20:40:28.000000000 +0100
+++ new/s3transfer-0.10.0/tests/functional/test_crt.py  2023-12-21 
20:12:29.000000000 +0100
@@ -68,6 +68,7 @@
     def setUp(self):
         self.region = 'us-west-2'
         self.bucket = "test_bucket"
+        self.s3express_bucket = 's3expressbucket--usw2-az5--x-s3'
         self.key = "test_key"
         self.expected_content = b'my content'
         self.expected_download_content = b'new content'
@@ -77,6 +78,8 @@
         )
         self.expected_path = "/" + self.bucket + "/" + self.key
         self.expected_host = "s3.%s.amazonaws.com" % (self.region)
+        self.expected_s3express_host = 
f'{self.s3express_bucket}.s3express-usw2-az5.us-west-2.amazonaws.com'
+        self.expected_s3express_path = f'/{self.key}'
         self.s3_request = mock.Mock(awscrt.s3.S3Request)
         self.s3_crt_client = mock.Mock(awscrt.s3.S3Client)
         self.s3_crt_client.make_request.side_effect = (
@@ -134,6 +137,21 @@
             for expected_missing_header in expected_missing_headers:
                 self.assertNotIn(expected_missing_header.lower(), header_names)
 
+    def _assert_exected_s3express_request(
+        self, make_request_kwargs, expected_http_method='GET'
+    ):
+        self._assert_expected_crt_http_request(
+            make_request_kwargs["request"],
+            expected_host=self.expected_s3express_host,
+            expected_path=self.expected_s3express_path,
+            expected_http_method=expected_http_method,
+        )
+        self.assertIn('signing_config', make_request_kwargs)
+        self.assertEqual(
+            make_request_kwargs['signing_config'].algorithm,
+            awscrt.auth.AwsSigningAlgorithm.V4_S3EXPRESS,
+        )
+
     def _assert_subscribers_called(self, expected_future=None):
         self.assertTrue(self.record_subscriber.on_queued_called)
         self.assertTrue(self.record_subscriber.on_done_called)
@@ -355,6 +373,20 @@
                 [self.record_subscriber],
             )
 
+    def test_upload_with_s3express(self):
+        future = self.transfer_manager.upload(
+            self.filename,
+            self.s3express_bucket,
+            self.key,
+            {},
+            [self.record_subscriber],
+        )
+        future.result()
+        self._assert_exected_s3express_request(
+            self.s3_crt_client.make_request.call_args[1],
+            expected_http_method='PUT',
+        )
+
     def test_download(self):
         future = self.transfer_manager.download(
             self.bucket, self.key, self.filename, {}, [self.record_subscriber]
@@ -457,6 +489,20 @@
             underlying_stream.getvalue(), self.expected_download_content
         )
 
+    def test_download_with_s3express(self):
+        future = self.transfer_manager.download(
+            self.s3express_bucket,
+            self.key,
+            self.filename,
+            {},
+            [self.record_subscriber],
+        )
+        future.result()
+        self._assert_exected_s3express_request(
+            self.s3_crt_client.make_request.call_args[1],
+            expected_http_method='GET',
+        )
+
     def test_delete(self):
         future = self.transfer_manager.delete(
             self.bucket, self.key, {}, [self.record_subscriber]
@@ -480,6 +526,16 @@
         )
         self._assert_subscribers_called(future)
 
+    def test_delete_with_s3express(self):
+        future = self.transfer_manager.delete(
+            self.s3express_bucket, self.key, {}, [self.record_subscriber]
+        )
+        future.result()
+        self._assert_exected_s3express_request(
+            self.s3_crt_client.make_request.call_args[1],
+            expected_http_method='DELETE',
+        )
+
     def test_blocks_when_max_requests_processes_reached(self):
         self.s3_crt_client.make_request.return_value = self.s3_request
         # We simulate blocking by not invoking the on_done callbacks for
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/s3transfer-0.8.2/tests/functional/test_delete.py 
new/s3transfer-0.10.0/tests/functional/test_delete.py
--- old/s3transfer-0.8.2/tests/functional/test_delete.py        2023-11-29 
20:38:58.000000000 +0100
+++ new/s3transfer-0.10.0/tests/functional/test_delete.py       2023-12-21 
20:10:16.000000000 +0100
@@ -15,7 +15,6 @@
 
 
 class TestDeleteObject(BaseGeneralInterfaceTest):
-
     __test__ = True
 
     def setUp(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/s3transfer-0.8.2/tests/unit/test_crt.py 
new/s3transfer-0.10.0/tests/unit/test_crt.py
--- old/s3transfer-0.8.2/tests/unit/test_crt.py 2023-11-29 20:43:09.000000000 
+0100
+++ new/s3transfer-0.10.0/tests/unit/test_crt.py        2023-12-21 
20:12:29.000000000 +0100
@@ -362,3 +362,7 @@
             mock_s3_crt_client.call_args[1]['throughput_target_gbps']
             == expected_gbps
         )
+
+    def test_always_enables_s3express(self, mock_s3_crt_client):
+        s3transfer.crt.create_s3_crt_client('us-west-2')
+        assert mock_s3_crt_client.call_args[1]['enable_s3express'] is True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/s3transfer-0.8.2/tests/unit/test_s3transfer.py 
new/s3transfer-0.10.0/tests/unit/test_s3transfer.py
--- old/s3transfer-0.8.2/tests/unit/test_s3transfer.py  2023-11-29 
20:38:58.000000000 +0100
+++ new/s3transfer-0.10.0/tests/unit/test_s3transfer.py 2023-12-21 
20:10:16.000000000 +0100
@@ -377,7 +377,6 @@
 
 
 class TestMultipartDownloader(unittest.TestCase):
-
     maxDiff = None
 
     def test_multipart_download_uses_correct_client_calls(self):

Reply via email to