Source code for fmn.api.database
# SPDX-FileCopyrightText: Contributors to the Fedora Project
#
# SPDX-License-Identifier: MIT
from collections.abc import Iterator
from typing import Annotated
from fastapi import Depends
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy_helpers.fastapi import AsyncDatabaseManager, make_db_session
from ..database.main import get_manager
[docs]
async def gen_db_manager() -> AsyncDatabaseManager:
return get_manager()
DBManager = Annotated[AsyncDatabaseManager, Depends(gen_db_manager)]
[docs]
async def gen_db_session(
db_manager: AsyncDatabaseManager = Depends(gen_db_manager),
) -> Iterator[AsyncSession]:
"""Generate database sessions for FastAPI request handlers.
This lets users declare the session as a dependency in request handler
functions, e.g.::
@app.get("/path")
def process_path(db_session: AsyncSession = Depends(gen_db_session)):
query = select(Model).filter_by(...)
result = await db_session.execute(query)
...
:return: A :class:`sqlalchemy.ext.asyncio.AsyncSession` object for the
current request
"""
async for session in make_db_session(db_manager):
yield session
DBSession = Annotated[AsyncSession, Depends(gen_db_session)]