session.py 909 B

123456789101112131415161718192021222324252627
  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 RuntimeServiceSettings
  6. def build_session_factory(
  7. settings: RuntimeServiceSettings | None = None) -> sessionmaker[Session]:
  8. resolved_settings = settings or RuntimeServiceSettings()
  9. db_settings = DatabaseSettings(
  10. database_url=resolved_settings.database_url,
  11. echo_sql=resolved_settings.echo_sql)
  12. engine = create_engine_from_settings(db_settings)
  13. return create_session_factory(engine)
  14. def get_db(request: Request) -> Generator[Session, None, None]:
  15. session_factory: sessionmaker[Session] = request.app.state.session_factory
  16. session = session_factory()
  17. try:
  18. yield session
  19. finally:
  20. session.close()