generated from john/python-template
This commit is contained in:
@@ -86,6 +86,7 @@ class TestWorkflowReliability:
|
||||
provider=None,
|
||||
source_reference=None,
|
||||
requested_model=None,
|
||||
evidence_capture=None,
|
||||
):
|
||||
_ = (
|
||||
image_path,
|
||||
@@ -97,6 +98,7 @@ class TestWorkflowReliability:
|
||||
provider,
|
||||
source_reference,
|
||||
requested_model,
|
||||
evidence_capture,
|
||||
)
|
||||
raise TimeoutError("simulated provider timeout")
|
||||
|
||||
@@ -370,6 +372,64 @@ class TestWorkflowReliability:
|
||||
assert result is not None
|
||||
assert result.status == JobStatus.TRANSCRIBED
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_intermediate_page_commit_advances_job_liveness_timestamp(
|
||||
self,
|
||||
default_session_factory,
|
||||
monkeypatch,
|
||||
):
|
||||
services = ServiceBundle.from_session_factory(default_session_factory)
|
||||
async with services.jobs._session_scope() as session:
|
||||
document = Document(id=uuid4(), name="heartbeat-doc")
|
||||
session.add(document)
|
||||
await session.flush()
|
||||
job = Job(document_id=document.id, status=JobStatus.QUEUED)
|
||||
session.add(job)
|
||||
await session.flush()
|
||||
for page_number in (1, 2, 3):
|
||||
source = Source(
|
||||
document_id=document.id,
|
||||
page_number=page_number,
|
||||
upload_name=f"page-{page_number}.jpg",
|
||||
filename=f"page-{page_number}.jpg",
|
||||
file_path=str(Path("tests/fixtures/images/real/Book Two - page 02.jpg")),
|
||||
file_hash=str(page_number) * 64,
|
||||
file_size_bytes=1,
|
||||
)
|
||||
session.add(source)
|
||||
await session.flush()
|
||||
session.add(JobSource(job_id=job.id, source_id=source.id))
|
||||
await session.commit()
|
||||
loaded = await services.jobs.read_job(job_id=job.id, session=session)
|
||||
|
||||
third_started = asyncio.Event()
|
||||
release_third = asyncio.Event()
|
||||
call_count = 0
|
||||
|
||||
async def _transcribe(image_path, **kwargs):
|
||||
nonlocal call_count
|
||||
_ = (image_path, kwargs)
|
||||
call_count += 1
|
||||
if call_count == 3:
|
||||
third_started.set()
|
||||
await release_third.wait()
|
||||
return TranscriptionResult(text=f"page {call_count}", provider="fixture", model="model")
|
||||
|
||||
monkeypatch.setattr("transcription.services.workflows.transcribe_document_image", _transcribe)
|
||||
task = asyncio.create_task(process_queued_job(job=loaded, services=services))
|
||||
await asyncio.wait_for(third_started.wait(), timeout=2)
|
||||
|
||||
async with services.jobs._session_scope() as session:
|
||||
current_job = await session.get(Job, loaded.id)
|
||||
assert current_job is not None
|
||||
attempts = await services.evidence.list_execution_attempts(job_id=loaded.id, session=session)
|
||||
|
||||
assert len(attempts) == 2
|
||||
assert current_job.date_updated >= attempts[1].finished_at
|
||||
|
||||
release_third.set()
|
||||
await task
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_failed_job_with_validation_category_is_not_requeued(self, default_session_factory):
|
||||
services = ServiceBundle.from_session_factory(default_session_factory)
|
||||
|
||||
Reference in New Issue
Block a user