1
0
mirror of https://github.com/ijaric/voice_assistant.git synced 2025-12-17 12:26:17 +00:00

Рабочий Postgres

This commit is contained in:
grucshetskyaleksei
2023-09-20 00:07:12 +03:00
parent cf1a29d520
commit b1b5b5ce68
7 changed files with 56 additions and 38 deletions

View File

@@ -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()
)

View File

@@ -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:

View File

@@ -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:

View File

@@ -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