Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-aiobotocore for 
openSUSE:Factory checked in at 2021-04-23 17:50:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-aiobotocore (Old)
 and      /work/SRC/openSUSE:Factory/.python-aiobotocore.new.12324 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-aiobotocore"

Fri Apr 23 17:50:34 2021 rev:6 rq:886656 version:1.3.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-aiobotocore/python-aiobotocore.changes    
2020-12-09 22:12:55.963158965 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-aiobotocore.new.12324/python-aiobotocore.changes
 2021-04-23 17:50:50.374816244 +0200
@@ -1,0 +2,13 @@
+Thu Apr 15 13:33:07 UTC 2021 - Ben Greiner <[email protected]>
+
+- Update to 1.3.0
+  * Bump to botocore 1.20.49 #856
+  * Await call to async method _load_creds_via_assume_role #851
+    (thanks @puzza007)
+  * verify strings are now correctly passed to aiohttp.TCPConnector
+    #851 (thanks @FHTMitchell)
+  * use passed in http_session_cls param to create_client (#797)
+  * fix AioPageIterator search method #831 (thanks @joseph-jones)
+- Add missing aioitertools runtime requirement
+
+-------------------------------------------------------------------

Old:
----
  aiobotocore-1.1.1.tar.gz

New:
----
  aiobotocore-1.3.0.tar.gz

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

Other differences:
------------------
++++++ python-aiobotocore.spec ++++++
--- /var/tmp/diff_new_pack.Qto09j/_old  2021-04-23 17:50:50.786816952 +0200
+++ /var/tmp/diff_new_pack.Qto09j/_new  2021-04-23 17:50:50.786816952 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-aiobotocore
 #
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -21,7 +21,7 @@
 %define skip_python2 1
 %endif
 Name:           python-aiobotocore
-Version:        1.1.1
+Version:        1.3.0
 Release:        0
 Summary:        Async client for aws services
 License:        Apache-2.0
@@ -35,15 +35,15 @@
 # SECTION test requirements
 BuildRequires:  %{python_module aiohttp >= 3.3.1}
 BuildRequires:  %{python_module aioitertools >= 0.5.1}
-BuildRequires:  %{python_module botocore >= 1.17.44}
+BuildRequires:  %{python_module botocore >= 1.20.49}
 BuildRequires:  %{python_module wrapt >= 1.10.10}
 # /SECTION
 Requires:       python-aiohttp >= 3.3.1
-Requires:       python-async_generator >= 1.10
-Requires:       python-botocore >= 1.17.44
+Requires:       python-aioitertools >= 0.5.1
+Requires:       python-botocore >= 1.20.49
 Requires:       python-wrapt >= 1.10.10
-Recommends:     awscli >= 1.18.121
-Recommends:     python-boto3 >= 1.14.44
+Recommends:     aws-cli >= 1.19.49
+Recommends:     python-boto3 >= 1.17.49
 BuildArch:      noarch
 
 %python_subpackages

++++++ aiobotocore-1.1.1.tar.gz -> aiobotocore-1.3.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aiobotocore-1.1.1/CHANGES.rst 
new/aiobotocore-1.3.0/CHANGES.rst
--- old/aiobotocore-1.1.1/CHANGES.rst   2020-09-01 02:35:04.000000000 +0200
+++ new/aiobotocore-1.3.0/CHANGES.rst   2021-04-10 01:07:45.000000000 +0200
@@ -1,5 +1,26 @@
 Changes
 -------
+1.3.0 (2021-04-09)
+^^^^^^^^^^^^^^^^^^
+* Bump to botocore 1.20.49 #856
+
+1.2.2 (2021-03-11)
+^^^^^^^^^^^^^^^^^^
+* Await call to async method _load_creds_via_assume_role #851 (thanks 
@puzza007)
+
+1.2.1 (2021-02-10)
+^^^^^^^^^^^^^^^^^^
+* verify strings are now correctly passed to aiohttp.TCPConnector #851 (thanks 
@FHTMitchell)
+
+1.2.0 (2021-01-11)
+^^^^^^^^^^^^^^^^^^
+* bump botocore to 1.19.52
+* use passed in http_session_cls param to create_client (#797)
+
+1.1.2 (2020-10-07)
+^^^^^^^^^^^^^^^^^^
+* fix AioPageIterator search method #831 (thanks @joseph-jones)
+
 1.1.1 (2020-08-31)
 ^^^^^^^^^^^^^^^^^^
 * fix s3 region redirect bug #825
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aiobotocore-1.1.1/PKG-INFO 
new/aiobotocore-1.3.0/PKG-INFO
--- old/aiobotocore-1.1.1/PKG-INFO      2020-09-01 02:35:38.000000000 +0200
+++ new/aiobotocore-1.3.0/PKG-INFO      2021-04-10 01:07:46.315323400 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: aiobotocore
-Version: 1.1.1
+Version: 1.3.0
 Summary: Async client for aws services using botocore and aiohttp
 Home-page: https://github.com/aio-libs/aiobotocore
 Author: Nikolay Novik
@@ -99,9 +99,8 @@
         .. code:: python
         
             from contextlib import AsyncExitStack
-            from typing import
-            
-            import aiobotocore.session
+          
+            from aiobotocore.session import AioSession
             
             
             # How to use in existing context manager
@@ -111,21 +110,21 @@
                     self._s3_client = None
             
                 async def __aenter__(self):
-                    session = aiobotocore.session.AioSession()
+                    session = AioSession()
                     self._s3_client = await 
self._exit_stack.enter_async_context(session.create_client('s3'))
             
                 async def __aexit__(self, exc_type, exc_val, exc_tb):
                     await self._exit_stack.__aexit__(exc_type, exc_val, exc_tb)
             
             # How to use with an external exit_stack
-            async def create_s3_client(session: 
aiobotocore.session.AioSession, exit_stack: AsyncExitStack):
+            async def create_s3_client(session: AioSession, exit_stack: 
AsyncExitStack):
                 # Create client and add cleanup
                 client = await 
exit_stack.enter_async_context(session.create_client('s3'))
                 return client
             
             
             async def non_manager_example():
-                session = aiobotocore.session.AioSession()
+                session = AioSession()
             
                 async with AsyncExitStack() as exit_stack:
                     s3_client = await create_s3_client(session, exit_stack)
@@ -210,6 +209,27 @@
         
         Changes
         -------
+        1.3.0 (2021-04-09)
+        ^^^^^^^^^^^^^^^^^^
+        * Bump to botocore 1.20.49 #856
+        
+        1.2.2 (2021-03-11)
+        ^^^^^^^^^^^^^^^^^^
+        * Await call to async method _load_creds_via_assume_role #851 (thanks 
@puzza007)
+        
+        1.2.1 (2021-02-10)
+        ^^^^^^^^^^^^^^^^^^
+        * verify strings are now correctly passed to aiohttp.TCPConnector #851 
(thanks @FHTMitchell)
+        
+        1.2.0 (2021-01-11)
+        ^^^^^^^^^^^^^^^^^^
+        * bump botocore to 1.19.52
+        * use passed in http_session_cls param to create_client (#797)
+        
+        1.1.2 (2020-10-07)
+        ^^^^^^^^^^^^^^^^^^
+        * fix AioPageIterator search method #831 (thanks @joseph-jones)
+        
         1.1.1 (2020-08-31)
         ^^^^^^^^^^^^^^^^^^
         * fix s3 region redirect bug #825
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aiobotocore-1.1.1/README.rst 
new/aiobotocore-1.3.0/README.rst
--- old/aiobotocore-1.1.1/README.rst    2020-09-01 02:35:04.000000000 +0200
+++ new/aiobotocore-1.3.0/README.rst    2021-04-10 01:07:45.000000000 +0200
@@ -90,9 +90,8 @@
 .. code:: python
 
     from contextlib import AsyncExitStack
-    from typing import
-    
-    import aiobotocore.session
+  
+    from aiobotocore.session import AioSession
     
     
     # How to use in existing context manager
@@ -102,21 +101,21 @@
             self._s3_client = None
     
         async def __aenter__(self):
-            session = aiobotocore.session.AioSession()
+            session = AioSession()
             self._s3_client = await 
self._exit_stack.enter_async_context(session.create_client('s3'))
     
         async def __aexit__(self, exc_type, exc_val, exc_tb):
             await self._exit_stack.__aexit__(exc_type, exc_val, exc_tb)
     
     # How to use with an external exit_stack
-    async def create_s3_client(session: aiobotocore.session.AioSession, 
exit_stack: AsyncExitStack):
+    async def create_s3_client(session: AioSession, exit_stack: 
AsyncExitStack):
         # Create client and add cleanup
         client = await 
exit_stack.enter_async_context(session.create_client('s3'))
         return client
     
     
     async def non_manager_example():
-        session = aiobotocore.session.AioSession()
+        session = AioSession()
     
         async with AsyncExitStack() as exit_stack:
             s3_client = await create_s3_client(session, exit_stack)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aiobotocore-1.1.1/aiobotocore/__init__.py 
new/aiobotocore-1.3.0/aiobotocore/__init__.py
--- old/aiobotocore-1.1.1/aiobotocore/__init__.py       2020-09-01 
02:35:04.000000000 +0200
+++ new/aiobotocore-1.3.0/aiobotocore/__init__.py       2021-04-10 
01:07:45.000000000 +0200
@@ -1,4 +1,4 @@
 from .session import get_session, AioSession
 
 __all__ = ['get_session', 'AioSession']
-__version__ = '1.1.1'
+__version__ = '1.3.0'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aiobotocore-1.1.1/aiobotocore/args.py 
new/aiobotocore-1.3.0/aiobotocore/args.py
--- old/aiobotocore-1.1.1/aiobotocore/args.py   2020-09-01 02:35:04.000000000 
+0200
+++ new/aiobotocore-1.3.0/aiobotocore/args.py   2021-04-10 01:07:45.000000000 
+0200
@@ -59,6 +59,7 @@
             timeout=(new_config.connect_timeout, new_config.read_timeout),
             socket_options=socket_options,
             client_cert=new_config.client_cert,
+            proxies_config=new_config.proxies_config,
             connector_args=new_config.connector_args)
 
         serializer = botocore.serialize.create_serializer(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aiobotocore-1.1.1/aiobotocore/client.py 
new/aiobotocore-1.3.0/aiobotocore/client.py
--- old/aiobotocore-1.1.1/aiobotocore/client.py 2020-09-01 02:35:04.000000000 
+0200
+++ new/aiobotocore-1.3.0/aiobotocore/client.py 2021-04-10 01:07:45.000000000 
+0200
@@ -37,6 +37,9 @@
         self._register_s3_events(
             service_client, endpoint_bridge, endpoint_url, client_config,
             scoped_config)
+        self._register_s3_events(
+            service_client, endpoint_bridge, endpoint_url, client_config,
+            scoped_config)
         self._register_endpoint_discovery(
             service_client, endpoint_url, client_config
         )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aiobotocore-1.1.1/aiobotocore/credentials.py 
new/aiobotocore-1.3.0/aiobotocore/credentials.py
--- old/aiobotocore-1.1.1/aiobotocore/credentials.py    2020-09-01 
02:35:04.000000000 +0200
+++ new/aiobotocore-1.3.0/aiobotocore/credentials.py    2021-04-10 
01:07:45.000000000 +0200
@@ -46,6 +46,12 @@
     num_attempts = session.get_config_variable('metadata_service_num_attempts')
     disable_env_vars = session.instance_variables().get('profile') is not None
 
+    imds_config = {
+        'ec2_metadata_service_endpoint': session.get_config_variable(
+            'ec2_metadata_service_endpoint'),
+        'imds_use_ipv6': session.get_config_variable('imds_use_ipv6')
+    }
+
     if cache is None:
         cache = {}
 
@@ -55,7 +61,8 @@
         iam_role_fetcher=AioInstanceMetadataFetcher(
             timeout=metadata_timeout,
             num_attempts=num_attempts,
-            user_agent=session.user_agent())
+            user_agent=session.user_agent(),
+            config=imds_config)
     )
 
     profile_provider_builder = AioProfileProviderBuilder(
@@ -622,7 +629,7 @@
                 )
             return credentials
 
