Add stability_analysis/src/stability_analysis/cli.py

This commit is contained in:
Mika 2026-03-14 17:17:11 +00:00
parent 7435c2e3e3
commit a4e9e98165

View file

@ -0,0 +1,63 @@
import argparse
import json
from pathlib import Path
from typing import Any
import sys
import logging
from stability_analysis import core # type: ignore
logging.basicConfig(level=logging.INFO, format='[%(levelname)s] %(message)s')
logger = logging.getLogger(__name__)
def _validate_input_path(input_path: Path) -> None:
if not input_path.exists():
raise FileNotFoundError(f"Eingabedatei nicht gefunden: {input_path}")
if not input_path.is_file():
raise ValueError(f"Eingabepfad ist keine Datei: {input_path}")
def _validate_output_path(output_path: Path) -> None:
out_dir = output_path.parent
if not out_dir.exists():
logger.info(f"Ausgabeverzeichnis wird erstellt: {out_dir}")
out_dir.mkdir(parents=True, exist_ok=True)
def main(argv: list[str] | None = None) -> None:
parser = argparse.ArgumentParser(description="CLI zur Analyse der Stabilitaet von Laufzeitdaten.")
parser.add_argument("--input", required=True, help="Pfad zur JSON-Datei mit Messdaten.")
parser.add_argument("--output", required=True, help="Pfad für die Ausgabe der Analyseergebnisse.")
args = parser.parse_args(argv)
input_path = Path(args.input)
output_path = Path(args.output)
try:
_validate_input_path(input_path)
_validate_output_path(output_path)
with input_path.open('r', encoding='utf-8') as infile:
data_list: Any = json.load(infile)
if not isinstance(data_list, list):
raise ValueError("Eingabedatei muss eine Liste von Messwert-Dictionaries enthalten.")
logger.info("Starte Analyse der Laufzeitdaten...")
results = core.analyze_data(data_list)
with output_path.open('w', encoding='utf-8') as outfile:
json.dump(results, outfile, indent=2, ensure_ascii=False)
logger.info(f"Analyse abgeschlossen. Ergebnisse gespeichert unter: {output_path}")
except Exception as exc:
logger.error(f"Fehler bei der Ausführung: {exc}")
sys.exit(1)
if __name__ == "__main__":
main()