from collections.abc import AsyncGenerator from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession, async_sessionmaker, create_async_engine def make_engine(database_url: str, **kwargs: object) -> AsyncEngine: return create_async_engine(database_url, **kwargs) def make_session_factory(engine: AsyncEngine) -> async_sessionmaker[AsyncSession]: return async_sessionmaker(engine, expire_on_commit=False) async def session_from_factory( factory: async_sessionmaker[AsyncSession], ) -> AsyncGenerator[AsyncSession, None]: async with factory() as session: yield session