suna/backend/core/utils/db_helpers.py

59 lines
1.5 KiB
Python

"""
Centralized database dependency helpers.
This module provides reusable FastAPI dependencies for database connections,
reducing duplication across 50+ files.
"""
from typing import AsyncGenerator
from core.services.supabase import DBConnection
from core.utils.logger import logger
_db_instance: DBConnection | None = None
async def get_db() -> DBConnection:
"""
FastAPI dependency for database connection.
Returns initialized DBConnection singleton.
Use as: db = Depends(get_db)
"""
global _db_instance
if _db_instance is None:
_db_instance = DBConnection()
await _db_instance.initialize()
logger.debug("Database connection initialized via dependency")
return _db_instance
async def get_db_client():
"""
FastAPI dependency that returns the actual Supabase client.
Use as: client = Depends(get_db_client)
"""
db = await get_db()
return await db.client
# For modules that need to set a module-level db variable
def get_initialized_db() -> DBConnection:
"""
Get or create initialized DBConnection for module-level usage.
This is for backward compatibility with modules using global db variables.
New code should use get_db() dependency instead.
"""
global _db_instance
if _db_instance is None:
_db_instance = DBConnection()
# Note: Cannot await here, caller must call initialize() separately
logger.debug("Created DBConnection instance (needs initialization)")
return _db_instance