mirror of
https://github.com/ijaric/voice_assistant.git
synced 2025-12-17 12:26:17 +00:00
Рабочий Postgres
This commit is contained in:
@@ -18,8 +18,12 @@ class BaseMixin:
|
||||
|
||||
@declared_attr
|
||||
def created_at(cls):
|
||||
return sqlalchemy.Column(sqlalchemy.DateTime, server_default=sqlalchemy.sql.func.now())
|
||||
return sqlalchemy.Column(
|
||||
sqlalchemy.DateTime, server_default=sqlalchemy.sql.func.now()
|
||||
)
|
||||
|
||||
@declared_attr
|
||||
def updated_at(cls):
|
||||
return sqlalchemy.Column(sqlalchemy.DateTime, server_default=sqlalchemy.sql.func.now())
|
||||
return sqlalchemy.Column(
|
||||
sqlalchemy.DateTime, server_default=sqlalchemy.sql.func.now()
|
||||
)
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
import fastapi
|
||||
|
||||
from jose import JWTError, jwt
|
||||
from pydantic import ValidationError
|
||||
|
||||
from lib.api import schemas as app_schemas
|
||||
from lib.app import settings as app_settings
|
||||
from pydantic import ValidationError
|
||||
|
||||
import fastapi
|
||||
|
||||
app = fastapi.FastAPI()
|
||||
settings = app_settings.get_settings()
|
||||
@@ -13,7 +12,9 @@ security = fastapi.security.HTTPBearer()
|
||||
|
||||
|
||||
def get_token_data(
|
||||
authorization: fastapi.security.HTTPAuthorizationCredentials = fastapi.Security(security),
|
||||
authorization: fastapi.security.HTTPAuthorizationCredentials = fastapi.Security(
|
||||
security
|
||||
),
|
||||
) -> app_schemas.entity.Token:
|
||||
token = authorization.credentials
|
||||
try:
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
import functools
|
||||
|
||||
import pydantic_settings
|
||||
from dotenv import load_dotenv
|
||||
from pydantic import Field
|
||||
|
||||
load_dotenv(".env.dev")
|
||||
from pydantic import Field, field_validator
|
||||
|
||||
|
||||
class DbSettings(pydantic_settings.BaseSettings):
|
||||
@@ -25,11 +22,17 @@ class ApiSettings(pydantic_settings.BaseSettings):
|
||||
|
||||
|
||||
class Settings(pydantic_settings.BaseSettings):
|
||||
debug: str = "false"
|
||||
db: DbSettings = Field(default_factory=DbSettings)
|
||||
api: ApiSettings = Field(default_factory=ApiSettings)
|
||||
|
||||
jwt_secret_key: str
|
||||
|
||||
@field_validator("debug")
|
||||
@classmethod
|
||||
def validate_debug(cls, v: str) -> bool:
|
||||
return v.lower() == "true"
|
||||
|
||||
|
||||
@functools.lru_cache
|
||||
def get_settings() -> Settings:
|
||||
|
||||
@@ -15,17 +15,27 @@ class Base(DeclarativeBase):
|
||||
|
||||
# Создаём движок
|
||||
# Настройки подключения к БД передаём из переменных окружения, которые заранее загружены в файл настроек
|
||||
class AsyncDB:
|
||||
def __init__(self):
|
||||
self.database_dsn = (
|
||||
f"postgresql+asyncpg://{settings.db.user}:{settings.db.password}"
|
||||
f"@{settings.db.host}:{settings.db.port}/{settings.db.name}"
|
||||
)
|
||||
self.engine = create_async_engine(
|
||||
self.database_dsn, echo=settings.debug, future=True
|
||||
)
|
||||
self.async_session = async_sessionmaker(
|
||||
self.engine, class_=AsyncSession, expire_on_commit=False
|
||||
)
|
||||
|
||||
database_dsn = (
|
||||
f"postgresql+asyncpg://{settings.db.user}:{settings.db.password}"
|
||||
f"@{settings.db.host}:{settings.db.port}/{settings.db.name}"
|
||||
)
|
||||
|
||||
engine = create_async_engine(database_dsn, echo=True, future=True)
|
||||
|
||||
async_session = async_sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
|
||||
db = AsyncDB()
|
||||
|
||||
|
||||
async def get_session() -> typing.AsyncGenerator[AsyncSession, typing.Any]:
|
||||
async with async_session() as session:
|
||||
yield session
|
||||
async with db.async_session() as session:
|
||||
try:
|
||||
yield session
|
||||
except Exception:
|
||||
await session.rollback()
|
||||
raise
|
||||
|
||||
Reference in New Issue
Block a user