Skip to main content

Async boto3 wrapper

Project description

Async AWS SDK for Python

https://img.shields.io/pypi/v/aioboto3.svg https://travis-ci.com/terrycain/aioboto3.svg?branch=master Documentation Status Updates

This package is mostly just a wrapper combining the great work of boto3 and aiobotocore.

aiobotocore allows you to use near enough all of the boto3 client commands in an async manner just by prefixing the command with await.

With aioboto3 you can now use the higher level APIs provided by boto3 in an asynchronous manner. Mainly I developed this as I wanted to use the boto3 dynamodb Table object in some async microservices.

While all resources in boto3 should work I havent tested them all, so if what your after is not in the table below then try it out, if it works drop me an issue with a simple test case and I’ll add it to the table.

Services

Status

DynamoDB Service Resource

Tested and working

DynamoDB Table

Tested and working

S3

Working

Kinesis

Working

SSM Parameter Store

Working

Athena

Working

Example

Simple example of using aioboto3 to put items into a dynamodb table

import asyncio
import aioboto3
from boto3.dynamodb.conditions import Key


async def main():
    async with aioboto3.resource('dynamodb', region_name='eu-central-1') as dynamo_resource:
        table = dynamo_resource.Table('test_table')

        await table.put_item(
            Item={'pk': 'test1', 'col1': 'some_data'}
        )

        result = await table.query(
            KeyConditionExpression=Key('pk').eq('test1')
        )

        print(result['Items'])

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

# Outputs:
#  [{'col1': 'some_data', 'pk': 'test1'}]

Things that either dont work or have been patched

As this library literally wraps boto3, its inevitable that some things won’t magically be async.

Fixed:

  • s3_client.download_file* This is performed by the s3transfer module. – Patched with get_object

  • s3_client.upload_file* This is performed by the s3transfer module. – Patched with custom multipart upload

  • s3_client.copy This is performed by the s3transfer module. – Patched to use get_object -> upload_fileobject

  • dynamodb_resource.Table.batch_writer This now returns an async context manager which performs the same function

Amazon S3 Client-Size Encryption

Boto3 doesn’t support AWS Client-Side encryption so until they do I’ve added basic support for it. Docs here CSE

CSE requires the python cryptography library so if you do pip install aioboto3[s3cse] that’ll also include cryptography.

This library currently supports Client-side encryption using KMS-Managed master keys performing envelope encryption using either AES/CBC/PKCS5Padding or preferably AES/GCM/NoPadding. The files generated are compatible with the Java Encryption SDK so I will assume they are compatible with the Ruby, PHP, Go and C++ libraries as well.

Non-KMS managed keys are not yet supported but if you have use of that, raise an issue and i’ll look into it.

Documentation

Docs are here - https://aioboto3.readthedocs.io/en/latest/

Examples here - https://aioboto3.readthedocs.io/en/latest/usage.html

Features

  • Closely mimics the usage of boto3.

Todo

  • More Examples

  • Set up docs

  • Look into monkey-patching the aws xray sdk to be more async if it needs to be.

Credits

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template. It also makes use of the aiobotocore and boto3 libraries. All the credit goes to them, this is mainly a wrapper with some examples.

History

6.1.0 (2019-02-13)

  • nvllsvm cleaned up the packaging, requirements, travis, sphinx…

  • Unvendored aiobotocore

6.0.1 (2018-11-22)

  • Fixed dependencies

6.0.0 (2018-11-21)

  • Fixed readthedocs

  • Vendored aiobotocore for later botocore version

5.0.0 (2018-10-12)

  • Updated lots of dependencies

  • Changed s3.upload_fileobj from using put_object to doing a multipart upload

  • Created s3.copy shim that runs get_object then does multipart upload, could do with a better implementation though.

4.1.2 (2018-08-28)

  • updated pypi credentials

4.1.0 (2018-08-28)

  • aiobotocore dependancy bump

4.0.2 (2018-08-03)

  • Dependancy bump

4.0.0 (2018-05-09)

  • Dependancy bump

  • Now using aiobotocore 0.8.0

  • Dropped < py3.5 support

  • Now using async def / await syntax

  • Fixed boto3 dependancy so it only uses a boto3 version supported by aiobotocore’s max botocore dependancy

  • Important, `__call__` in `AIOServiceAction` tries to yield from a coroutine in a non-coroutine, this code shouldn’t be hit anymore but I can’t guarantee that, so instead `__call__` was duplicated and awaited properly so “should” be fine. Credit goes to Arnulfo Solis for doing PR.

3.0.0 (2018-03-29)

  • Dependancy bump

  • Asyncified dynamodb Table Batch Writer + Tests

  • Added batch writer examples

  • Now using aiobotocore 0.6.0

2.2.0 (2018-01-24)

  • Dependancy bump

2.1.0 (2018-01-23)

  • Dependancy bump

  • Fix bug where extras isn’t packaged

2.0.0 (2017-12-30)

  • Patched most s3transfer functions

1.1.2 (2017-11-29)

  • Fixup of lingering GPL license texts

0.1.0 (2017-09-25)

  • First release on PyPI.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aioboto3-6.2.2.tar.gz (41.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aioboto3-6.2.2-py2.py3-none-any.whl (23.0 kB view details)

Uploaded Python 2Python 3

File details

Details for the file aioboto3-6.2.2.tar.gz.

File metadata

  • Download URL: aioboto3-6.2.2.tar.gz
  • Upload date:
  • Size: 41.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.1

File hashes

Hashes for aioboto3-6.2.2.tar.gz
Algorithm Hash digest
SHA256 2089f20245145ffa29ba50a0516048c290d48c045a372c056c3823403a58cc09
MD5 1817edc81a3b5e04f9cf5f79399bf6f0
BLAKE2b-256 1473435fc93390b2dae3fa040e40acefe00b788922d1b5008fb291e9384ee864

See more details on using hashes here.

File details

Details for the file aioboto3-6.2.2-py2.py3-none-any.whl.

File metadata

  • Download URL: aioboto3-6.2.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 23.0 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.1

File hashes

Hashes for aioboto3-6.2.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 c099ab0ed63c24c1723dccc1811052c42493617dc14cbf99d37f3039e3012adc
MD5 c86e4f96f2efa104d4041d17895888a8
BLAKE2b-256 f2694f90c70721cf1024ee1f92426bad5ad49427bfaf4aa743c54d81c1bbe712

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page