Add report_generation/src/report_generation/cli.py
This commit is contained in:
parent
6c3be5ec4c
commit
4323b73aef
1 changed files with 57 additions and 0 deletions
57
report_generation/src/report_generation/cli.py
Normal file
57
report_generation/src/report_generation/cli.py
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
import argparse
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from typing import Any, Dict
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
# Keine öffentliche API in diesem Modul, dient als CLI-Entry.
|
||||
|
||||
def _validate_json_file(path: Path) -> bool:
|
||||
"""Prüft, ob die Eingabedatei existiert und gültige JSON-Struktur enthält."""
|
||||
if not path.exists():
|
||||
raise FileNotFoundError(f"Eingabedatei nicht gefunden: {path}")
|
||||
try:
|
||||
with path.open('r', encoding='utf-8') as f:
|
||||
json.load(f)
|
||||
except json.JSONDecodeError as e:
|
||||
raise ValueError(f"Ungültige JSON-Datei: {e}") from e
|
||||
return True
|
||||
|
||||
|
||||
def _run_cli() -> None:
|
||||
"""CLI Entry Point für Berichtserzeugung."""
|
||||
parser = argparse.ArgumentParser(description="CLI für Berichtserzeugung der Pi Day Repetition Study.")
|
||||
parser.add_argument('--input', required=True, help='Pfad zur JSON-Datei mit Analyseergebnissen.')
|
||||
parser.add_argument('--output', required=True, help='Pfad zur Ausgabedatei für den Bericht.')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
input_path = Path(args.input)
|
||||
output_path = Path(args.output)
|
||||
|
||||
try:
|
||||
_validate_json_file(input_path)
|
||||
with input_path.open('r', encoding='utf-8') as infile:
|
||||
analysis_results: Dict[str, Any] = json.load(infile)
|
||||
|
||||
# Späte Imports, um zyklische Abhängigkeiten zu vermeiden.
|
||||
from report_generation.main import generate_report
|
||||
|
||||
report_file = generate_report(analysis_results)
|
||||
# Optional: Kopiere generierte Datei an CLI-Ausgabeort, falls verschieden.
|
||||
if Path(report_file) != output_path:
|
||||
with open(report_file, 'r', encoding='utf-8') as src, output_path.open('w', encoding='utf-8') as dst:
|
||||
dst.write(src.read())
|
||||
|
||||
print(f"Bericht erfolgreich erstellt: {output_path}")
|
||||
|
||||
except Exception as exc: # Fängt Validierungs- und Laufzeitfehler ab
|
||||
timestamp = datetime.utcnow().isoformat()
|
||||
sys.stderr.write(f"[{timestamp}] Fehler: {exc}\n")
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
_run_cli()
|
||||
Loading…
Reference in a new issue