started test_job_service

This commit is contained in:
John Lancaster
2026-06-27 19:04:21 -05:00
parent f4417a0f64
commit f0b0109b11
5 changed files with 78 additions and 19 deletions
+12 -5
View File
@@ -3,11 +3,13 @@ from collections.abc import AsyncGenerator
from contextlib import asynccontextmanager
from contextvars import ContextVar
from dataclasses import dataclass
from functools import partial
from sqlalchemy.ext.asyncio import AsyncEngine
from sqlalchemy.ext.asyncio import async_sessionmaker
from sqlalchemy.ext.asyncio import create_async_engine
from sqlmodel.ext.asyncio.session import AsyncSession
from sqlmodel.pool import StaticPool
from ..config import Settings
from ..config import get_settings
@@ -46,16 +48,21 @@ def _to_async_database_url(database_url: str) -> str:
def _build_engine(settings: Settings) -> AsyncEngine:
database_url = _to_async_database_url(settings.database_url)
connect_args: dict[str, object] = {}
if database_url.startswith("sqlite"):
connect_args["check_same_thread"] = False
return create_async_engine(
engine_factory = partial(
create_async_engine,
url=database_url,
echo=False,
pool_pre_ping=True,
connect_args=connect_args,
)
if database_url.startswith("sqlite"):
sqlite_connect_settings = {"check_same_thread": settings.sqlite_check_same_thread}
engine_factory = partial(engine_factory, connect_args=sqlite_connect_settings)
if ":memory:" in database_url:
engine_factory = partial(engine_factory, poolclass=StaticPool)
return engine_factory()
def initialize_database_runtime(*, settings: Settings | None = None) -> DatabaseRuntime:
"""Initialize lifespan-owned async DB resources once per process."""
+1 -1
View File
@@ -27,7 +27,7 @@ class ServiceBase(ABC):
self.queue = queue or asyncio.Queue()
@asynccontextmanager
async def _session_scope(self, session: AsyncSession | None):
async def _session_scope(self, session: AsyncSession | None = None):
"""Provide a transactional scope around a series of operations."""
if session is not None:
# Reuse the provided session if one is passed in
+1 -1
View File
@@ -44,7 +44,7 @@ class JobService(ServiceBase):
await _session.merge(job)
await _session.commit()
await _session.refresh(job)
return Job.model_copy(job)
return job
async def delete_job(self, job: Job, session: AsyncSession | None = None) -> None:
"""Delete a job from the database."""