跳转到主要内容

使用botocore和aiohttp的aws服务异步客户端

项目描述

CI status of master branch pre-commit.ci status Coverage status on master branch Documentation Status Latest version on pypi Chat on Gitter Downloads Last Month Conda downloads Stack Overflow

使用 botocoreaiohttp/asyncio 的亚马逊服务异步客户端。

这个库是 botocore 的一个主要功能齐全的异步版本。

安装

$ pip install aiobotocore

基本示例

import asyncio
from aiobotocore.session import get_session

AWS_ACCESS_KEY_ID = "xxx"
AWS_SECRET_ACCESS_KEY = "xxx"


async def go():
    bucket = 'dataintake'
    filename = 'dummy.bin'
    folder = 'aiobotocore'
    key = '{}/{}'.format(folder, filename)

    session = get_session()
    async with session.create_client('s3', region_name='us-west-2',
                                   aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
                                   aws_access_key_id=AWS_ACCESS_KEY_ID) as client:
        # upload object to amazon s3
        data = b'\x01'*1024
        resp = await client.put_object(Bucket=bucket,
                                            Key=key,
                                            Body=data)
        print(resp)

        # getting s3 object properties of file we just uploaded
        resp = await client.get_object_acl(Bucket=bucket, Key=key)
        print(resp)

        # get object from s3
        response = await client.get_object(Bucket=bucket, Key=key)
        # this will ensure the connection is correctly re-used/closed
        async with response['Body'] as stream:
            assert await stream.read() == data

        # list s3 objects using paginator
        paginator = client.get_paginator('list_objects')
        async for result in paginator.paginate(Bucket=bucket, Prefix=folder):
            for c in result.get('Contents', []):
                print(c)

        # delete object from s3
        resp = await client.delete_object(Bucket=bucket, Key=key)
        print(resp)

loop = asyncio.get_event_loop()
loop.run_until_complete(go())

上下文管理器示例

from contextlib import AsyncExitStack

from aiobotocore.session import AioSession


# How to use in existing context manager
class Manager:
    def __init__(self):
        self._exit_stack = AsyncExitStack()
        self._s3_client = None

    async def __aenter__(self):
        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: 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 = AioSession()

    async with AsyncExitStack() as exit_stack:
        s3_client = await create_s3_client(session, exit_stack)

        # do work with s3_client

支持的AWS服务

这是aiobotocore对AWS服务进行的测试的非详尽列表。不是所有方法都经过测试,但我们旨在测试大多数常用方法。

服务

状态

S3

工作正常

DynamoDB

测试的基本方法

SNS

测试的基本方法

SQS

测试的基本方法

CloudFormation

测试了堆栈创建

Kinesis

测试的基本方法

由于boto3的实现方式,即使服务没有在上文列出,您也很可能可以将任何 boto3.client('service') 放在方法前面以使其异步,例如 await client.list_named_queries() 会异步列出所有命名的Athena查询。

如果某个服务未在此列出,并且您需要一些测试或示例,请随时提出问题。

运行测试

有两种测试套件,一种可以通过运行在docker中的 moto 模拟,另一种则需要使用个人亚马逊密钥运行。CI只运行moto测试。

要运行moto测试

$ make mototest

要运行非moto测试

请确保已安装开发需求,并且您的亚马逊密钥和秘密可以通过环境变量访问

$ pip install pip-tools
$ pip-compile --all-extras pyproject.toml
$ pip-sync
$ pip install -e ".[awscli,boto3]"
$ export AWS_ACCESS_KEY_ID=xxx
$ export AWS_SECRET_ACCESS_KEY=xxx
$ export AWS_DEFAULT_REGION=xxx # e.g. us-west-2

执行测试套件

$ make test

启用类型检查和代码补全

安装 types-aiobotocore,它包含 aiobotocore 和所有支持的 botocore 服务的类型注解。

# install aiobotocore type annotations
# for ec2, s3, rds, lambda, sqs, dynamo and cloudformation
python -m pip install 'types-aiobotocore[essential]'

# or install annotations for services you use
python -m pip install 'types-aiobotocore[acm,apigateway]'

# Lite version does not provide session.create_client overloads
# it is more RAM-friendly, but requires explicit type annotations
python -m pip install 'types-aiobotocore-lite[essential]'

现在您应该能够在IDE中运行 Pylancepyrightmypy 以进行类型检查以及代码补全。

对于 types-aiobotocore-lite 软件包,请使用显式类型注解

from aiobotocore.session import get_session
from types_aiobotocore_s3.client import S3Client

session = get_session()
async with session.create_client("s3") as client:
    client: S3Client
    # type checking and code completion is now enabled for client

