forked from AG_QGIS/Plugin_SN_Basis
127 lines
4.3 KiB
Python
127 lines
4.3 KiB
Python
"""
|
||
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,
|
||
)
|