Skip to main content

aioboto3 client manager. Manage aioboto3 sessions and clients without context managers (with statements).

Project description

AIOBoto3 Client Manager

Manage and cache aioboto3 clients without context managers.

Installation

$ pip install aioboto3-cm

Tutorial

import asyncio

from aioboto3_cm import AIOBoto3CM

# this can be created outside of a coroutine!
abcm = AIOBoto3CM()

async def main():
    sts_client = await abcm.client("sts")
    resp = await sts_client.get_caller_identity()
    print(resp)
    # clients are cached and reused
    same_sts_client = await abcm.client("sts") 
    # close the client before exiting
    await abcm.close("sts") 
    # you can also close all clients at once if you created several
    await abcm.close_all() 


asyncio.run(main())

Other useful and more advanced feature include:

  • aioboto3-cm can keep track of several named aioboto3 Sessions, client groups, and clients.
  • Client groups are a construct used to arbitrarily group clients if needed.
  • The default session refers to the session that is referenced if a session name is not specified in the client function. Same for the default client group.
  • The default session and client group are automatically created if not specified when the first client is created.
  • Setting default client args at the class instance level
  • Registering the default session manually
  • Registering other named sessions from tools like aioboto3-assume for auto-refreshing, indefinite sessions.
  • Async Safe - Use in multiple concurrent coroutines. Not thread safe

A more advanced example outlining all of these features:

import asyncio

from aioboto3 import Session
from aioboto3_cm import AIOBoto3CM
from aioboto3_assume import assume_role
from botocore.config import Config


abcm = AIOBoto3CM(
    default_client_kwargs={ # set defaults when creating clients
        "config": Config(
            retries={
                "total_max_attempts": 10
            }
        )
    }
)
session = Session(region_name="us-east-1")
# Register a default session 
abcm.register_session(session)
# Add sessions for things like cross accounts roles
abcm.register_session(
    session=assume_role( # use aioboto3_assume.assume_role for auto-refreshing credentials
        source_session=session,
        assume_role_kwargs={
            "RoleArn": "arn:aws:iam::123412341234:role/my_role",
            "RoleSessionName": "my-role-session"
        }
    ),
    abcm_session_name="123412341234"
)

async def main():
    # This client will have the default Config object we configured above
    sts_client = await abcm.client("sts") 
    # This client is for the cross account session, and will be apart of a new group "no_retries"
    cross_account_sts_client = await abcm.client(
        "sts", 
        config=Config(
            retries={
                "total_max_attempts": 1
            }
        ),
        abcm_session_name="123412341234", # this will use the cross account session we registered earlier
        abcm_client_group="no_retries" # Will be kept under a specific client group
    )
    # This are cached and can be retrieved using the same service, region, session name, and client group name
    same_cross_account_sts_client = await abcm.client(
        "sts", 
        config=Config( # Note that since this client exists, any client KWArgs do not do anything
            retries={
                "total_max_attempts": 10
            }
        ),
        abcm_session_name="123412341234",
        abcm_client_group="no_retries"
    )
    
    # Make sure to close all clients before exiting. 
    await abcm.close_all() 


asyncio.run(main())

FastAPI Tutorial

aioboto3-cm can be integrated into FastAPI with the lifecycle feature.

This assumes you will be using aioboto3-cm throughout the life of your FastAPI app as a cache for aioboto3 clients.

from contextlib import asynccontextmanager

from aioboto3_cm import AIOBoto3CM
from fastapi import FastAPI

abcm = AIOBoto3CM()

@asynccontextmanager
async def lifespan(app: FastAPI):
    try:
        # Nothing needed for startup. You could prefill sessions or clients...
        yield
    finally:
        # Clean up all clients before exiting
        await abcm.close_all()


app = FastAPI(lifespan=lifespan)

@app.get("/my_role")
async def my_role():
    sts_client = await abcm.client("sts")
    result = await sts_client.get_caller_identity()

    return {"result": result}

Changelog

Changelog for aioboto3-cm. All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.1.1] - 2026-01-21

Fixed

  • aioboto3_cm.AIOBoto3CM.client - method now propagates the exception that was raised when trying to create the aioboto3 client.

[0.1.0] - 2026-01-19

Initial release.

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

aioboto3_cm-0.1.1rc1.tar.gz (13.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_cm-0.1.1rc1-py3-none-any.whl (12.4 kB view details)

Uploaded Python 3

File details

Details for the file aioboto3_cm-0.1.1rc1.tar.gz.

File metadata

  • Download URL: aioboto3_cm-0.1.1rc1.tar.gz
  • Upload date:
  • Size: 13.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for aioboto3_cm-0.1.1rc1.tar.gz
Algorithm Hash digest
SHA256 7a64ab2af250e507e6ee18952f51c6432b6dd04dd27342b1dd33adfdafa92eec
MD5 1333a8bd652041d833cfb71c2b49ad6b
BLAKE2b-256 efd7ca0afd6f3e171ff8fb9f7552d4239b0079f8adda5f1644552434be3cfe5c

See more details on using hashes here.

File details

Details for the file aioboto3_cm-0.1.1rc1-py3-none-any.whl.

File metadata

  • Download URL: aioboto3_cm-0.1.1rc1-py3-none-any.whl
  • Upload date:
  • Size: 12.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for aioboto3_cm-0.1.1rc1-py3-none-any.whl
Algorithm Hash digest
SHA256 87df0492dd5b06412aee3e2d738bbbaefdcfec5ec56d7b7232171e9f2322266e
MD5 dd7ccc32750f6b24263fb43413555a1c
BLAKE2b-256 27d0dd3cc5af33e488250e1ab72e8cbac8caa2ef7b0684637d94ee0f7f625b75

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