-        return self._load_creds_via_assume_role(profile_name)
+        return await self._load_creds_via_assume_role(profile_name)
 
     def _resolve_static_credentials_from_profile(self, profile):
         try:
@@ -817,6 +824,8 @@
 
 
 class AioSSOCredentialFetcher(AioCachedCredentialFetcher):
+    _UTC_DATE_FORMAT = '%Y-%m-%dT%H:%M:%SZ'
+
     def __init__(self, start_url, sso_region, role_name, account_id,
                  client_creator, token_loader=None, cache=None,
                  expiry_window_seconds=None):
@@ -826,7 +835,6 @@
         self._account_id = account_id
         self._start_url = start_url
         self._token_loader = token_loader
-
         super(AioSSOCredentialFetcher, self).__init__(
             cache, expiry_window_seconds
         )
@@ -846,7 +854,7 @@
         # fromtimestamp expects seconds so: milliseconds / 1000 = seconds
         timestamp_seconds = timestamp_ms / 1000.0
         timestamp = datetime.datetime.fromtimestamp(timestamp_seconds, tzutc())
-        return _serialize_if_needed(timestamp)
+        return timestamp.strftime(self._UTC_DATE_FORMAT)
 
     async def _get_credentials(self):
         """Get credentials by calling SSO get role credentials."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aiobotocore-1.1.1/aiobotocore/endpoint.py 
new/aiobotocore-1.3.0/aiobotocore/endpoint.py
--- old/aiobotocore-1.1.1/aiobotocore/endpoint.py       2020-09-01 
02:35:04.000000000 +0200
+++ new/aiobotocore-1.3.0/aiobotocore/endpoint.py       2021-04-10 
01:07:45.000000000 +0200
@@ -1,6 +1,7 @@
 import aiohttp
 import asyncio
 import io
+import pathlib
 import ssl
 import aiohttp.http_exceptions
 from aiohttp.client import URL
@@ -259,6 +260,7 @@
                         proxies=None,
                         socket_options=None,
                         client_cert=None,
+                        proxies_config=None,
                         connector_args=None):
         if not is_valid_endpoint_url(endpoint_url):
 
@@ -285,6 +287,7 @@
             sock_read=read_timeout
         )
 
+        verify = self._get_verify_value(verify)
         ssl_context = None
         if client_cert:
             if isinstance(client_cert, str):
@@ -293,18 +296,24 @@
             elif isinstance(client_cert, tuple):
                 cert_file, key_file = client_cert
             else:
-                assert False
+                raise TypeError("client_cert must be str or tuple, not %s" %
+                                client_cert.__class__.__name__)
 
             ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
             ssl_context.load_cert_chain(cert_file, key_file)
+        elif isinstance(verify, (str, pathlib.Path)):
+            ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH,
+                                                     cafile=str(verify))
+
+        # TODO: add support for proxies_config
 
         connector = aiohttp.TCPConnector(
             limit=max_pool_connections,
-            verify_ssl=self._get_verify_value(verify),
+            verify_ssl=bool(verify),
             ssl_context=ssl_context,
             **connector_args)
 
-        aio_session = aiohttp.ClientSession(
+        aio_session = http_session_cls(
             connector=connector,
             timeout=timeout,
             skip_auto_headers={'CONTENT-TYPE'},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aiobotocore-1.1.1/aiobotocore/paginate.py 
new/aiobotocore-1.3.0/aiobotocore/paginate.py
--- old/aiobotocore-1.1.1/aiobotocore/paginate.py       2020-09-01 
02:35:04.000000000 +0200
+++ new/aiobotocore-1.3.0/aiobotocore/paginate.py       2021-04-10 
01:07:45.000000000 +0200
@@ -3,6 +3,7 @@
 from botocore.utils import set_value_from_jmespath, merge_dicts
 from botocore.compat import six
 
+import jmespath
 import aioitertools
 
 
@@ -129,6 +130,16 @@
             complete_result['NextToken'] = self.resume_token
         return complete_result
 
+    async def search(self, expression):
+        compiled = jmespath.compile(expression)
+        async for page in self:
+            results = compiled.search(page)
+            if isinstance(results, list):
+                for element in results:
+                    yield element
+            else:
+                yield results
+
 
 class AioPaginator(Paginator):
     PAGE_ITERATOR_CLS = AioPageIterator
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aiobotocore-1.1.1/aiobotocore/response.py 
new/aiobotocore-1.3.0/aiobotocore/response.py
--- old/aiobotocore-1.1.1/aiobotocore/response.py       2020-09-01 
02:35:04.000000000 +0200
+++ new/aiobotocore-1.3.0/aiobotocore/response.py       2021-04-10 
01:07:45.000000000 +0200
@@ -75,7 +75,7 @@
 
     anext = __anext__
 
-    async def iter_lines(self, chunk_size=1024):
+    async def iter_lines(self, chunk_size=1024, keepends=False):
         """Return an iterator to yield lines from the raw stream.
 
         This is achieved by reading chunk of bytes (of size chunk_size) at a
