import_economics.py 2,620 → 309 lines — a thin orchestrator keeping the exact CLI, single-transaction/rollback contract, and exit codes. The 16 import steps, MIGRATION_SQL, brands shell-out, validators, and stamp write now live in tooling/economy-db/economy_import/ (db, migration, economy, corporations, brands, bodies, atlas, specialization, traits, validators, stamp, paths, errors). Full type hints throughout. tooling/generator_sources.py replaces the triplicated source registry (importer / stamp checker / pr-process watch list — the skill now derives its list via --list). The registry stamps itself, and economy_import/ modules are globbed fail-closed, so a future module is stamped the moment it exists — closing the silently-weakened-stamp failure mode. Rider: connector config helpers centralized in tooling/db/common.py. Byte-identical behavior proven: full-import table dump diff EMPTY over 107,843 lines / 37 tables (volatile timestamp fields excluded); dry-run output parity; generated_brands.toml sha unchanged. make test-tooling PASS; ruff clean. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
40 lines
1.6 KiB
Python
40 lines
1.6 KiB
Python
"""Meta-table generator stamp (#855, #856).
|
|
|
|
Records the source-SHA of the generator that produced the DB so the pre-push
|
|
hook (tooling/check-systems-db-stamp) can detect stale snapshots. The source
|
|
set comes from tooling/generator_sources.py — the single shared registry.
|
|
"""
|
|
|
|
import sqlite3
|
|
from pathlib import Path
|
|
|
|
from generator_sources import file_sha1
|
|
from schema_version import SCHEMA_VERSION
|
|
|
|
from .paths import SCHEMA_SQL
|
|
|
|
|
|
def write_stamp(conn: sqlite3.Connection, generator_name: str, *source_files: Path) -> None:
|
|
"""Upsert a row in the meta table recording this generator's current source SHA.
|
|
|
|
Called after every successful non-dry-run commit. Idempotent: running
|
|
twice on the same sources writes the same sha with an updated timestamp.
|
|
|
|
Only one stamp is written by this package: ``import_economics``, whose source
|
|
set includes the Rust binary it invokes (see IMPORT_ECONOMICS_SOURCES in
|
|
tooling/generator_sources.py). generate_brands does NOT write a stamp
|
|
of its own — it's a subroutine of import_economics, not an independent DB
|
|
writer (PR #136 review T2/H3).
|
|
|
|
The meta table is created by the MIGRATION_SQL block in migration.py; this
|
|
function assumes it exists (caller must run migrations first).
|
|
"""
|
|
schema_sha = file_sha1(SCHEMA_SQL)
|
|
generator_sha = file_sha1(*source_files)
|
|
conn.execute(
|
|
"""INSERT OR REPLACE INTO meta
|
|
(generator_name, schema_version, schema_sha, generator_sha, generated_at)
|
|
VALUES (?, ?, ?, ?, datetime('now'))""",
|
|
(generator_name, SCHEMA_VERSION, schema_sha, generator_sha),
|
|
)
|