moved models to db pkg

This commit is contained in:
John Lancaster
2026-07-30 21:10:13 -05:00
parent 1cc2f319d5
commit 3d6daec561
18 changed files with 53 additions and 61 deletions
+5 -9
View File
@@ -10,8 +10,8 @@ from sqlmodel import SQLModel
from sqlmodel import select
from sqlmodel.ext.asyncio.session import AsyncSession
from ..models import Job
from ..models import JobStatus
from .models import Job
from .models import JobStatus
from .runtime import get_engine
logger = logging.getLogger(__name__)
@@ -31,7 +31,7 @@ async def get_next_queued_job(*, session: AsyncSession) -> Job | None:
async def create_all(*, engine: AsyncEngine | None = None) -> None:
"""Create all tables on the selected engine."""
# Import models so SQLModel metadata is fully registered before bootstrap.
from transcription import models as _models # noqa: F401
from transcription.db import models as _models # noqa: F401
active_engine = engine or get_engine()
async with active_engine.begin() as connection:
@@ -68,12 +68,8 @@ def _ensure_sqlite_compat_columns(connection: Connection) -> None:
break
if not has_unique_source:
connection.execute(
text(
"CREATE UNIQUE INDEX IF NOT EXISTS "
"ux_revision_source_id ON revision(source_id)"
)
text("CREATE UNIQUE INDEX IF NOT EXISTS ux_revision_source_id ON revision(source_id)")
)
logger.warning(
"Applied SQLite compatibility schema patch "
"table=revision unique_index=ux_revision_source_id"
"Applied SQLite compatibility schema patch table=revision unique_index=ux_revision_source_id"
)
+1 -1
View File
@@ -9,9 +9,9 @@ from sqlalchemy.orm import selectinload
from sqlmodel import select
from sqlmodel.ext.asyncio.session import AsyncSession
from ..db.models import Document
from ..errors import AppError
from ..errors import ErrorCategory
from ..models import Document
from .base import ServiceBase
logger = logging.getLogger(__name__)
+4 -8
View File
@@ -7,9 +7,9 @@ from sqlalchemy.orm import selectinload
from sqlmodel import select
from sqlmodel.ext.asyncio.session import AsyncSession
from ..models import Job
from ..models import JobStatus
from ..models import Source
from ..db.models import Job
from ..db.models import JobStatus
from ..db.models import Source
from .base import ServiceBase
@@ -170,11 +170,7 @@ class JobService(ServiceBase):
``stale_before`` are considered stale and re-queued.
"""
async with self._session_scope(session) as _session:
query = (
select(Job)
.where(Job.status == JobStatus.PROCESSING)
.where(Job.date_updated < stale_before)
)
query = select(Job).where(Job.status == JobStatus.PROCESSING).where(Job.date_updated < stale_before)
stale_jobs = (await _session.exec(query)).all()
if not stale_jobs:
return 0
+3 -3
View File
@@ -11,9 +11,9 @@ from transcription.config import get_settings
from transcription.errors import AppError
from transcription.errors import ErrorCategory
from ..models import Document
from ..models import Job
from ..models import Source
from ..db.models import Document
from ..db.models import Job
from ..db.models import Source
from .documents import UploadJobResult
logger = logging.getLogger(__name__)
+3 -3
View File
@@ -18,11 +18,11 @@ from sqlmodel.ext.asyncio.session import AsyncSession
from transcription.config import Settings
from transcription.config import get_settings
from transcription.db.models import Job
from transcription.db.models import Revision
from transcription.db.models import Source
from transcription.errors import AppError
from transcription.errors import ErrorCategory
from transcription.models import Job
from transcription.models import Revision
from transcription.models import Source
from transcription.providers import ProviderAuthError
from transcription.providers import ProviderError
from transcription.providers import ProviderResponseError
+3 -3
View File
@@ -5,13 +5,13 @@ from sqlmodel.ext.asyncio.session import AsyncSession
from ..config import Settings
from ..config import get_settings
from ..db.models import Job
from ..db.models import JobStatus
from ..db.models import Source
from ..errors import AppError
from ..errors import ErrorCategory
from ..errors import classify_unexpected_error
from ..errors import format_error_detail
from ..models import Job
from ..models import JobStatus
from ..models import Source
from ..providers import TranscriptionResult
from . import ServiceBundle
from .transcription import DEFAULT_PROMPT_FILE
@@ -10,7 +10,7 @@ from uuid import uuid4
from nicegui import ui
from transcription.config import get_settings
from transcription.models import Source
from transcription.db.models import Source
PANGOZOOM_CDN_URL = "https://unpkg.com/@panzoom/[email protected]/dist/panzoom.min.js"
UPLOADS_URL_PREFIX = "/uploads"
@@ -6,9 +6,9 @@ import logging
from nicegui import ui
from transcription.models import Job
from transcription.models import Revision
from transcription.models import Source
from transcription.db.models import Job
from transcription.db.models import Revision
from transcription.db.models import Source
from transcription.ui.components.document_panzoom import render_document_panzoom
from transcription.ui.components.transcript import render_original_transcription_card
from transcription.ui.components.transcript import render_revision_row
@@ -9,8 +9,8 @@ from typing import Any
from nicegui import ui
from transcription.models import Job
from transcription.models import Revision
from transcription.db.models import Job
from transcription.db.models import Revision
type RevisionAction = Callable[[Revision], Awaitable[None] | None]
+3 -3
View File
@@ -8,9 +8,9 @@ from fastapi import Request
from nicegui import ui
from transcription.app_state import resolve_session_factory
from transcription.models import Job
from transcription.models import JobStatus
from transcription.models import Source
from transcription.db.models import Job
from transcription.db.models import JobStatus
from transcription.db.models import Source
from transcription.services.jobs import JobService
from transcription.services.transcription import TranscriptionService
from transcription.ui.components.app_shell import render_navigation_header
+2 -2
View File
@@ -5,8 +5,8 @@ from pathlib import Path
import pytest
from transcription.config import Settings
from transcription.models import Job
from transcription.models import JobStatus
from transcription.db.models import Job
from transcription.db.models import JobStatus
from transcription.providers.base import TranscriptionResult
from transcription.services.store import create_upload_job
from transcription.worker import process_next_queued_job
+4 -4
View File
@@ -2,10 +2,10 @@ from uuid import uuid4
import pytest
from transcription.models import Document
from transcription.models import Job
from transcription.models import JobStatus
from transcription.models import Source
from transcription.db.models import Document
from transcription.db.models import Job
from transcription.db.models import JobStatus
from transcription.db.models import Source
from transcription.services.documents import DocumentService
from transcription.services.jobs import JobService
+4 -4
View File
@@ -4,10 +4,10 @@ from uuid import uuid4
import pytest
from transcription.models import Document
from transcription.models import Job
from transcription.models import JobStatus
from transcription.models import Source
from transcription.db.models import Document
from transcription.db.models import Job
from transcription.db.models import JobStatus
from transcription.db.models import Source
from transcription.services.documents import DocumentService
from transcription.services.jobs import JobService
from transcription.services.transcription import TranscriptionService
+4 -4
View File
@@ -6,10 +6,10 @@ from uuid import uuid4
import pytest
from transcription.config import Settings
from transcription.models import Document
from transcription.models import Job
from transcription.models import JobStatus
from transcription.models import Source
from transcription.db.models import Document
from transcription.db.models import Job
from transcription.db.models import JobStatus
from transcription.db.models import Source
from transcription.services import ServiceBundle
from transcription.services.workflows import process_queued_job
+5 -5
View File
@@ -5,11 +5,11 @@ from uuid import UUID
import pytest
from sqlalchemy.exc import IntegrityError
from transcription.models import Document
from transcription.models import Job
from transcription.models import JobStatus
from transcription.models import Revision
from transcription.models import Source
from transcription.db.models import Document
from transcription.db.models import Job
from transcription.db.models import JobStatus
from transcription.db.models import Revision
from transcription.db.models import Source
def _make_document(**overrides) -> Document:
+5 -5
View File
@@ -18,11 +18,11 @@ from transcription.config import _settings
from transcription.db import create_all
from transcription.db import get_session
from transcription.db import initialize_database_runtime
from transcription.models import Document
from transcription.models import Job
from transcription.models import JobStatus
from transcription.models import Revision
from transcription.models import Source
from transcription.db.models import Document
from transcription.db.models import Job
from transcription.db.models import JobStatus
from transcription.db.models import Revision
from transcription.db.models import Source
RevisionSeed = str
+1 -1
View File
@@ -5,7 +5,7 @@ from uuid import uuid4
import pytest
from transcription.models import JobStatus
from transcription.db.models import JobStatus
@pytest.mark.integration