Name | fastapi-orm-ext JSON |
Version |
0.0.5
JSON |
| download |
home_page | None |
Summary | FastAPI ORM Extensions |
upload_time | 2025-07-18 14:34:03 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.13 |
license | None |
keywords |
extensions
fastapi
orm
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# FastApi ORM Extensions
[](https://pypi.org/project/fastapi-orm-ext)
[](https://pypi.org/project/fastapi-orm-ext)
-----
## Table of Contents
- [About](#About)
- [Installation](#installation)
- [License](#license)
- [Contribution](#contribution)
## About
This library provides preset base class for your tables and repositories.
#### Use TableBase like so:
```python
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, DeclarativeBase):
name: Mapped[str] = mapped_column(nullable=False)
email: Mapped[str | None] = mapped_column(nullable=True)
```
TableBase consists of four mixins:
- NameConventionMixin: handle 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.
#### Use Repository like so:
```python
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 get_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
## Installation
```bash
pip install fastapi-orm-ext
```
or
```bash
uv add fastapi-orm-ext
```
or
```bash
poetry add fastapi-orm-ext
```
etc
## License
`fastapi-orm-ext` is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license.
## Contribution
Install repository:
```bash
https://github.com/pkozhem/fastapi-orm-ext.git
```
Create virtual environment, activate it and install dependencies:
```bash
uv venv
source .venv/bin/activate
uv sync
```
Create new branch from actual tag:
```bash
git checkout <tag>
git branch pull-<fix, feat, impr>: Short branch desc
```
Pull your changes and create pull request:
```bash
git pull origin <your_branch_name>
```
Raw data
{
"_id": null,
"home_page": null,
"name": "fastapi-orm-ext",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.13",
"maintainer_email": null,
"keywords": "extensions, fastapi, orm",
"author": null,
"author_email": "Pavel Kozhemjachenko <pkozhem@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/3c/e2/55f911c8ed5b4da3c5963daf89451afec7878f824751405363a736497ba9/fastapi_orm_ext-0.0.5.tar.gz",
"platform": null,
"description": "# FastApi ORM Extensions\n\n[](https://pypi.org/project/fastapi-orm-ext)\n[](https://pypi.org/project/fastapi-orm-ext)\n\n-----\n\n## Table of Contents\n- [About](#About)\n- [Installation](#installation)\n- [License](#license)\n- [Contribution](#contribution)\n\n## About\nThis library provides preset base class for your tables and repositories.\n#### Use TableBase like so:\n```python\nfrom fastapi_orm_ext.table import TableBase\nfrom sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column\n\n\nclass Table(TableBase, DeclarativeBase):\n # you can use this class in alembic's env.py file\n # to specify target_metadata for example\n __abstract__: bool = True\n\n\nclass User(Table, DeclarativeBase):\n name: Mapped[str] = mapped_column(nullable=False)\n email: Mapped[str | None] = mapped_column(nullable=True)\n```\n\nTableBase consists of four mixins:\n- NameConventionMixin: handle name convention;\n- TableNameMixin: takes model's class name and convert it to snake case, use this name while creating table in DB;\n- TimestampsMixin: handles when record was created and updated;\n- UUIDPrimaryKeyMixin: makes PK of UUID4 type.\n\n#### Use Repository like so:\n```python\nfrom fastapi_orm_ext.repository import RepositoryBase\nfrom pydantic import BaseModel\n\nfrom app.tables import User\n# the variant to get async session\nfrom app.utils import get_async_session()\n\n\nclass CreateUserSchema(BaseModel):\n name: str\n email: str | None\n\n\nclass UserRepository(RepositoryBase[User]):\n # specify the model to interact with\n model = User\n # choose flush or commit\n auto_flush = True\n auto_commit = False\n\n # there you can define your methods\n def get_by_email(self, email: str) -> User | None:\n return (\n await self.session.execute(\n statement=select(self.model).where(self.model.email == email),\n )\n ).scalar()\n\n# initialize UserRepository\nrepo = UserRepository(async_session)\n# create new record in users table\ndata = CreateUserSchema(name=\"Bob\", email=\"bob@gmail.com\")\nawait repo.create(data)\n\n# get record in users table by Bob's email\nres: list[User] = await repo.get_by_email(\"bob@gmail.com\")\nprint(res)\n```\n\nTo see what else RepositoryBase can do, visit the source code of interface RepositoryBase inheriting from\n\n## Installation\n\n```bash\npip install fastapi-orm-ext\n```\nor\n```bash\nuv add fastapi-orm-ext\n```\nor\n```bash\npoetry add fastapi-orm-ext\n```\netc\n\n\n## License\n\n`fastapi-orm-ext` is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license.\n\n\n## Contribution\nInstall repository:\n```bash\nhttps://github.com/pkozhem/fastapi-orm-ext.git\n```\n\nCreate virtual environment, activate it and install dependencies:\n```bash\nuv venv\nsource .venv/bin/activate\nuv sync\n```\n\nCreate new branch from actual tag:\n```bash\ngit checkout <tag>\ngit branch pull-<fix, feat, impr>: Short branch desc\n```\n\nPull your changes and create pull request:\n```bash\ngit pull origin <your_branch_name>\n```\n",
"bugtrack_url": null,
"license": null,
"summary": "FastAPI ORM Extensions",
"version": "0.0.5",
"project_urls": {
"Documentation": "https://github.com/pkozhem/fastapi-orm-ext#readme",
"Issues": "https://github.com/pkozhem/fastapi-orm-ext/issues",
"Repository": "https://github.com/pkozhem/fastapi-orm-ext",
"Source": "https://github.com/pkozhem/fastapi-orm-ext"
},
"split_keywords": [
"extensions",
" fastapi",
" orm"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "76794f87bf5c0868e3a0b590dd350e07287f165d356159f7bb44fbfa82f2ce49",
"md5": "f8f1e81221164712acdd480b5d3425bb",
"sha256": "0a160c61c7d9a296cf23ee99e3fc92e335e106299564b94cf0a6696e5fab978b"
},
"downloads": -1,
"filename": "fastapi_orm_ext-0.0.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f8f1e81221164712acdd480b5d3425bb",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.13",
"size": 8312,
"upload_time": "2025-07-18T14:34:02",
"upload_time_iso_8601": "2025-07-18T14:34:02.018342Z",
"url": "https://files.pythonhosted.org/packages/76/79/4f87bf5c0868e3a0b590dd350e07287f165d356159f7bb44fbfa82f2ce49/fastapi_orm_ext-0.0.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3ce255f911c8ed5b4da3c5963daf89451afec7878f824751405363a736497ba9",
"md5": "d5c80531d68e6d93dfc52d0b79aabb05",
"sha256": "0805edddfbb16a3880b3b8f162ac435400487fe69ec48f9d00c77f0e4602ac70"
},
"downloads": -1,
"filename": "fastapi_orm_ext-0.0.5.tar.gz",
"has_sig": false,
"md5_digest": "d5c80531d68e6d93dfc52d0b79aabb05",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.13",
"size": 24464,
"upload_time": "2025-07-18T14:34:03",
"upload_time_iso_8601": "2025-07-18T14:34:03.553460Z",
"url": "https://files.pythonhosted.org/packages/3c/e2/55f911c8ed5b4da3c5963daf89451afec7878f824751405363a736497ba9/fastapi_orm_ext-0.0.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-18 14:34:03",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "pkozhem",
"github_project": "fastapi-orm-ext#readme",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "fastapi-orm-ext"
}