19 lines
639 B
Python
19 lines
639 B
Python
|
|
"""Shared FastAPI dependencies — DB session per request."""
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from collections.abc import AsyncIterator
|
||
|
|
|
||
|
|
from fastapi import Request
|
||
|
|
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker
|
||
|
|
|
||
|
|
|
||
|
|
async def get_session(request: Request) -> AsyncIterator[AsyncSession]:
|
||
|
|
"""Yield an AsyncSession bound to the engine on app.state.
|
||
|
|
|
||
|
|
The engine + session factory are wired up in `app.lifespan`. Tests
|
||
|
|
swap them out via dependency_overrides.
|
||
|
|
"""
|
||
|
|
factory: async_sessionmaker[AsyncSession] = request.app.state.session_factory
|
||
|
|
async with factory() as session:
|
||
|
|
yield session
|