Add policy_eval.py/src/policy_eval/cli.py
This commit is contained in:
parent
626a8abff8
commit
1d9540ae92
1 changed files with 71 additions and 0 deletions
71
policy_eval.py/src/policy_eval/cli.py
Normal file
71
policy_eval.py/src/policy_eval/cli.py
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
import argparse
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
import logging
|
||||
from datetime import datetime
|
||||
|
||||
from policy_eval import core
|
||||
|
||||
|
||||
def main() -> None:
|
||||
"""CLI entrypoint to evaluate policy changes and run backtests."""
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Policy Change Audit CLI – prüft Policy-Konstanten und führt Backtests aus."
|
||||
)
|
||||
parser.add_argument(
|
||||
"--constants",
|
||||
required=True,
|
||||
help="Pfad zur policy_constants.json"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--audit",
|
||||
required=True,
|
||||
help="Pfad zum fixierten Audit-Set (Verzeichnis)"
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format="%(asctime)s [%(levelname)s] %(message)s",
|
||||
datefmt="%Y-%m-%d %H:%M:%S",
|
||||
)
|
||||
|
||||
constants_path = Path(args.constants)
|
||||
audit_path = Path(args.audit)
|
||||
|
||||
if not constants_path.is_file():
|
||||
logging.error(f"Policy-Konstanten-Datei nicht gefunden: {constants_path}")
|
||||
sys.exit(1)
|
||||
|
||||
if not audit_path.exists():
|
||||
logging.error(f"Audit-Set-Verzeichnis nicht gefunden: {audit_path}")
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
with constants_path.open('r', encoding='utf-8') as f:
|
||||
policy_constants = json.load(f)
|
||||
except json.JSONDecodeError as e:
|
||||
logging.error(f"Fehler beim Lesen der Policy-Konfiguration: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
logging.info("Prüfe Policy-Änderungen...")
|
||||
changed = core.check_policy_changes(policy_constants)
|
||||
|
||||
if changed:
|
||||
logging.info("Änderungen erkannt. Starte Backtest...")
|
||||
result = core.run_backtest(str(audit_path))
|
||||
summary_path = result.get("delta_summary")
|
||||
cases_path = result.get("delta_cases")
|
||||
logging.info("Backtest abgeschlossen.")
|
||||
logging.info(f"Delta Summary: {summary_path}")
|
||||
logging.info(f"Delta Cases: {cases_path}")
|
||||
else:
|
||||
logging.info("Keine Änderungen festgestellt. Kein Backtest erforderlich.")
|
||||
|
||||
logging.info(f"Audit abgeschlossen um {datetime.now().isoformat(timespec='seconds')}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Reference in a new issue