有关 types-aiobotocore 的完整文档,请参阅此处: https://youtype.github.io/types_aiobotocore_docs/

需求

awscli & boto3

awscli 和 boto3 依赖于单个版本或一系列版本的 botocore。然而,aiobotocore 只支持一系列特定的 botocore 版本。为确保您安装了 aiobotocore 和 botocore 特定组合或awscli和boto3的最新版本,请使用

pip install -U 'aiobotocore[awscli,boto3]'

如果您只需要 awscli 而不是 boto3(或反之亦然),您可以只安装其中一个额外的或另一个。

更改

2.15.1 (2024-09-19)

  • 放宽 botocore 依赖指定

2.15.0 (2024-09-10)

  • 提升 botocore 依赖指定

2.14.0 (2024-08-28)

  • 提升 botocore 依赖指定

2.13.3 (2024-08-22)

  • 修复 create_waiter_with_client()

  • 放宽 botocore 依赖指定

2.13.2 (2024-07-18)

  • 由于缺少 StreamingChecksumBody 的补丁,修复 #1125

2.13.1 (2024-06-24)

  • 提升 botocore 依赖指定

2.13.0 (2024-05-16)

  • 处理 aiohttp==3.9.2 #882 中引入的破坏性更改

2.12.4 (2024-05-16)

  • 提升 botocore 依赖指定

2.12.3 (2024-04-11)

  • 放宽 botocore 依赖指定

2.12.2 (2024-04-01)

  • AioConfig 中公开 http_session_cls 的配置

2.12.1 (2024-03-04)

  • 修复代理的使用 #1070

2.12.0 (2024-02-28)

  • 提升 botocore 依赖指定

2.11.2 (2024-02-02)

  • 提升 botocore 依赖指定

2.11.1 (2024-01-25)

  • 提升 botocore 依赖指定

2.11.0 (2024-01-19)

  • 发送项目特定的 User-Agent HTTP头 #853

2.10.0 (2024-01-18)

  • 提升 botocore 依赖指定

2.9.1 (2024-01-17)

  • 修复S3 Express身份缓存中的竞争条件 #1072

2.9.0 (2023-12-12)

  • 提升 botocore 依赖指定

2.8.0 (2023-11-28)

  • 添加返回AioAWSResponse()的AioStubber

  • 移除混淆的 aiobotocore.session.Session 符号

  • 提升 botocore 依赖指定

2.7.0 (2023-10-17)

  • 添加对Python 3.12的支持

  • 停止对Python 3.7的支持(已停止服务)

  • 放宽 botocore 依赖指定

2.6.0 (2023-08-11)

  • 将aiohttp最低版本提升到3.7.4.post0

  • 停止对python 3.7的支持(已停止服务)

