from typing import AsyncGenerator from litestar.contrib.sqlalchemy.plugins import EngineConfig, SQLAlchemyAsyncConfig from litestar.exceptions import ClientException from litestar.status_codes import HTTP_409_CONFLICT from sqlalchemy import URL from sqlalchemy.exc import IntegrityError from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker async def provide_transaction( db_session: AsyncSession, ) -> AsyncGenerator[AsyncSession, None]: try: async with db_session.begin(): yield db_session except IntegrityError as exc: raise ClientException( status_code=HTTP_409_CONFLICT, detail=str(exc), ) from exc sessionmaker = async_sessionmaker(expire_on_commit=False) db_connection_string = URL.create( drivername="postgresql+asyncpg", username="televend", password="televend", host="localhost", port=5433, database="televend", ) db_config = SQLAlchemyAsyncConfig( connection_string=db_connection_string.render_as_string(hide_password=False), engine_config=EngineConfig( echo=True, ), )