forked from AG_QGIS/Plugin_SN_Basis
PruefManager und Daten aus P41 übertragen
This commit is contained in:
97
modules/Dateipruefer.py
Normal file
97
modules/Dateipruefer.py
Normal file
@@ -0,0 +1,97 @@
|
||||
import os
|
||||
from enum import Enum, auto
|
||||
|
||||
|
||||
# -------------------------------
|
||||
# ENUMS
|
||||
# -------------------------------
|
||||
class LeererPfadModus(Enum):#legt die modi fest, die für Dateipfade möglich sind
|
||||
VERBOTEN = auto() #ein leeres Eingabefeld stellt einen Fehler dar
|
||||
NUTZE_STANDARD = auto() #ein leeres Eingabefeld fordert zur Entscheidung auf: nutze Standard oder brich ab
|
||||
TEMPORAER_ERLAUBT = auto() #ein leeres Eingabefeld fordert zur Entscheidung auf: arbeite temporär oder brich ab.
|
||||
|
||||
|
||||
class DateiEntscheidung(Enum):#legt die Modi fest, wie mit bestehenden Dateien umgegangen werden soll (hat das das QGSFile-Objekt schon selbst?)
|
||||
ERSETZEN = auto()#Ergebnis der Nutzerentscheidung: bestehende Datei ersetzen
|
||||
ANHAENGEN = auto()#Ergebnis der Nutzerentscheidung: an bestehende Datei anhängen
|
||||
ABBRECHEN = auto()#bricht den Vorgang ab. (muss das eine definierte Option sein? oder geht das auch mit einem normalen Abbruch-Button)
|
||||
|
||||
|
||||
# -------------------------------
|
||||
# RÜCKGABEOBJEKT
|
||||
# -------------------------------
|
||||
#Das Dateiprüfergebnis wird an den Prüfmanager übergeben. Alle GUI-Abfragen werden im Prüfmanager behandelt.
|
||||
class DateipruefErgebnis:
|
||||
#Definition der Parameter und Festlegung auf den Parametertyp,bzw den Standardwert
|
||||
def __init__(self, erfolgreich: bool, pfad: str = None, temporär: bool = False,
|
||||
entscheidung: DateiEntscheidung = None, fehler: list = None):
|
||||
self.erfolgreich = erfolgreich
|
||||
self.pfad = pfad
|
||||
self.temporär = temporär
|
||||
self.entscheidung = entscheidung
|
||||
self.fehler = fehler or []
|
||||
|
||||
def __repr__(self):
|
||||
return (f"DateipruefErgebnis(erfolgreich={self.erfolgreich}, "
|
||||
f"pfad={repr(self.pfad)}, temporär={self.temporär}, "
|
||||
f"entscheidung={repr(self.entscheidung)}, fehler={repr(self.fehler)})")
|
||||
|
||||
# -------------------------------
|
||||
# DATEIPRÜFER
|
||||
# -------------------------------
|
||||
class Dateipruefer:
|
||||
def pruefe(self, pfad: str,
|
||||
leer_modus: LeererPfadModus,
|
||||
standardname: str = None,
|
||||
plugin_pfad: str = None,
|
||||
vorhandene_datei_entscheidung: DateiEntscheidung = None) -> DateipruefErgebnis: #Rückgabetypannotation; "Die Funktion "pruefe" gibt ein Objekt vom Typ "DateipruefErgebnis" zurück
|
||||
|
||||
# 1. Prüfe, ob das Eingabefeld leer ist
|
||||
if not pfad or pfad.strip() == "":#wenn der angegebene Pfad leer oder ungültig ist:
|
||||
if leer_modus == LeererPfadModus.VERBOTEN: #wenn der Modus "verboten" vorgegeben ist, gib zurück, dass der Test fehlgeschlagen ist
|
||||
return DateipruefErgebnis(
|
||||
erfolgreich=False,
|
||||
fehler=["Kein Pfad angegeben."]
|
||||
)
|
||||
elif leer_modus == LeererPfadModus.NUTZE_STANDARD:#wenn der Modus "Nutze_Standard" vorgegeben ist...
|
||||
if not plugin_pfad or not standardname:#wenn kein gültiger Pluginpfad angegeben ist oder die Standarddatei fehlt...
|
||||
return DateipruefErgebnis(
|
||||
erfolgreich=False,
|
||||
fehler=["Standardpfad oder -name fehlen."]#..gib zurück, dass der Test fehlgeschlagen ist
|
||||
)
|
||||
pfad = os.path.join(plugin_pfad, standardname)#...wenn es Standarddatei und Pluginpfad gibt...setze sie zum Pfad zusammen...
|
||||
elif leer_modus == LeererPfadModus.TEMPORAER_ERLAUBT:#wenn der Modus "temporär" vorgegeben ist,...
|
||||
return DateipruefErgebnis(#...gib zurück, dass das Prüfergebnis erfolgreich ist (Entscheidung, ob temporör gearbeitet werden soll oder nicht, kommt woanders)
|
||||
erfolgreich=True,
|
||||
pfad=None
|
||||
)
|
||||
|
||||
# 2. Existiert die Datei bereits?
|
||||
if os.path.exists(pfad):#wenn die Datei vorhanden ist...
|
||||
if not vorhandene_datei_entscheidung:#aber noch keine Entscheidung getroffen ist...
|
||||
return DateipruefErgebnis(
|
||||
erfolgreich=True,#ist die Prüfung erfolgreich, aber es muss noch eine Entscheidung verlangt werden
|
||||
pfad=pfad,
|
||||
entscheidung=None,
|
||||
fehler=["Datei existiert bereits – Entscheidung ausstehend."]
|
||||
)
|
||||
|
||||
if vorhandene_datei_entscheidung == DateiEntscheidung.ABBRECHEN:
|
||||
return DateipruefErgebnis(#...der Nutzer aber abgebrochen hat...
|
||||
erfolgreich=False,#ist die Prüfung fehlgeschlagen ISSUE: ergibt das Sinn?
|
||||
pfad=pfad,
|
||||
fehler=["Benutzer hat abgebrochen."]
|
||||
)
|
||||
|
||||
return DateipruefErgebnis(
|
||||
erfolgreich=True,
|
||||
pfad=pfad,
|
||||
entscheidung=vorhandene_datei_entscheidung
|
||||
)
|
||||
|
||||
# 3. Pfad gültig und Datei nicht vorhanden
|
||||
#wenn alle Varianten NICHT zutreffen, weil ein gültiger Pfad eingegeben wurde und die Datei noch nicht vorhanden ist:
|
||||
return DateipruefErgebnis(
|
||||
erfolgreich=True,
|
||||
pfad=pfad
|
||||
)
|
||||
Reference in New Issue
Block a user