from __future__ import annotations from collections.abc import AsyncGenerator from sqlalchemy.ext.asyncio import ( AsyncSession, async_sessionmaker, create_async_engine, ) from cpv3.infrastructure.settings import get_settings _settings = get_settings() _database_url = _settings.get_database_url() _engine_kwargs: dict[str, bool | int] = { "echo": _settings.debug, "pool_pre_ping": True, } if not _database_url.startswith("sqlite"): _engine_kwargs.update( { "pool_size": _settings.db_pool_size, "max_overflow": _settings.db_max_overflow, "pool_timeout": _settings.db_pool_timeout, "pool_recycle": _settings.db_pool_recycle_seconds, } ) _engine = create_async_engine( _database_url, **_engine_kwargs, ) SessionLocal = async_sessionmaker( bind=_engine, class_=AsyncSession, expire_on_commit=False, ) async def get_db() -> AsyncGenerator[AsyncSession, None]: async with SessionLocal() as session: yield session