2.5.4 (2023-08-07)

  • 修复在刷新错误修复中引入的__aenter__属性错误 (#1031)

2.5.3 (2023-08-06)

  • 添加对Python 3.11的更多支持

  • 将botocore提升到1.31.17

  • 添加waiter.wait返回

  • 修复SSO令牌刷新错误 #1025

2.5.2 (2023-07-06)

  • 修复问题 #1020

2.5.1 (2023-06-27)

  • 将botocore提升到1.29.161

2.5.0 (2023-03-06)

  • 将botocore提升到1.29.76(感谢 @jakob-keller #999)

2.4.2 (2022-12-22)

  • 修复重试 (#988)

2.4.1 (2022-11-28)

  • 添加对流式请求尾部的校验和的支持(感谢 @terrycain #962)

2.4.0 (2022-08-25)

  • 将botocore提升到1.27.59

2.3.4 (2022-06-23)

  • 修复select_object_content

2.3.3 (2022-06-07)

  • 修复获取IAM凭证时的连接超时

  • 修复测试文件出现在发行包中的问题

2.3.2 (2022-05-08)

  • 修复3.6测试并真正修复3.6支持

2.3.1 (2022-05-06)

  • 修复3.6支持

  • AioConfig:允许keepalive_timeout为None(感谢 @dnlserrano #933)

2.3.0 (2022-05-05)

  • 通过交换到AioAWSResponse和AioAWSRequest来修复编码问题,使其更像botocore

  • 修复异常映射

2.2.0 (2022-03-16)

  • 移除已弃用的API

  • 提升到botocore 1.24.21

  • 重新启用aiohttp.ClientPayloadError的重试

2.1.2 (2022-03-03)

  • 修复httpsession关闭调用

2.1.1 (2022-02-10)

  • 实现异步非阻塞自适应重试策略

2.1.0 (2021-12-14)

  • 提升到botocore 1.23.24

  • 修复aiohttp resolver配置参数 #906

2.0.1 (2021-11-25)

  • 撤销对_register_s3_events #867的意外重复(感谢 @eoghanmurray)

  • 支持自定义aiohttp连接器解析器类 #893(感谢 @orf)

  • 修复timestream查询 #902

2.0.0 (2021-11-02)

  • 提升到botocore 1.22.8

  • 关闭默认的 AIOBOTOCORE_DEPRECATED_1_4_0_APIS 环境变量以匹配botocore模块。请参阅1.4.0中的注释。

1.4.2 (2021-09-03)

  • 修复http会话中缺少close()方法(感谢 @terrycain

  • 修复verify=False的问题

1.4.1 (2021-08-24)

  • 将不兼容的更改放在 AIOBOTOCORE_DEPRECATED_1_4_0_APIS 环境变量之后。这意味着除非此环境变量设置为0,否则 #876 将不会工作。

1.4.0 (2021-08-20)

  • 通过配置修复重试 #877

  • 移除AioSession和get_session顶级名称以匹配 botocore

  • 更改抛出的异常以匹配 botocore 的异常,请参阅 映射

1.3.3 (2021-07-12)

  • 修复AioJSONParser #872

1.3.2 (2021-07-07)

1.3.1 (2021-06-11)

  • TCPConnector:将已弃用的ssl_context更改为ssl

  • 修复未等待的生成预签名URL调用 #868

1.3.0 (2021-04-09)

1.2.2 (2021-03-11)

  • 等待对异步方法 _load_creds_via_assume_role 的调用 #858(感谢 @puzza007

1.2.1 (2021-02-10)

  • 验证字符串现在正确传递给aiohttp.TCPConnector #851(感谢 @FHTMitchell

1.2.0 (2021-01-11)

  • 将botocore提升到 1.19.52

  • 使用传递给create_client的http_session_cls参数 #797

1.1.2 (2020-10-07)

  • 修复AioPageIterator搜索方法 #831(感谢 @joseph-jones

1.1.1 (2020-08-31)

  • 修复s3区域重定向错误 #825

1.1.0 (2020-08-18)

  • 将botocore提升到1.17.44

1.0.7 (2020-06-04)

  • 通过#816修复generate_db_auth_token

1.0.6 (2020-06-04)

  • 撤销__getattr__修复,因为它会破坏ddtrace

1.0.5 (2020-06-03)

  • 通过#812修复AioSession.get_service_data emit调用 #811

  • 通过#803修复异步__getattr__ #789

1.0.4 (2020-04-15)

  • 修复S3预签名Post不是异步的

1.0.3 (2020-04-09)

  • 修复使用凭证处理时的拼写错误

1.0.2 (2020-04-05)

  • 暂时禁用Client.__getattr__触发器 #789

1.0.1 (2020-04-01)

  • 修复了使用显式凭据进行签名请求的问题

1.0.0 (2020-03-31)

  • API破坏性更改:现在create_client的结果是一个必需的异步上下文类

  • 凭据刷新现在应该可以工作

  • generate_presigned_url现在与其他凭据方法一起是异步调用

  • Credentials.[access_key/secret_key/token]现在引发NotImplementedError,因为它们不会像botocore那样调用刷新。相反,应使用get_frozen_credentials异步方法

  • 升级botocore和extras

0.12.0 (2020-02-23)

  • 升级botocore和extras

  • 由于我们无法使用moto进行测试,并且它将很快不再受支持,因此将不再支持3.5

  • 为符合Python 3.8规范移除循环参数

  • 移除已弃用的AioPageIterator.next_page

0.11.1 (2020-01-03)

  • 修复了S3 Select等事件流API调用

0.11.0 (2019-11-12)

  • 用urllib3的等效项替换CaseInsensitiveDict #744(感谢@craigmccarter和@kevchentw的启发)

  • 升级botocore到1.13.14

  • 修复了不匹配的botocore方法替换

0.10.4 (2019-10-24)

  • 将AioBaseClient.close方法改为异步的 #724(感谢@bsitruk)

  • 升级awscli、boto3、botocore #735(感谢@bbrendon)

  • 将分页器切换到async_generator,添加result_key_iters(弃用next_page方法)

0.10.3 (2019-07-17)

  • 升级botocore和extras

0.10.2 (2019-02-11)

  • 修复了response-received触发事件 #682

0.10.1 (2019-02-08)

  • 使测试通过pytest 4.1 #669(感谢@yan12125)

  • 支持Python 3.7 #671(感谢@yan12125)

  • 更新RTD构建配置 #672(感谢@willingc)

  • 升级到botocore 1.12.91 #679

0.10.0 (2018-12-09)

  • 更新到botocore 1.12.49 #639(感谢@terrycain)

0.9.4 (2018-08-08)

  • 将ClientPayloadError作为可重试异常添加

0.9.3 (2018-07-16)

  • 将botocore更新到最新版本

0.9.2 (2018-05-05)

  • 将aiohttp需求升级以修复读取超时

0.9.1 (2018-05-04)

  • 修复了上一次发布中引入的超时错误

0.9.0 (2018-06-01)

  • 升级aiohttp到3.3.x

  • 移除不必要的set_socket_timeout

0.8.0 (2018-05-07)

  • 修复了分页问题 #573(感谢@adamrothman)

  • 通过moto启用了几个s3测试

  • 将botocore更新到最新版本

0.7.0 (2018-05-01)

  • 只是版本升级

0.6.1a0(2018-05-01)

  • 升级到aiohttp 3.1.x

  • 将测试切换到Python 3.5+

  • 切换到原生协程

  • 修复了非流式传输体的超时重试

0.6.0 (2018-03-04)

  • 升级到aiohttp>=3.0.0 #536(感谢@Gr1N)

0.5.3 (2018-02-23)

  • 修复了等待器 #523(感谢@dalazx)

  • 修复了conn_timeout #485

0.5.2 (2017-12-06)

  • 更新awscli依赖关系 #461

0.5.1 (2017-11-10)

  • 禁用压缩响应 #430

0.5.0 (2017-11-10)

  • 修复了botocore错误检查错误 #190

  • 更新支持的botocore需求为:>=1.7.28, <=1.7.40

  • 将aiohttp需求升级以正确支持压缩响应 #298

0.4.5 (2017-09-05)

  • 添加了SQS示例和测试 #336

  • 更改了requirements.txt结构 #336

  • 升级到botocore 1.7.4

  • 添加了DynamoDB示例和测试 #340

0.4.4 (2017-08-16)

  • 将支持的boto3版本添加到extras需求中 #324

0.4.3 (2017-07-05)

  • 将支持的awscli版本添加到extras需求中 #273(感谢@graingert)

0.4.2 (2017-07-03)

  • 更新支持的aiohttp需求为:>=2.0.4, <=2.3.0

  • 更新支持的botocore需求为:>=1.5.71, <=1.5.78

0.4.1 (2017-06-27)

  • 修复了重定向 #268

0.4.0 (2017-06-19)

  • 更新botocore需求为:botocore>=1.5.34, <=1.5.70

  • 修复了由于#245导致的读取超时

  • 实现了set_socket_timeout

0.3.3 (2017-05-22)

  • 切换到PEP 440版本解析器以支持“dev”版本

0.3.2 (2017-05-22)

  • 修复了botocore集成

  • 为aiohttp 2.x流支持提供临时修复

  • 更新botocore需求为:botocore>=1.5.34, <=1.5.52

0.3.1 (2017-04-18)

  • 修复了等待器支持

0.3.0 (2017-04-01)

  • 添加了对aiohttp>=2.0.4的支持(感谢@achimnol)

  • 更新botocore需求为:botocore>=1.5.0, <=1.5.33

0.2.3 (2017-03-22)

  • 更新botocore需求为:botocore>=1.5.0, <1.5.29

0.2.2 (2017-03-07)

  • 为*导入设置aiobotocore.__all__ #121(感谢@graingert)

  • 修复了head_object响应中的ETag #132

0.2.1 (2017-02-01)

  • 通过botocore标准化头并处理重定向 #115(感谢@Fedorof)

0.2.0 (2017-01-30)

  • 添加了对代理的支持(感谢@jjonek)

  • 移除AioConfig verify_ssl连接器参数,因为这是由create_client verify参数处理的

  • 移除AioConfig limit连接器参数,因为现在这是通过Config max_pool_connections属性处理的(注意默认值为10)

0.1.1 (2017-01-16)

  • botocore已更新到版本1.5.0

0.1.0 (2017-01-12)

  • 将超时传递给aiohttp.request以强制执行read_timeout #86(感谢@vharitonsky)(由于read_timeout启用更改而升级到下一个语义版本)

0.0.6 (2016-11-19)

  • 添加了对纯响应的强制执行 #57(感谢@rymir)

  • botocore已更新到版本1.4.73 #74(感谢@vas3k)

0.0.5 (2016-06-01)

  • 初始alpha版本发布

项目详情


发布历史 发布通知 | RSS 源

下载文件

下载适用于您平台文件的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

aiobotocore-2.15.1.tar.gz (107.0 kB 查看哈希)

上传时间

构建分发

aiobotocore-2.15.1-py3-none-any.whl (77.4 kB 查看哈希)

上传时间 Python 3

支持者