使用botocore和aiohttp的aws服务异步客户端
项目描述
使用 botocore 和 aiohttp/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中运行 Pylance、pyright 或 mypy 以进行类型检查以及代码补全。
对于 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)
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)
1.2.1 (2021-02-10)
验证字符串现在正确传递给aiohttp.TCPConnector #851(感谢 @FHTMitchell)
1.2.0 (2021-01-11)
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版本发布
项目详情
下载文件
下载适用于您平台文件的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分发
构建分发
aiobotocore-2.15.1.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1f9f16eec2a3da32df162b5db12da779ec6d6c6311715c936cad511f436efa74 |
|
MD5 | b55219d5d85ce51c15b0e7979b4a49d8 |
|
BLAKE2b-256 | d74e5a4f10fe0f61dc4e59fcedcfcbf0ee997003d1fded0cfcb14fbd1851905b |
aiobotocore-2.15.1-py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0f738cde74108553b753b24655094289a3c7ea0f0f179ed1c0f8cea488999a35 |
|
MD5 | 372e233978deca6fb4c623e03ee47faf |
|
BLAKE2b-256 | dfb8a0fc9cf540d15f4962448c7ec097e99196b4ddd2a988d98b3d4236cbc89e |