Skip to main content

Moto-style AWS service mocks for aiobotocore

Project description

aiomoto

aiomoto is Moto for aiobotocore (while staying compatible with classic botocore / boto3). It adapts Moto's stubber so async and sync clients share the same in-memory backend: you can write to a mock S3 bucket with boto3 and read it back via aiobotocore in the same process.

📖 Full documentation: https://aiomoto.pages.dev/

Supported today

  • mock_aws() usable as with or async with, guarding against real HTTP requests.
  • Actively exercised in tests: S3 (CRUD + listings + streaming reads), DynamoDB (create/describe/put/get), Secrets Manager, SES, SNS, SQS, KMS, STS, Lambda, Events, Kafka/MSK, and s3fs async integration — all sharing one Moto backend between sync boto3/botocore and async aiobotocore clients.
  • Other Moto services often work out of the box through the same patch layer; if you hit a service-specific gap, open an issue with a minimal repro so we can add a focused slice.

Installation

pip install aiomoto
# or, in a uv project:
uv add aiomoto

aiomoto re-exposes Moto's service extras (for example aiomoto[s3], aiomoto[dynamodb], or aiomoto[all]), plus aiomoto-specific extras (aiomoto[server], aiomoto[pandas], aiomoto[polars]). See the installation guide for details.

Usage

Use aiomoto.mock_aws as a drop-in replacement for Moto's mock_aws that works with both synchronous boto3/botocore clients and asynchronous aiobotocore clients in the same process. It supports with, async with, and decorating sync/async callables.

import boto3
from aiobotocore.session import AioSession
from aiomoto import mock_aws


async def demo() -> None:
    async with mock_aws():
        # Write with a synchronous boto3 client.
        boto3.client("s3", region_name="us-east-1").create_bucket(Bucket="example")

        # Read it back with an async aiobotocore client.
        session = AioSession()
        async with session.create_client("s3", region_name="us-east-1") as s3:
            result = await s3.list_buckets()
            assert any(b["Name"] == "example" for b in result["Buckets"])

The documentation covers more:

  • Contexts and decoratorswith / async with, @mock_aws, reset / remove_data, and the AWS_ENDPOINT_URL gotcha.
  • Server mode — run a local Moto server, endpoint-injection modes, and attaching to an existing server.
  • Pandas and Polarss3:// DataFrame I/O.
  • Examples — S3, DynamoDB, SQS, SNS, s3fs, and streaming reads.
  • API referencemock_aws, mock_aws_decorator, AutoEndpointMode, and the exception types.

Motivation

Like many others I've wanted to use Moto with aiobotocore but found that wasn't supported. The motivation page explains the background and why aiomoto avoids depending on Moto's server mode by default.

Limitations

aiomoto keeps version ranges narrow and tested together, and a few integrations (notably pandas/polars S3 I/O) only work in server mode. See the limitations page for the full list, including free-threaded CPython support.

Project details


Download files

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

Source Distribution

aiomoto-0.5.3.tar.gz (18.0 kB view details)

Uploaded Source

Built Distribution

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

aiomoto-0.5.3-py3-none-any.whl (19.6 kB view details)

Uploaded Python 3

File details

Details for the file aiomoto-0.5.3.tar.gz.

File metadata

  • Download URL: aiomoto-0.5.3.tar.gz
  • Upload date:
  • Size: 18.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.17 {"installer":{"name":"uv","version":"0.11.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for aiomoto-0.5.3.tar.gz
Algorithm Hash digest
SHA256 78a1a929a8ad7855460113eae71785cf4b15610c33b38b3432d2c1f54055eada
MD5 ecd805ed6e4bbb3b3677d87640d29bbe
BLAKE2b-256 6e12ca1bbf7b65c10902b9d7d784d3209ba6391e12879ca52648066e2e350e1b

See more details on using hashes here.

File details

Details for the file aiomoto-0.5.3-py3-none-any.whl.

File metadata

  • Download URL: aiomoto-0.5.3-py3-none-any.whl
  • Upload date:
  • Size: 19.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.17 {"installer":{"name":"uv","version":"0.11.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for aiomoto-0.5.3-py3-none-any.whl
Algorithm Hash digest
SHA256 9a08ac1879c7111e88a9f5ab639c6e9c50903e728da09a760111afd49703ffdb
MD5 4ac22362d8a25ddd34cc9c8d868b5cfc
BLAKE2b-256 5b02f2a1c2ab94c7935a37416885a80c8d959e3d214ad7da0f52f625e56615a5

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