使用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的实现方式,即使服务未在上文中列出,您也可以将任何
如果某个服务未在此列出,并且您需要一些测试或示例,请随时提出问题。
运行测试
请确保您已安装开发要求,并且可以通过环境变量访问您的亚马逊密钥和密码。
$ cd aiobotocore $ export AWS_ACCESS_KEY_ID=xxx $ export AWS_SECRET_ACCESS_KEY=xxx $ pipenv sync --dev
执行测试套件
$ py.test -v tests
邮件列表
要求
awscli
awscli依赖于botocore的单个版本,但是aiobotocore只支持特定范围的botocore版本。为确保您安装了最新版本的awscli,该版本与您特定的aiobotocore和botocore组合兼容,请使用
pip install -U aiobotocore[awscli]
更改
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 Presigned Post 不会异步执行的问题
1.0.3 (2020-04-09)
修复使用凭证处理时出现的错别字
1.0.2 (2020-04-05)
暂时禁用 Client.__getattr__ emit #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 一样调用 refresh。相反,应使用 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)
将分页器切换到异步生成器,添加 result_key_iters(弃用 next_page 方法)
0.10.3 (2019-07-17)
升级 botocore 和 extras
0.10.2 (2019-02-11)
修复响应接收事件 #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 require 中 #324
0.4.3 (2017-07-05)
将 awscli 的支持版本添加到 extras require 中 #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 导致的 read_timeout
实现 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)
修复 Waiter 支持
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-chrisglass-1.4.1.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 31f3750a222bd4c7cca46cd090fad9594480a8918e20a36b250f55840d062aac |
|
MD5 | f38248c03d2bf46fd14c52d6d7eaadb2 |
|
BLAKE2b-256 | 9c68cbcfd86233447322abec4770871b20ee3d81d1f14453c17aca1bb18d5e46 |