diff --git a/artifact.001/src/artifact_001/cli.py b/artifact.001/src/artifact_001/cli.py new file mode 100644 index 0000000..1b02b9d --- /dev/null +++ b/artifact.001/src/artifact_001/cli.py @@ -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()