""" sn_basis/modulesdateipruefer.py – Prüfung von Dateieingaben für das Plugin. Verwendet syswrapper und gibt pruef_ergebnis an den Pruefmanager zurück. """ from sn_basis.functions.syswrapper import ( file_exists, is_file, join_path, ) from sn_basis.modules.Pruefmanager import pruef_ergebnis class Dateipruefer: """ Prüft Dateieingaben und liefert ein pruef_ergebnis zurück. Die eigentliche Nutzerinteraktion übernimmt der Pruefmanager. """ def __init__( self, pfad: str, basis_pfad: str = "", leereingabe_erlaubt: bool = False, standarddatei: str | None = None, temporaer_erlaubt: bool = False, ): self.pfad = pfad self.basis_pfad = basis_pfad self.leereingabe_erlaubt = leereingabe_erlaubt self.standarddatei = standarddatei self.temporaer_erlaubt = temporaer_erlaubt # --------------------------------------------------------- # Hilfsfunktion # --------------------------------------------------------- def _pfad(self, relativer_pfad: str) -> str: """Erzeugt einen OS‑unabhängigen Pfad relativ zum Basisverzeichnis.""" return join_path(self.basis_pfad, relativer_pfad) # --------------------------------------------------------- # Hauptfunktion # --------------------------------------------------------- def pruefe(self) -> pruef_ergebnis: """ Prüft eine Dateieingabe und liefert ein pruef_ergebnis zurück. Der Pruefmanager entscheidet später, wie der Nutzer gefragt wird. """ # ----------------------------------------------------- # 1. Fall: Eingabe ist leer # ----------------------------------------------------- if not self.pfad: return self._handle_leere_eingabe() # ----------------------------------------------------- # 2. Fall: Eingabe ist nicht leer → Datei prüfen # ----------------------------------------------------- pfad = self._pfad(self.pfad) if not file_exists(pfad) or not is_file(pfad): return pruef_ergebnis( ok=False, meldung=f"Die Datei '{self.pfad}' wurde nicht gefunden.", aktion="datei_nicht_gefunden", pfad=pfad, ) # ----------------------------------------------------- # 3. Datei existiert → Erfolg # ----------------------------------------------------- return pruef_ergebnis( ok=True, meldung="Datei gefunden.", aktion="ok", pfad=pfad, ) # --------------------------------------------------------- # Behandlung leerer Eingaben # --------------------------------------------------------- def _handle_leere_eingabe(self) -> pruef_ergebnis: """ Liefert ein pruef_ergebnis für den Fall, dass das Dateifeld leer ist. Der Pruefmanager fragt später den Nutzer. """ # 1. Leereingabe erlaubt → Nutzer fragen, ob das beabsichtigt war if self.leereingabe_erlaubt: return pruef_ergebnis( ok=False, meldung="Das Dateifeld ist leer. Soll ohne Datei fortgefahren werden?", aktion="leereingabe_erlaubt", pfad=None, ) # 2. Standarddatei verfügbar → Nutzer fragen, ob sie verwendet werden soll if self.standarddatei: return pruef_ergebnis( ok=False, meldung=f"Es wurde keine Datei angegeben. Soll die Standarddatei '{self.standarddatei}' verwendet werden?", aktion="standarddatei_vorschlagen", pfad=self._pfad(self.standarddatei), ) # 3. Temporäre Datei erlaubt → Nutzer fragen, ob temporär gearbeitet werden soll if self.temporaer_erlaubt: return pruef_ergebnis( ok=False, meldung="Es wurde keine Datei angegeben. Soll eine temporäre Datei erzeugt werden?", aktion="temporaer_erlaubt", pfad=None, ) # 4. Leereingabe nicht erlaubt → Fehler return pruef_ergebnis( ok=False, meldung="Es wurde keine Datei angegeben.", aktion="leereingabe_nicht_erlaubt", pfad=None, )