session.py 919 B

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