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>
34 lines
1.3 KiB
Python
34 lines
1.3 KiB
Python
"""Connection and table-maintenance helpers for the economics import."""
|
|
|
|
import sqlite3
|
|
from pathlib import Path
|
|
|
|
|
|
def connect(db_path: Path) -> sqlite3.Connection:
|
|
"""Open systems.db with foreign-key enforcement on."""
|
|
conn = sqlite3.connect(str(db_path))
|
|
conn.execute("PRAGMA foreign_keys=ON")
|
|
return conn
|
|
|
|
|
|
def clear_economics_tables(conn: sqlite3.Connection) -> None:
|
|
"""Clear economics tables in FK-safe order (children before parents).
|
|
|
|
corp_presence is cleared here; the corporations table is append-only
|
|
(never cleared). Runs inside the caller's transaction, so a failure
|
|
later in the import rolls these DELETEs back too.
|
|
"""
|
|
conn.execute("DELETE FROM corp_presence")
|
|
conn.execute("DELETE FROM brand_inputs")
|
|
conn.execute("DELETE FROM brand_products")
|
|
conn.execute("DELETE FROM system_fiscal")
|
|
conn.execute("DELETE FROM corp_financial_state")
|
|
conn.execute("DELETE FROM corp_lifecycle_events")
|
|
conn.execute("DELETE FROM chain_inputs")
|
|
conn.execute("DELETE FROM production_chains")
|
|
# specialization_vocabulary FK-references commodities — clear it
|
|
# before commodities so the FK-on delete does not fail (D-237).
|
|
conn.execute("DELETE FROM specialization_vocabulary")
|
|
conn.execute("DELETE FROM commodities")
|
|
conn.execute("DELETE FROM gate_links")
|