Skip to content

Commit f247e94

Browse files
committed
db.py - Преобразован в контекстный менеджер, добавлены версии апи и автоподставка версии в зависимости от названия директории
1 parent 5ed4365 commit f247e94

File tree

10 files changed

+74
-48
lines changed

10 files changed

+74
-48
lines changed

app/api/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from fastapi import APIRouter
66

7-
from . import endpoints
7+
from . import v1
88

99
api_router = APIRouter()
10-
api_router.include_router(endpoints.router)
10+
api_router.include_router(v1.router)

app/api/endpoints/__init__.py

Lines changed: 0 additions & 12 deletions
This file was deleted.

app/api/v1/__init__.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
"""
2+
Endpoints API Module
3+
"""
4+
5+
from pathlib import Path
6+
from fastapi import APIRouter
7+
8+
from . import users
9+
10+
FOLDER_NAME = f"{Path(__file__).parent.name}"
11+
12+
router = APIRouter(prefix=f"/{FOLDER_NAME}", tags=[FOLDER_NAME])
13+
router.include_router(users.router)
14+
15+
__all__ = ["router"]

app/api/endpoints/users/__init__.py renamed to app/api/v1/users/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66

77
from . import auth, create, retrieve
88

9-
router = APIRouter(prefix='/users', tags=['users'])
9+
router = APIRouter(prefix="/users", tags=["users"])
1010
router.include_router(auth.router)
1111
router.include_router(create.router)
1212
router.include_router(retrieve.router)
1313

14-
__all__ = ['router']
14+
__all__ = ["router"]

app/api/v1/users/auth/__init__.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from fastapi import APIRouter
2+
3+
from . import token
4+
5+
router = APIRouter(prefix="/auth", tags=["auth"])
6+
router.include_router(token.router)
7+
8+
__all__ = ["router"]

app/api/endpoints/users/auth.py renamed to app/api/v1/users/auth/token.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@
44
from app.models.token import AccessToken
55
from app.models.user import UserCreate
66

7-
router = APIRouter(prefix='/auth')
7+
router = APIRouter(prefix="/token")
88

99

10-
@router.post('/token/', response_model=AccessToken)
10+
@router.post("/", response_model=AccessToken)
1111
async def token(data: UserCreate, logic: anotations.Logic):
1212
"""
1313
Retrieve new access token
1414
"""
1515
return await logic.users.generate_token(**data.model_dump())
16+
17+
18+
__all__ = ["router"]

app/api/endpoints/users/create.py renamed to app/api/v1/users/create.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,15 @@
33
from app.api import anotations
44
from app.models.user import UserCreate, UserRead
55

6-
router = APIRouter(prefix='/create')
6+
router = APIRouter(prefix="/create")
77

88

9-
@router.post('/', response_model=UserRead)
9+
@router.post("/", response_model=UserRead)
1010
async def create(data: UserCreate, logic: anotations.Logic):
1111
"""
1212
Create user
1313
"""
1414
return await logic.users.create(**data.model_dump())
15+
16+
17+
__all__ = ["router"]

app/api/endpoints/users/retrieve.py renamed to app/api/v1/users/retrieve.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@
1010
router = APIRouter()
1111

1212

13-
@router.get('/', response_model=UserRead)
13+
@router.get("/", response_model=UserRead)
1414
async def retrieve(user: anotations.CurrentUser):
1515
"""
1616
Retrieve user
1717
"""
1818
return user
19+
20+
21+
__all__ = ["router"]

app/core/db.py

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,40 @@
22
Database
33
"""
44

5-
from sqlalchemy.ext.asyncio import (AsyncEngine, async_sessionmaker,
6-
create_async_engine)
5+
from sqlalchemy.ext.asyncio import AsyncEngine, async_sessionmaker, create_async_engine
76
from sqlmodel.ext.asyncio.session import AsyncSession
87

98
from app import repositories as repos
109
from app.core.settings import settings
1110

1211

13-
def get_async_engine() -> AsyncEngine:
14-
engine: AsyncEngine = create_async_engine(
15-
settings.pg_dsn.unicode_string(), echo=False, future=True
16-
)
17-
return engine
18-
19-
20-
SessionLocal = async_sessionmaker(
21-
autocommit=False,
22-
autoflush=False,
23-
bind=get_async_engine(),
24-
class_=AsyncSession,
25-
expire_on_commit=False,
26-
)
27-
28-
2912
class Database:
30-
def __init__(
31-
self,
32-
session: AsyncSession,
33-
):
34-
self.session = session
35-
self.user = repos.UserRepo(session=session)
13+
session: AsyncSession
14+
15+
@classmethod
16+
def __get_async_engine(cls) -> AsyncEngine:
17+
return create_async_engine(
18+
settings.pg_dsn.unicode_string(), echo=False, future=True
19+
)
20+
21+
@classmethod
22+
def __get_async_session(cls) -> async_sessionmaker[AsyncSession]:
23+
return async_sessionmaker(
24+
autocommit=False,
25+
autoflush=False,
26+
bind=cls.__get_async_engine(),
27+
class_=AsyncSession,
28+
expire_on_commit=False,
29+
)
30+
31+
def __set_repositories(self):
32+
self.user = repos.UserRepo(session=self.session)
33+
34+
async def __aenter__(self):
35+
async with self.__get_async_session()() as session:
36+
self.session = session
37+
self.__set_repositories()
38+
return self
39+
40+
async def __aexit__(self, exc_type, exc_value, traceback):
41+
await self.session.close()

app/core/deps.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@
77
from fastapi import Depends
88
from fastapi.security import APIKeyHeader
99

10-
from app.core.db import Database, SessionLocal
10+
from app.core.db import Database
1111
from app.core.security import Security
1212
from app.logic import Logic
1313
from app.models.user import User
1414

1515

1616
async def get_db() -> AsyncGenerator[Database, Any]:
17-
async with SessionLocal() as session:
18-
yield Database(session)
17+
async with Database() as db:
18+
yield db
1919

2020

2121
async def get_security() -> Security:

0 commit comments

Comments
 (0)