Auf Wrapper umgestellt, Prüfarchitektur QT6-kompatibel gemacht (Nicht lauffähig)

This commit is contained in:
2025-12-18 22:00:31 +01:00
parent f64d56d4bc
commit e8fea163b5
31 changed files with 2791 additions and 889 deletions

View File

@@ -1,46 +1,59 @@
#stilpruefer.py
import os
from modules.pruef_ergebnis import PruefErgebnis
"""
sn_basis/modules/stilpruefer.py Prüfung und Anwendung von Layerstilen.
Verwendet ausschließlich qgisqt_wrapper und gibt pruef_ergebnis zurück.
"""
from sn_basis.functions.qgisqt_wrapper import (
apply_style,
)
from sn_basis.modules.pruef_ergebnis import pruef_ergebnis
class Stilpruefer:
"""
Prüft, ob ein angegebener Stilpfad gültig und nutzbar ist.
- Wenn kein Stil angegeben ist, gilt die Prüfung als erfolgreich.
- Wenn angegeben:
* Datei muss existieren
* Dateiendung muss '.qml' sein
Prüft, ob ein Stil auf einen Layer angewendet werden kann.
Die eigentliche Nutzerinteraktion übernimmt der Pruefmanager.
"""
def pruefe(self, stilpfad: str) -> PruefErgebnis:
# kein Stil angegeben -> erfolgreich, keine Warnung
if not stilpfad or stilpfad.strip() == "":
return PruefErgebnis(
erfolgreich=True,
daten={"stil": None},
warnungen=["Kein Stil angegeben."]
def __init__(self, layer, stil_pfad: str):
"""
layer: QGIS-Layer oder Mock-Layer
stil_pfad: relativer oder absoluter Pfad zum .qml-Stil
"""
self.layer = layer
self.stil_pfad = stil_pfad
# ---------------------------------------------------------
# Hauptfunktion
# ---------------------------------------------------------
def pruefe(self) -> pruef_ergebnis:
"""
Versucht, den Stil anzuwenden.
Rückgabe: pruef_ergebnis
"""
# Wrapper übernimmt:
# - Pfadberechnung
# - Existenzprüfung
# - loadNamedStyle
# - Fehlerbehandlung
# - Mock-Modus
erfolg, meldung = apply_style(self.layer, self.stil_pfad)
if erfolg:
return pruef_ergebnis(
ok=True,
meldung=f"Stil erfolgreich angewendet: {self.stil_pfad}",
aktion="ok",
pfad=self.stil_pfad,
)
fehler = []
warnungen = []
# Prüfung: Datei existiert?
if not os.path.exists(stilpfad):
fehler.append(f"Stildatei nicht gefunden: {stilpfad}")
# Prüfung: Endung .qml?
elif not stilpfad.lower().endswith(".qml"):
fehler.append(f"Ungültige Dateiendung für Stil: {stilpfad}")
else:
# Hinweis: alle Checks bestanden
return PruefErgebnis(
erfolgreich=True,
daten={"stil": stilpfad}
)
return PruefErgebnis(
erfolgreich=False if fehler else True,
daten={"stil": stilpfad},
fehler=fehler,
warnungen=warnungen
# Fehlerfall → Nutzerinteraktion nötig
return pruef_ergebnis(
ok=False,
meldung=meldung,
aktion="stil_nicht_anwendbar",
pfad=self.stil_pfad,
)