82 lines
2.8 KiB
Python
82 lines
2.8 KiB
Python
"""
|
|
ErrorCollector - Gemeinsame Klasse zum Sammeln von Fehlern und Warnungen
|
|
|
|
Diese Klasse wird von getpositions.py und drawdxf.py verwendet, um Fehler
|
|
und Warnungen während der Verarbeitung zu sammeln und zu verwalten.
|
|
"""
|
|
|
|
import json
|
|
from pathlib import Path
|
|
|
|
|
|
class ErrorCollector:
|
|
"""Sammelt alle Fehler und Warnungen während der Verarbeitung."""
|
|
|
|
def __init__(self):
|
|
self.errors = {}
|
|
self.warnings = {}
|
|
|
|
def add_errors(self, error_dict):
|
|
"""Fügt Fehler aus einem Dictionary hinzu."""
|
|
for key, value in error_dict.items():
|
|
if key in self.errors:
|
|
if isinstance(self.errors[key], list) and isinstance(value, list):
|
|
self.errors[key].extend(value)
|
|
else:
|
|
self.errors[key] = [self.errors[key], value]
|
|
else:
|
|
self.errors[key] = value
|
|
|
|
def add_warnings(self, warning_dict):
|
|
"""Fügt Warnungen aus einem Dictionary hinzu."""
|
|
for key, value in warning_dict.items():
|
|
if key in self.warnings:
|
|
if isinstance(self.warnings[key], list) and isinstance(value, list):
|
|
self.warnings[key].extend(value)
|
|
else:
|
|
self.warnings[key] = [self.warnings[key], value]
|
|
else:
|
|
self.warnings[key] = value
|
|
|
|
def has_errors_or_warnings(self):
|
|
"""Prüft ob Fehler oder Warnungen vorhanden sind."""
|
|
return bool(self.errors) or bool(self.warnings)
|
|
|
|
def has_errors(self):
|
|
"""Prüft ob Fehler vorhanden sind."""
|
|
return bool(self.errors)
|
|
|
|
def get_all_issues(self):
|
|
"""Gibt alle Fehler und Warnungen als Dictionary zurück."""
|
|
result = {}
|
|
if self.errors:
|
|
result["errors"] = self.errors
|
|
if self.warnings:
|
|
result["warnings"] = self.warnings
|
|
return result
|
|
|
|
def write_errorfile(self, work_dir: Path, filename: str):
|
|
"""Schreibt Fehlerdatei nur wenn Fehler oder Warnungen vorhanden sind."""
|
|
if self.has_errors():
|
|
print("Fehler gefunden. Schreibe Error-Datei.")
|
|
all_issues = self.get_all_issues()
|
|
write_json_file(all_issues, work_dir, filename)
|
|
else:
|
|
print("Keine Fehler gefunden. Keine Error-Datei geschrieben.")
|
|
|
|
|
|
def write_json_file(data: dict, out_dir: Path, filename: str) -> None:
|
|
"""
|
|
Schreibt Daten in eine JSON-Datei.
|
|
|
|
Args:
|
|
data: Dictionary mit zu schreibenden Daten
|
|
out_dir: Ausgabeverzeichnis
|
|
filename: Dateiname für die JSON-Datei
|
|
"""
|
|
print("writing data to a json file ...")
|
|
outfile = out_dir / filename if isinstance(out_dir, Path) else Path(out_dir) / filename
|
|
with open(outfile, 'w', encoding='utf-8') as fh:
|
|
json.dump(data, fh, indent=2, ensure_ascii=False, default=str)
|
|
print("done")
|