well / app /database.py
zarox's picture
Upload 23 files
1c167a4 verified
from collections.abc import AsyncGenerator
from sqlalchemy import text
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
from sqlalchemy.orm import DeclarativeBase
from app.config import settings
class Base(DeclarativeBase):
pass
settings.data_dir.mkdir(parents=True, exist_ok=True)
_db_path = settings.data_dir / "app.db"
DATABASE_URL = f"sqlite+aiosqlite:///{_db_path}"
engine = create_async_engine(
DATABASE_URL,
echo=False,
future=True,
)
AsyncSessionLocal = async_sessionmaker(engine, expire_on_commit=False, class_=AsyncSession)
async def get_session() -> AsyncGenerator[AsyncSession, None]:
async with AsyncSessionLocal() as session:
yield session
async def init_db() -> None:
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
res = await conn.execute(text("PRAGMA table_info(jobs)"))
cols = {row[1] for row in res.fetchall()}
if "pipeline_timings_json" not in cols:
await conn.execute(text("ALTER TABLE jobs ADD COLUMN pipeline_timings_json TEXT"))
if "activity_log_json" not in cols:
await conn.execute(text("ALTER TABLE jobs ADD COLUMN activity_log_json TEXT"))
if "whisper_language" not in cols:
await conn.execute(text("ALTER TABLE jobs ADD COLUMN whisper_language VARCHAR(32)"))
if "whisper_task" not in cols:
await conn.execute(text("ALTER TABLE jobs ADD COLUMN whisper_task VARCHAR(16) DEFAULT 'transcribe'"))
if "title" not in cols:
await conn.execute(text("ALTER TABLE jobs ADD COLUMN title VARCHAR(256)"))
if "subject" not in cols:
await conn.execute(text("ALTER TABLE jobs ADD COLUMN subject VARCHAR(128)"))
if "thumbnail" not in cols:
await conn.execute(text("ALTER TABLE jobs ADD COLUMN thumbnail VARCHAR(512)"))