session.py 900 B

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