From 541e35bc51540e1b4347e8afb344b45e6753bbba Mon Sep 17 00:00:00 2001 From: "s.mostryukov" Date: Wed, 2 Oct 2024 11:47:11 +0300 Subject: [PATCH] poetry add 'fastapi-users[sqlalchemy]' --- config.py | 7 +++++++ models/__init__.py | 3 +++ models/mixins/__init__.py | 4 ++++ models/user.py | 19 +++++++++++++++++++ poetry.lock | 18 +++++++++++++++++- pyproject.toml | 2 +- 6 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 models/mixins/__init__.py create mode 100644 models/user.py diff --git a/config.py b/config.py index abbc508..d389af9 100644 --- a/config.py +++ b/config.py @@ -1,3 +1,5 @@ +from typing import ClassVar + from pydantic import BaseModel from pydantic_settings import ( BaseSettings, @@ -45,6 +47,10 @@ class DatabaseConfig(BaseModel): } +class TypesConfig(BaseModel): + UserIdType: ClassVar = int + + class Settings(BaseSettings): model_config = SettingsConfigDict( env_file=( @@ -58,6 +64,7 @@ class Settings(BaseSettings): run: RunConfig swagger: SwaggerConfig = SwaggerConfig() db: DatabaseConfig + type: TypesConfig = TypesConfig() settings = Settings() diff --git a/models/__init__.py b/models/__init__.py index bc3efcc..49ab91c 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -1,8 +1,11 @@ from .db_helper import db_helper from .base import Base +from .user import User + __all__ = ( "db_helper", "Base", + "User", ) diff --git a/models/mixins/__init__.py b/models/mixins/__init__.py new file mode 100644 index 0000000..57c724a --- /dev/null +++ b/models/mixins/__init__.py @@ -0,0 +1,4 @@ +from .id_int_pk import IdIntPkMixin + + +__all__ = ("IdIntPkMixin",) diff --git a/models/user.py b/models/user.py new file mode 100644 index 0000000..e64ddea --- /dev/null +++ b/models/user.py @@ -0,0 +1,19 @@ +from config import settings +from models import Base +from models.mixins import IdIntPkMixin + +from fastapi_users_db_sqlalchemy import ( + SQLAlchemyBaseUserTable, + SQLAlchemyUserDatabase, +) +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from sqlalchemy.ext.asyncio import AsyncSession + + +class User(Base, IdIntPkMixin, SQLAlchemyBaseUserTable[settings.types.UserIdType]): + + @classmethod + def get_db(cls, session: "AsyncSession"): + return SQLAlchemyUserDatabase(session, cls) diff --git a/poetry.lock b/poetry.lock index 0fbf578..af31fc2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -467,6 +467,7 @@ files = [ [package.dependencies] email-validator = ">=1.1.0,<2.2" fastapi = ">=0.65.2" +fastapi-users-db-sqlalchemy = {version = ">=6.0.0", optional = true, markers = "extra == \"sqlalchemy\""} makefun = ">=1.11.2,<2.0.0" pwdlib = {version = "0.2.0", extras = ["argon2", "bcrypt"]} pyjwt = {version = "2.8.0", extras = ["crypto"]} @@ -478,6 +479,21 @@ oauth = ["httpx-oauth (>=0.13)"] redis = ["redis (>=4.3.3,<6.0.0)"] sqlalchemy = ["fastapi-users-db-sqlalchemy (>=6.0.0)"] +[[package]] +name = "fastapi-users-db-sqlalchemy" +version = "6.0.1" +description = "FastAPI Users database adapter for SQLAlchemy" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fastapi_users_db_sqlalchemy-6.0.1-py3-none-any.whl", hash = "sha256:d1050ec31eb75e8c4fa9abafa4addaf0baf5c97afeea2f0f910ea55e2451fcad"}, + {file = "fastapi_users_db_sqlalchemy-6.0.1.tar.gz", hash = "sha256:f0ef9fe3250453712d25c13170700c80fa205867ce7add7ef391c384ec27cbe1"}, +] + +[package.dependencies] +fastapi-users = ">=10.0.0" +sqlalchemy = {version = ">=2.0.0,<2.1.0", extras = ["asyncio"]} + [[package]] name = "greenlet" version = "3.1.1" @@ -1520,4 +1536,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "756f4a7bf70e40c6b8dadeba9156c8b3e980f3ee5f14d73c9571cc6597cd52ce" +content-hash = "48335dd82829883c1d2ac4b19b8ae09d8455bf3b9add9aa6bd83bb07e61336f2" diff --git a/pyproject.toml b/pyproject.toml index 2c1c5f6..28c02c1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,7 +15,7 @@ jinja2 = "^3.1.4" alembic = "^1.13.3" asyncpg = "^0.29.0" sqlalchemy = {extras = ["asyncio"], version = "^2.0.35"} -fastapi-users = "^13.0.0" +fastapi-users = {extras = ["sqlalchemy"], version = "^13.0.0"}