Spaces:
Running
Running
| """ | |
| database.py | |
| This module sets up the SQLAlchemy database connection for the Expressive TTS Arena project. | |
| It initializes the PostgreSQL engine, creates a session factory for handling database transactions, | |
| and defines a declarative base class for ORM models. | |
| If no DATABASE_URL environment variable is set, then create a dummy database to fail gracefully | |
| """ | |
| # Standard Library Imports | |
| import os | |
| # Third-Party Library Imports | |
| from sqlalchemy import create_engine | |
| from sqlalchemy.orm import declarative_base, sessionmaker | |
| # Local Application Imports | |
| from src.config import APP_ENV | |
| DATABASE_URL = os.getenv("DATABASE_URL") | |
| if APP_ENV == "prod": | |
| # In production, a valid DATABASE_URL is required. | |
| if not DATABASE_URL: | |
| raise ValueError("DATABASE_URL must be set in production!") | |
| engine = create_engine(DATABASE_URL) | |
| SessionLocal = sessionmaker(bind=engine) | |
| # In development, if a DATABASE_URL is provided, use it. | |
| elif DATABASE_URL: | |
| engine = create_engine(DATABASE_URL) | |
| SessionLocal = sessionmaker(bind=engine) | |
| else: | |
| # No DATABASE_URL is provided; use a DummySession that does nothing. | |
| engine = None | |
| class DummySession: | |
| is_dummy = True # Flag to indicate this is a dummy session. | |
| def __enter__(self): | |
| return self | |
| def __exit__(self, exc_type, exc_value, traceback): | |
| pass | |
| def add(self, _instance, _warn=True): | |
| # No-op: simply ignore adding the instance. | |
| pass | |
| def commit(self): | |
| # Raise an exception to simulate failure when attempting a write. | |
| raise RuntimeError("DummySession does not support commit operations.") | |
| def refresh(self, _instance): | |
| # Raise an exception to simulate failure when attempting to refresh. | |
| raise RuntimeError("DummySession does not support refresh operations.") | |
| def rollback(self): | |
| # No-op: there's nothing to roll back. | |
| pass | |
| def close(self): | |
| # No-op: nothing to close. | |
| pass | |
| def dummy_session_factory(): | |
| return DummySession() | |
| SessionLocal = dummy_session_factory | |
| # Declarative base class for ORM models. | |
| Base = declarative_base() | |