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'], }
