fix(sec): warn when deferred imports stay stale

This commit is contained in:
2026-07-31 13:27:31 +02:00
parent f58f8b0818
commit c8c660e63d
8 changed files with 123 additions and 17 deletions
+30 -2
View File
@@ -17,7 +17,7 @@ from __future__ import annotations
import asyncio
import os
import tempfile
from datetime import date, datetime, timezone
from datetime import date, datetime, timedelta, timezone
import pytest
from sqlalchemy import func, select
@@ -68,10 +68,14 @@ class FakeImporter:
source = "sec_facts"
def __init__(self, revision, *, ok=True, retryable=False, n_rows=3, raise_in="none"):
def __init__(
self, revision, *, ok=True, retryable=False, alert_days=None,
n_rows=3, raise_in="none",
):
self.revision = revision
self.ok = ok
self.retryable = retryable
self.alert_days = alert_days
self.n_rows = n_rows
self.raise_in = raise_in
self.staged_called = False
@@ -97,6 +101,7 @@ class FakeImporter:
source_max_date=date(2026, 7, 21),
messages=[] if self.ok else ["coverage below threshold"],
retryable=self.retryable,
deferred_alert_after_days=self.alert_days,
)
async def promote(self, db, staged, run_id):
@@ -217,6 +222,29 @@ async def test_retryable_validation_defers_without_alerting(engine):
assert await _count(factory, SystemEvent) == 0 # expected retry does not alert
async def test_stale_deferred_validation_emits_deduplicated_warning(engine):
factory = _factory(engine)
promoted = await run_import(FakeImporter("rev1", n_rows=3), engine=engine)
async with factory() as s:
promoted.started_at = datetime.now(timezone.utc) - timedelta(days=4)
await s.merge(promoted)
await s.commit()
importer = FakeImporter(
"rev2", ok=False, retryable=True, alert_days=3, n_rows=5
)
first = await run_import(importer, engine=engine)
second = await run_import(importer, engine=engine)
assert first is not None and first.status == STATUS_DEFERRED
assert second is not None and second.status == STATUS_DEFERRED
async with factory() as s:
events = (await s.execute(select(SystemEvent))).scalars().all()
assert len(events) == 1
assert events[0].severity == "warning"
assert events[0].code == "sec_facts_deferred_stale"
async def test_exception_in_promote_rolls_back(engine):
factory = _factory(engine)
await run_import(FakeImporter("rev1", n_rows=3), engine=engine) # baseline