Skip to main content

fastapi-toolkit

PyPI version Python License: MIT

Common toolkit for FastAPI + SQLAlchemy 2.0 projects: async DB sessions, base CRUD, settings with AWS Secrets Manager.

Features

  • Async database sessions — multi-database support with context-managed sessions
  • Base CRUD — generic async CRUD operations (list, get, create, update, delete, get_or_create)
  • Declarative base model — SQLAlchemy declarative base with automatic table naming
  • Settings management — pydantic-settings with cached AWS Secrets Manager integration
  • Type-safe — full type hints with py.typed marker

Installation

pip install fastapi-toolkit

With AWS Secrets Manager support:

pip install fastapi-toolkit[aws]

Quick Start

Database Setup

from fastapi_toolkit import init_db, async_session

# Initialize on app startup
init_db("postgresql+asyncpg://user:pass@localhost/mydb")

# Use sessions
async with async_session() as session:
    result = await session.execute(...)

Models

from sqlalchemy import String
from sqlalchemy.orm import Mapped, mapped_column
from fastapi_toolkit import BaseModel


class User(BaseModel):
    __table_name__ = "users"

    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str] = mapped_column(String(100))
    email: Mapped[str] = mapped_column(String(200))

CRUD

from fastapi_toolkit import BaseCRUD

user_crud = BaseCRUD(User)

# List
users = await user_crud.list()

# Get by condition
user = await user_crud.get(User.id == 1)

# Create
user = await user_crud.create(name="Alice", email="alice@example.com")

# Update
await user_crud.update(User.id == 1, name="Bob")

# Delete
await user_crud.delete(User.id == 1)

# Get or create
user, created = await user_crud.get_or_create(
    User.email == "alice@example.com",
    name="Alice",
    email="alice@example.com",
)

Settings with AWS Secrets Manager

from fastapi_toolkit import BaseSettings, SecretSettings, EscapedSecretStr


class MySecrets(SecretSettings):
    db_password: EscapedSecretStr = None
    api_key: str = ""


class Settings(BaseSettings[MySecrets]):
    project: str = "myapp"
    environment: str = "dev"
    region: str = "us-east-1"
    secret_model: type = MySecrets


settings = Settings()

# Secrets are loaded from AWS Secrets Manager, cached with TTL
secrets = await settings.get_secret()

Multi-Database Support

from fastapi_toolkit import init_db, BaseCRUD

# Initialize multiple databases
init_db("postgresql+asyncpg://localhost/primary", database="default")
init_db("postgresql+asyncpg://localhost/analytics", database="analytics")


# Use specific database in CRUD
class AnalyticsCRUD(BaseCRUD):
    database = "analytics"

analytics_crud = AnalyticsCRUD(Event)

API Reference

init_db(database_dsn, database="default", engine_kwargs=None, session_maker_kwargs=None)

Initialize an async database engine and session factory.

async_session(exists_session=None, database="default")

Async context manager for database sessions. Reuses existing session if provided.

BaseCRUD(model)

Generic async CRUD class with methods:

Method Description
list(condition, joins, order_by, limit, offset, fields, unique, session) List records with filtering and pagination
count(condition, joins, session) Count matching records
get(condition, joins, session) Get single record
create(session, commit, **kwargs) Create a record
bulk_create(items, session, commit) Bulk create records
update(condition, session, commit, **kwargs) Update matching records
delete(condition, session, commit) Delete matching records
get_or_create(condition, session, commit, **defaults) Get existing or create new

BaseSettings[T]

Pydantic settings with cached AWS Secrets Manager:

Property / Method Description
secret_name Auto-generated secret name: {environment}/{project}
await get_secret() Load and cache secret (non-blocking)

Development

# Clone the repository
git clone https://github.com/timaakulich/fastapi-toolkit.git
cd fastapi-toolkit

# Install dev dependencies
pip install -e ".[dev]"

# Run linter
ruff check .

# Run type checker
mypy fastapi_toolkit

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is licensed under the MIT License — see the LICENSE file for details.

Metadata

Release files for fastapi-toolkit 0.1.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fastapi-toolkit 0.1.5
File Size Uploaded
fastapi_toolkit-0.1.5.tar.gz 10.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fastapi-toolkit 0.1.5
File Interpreter ABI Platform
fastapi_toolkit-0.1.5-py3-none-any.whl Python 3 none any Details

Total release size: 24.4 kB

Release files / fastapi_toolkit-0.1.5.tar.gz

Download URL fastapi_toolkit-0.1.5.tar.gz
Size 10.2 kB
Tags Source
SHA-256 checksum
How to use checksums
51ceada4b3f67a8e95267e43dcc1e1ee4c28674f803798b60d2f82ccd8c11682
BLAKE2b-256 checksum
How to use checksums
8a5f406d2d95fc8c7c6ed86c44d34eab2b05a86b810367b733a767682f282fb2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release files / fastapi_toolkit-0.1.5-py3-none-any.whl

Download URL fastapi_toolkit-0.1.5-py3-none-any.whl
Size 14.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
633ba331d2172c976e038469d210656b0b6fb7942738f805c24a0af922595831
BLAKE2b-256 checksum
How to use checksums
8596fdd9633cab4cb7127c3d2d33632eab9029414fc9d9f8e197865ba6ad7f82
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release history Release notifications | RSS feed

This release

0.1.5 This release

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.26

1 release file

0.0.25

1 release file

0.0.24

1 release file

0.0.23

1 release file

0.0.22

1 release file

0.0.21

1 release file

0.0.20

1 release file

0.0.19

1 release file

0.0.18

1 release file

0.0.17

1 release file

0.0.16

1 release file

0.0.15

1 release file

0.0.14

1 release file

0.0.13

1 release file

0.0.12

1 release file

0.0.11

1 release file

0.0.10

1 release file

0.0.9

1 release file

0.0.8

1 release file

0.0.7

1 release file

0.0.6

1 release file

0.0.5

1 release file

0.0.4

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page