access-engine/tools/verify_emission_cadence.py

30 lines
1.5 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
"""Verify the source declaration against the pinned owner schema/profile."""
import argparse
import hashlib
import json
from pathlib import Path
import subprocess
import sys
root = Path(__file__).resolve().parents[1]
parser = argparse.ArgumentParser()
parser.add_argument("--contract-schema", type=Path, default=root.parent / "info-tech-canon/infospace/schemas/emission-cadence.schema.yaml")
parser.add_argument("--checker", type=Path, default=root.parent / "net-kingdom/tools/emission-cadence-profile/emission_cadence_profile.py")
args = parser.parse_args()
declaration = root / "docs/contracts/decision-emission-cadence.json"
document = json.loads(declaration.read_text())
extension = document["extensions"]["flex-auth"]
if not args.contract_schema.is_file() or not args.checker.is_file():
parser.error("owner schema/profile is unavailable; supply explicit --contract-schema and --checker paths")
if hashlib.sha256(args.contract_schema.read_bytes()).hexdigest() != extension["contract"]["schema_sha256"]:
parser.error("owner schema changed; review and update the declared schema pin before assessment")
command = [sys.executable, str(args.checker), "--contract-schema", str(args.contract_schema)]
inventory = extension["inventory"]
for event in inventory["load_bearing"]:
command += ["--load-bearing", event]
for event in inventory["rare_load_bearing"]:
command += ["--rare-load-bearing", event]
command += [str(declaration)]
sys.exit(subprocess.run(command, check=False).returncode)