跳转到主要内容

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

项目描述

https://travis-ci.cn/aio-libs/aiobotocore.svg?branch=master https://codecov.io/gh/aio-libs/aiobotocore/branch/master/graph/badge.svg Documentation Status https://img.shields.io/pypi/v/aiobotocore.svg Chat on Gitter

使用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的实现方式,即使服务未在上文中列出,您也可以将任何放在await前面使其异步,例如,await client.list_named_queries()将异步列出所有命名的Athena查询。

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

运行测试

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

$ cd aiobotocore
$ export AWS_ACCESS_KEY_ID=xxx
$ export AWS_SECRET_ACCESS_KEY=xxx
$ pipenv sync --dev

执行测试套件

$ py.test -v tests

邮件列表

https://groups.google.com/forum/#!forum/aio-libs

要求

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)

  • 通过配置修复重试功能 #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 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 (52.5 kB 查看哈希值

上传时间

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面