Add artifact.001/src/artifact_001/cli.py

This commit is contained in:
Mika 2026-04-04 17:36:39 +00:00
parent 5de1eadfd4
commit bd710468bf

View file

@ -0,0 +1,56 @@
import argparse
from datetime import datetime
from artifact_001 import core
def _parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(
description="CLI zur Erfassung eines aux=3 Messwerts und Logging als JSON-Eintrag."
)
parser.add_argument("--timestamp", required=True, help="Zeitpunkt der Messung im ISO-Format.")
parser.add_argument("--measured_p", required=True, type=float, help="Gemessener p-Wert.")
parser.add_argument(
"--freeze_ok", required=True, type=str, choices=["true", "false"], help="Gating-Ergebnis als true/false."
)
parser.add_argument(
"--setup_fingerprint", required=True, type=str, help="Fingerprint der Mess-Setup-Konfiguration."
)
parser.add_argument("--policy_hash", required=True, type=str, help="Hash der verwendeten Policy.")
return parser.parse_args()
def main() -> None:
args = _parse_args()
# Input validation
try:
timestamp = datetime.fromisoformat(args.timestamp)
except ValueError as exc:
raise SystemExit(f"Ungültiges Zeitformat: {args.timestamp}") from exc
freeze_ok_str = args.freeze_ok.strip().lower()
if freeze_ok_str not in ("true", "false"):
raise SystemExit("Ungültiger Wert für --freeze_ok: Muss 'true' oder 'false' sein.")
freeze_ok = freeze_ok_str == "true"
measured_p = args.measured_p
setup_fingerprint = args.setup_fingerprint.strip()
policy_hash = args.policy_hash.strip()
# CI readiness checks
assert isinstance(measured_p, float), "measured_p muss float sein"
assert isinstance(freeze_ok, bool), "freeze_ok muss bool sein"
assert setup_fingerprint, "setup_fingerprint darf nicht leer sein"
assert policy_hash, "policy_hash darf nicht leer sein"
core.log_measurement(
timestamp=timestamp,
measured_p=measured_p,
freeze_ok=freeze_ok,
setup_fingerprint=setup_fingerprint,
policy_hash=policy_hash,
)
if __name__ == "__main__":
main()