Skip to main content

FastAPI ORM Extensions

Project description

FastApi ORM Extensions

PyPI - Version PyPI - Python Version


Table of Contents

Installation

pip install fastapi-orm-ext

or

uv add fastapi-orm-ext

or

poetry add fastapi-orm-ext

etc

About

This library provides preset base class for your tables and repositories.

Use TableBase like so:

from fastapi_orm_ext.table import TableBase
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column


class Table(TableBase, DeclarativeBase):
    # you can use this class in alembic's env.py file
    # to specify target_metadata for example
    __abstract__: bool = True


class User(Table):
    name: Mapped[str] = mapped_column(nullable=False)
    email: Mapped[str | None] = mapped_column(nullable=True)

TableBase consists of four mixins:

  • NameConventionMixin: handles name convention;
  • TableNameMixin: takes model's class name and convert it to snake case, use this name while creating table in DB;
  • TimestampsMixin: handles when record was created and updated;
  • UUIDPrimaryKeyMixin: makes PK of UUID4 type.

If you don't need one or more of following mixins, create your own TableBase.

Use Repository like so:

from fastapi_orm_ext.repository import RepositoryBase
from pydantic import BaseModel

from app.tables import User
# the variant to get async session
from app.utils import async_session


class CreateUserSchema(BaseModel):
    name: str
    email: str | None


class UserRepository(RepositoryBase[User]):
    # specify the model to interact with
    model = User
    # choose flush or commit
    auto_flush = True
    auto_commit = False

    # there you can define your methods
    def get_by_email(self, email: str) -> User | None:
        return (
            await self.session.execute(
                statement=select(self.model).where(self.model.email == email),
            )
        ).scalar()

# initialize UserRepository
repo = UserRepository(async_session)
# create new record in users table
data = CreateUserSchema(name="Bob", email="bob@gmail.com")
await repo.create(data)

# get record in users table by Bob's email
res: list[User] = await repo.get_by_email("bob@gmail.com")
print(res)

To see what else RepositoryBase can do, visit the source code of interface RepositoryBase inheriting from

License

fastapi-orm-ext is distributed under the terms of the MIT license.

Contribution

Install repository:

https://github.com/pkozhem/fastapi-orm-ext.git

Create virtual environment, activate it and install dependencies:

uv venv
source .venv/bin/activate
uv sync

Create new branch from actual tag:

git checkout <tag>
git branch pull-<fix, feat, impr>: Short branch desc

Pull your changes and create pull request:

git pull origin <your_branch_name>

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_orm_ext-0.1.0.tar.gz (24.6 kB view details)

Uploaded Source

Built Distribution

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

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: fastapi_orm_ext-0.1.0.tar.gz
  • Upload date:
  • Size: 24.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.28.1

File hashes

Hashes for fastapi_orm_ext-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a6b3732198f27547a5a3152656094cb812d49cc92e96f6e1b046e30156963155
MD5 28a4d5cc50008e383fc83638c7db30c2
BLAKE2b-256 43892110fe320a74d1b1a9c288e7dc639bf044f2e03d0e864ca3ca8d262b95f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastapi_orm_ext-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c19a02307bd4eadfdbe57f63f000c013b320aaefa77bfe950bb45559da2dcd1b
MD5 0ebc41f020ff28b5545461f5b326bff6
BLAKE2b-256 5688feb1fdfd398343c38bffe530c63c9453eff11e991a04aa229a7b37f18149

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