From 2b904fd01e2437a813dd885da192a5ad0c6987e4 Mon Sep 17 00:00:00 2001 From: Lukas Date: Fri, 23 Jan 2026 18:35:15 +0100 Subject: [PATCH] Fix database session context manager errors - Add explicit commit/rollback in session dependencies - Prevents RuntimeError: generator didn't stop after athrow() - Ensures proper transaction cleanup on exceptions --- src/server/utils/dependencies.py | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/server/utils/dependencies.py b/src/server/utils/dependencies.py index a9ffb5a..4e2604e 100644 --- a/src/server/utils/dependencies.py +++ b/src/server/utils/dependencies.py @@ -130,14 +130,15 @@ async def get_database_session() -> AsyncGenerator: detail="Database functionality not installed" ) - try: - async with get_db_session() as session: + async with get_db_session() as session: + try: yield session - except RuntimeError as e: - raise HTTPException( - status_code=status.HTTP_503_SERVICE_UNAVAILABLE, - detail=f"Database not available: {str(e)}" - ) + # Auto-commit on successful completion + await session.commit() + except Exception: + # Auto-rollback on error + await session.rollback() + raise async def get_optional_database_session() -> AsyncGenerator: @@ -169,12 +170,16 @@ async def get_optional_database_session() -> AsyncGenerator: yield None return - try: - async with get_db_session() as session: + # Use get_db_session context manager properly + async with get_db_session() as session: + try: yield session - except (ImportError, RuntimeError): - # Database became unavailable - this shouldn't happen but handle it - yield None + # Auto-commit on successful completion + await session.commit() + except Exception: + # Auto-rollback on error + await session.rollback() + raise def get_current_user(