Skip to main content

A powerful, extensible, and async-ready cloud object storage backend for FastAPI.

Project description

fastapi-async-storages

A powerful, extensible, and async-ready cloud object storage backend for FastAPI.

Drop-in, plug-and-play cloud storage for your FastAPI apps; with full async support.
Inspired by fastapi-storages, built on modern async patterns using aioboto3.

Features

  • Fully asynchronous storage interface designed for FastAPI applications
  • Async S3 backend powered by aioboto3
  • SQLAlchemy and SQLModel integration
  • Typed and extensible design
  • Supports FastAPI dependency injection

Installation

uv add fastapi-async-storages
# for s3 support:
uv add "fastapi-async-storages[s3]"

Documentation

Full documentation is available on:
https://fastapi-async-storages.readthedocs.io

Example: FastAPI

from fastapi import FastAPI, UploadFile
from sqlalchemy import Column, Integer
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
from sqlalchemy.orm import sessionmaker, declarative_base
from async_storages import S3Storage
from async_storages.integrations.sqlalchemy import FileType

Base = declarative_base()

app = FastAPI()
storage = S3Storage(...)
engine = create_async_engine("sqlite+aiosqlite:///test.db", echo=True)

# create AsyncSession factory
AsyncSessionLocal = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)

class Example(Base):
    __tablename__ = "example"

    id = Column(Integer, primary_key=True)
    file = Column(FileType(storage=storage))

# create tables inside an async context
@app.on_event("startup")
async def startup():
    async with engine.begin() as conn:
        await conn.run_sync(Base.metadata.create_all)

@app.post("/upload/")
async def create_upload_file(file: UploadFile):
    file_name = f"uploads/{file.filename}"
    # upload before commit due to the sqlalchemy binding being sync
    await storage.upload(file.file, file_name)

    example = Example(file=file)
    async with AsyncSessionLocal() as session:
        session.add(example)
        await session.commit()
        return {"filename": example.file.name}

License

MIT © 2025 ^_^ @stabldev

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

fastapi_async_storages-0.1.0.tar.gz (6.3 kB view details)

Uploaded Source

Built Distribution

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

fastapi_async_storages-0.1.0-py3-none-any.whl (8.6 kB view details)

Uploaded Python 3

File details

Details for the file fastapi_async_storages-0.1.0.tar.gz.

File metadata

File hashes

Hashes for fastapi_async_storages-0.1.0.tar.gz
Algorithm Hash digest
SHA256 803c346684dee33c583fb145567852987ec94816766235742059d367e44ca559
MD5 5d310299f65a19894e1ae589dff3880f
BLAKE2b-256 280b14dbf4bffa3a10cea742ebfc7f37bda97f5534afb479c735062a38f20248

See more details on using hashes here.

File details

Details for the file fastapi_async_storages-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for fastapi_async_storages-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6d66ceedbd9ba74e8e8907fd1d3feb95f1d2ca9f2ec2f7a71b963b3b0b297824
MD5 26002c401468f44ec191393c89abc13d
BLAKE2b-256 729b596e1933205b5e9f822d29c0a8fb4a46049ca160ad6b72bc8c2d17dbc484

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