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-docs.pages.dev/
Supported today
mock_aws()usable aswithorasync 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
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 decorators
—
with/async with,@mock_aws,reset/remove_data, and theAWS_ENDPOINT_URLgotcha. - Server mode — run a local Moto server, endpoint-injection modes, and attaching to an existing server.
- Pandas and Polars —
s3://DataFrame I/O. - Examples — S3, DynamoDB, SQS, SNS, s3fs, and streaming reads.
- API reference —
mock_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
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aiomoto-0.5.2.tar.gz.
File metadata
- Download URL: aiomoto-0.5.2.tar.gz
- Upload date:
- Size: 17.9 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e434e64cf69254e76652b418352e6c8f172facb3b0736ed03182b417ea0c12fb
|
|
| MD5 |
6a78f230ce0af87f6d8f0892416e0f08
|
|
| BLAKE2b-256 |
793b3d77b8a3312ed6c38e8ef1a16ed1eb4f62c889de4672ceb5ddb99efc3cfe
|
File details
Details for the file aiomoto-0.5.2-py3-none-any.whl.
File metadata
- Download URL: aiomoto-0.5.2-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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b984e997ebc19ec17fda7761e8491c8790d858362ee16f0f21867a4ee40dc96
|
|
| MD5 |
3ef0985441fc59e12f04ca9d9b82030c
|
|
| BLAKE2b-256 |
ae62af1ed171305b1032e549155c80025a2fc8b8c15b938fa64e756304607895
|