Files
Jyotisha/scripts/external_oracle_raw_import.py
T

66 lines
2.5 KiB
Python

#!/usr/bin/env python3
"""Validate a reviewable external raw-oracle artifact before parity replay."""
from __future__ import annotations
import argparse
import hashlib
import json
from pathlib import Path
from typing import Any
SUPPORTED_ENGINES = {"VedAstro", "PyJHora_JHora", "jyotishganit"}
def sha256_file(path: Path) -> str:
digest = hashlib.sha256()
with path.open("rb") as handle:
for chunk in iter(lambda: handle.read(1024 * 1024), b""):
digest.update(chunk)
return digest.hexdigest()
def build_raw_oracle_import(engine: str, artifact_path: str | Path, metadata: dict[str, Any]) -> dict[str, Any]:
if engine not in SUPPORTED_ENGINES:
raise ValueError(f"unsupported oracle engine: {engine}")
path = Path(artifact_path).expanduser().resolve()
if not path.is_file():
raise ValueError("source artifact does not exist")
required = ("case_id", "license_boundary", "collection_method", "birth_data_policy")
missing = [key for key in required if not metadata.get(key)]
if missing:
raise ValueError(f"missing raw-oracle metadata: {', '.join(missing)}")
if metadata["birth_data_policy"] != "public_case_only":
raise ValueError("raw-oracle imports require public_case_only birth data")
return {
"scope": "external_raw_oracle_import",
"schema_version": 1,
"engine": engine,
"status": "raw_imported_uncompared",
"source_artifact": str(path),
"source_artifact_sha256": sha256_file(path),
"metadata": {
key: metadata[key]
for key in (*required, "engine_version", "ayanamsa", "node_mode", "captured_at")
if metadata.get(key) is not None
},
"comparison_ready": False,
"boundary": "Import integrity only. Parity is external_verified only after normalized field comparison passes.",
}
def main() -> int:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--engine", required=True, choices=sorted(SUPPORTED_ENGINES))
parser.add_argument("--artifact", required=True)
parser.add_argument("--metadata-json", required=True, help="JSON file containing import metadata")
args = parser.parse_args()
metadata = json.loads(Path(args.metadata_json).read_text(encoding="utf-8"))
print(json.dumps(build_raw_oracle_import(args.engine, args.artifact, metadata), ensure_ascii=False, indent=2))
return 0
if __name__ == "__main__":
raise SystemExit(main())