session.py 931 B

12345678910111213141516171819202122232425262728
  1. from collections.abc import Generator
  2. from core_db import DatabaseSettings, create_engine_from_settings, create_session_factory
  3. from fastapi import Request
  4. from sqlalchemy.orm import Session, sessionmaker
  5. from app.bootstrap.settings import ModelGatewayServiceSettings
  6. def build_session_factory(
  7. settings: ModelGatewayServiceSettings | None = None,
  8. ) -> sessionmaker[Session]:
  9. resolved_settings = settings or ModelGatewayServiceSettings()
  10. db_settings = DatabaseSettings(
  11. database_url=resolved_settings.database_url,
  12. echo_sql=resolved_settings.echo_sql,
  13. )
  14. engine = create_engine_from_settings(db_settings)
  15. return create_session_factory(engine)
  16. def get_db(request: Request) -> Generator[Session, None, None]:
  17. session_factory: sessionmaker[Session] = request.app.state.session_factory
  18. session = session_factory()
  19. try:
  20. yield session
  21. finally:
  22. session.close()