@@ -85,10 +85,10 @@
         async for chunk in self.iter_chunks(chunk_size):
             lines = (pending + chunk).splitlines(True)
             for line in lines[:-1]:
-                yield line.splitlines()[0]
+                yield line.splitlines(keepends)[0]
             pending = lines[-1]
         if pending:
-            yield pending.splitlines()[0]
+            yield pending.splitlines(keepends)[0]
 
     async def iter_chunks(self, chunk_size=_DEFAULT_CHUNK_SIZE):
         """Return an iterator to yield chunks of chunk_size bytes from the raw
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aiobotocore-1.1.1/aiobotocore/signers.py 
new/aiobotocore-1.3.0/aiobotocore/signers.py
--- old/aiobotocore-1.1.1/aiobotocore/signers.py        2020-09-01 
02:35:04.000000000 +0200
+++ new/aiobotocore-1.3.0/aiobotocore/signers.py        2021-04-10 
01:07:45.000000000 +0200
@@ -46,9 +46,11 @@
             }
             if expires_in is not None:
                 kwargs['expires'] = expires_in
-            if not explicit_region_name and request.context.get(
-                    'signing', {}).get('region'):
-                kwargs['region_name'] = request.context['signing']['region']
+            signing_context = request.context.get('signing', {})
+            if not explicit_region_name and signing_context.get('region'):
+                kwargs['region_name'] = signing_context['region']
+            if signing_context.get('signing_name'):
+                kwargs['signing_name'] = signing_context['signing_name']
             try:
                 auth = await self.get_auth_instance(**kwargs)
             except UnknownSignatureVersionError as e:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aiobotocore-1.1.1/aiobotocore/utils.py 
new/aiobotocore-1.3.0/aiobotocore/utils.py
--- old/aiobotocore-1.1.1/aiobotocore/utils.py  2020-09-01 02:35:04.000000000 
+0200
+++ new/aiobotocore-1.3.0/aiobotocore/utils.py  2021-04-10 01:07:45.000000000 
+0200
@@ -7,7 +7,9 @@
 from botocore.utils import ContainerMetadataFetcher, InstanceMetadataFetcher, \
     IMDSFetcher, get_environ_proxies, BadIMDSRequestError, S3RegionRedirector, 
\
     ClientError
-from botocore.exceptions import MetadataRetrievalError
+from botocore.exceptions import (
+    InvalidIMDSEndpointError, MetadataRetrievalError,
+)
 import botocore.awsrequest
 
 
@@ -58,6 +60,13 @@
                     logger.debug(
                         "Caught retryable HTTP exception while making metadata 
"
                         "service request to %s: %s", url, e, exc_info=True)
+                except aiohttp.client_exceptions.ClientConnectorError as e:
+                    if getattr(e, 'errno', None) == 8 or \
+                            str(getattr(e, 'os_error', None)) == \
+                            'Domain name not found':  # threaded vs async 
resolver
+                        raise InvalidIMDSEndpointError(endpoint=url, error=e)
+                    else:
+                        raise
 
         return None
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aiobotocore-1.1.1/aiobotocore/waiter.py 
new/aiobotocore-1.3.0/aiobotocore/waiter.py
--- old/aiobotocore-1.1.1/aiobotocore/waiter.py 2020-09-01 02:35:04.000000000 
+0200
+++ new/aiobotocore-1.3.0/aiobotocore/waiter.py 2021-04-10 01:07:45.000000000 
+0200
@@ -4,7 +4,7 @@
 from botocore.exceptions import ClientError
 from botocore.waiter import WaiterModel  # noqa: F401, lgtm[py/unused-import]
 from botocore.waiter import Waiter, xform_name, logger, WaiterError, \
-    NormalizedOperationMethod as _NormalizedOperationMethod
+    NormalizedOperationMethod as _NormalizedOperationMethod, 
is_valid_waiter_error
 from botocore.docs.docstring import WaiterDocstring
 from botocore.utils import get_service_module_name
 
@@ -25,6 +25,7 @@
         config = kwargs.pop('WaiterConfig', {})
         sleep_amount = config.get('Delay', self.config.delay)
         max_attempts = config.get('MaxAttempts', self.config.max_attempts)
+        last_matched_acceptor = None
         num_attempts = 0
 
         while True:
@@ -32,35 +33,48 @@
             num_attempts += 1
             for acceptor in acceptors:
                 if acceptor.matcher_func(response):
+                    last_matched_acceptor = acceptor
                     current_state = acceptor.state
                     break
             else:
                 # If none of the acceptors matched, we should
                 # transition to the failure state if an error
                 # response was received.
-                if 'Error' in response:
+                if is_valid_waiter_error(response):
                     # Transition to a failure state, which we
                     # can just handle here by raising an exception.
                     raise WaiterError(
                         name=self.name,
-                        reason=response['Error'].get('Message', 'Unknown'),
-                        last_response=response
+                        reason='An error occurred (%s): %s' % (
+                            response['Error'].get('Code', 'Unknown'),
+                            response['Error'].get('Message', 'Unknown'),
+                        ),
+                        last_response=response,
                     )
             if current_state == 'success':
                 logger.debug("Waiting complete, waiter matched the "
                              "success state.")
                 return
             if current_state == 'failure':
+                reason = 'Waiter encountered a terminal failure state: %s' % (
+                        acceptor.explanation
+                        )
                 raise WaiterError(
                     name=self.name,
-                    reason='Waiter encountered a terminal failure state',
+                    reason=reason,
                     last_response=response,
                 )
             if num_attempts >= max_attempts:
+                if last_matched_acceptor is None:
+                    reason = 'Max attempts exceeded'
+                else:
+                    reason = 'Max attempts exceeded. Previously accepted 
state: %s' % (
+                        acceptor.explanation
+                    )
                 raise WaiterError(
                     name=self.name,
-                    reason='Max attempts exceeded',
-                    last_response=response
+                    reason=reason,
+                    last_response=response,
                 )
             await asyncio.sleep(sleep_amount)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aiobotocore-1.1.1/aiobotocore.egg-info/PKG-INFO 
new/aiobotocore-1.3.0/aiobotocore.egg-info/PKG-INFO
--- old/aiobotocore-1.1.1/aiobotocore.egg-info/PKG-INFO 2020-09-01 
02:35:38.000000000 +0200
+++ new/aiobotocore-1.3.0/aiobotocore.egg-info/PKG-INFO 2021-04-10 
01:07:46.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: aiobotocore
-Version: 1.1.1
+Version: 1.3.0
 Summary: Async client for aws services using botocore and aiohttp
 Home-page: https://github.com/aio-libs/aiobotocore
 Author: Nikolay Novik
@@ -99,9 +99,8 @@
         .. code:: python
         
             from contextlib import AsyncExitStack
-            from typing import
-            
-            import aiobotocore.session
+          
+            from aiobotocore.session import AioSession
             
             
             # How to use in existing context manager
@@ -111,21 +110,21 @@
                     self._s3_client = None
             
                 async def __aenter__(self):
-                    session = aiobotocore.session.AioSession()
+                    session = AioSession()
                     self._s3_client = await 
self._exit_stack.enter_async_context(session.create_client('s3'))
             
                 async def __aexit__(self, exc_type, exc_val, exc_tb):
                     await self._exit_stack.__aexit__(exc_type, exc_val, exc_tb)
             
             # How to use with an external exit_stack
-            async def create_s3_client(session: 
aiobotocore.session.AioSession, exit_stack: AsyncExitStack):
+            async def create_s3_client(session: AioSession, exit_stack: 
AsyncExitStack):
                 # Create client and add cleanup
                 client = await 
exit_stack.enter_async_context(session.create_client('s3'))
                 return client
             
             
             async def non_manager_example():
-                session = aiobotocore.session.AioSession()
+                session = AioSession()
             
                 async with AsyncExitStack() as exit_stack:
                     s3_client = await create_s3_client(session, exit_stack)
@@ -210,6 +209,27 @@
         
         Changes
         -------
+        1.3.0 (2021-04-09)
+        ^^^^^^^^^^^^^^^^^^
+        * Bump to botocore 1.20.49 #856
+        
+        1.2.2 (2021-03-11)
+        ^^^^^^^^^^^^^^^^^^
+        * Await call to async method _load_creds_via_assume_role #851 (thanks 
@puzza007)
+        
+        1.2.1 (2021-02-10)
+        ^^^^^^^^^^^^^^^^^^
+        * verify strings are now correctly passed to aiohttp.TCPConnector #851 
(thanks @FHTMitchell)
+        
+        1.2.0 (2021-01-11)
+        ^^^^^^^^^^^^^^^^^^
+        * bump botocore to 1.19.52
+        * use passed in http_session_cls param to create_client (#797)
+        
+        1.1.2 (2020-10-07)
+        ^^^^^^^^^^^^^^^^^^
+        * fix AioPageIterator search method #831 (thanks @joseph-jones)
+        
         1.1.1 (2020-08-31)
         ^^^^^^^^^^^^^^^^^^
         * fix s3 region redirect bug #825
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aiobotocore-1.1.1/aiobotocore.egg-info/requires.txt 
new/aiobotocore-1.3.0/aiobotocore.egg-info/requires.txt
--- old/aiobotocore-1.1.1/aiobotocore.egg-info/requires.txt     2020-09-01 
02:35:38.000000000 +0200
+++ new/aiobotocore-1.3.0/aiobotocore.egg-info/requires.txt     2021-04-10 
01:07:46.000000000 +0200
@@ -1,10 +1,10 @@
-botocore<1.17.45,>=1.17.44
+botocore<1.20.50,>=1.20.49
 aiohttp>=3.3.1
 wrapt>=1.10.10
 aioitertools>=0.5.1
 
 [awscli]
-awscli==1.18.121
+awscli==1.19.49
 
 [boto3]
-boto3==1.14.44
+boto3==1.17.49
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aiobotocore-1.1.1/setup.py 
new/aiobotocore-1.3.0/setup.py
--- old/aiobotocore-1.1.1/setup.py      2020-09-01 02:35:04.000000000 +0200
+++ new/aiobotocore-1.3.0/setup.py      2021-04-10 01:07:45.000000000 +0200
@@ -7,7 +7,7 @@
 # NOTE: When updating botocore make sure to update awscli/boto3 versions below
 install_requires = [
     # pegged to also match items in `extras_require`
-    'botocore>=1.17.44,<1.17.45',
+    'botocore>=1.20.49,<1.20.50',
     'aiohttp>=3.3.1',
     'wrapt>=1.10.10',
     'aioitertools>=0.5.1',
@@ -19,8 +19,8 @@
 
 
 extras_require = {
-    'awscli': ['awscli==1.18.121'],
-    'boto3': ['boto3==1.14.44'],
+    'awscli': ['awscli==1.19.49'],
+    'boto3': ['boto3==1.17.49'],
 }
 
 

Reply via email to