feat: add BLIF Flow v2 persistence scaffolding
This commit is contained in:
@@ -92,14 +92,20 @@ def _group(rows: Iterable[dict[str, Any]], key: str = "opportunity_id") -> dict[
|
||||
return result
|
||||
|
||||
|
||||
def _load() -> dict[str, Any]:
|
||||
def _load(
|
||||
*, expected_database: str = "clientflow_codex_shadow",
|
||||
expected_user: str | None = "clientflow_codex",
|
||||
require_read_only: bool = True,
|
||||
) -> dict[str, Any]:
|
||||
with engine.connect() as conn:
|
||||
conn = conn.execution_options(isolation_level="AUTOCOMMIT")
|
||||
identity = conn.execute(text(
|
||||
"SELECT current_database(), current_user, current_setting('transaction_read_only')"
|
||||
)).one()
|
||||
if tuple(identity) != ("clientflow_codex_shadow", "clientflow_codex", "on"):
|
||||
if identity[0] != expected_database or (expected_user and identity[1] != expected_user):
|
||||
raise RuntimeError(f"refusing unexpected database identity: {identity!r}")
|
||||
if require_read_only and identity[2] != "on":
|
||||
raise RuntimeError(f"read-only simulation requires transaction_read_only=on: {identity!r}")
|
||||
conn.execute(text("BEGIN READ ONLY"))
|
||||
try:
|
||||
opportunities = [dict(row) for row in conn.execute(text("""
|
||||
@@ -520,8 +526,16 @@ def _totals(items: Iterable[dict[str, Any]], queue_key: str) -> dict[str, int]:
|
||||
}
|
||||
|
||||
|
||||
def collect() -> dict[str, Any]:
|
||||
data = _load()
|
||||
def collect(
|
||||
*, expected_database: str = "clientflow_codex_shadow",
|
||||
expected_user: str | None = "clientflow_codex",
|
||||
require_read_only: bool = True,
|
||||
) -> dict[str, Any]:
|
||||
data = _load(
|
||||
expected_database=expected_database,
|
||||
expected_user=expected_user,
|
||||
require_read_only=require_read_only,
|
||||
)
|
||||
opportunities = data["opportunities"]
|
||||
if len(opportunities) != 328:
|
||||
raise RuntimeError(f"expected 328 opportunities, found {len(opportunities)}")
|
||||
|
||||
Reference in New Issue
Block a user