zach
Update db logic and behavior in development environment
8e2cadd
raw
history blame
2.24 kB
"""
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()