XmLLM / src /app /api /__init__.py
Claude
Code quality: fix all ruff warnings, add CI/CD, improve test coverage
bbbfba8 unverified
"""API layer — FastAPI dependencies and shared state.
This module provides dependency injection for the DB, FileStore, and
JobService, scoped to the application lifespan.
"""
from __future__ import annotations
from typing import TYPE_CHECKING
from src.app.jobs.service import JobService
from src.app.persistence.db import Database
from src.app.persistence.file_store import FileStore
if TYPE_CHECKING:
from src.app.settings import Settings
# Module-level singletons, initialized during lifespan startup.
_db: Database | None = None
_file_store: FileStore | None = None
_job_service: JobService | None = None
def init_services(settings: Settings) -> None:
"""Initialize singletons. Called once during app startup."""
global _db, _file_store, _job_service
_db = Database(settings.db_path)
_db.connect()
_file_store = FileStore(settings.storage_root)
_file_store.ensure_dirs()
_job_service = JobService(_db, _file_store)
def shutdown_services() -> None:
"""Clean up. Called during app shutdown."""
global _db
if _db:
_db.close()
_db = None
def get_db() -> Database:
assert _db is not None, "Database not initialized — call init_services first"
return _db
def get_file_store() -> FileStore:
assert _file_store is not None, "FileStore not initialized"
return _file_store
def get_job_service() -> JobService:
assert _job_service is not None, "JobService not initialized"
return _job_service