2025-12-18 22:00:31 +01:00
|
|
|
|
"""
|
2025-12-19 14:29:52 +01:00
|
|
|
|
sn_basis/modules/Dateipruefer.py – Prüfung von Dateieingaben für das Plugin.
|
|
|
|
|
|
Verwendet sys_wrapper und gibt pruef_ergebnis an den Pruefmanager zurück.
|
2025-12-18 22:00:31 +01:00
|
|
|
|
"""
|
2025-12-17 17:45:18 +01:00
|
|
|
|
|
2025-12-19 14:29:52 +01:00
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
|
|
|
|
from sn_basis.functions import (
|
2025-12-18 22:00:31 +01:00
|
|
|
|
join_path,
|
2025-12-19 14:29:52 +01:00
|
|
|
|
file_exists,
|
2025-12-18 22:00:31 +01:00
|
|
|
|
)
|
2025-12-02 20:55:51 +01:00
|
|
|
|
|
2025-12-18 22:00:31 +01:00
|
|
|
|
from sn_basis.modules.Pruefmanager import pruef_ergebnis
|
2025-12-02 20:55:51 +01:00
|
|
|
|
|
|
|
|
|
|
|
2025-12-18 22:00:31 +01:00
|
|
|
|
class Dateipruefer:
|
|
|
|
|
|
"""
|
|
|
|
|
|
Prüft Dateieingaben und liefert ein pruef_ergebnis zurück.
|
|
|
|
|
|
Die eigentliche Nutzerinteraktion übernimmt der Pruefmanager.
|
|
|
|
|
|
"""
|
2025-12-02 20:55:51 +01:00
|
|
|
|
|
2025-12-18 22:00:31 +01:00
|
|
|
|
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
|
2025-12-02 20:55:51 +01:00
|
|
|
|
|
2025-12-18 22:00:31 +01:00
|
|
|
|
# ---------------------------------------------------------
|
|
|
|
|
|
# Hilfsfunktion
|
|
|
|
|
|
# ---------------------------------------------------------
|
|
|
|
|
|
|
2025-12-19 14:29:52 +01:00
|
|
|
|
def _pfad(self, relativer_pfad: str) -> Path:
|
|
|
|
|
|
"""
|
|
|
|
|
|
Erzeugt einen OS‑unabhängigen Pfad relativ zum Basisverzeichnis.
|
|
|
|
|
|
"""
|
2025-12-18 22:00:31 +01:00
|
|
|
|
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)
|
|
|
|
|
|
|
2025-12-19 14:29:52 +01:00
|
|
|
|
if not file_exists(pfad):
|
2025-12-18 22:00:31 +01:00
|
|
|
|
return pruef_ergebnis(
|
|
|
|
|
|
ok=False,
|
|
|
|
|
|
meldung=f"Die Datei '{self.pfad}' wurde nicht gefunden.",
|
|
|
|
|
|
aktion="datei_nicht_gefunden",
|
2025-12-19 14:29:52 +01:00
|
|
|
|
kontext=pfad,
|
2025-12-02 20:55:51 +01:00
|
|
|
|
)
|
|
|
|
|
|
|
2025-12-18 22:00:31 +01:00
|
|
|
|
# -----------------------------------------------------
|
|
|
|
|
|
# 3. Datei existiert → Erfolg
|
|
|
|
|
|
# -----------------------------------------------------
|
|
|
|
|
|
return pruef_ergebnis(
|
|
|
|
|
|
ok=True,
|
|
|
|
|
|
meldung="Datei gefunden.",
|
|
|
|
|
|
aktion="ok",
|
2025-12-19 14:29:52 +01:00
|
|
|
|
kontext=pfad,
|
2025-12-18 22:00:31 +01:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# ---------------------------------------------------------
|
|
|
|
|
|
# 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",
|
2025-12-19 14:29:52 +01:00
|
|
|
|
kontext=None,
|
2025-12-18 22:00:31 +01:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# 2. Standarddatei verfügbar → Nutzer fragen, ob sie verwendet werden soll
|
|
|
|
|
|
if self.standarddatei:
|
|
|
|
|
|
return pruef_ergebnis(
|
|
|
|
|
|
ok=False,
|
2025-12-19 14:29:52 +01:00
|
|
|
|
meldung=(
|
|
|
|
|
|
f"Es wurde keine Datei angegeben. "
|
|
|
|
|
|
f"Soll die Standarddatei '{self.standarddatei}' verwendet werden?"
|
|
|
|
|
|
),
|
2025-12-18 22:00:31 +01:00
|
|
|
|
aktion="standarddatei_vorschlagen",
|
2025-12-19 14:29:52 +01:00
|
|
|
|
kontext=self._pfad(self.standarddatei),
|
2025-12-18 22:00:31 +01:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# 3. Temporäre Datei erlaubt → Nutzer fragen, ob temporär gearbeitet werden soll
|
|
|
|
|
|
if self.temporaer_erlaubt:
|
|
|
|
|
|
return pruef_ergebnis(
|
|
|
|
|
|
ok=False,
|
2025-12-19 14:29:52 +01:00
|
|
|
|
meldung=(
|
|
|
|
|
|
"Es wurde keine Datei angegeben. "
|
|
|
|
|
|
"Soll eine temporäre Datei erzeugt werden?"
|
|
|
|
|
|
),
|
2025-12-18 22:00:31 +01:00
|
|
|
|
aktion="temporaer_erlaubt",
|
2025-12-19 14:29:52 +01:00
|
|
|
|
kontext=None,
|
2025-12-18 22:00:31 +01:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# 4. Leereingabe nicht erlaubt → Fehler
|
|
|
|
|
|
return pruef_ergebnis(
|
|
|
|
|
|
ok=False,
|
|
|
|
|
|
meldung="Es wurde keine Datei angegeben.",
|
|
|
|
|
|
aktion="leereingabe_nicht_erlaubt",
|
2025-12-19 14:29:52 +01:00
|
|
|
|
kontext=None,
|
2025-12-02 20:55:51 +01:00
|
|
|
|
)
|