2025-12-17 17:45:18 +01:00
|
|
|
|
# Linkpruefer.py – Qt5/Qt6-kompatibel über qt_compat
|
|
|
|
|
|
|
|
|
|
|
|
from modules.qt_compat import (
|
|
|
|
|
|
QEventLoop,
|
|
|
|
|
|
QUrl,
|
|
|
|
|
|
QNetworkRequest,
|
|
|
|
|
|
QNetworkReply
|
|
|
|
|
|
)
|
|
|
|
|
|
|
2025-12-02 20:55:51 +01:00
|
|
|
|
from qgis.core import QgsNetworkAccessManager
|
2025-12-17 17:45:18 +01:00
|
|
|
|
from modules.pruef_ergebnis import PruefErgebnis
|
|
|
|
|
|
|
2025-12-02 20:55:51 +01:00
|
|
|
|
|
|
|
|
|
|
class Linkpruefer:
|
|
|
|
|
|
"""Prüft den Link mit QgsNetworkAccessManager und klassifiziert Anbieter nach Attribut."""
|
|
|
|
|
|
|
|
|
|
|
|
ANBIETER_TYPEN: dict[str, str] = {
|
|
|
|
|
|
"REST": "REST",
|
|
|
|
|
|
"WFS": "WFS",
|
|
|
|
|
|
"WMS": "WMS",
|
|
|
|
|
|
"OGR": "OGR"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
def __init__(self, link: str, anbieter: str):
|
|
|
|
|
|
self.link = link
|
|
|
|
|
|
self.anbieter = anbieter.upper().strip() if anbieter else ""
|
|
|
|
|
|
self.network_manager = QgsNetworkAccessManager()
|
|
|
|
|
|
|
|
|
|
|
|
def klassifiziere_anbieter(self):
|
|
|
|
|
|
typ = self.ANBIETER_TYPEN.get(self.anbieter, self.anbieter)
|
|
|
|
|
|
quelle = "remote" if self.link.startswith(("http://", "https://")) else "local"
|
2025-12-17 17:45:18 +01:00
|
|
|
|
return {"typ": typ, "quelle": quelle}
|
2025-12-02 20:55:51 +01:00
|
|
|
|
|
|
|
|
|
|
def pruefe_link(self):
|
|
|
|
|
|
fehler = []
|
|
|
|
|
|
warnungen = []
|
|
|
|
|
|
|
|
|
|
|
|
if not self.link:
|
|
|
|
|
|
fehler.append("Link fehlt.")
|
|
|
|
|
|
return PruefErgebnis(False, fehler=fehler, warnungen=warnungen)
|
2025-12-17 17:45:18 +01:00
|
|
|
|
|
2025-12-02 20:55:51 +01:00
|
|
|
|
if not self.anbieter or not self.anbieter.strip():
|
|
|
|
|
|
fehler.append("Anbieter muss gesetzt werden und darf nicht leer sein.")
|
|
|
|
|
|
|
2025-12-17 17:45:18 +01:00
|
|
|
|
# Remote-Links prüfen
|
2025-12-02 20:55:51 +01:00
|
|
|
|
if self.link.startswith(("http://", "https://")):
|
|
|
|
|
|
request = QNetworkRequest(QUrl(self.link))
|
|
|
|
|
|
reply = self.network_manager.head(request)
|
|
|
|
|
|
|
|
|
|
|
|
loop = QEventLoop()
|
|
|
|
|
|
reply.finished.connect(loop.quit)
|
2025-12-17 17:45:18 +01:00
|
|
|
|
loop.exec() # Qt5/Qt6-kompatibel über qt_compat
|
2025-12-02 20:55:51 +01:00
|
|
|
|
|
2025-12-17 17:45:18 +01:00
|
|
|
|
# Fehlerprüfung Qt5/Qt6-kompatibel
|
|
|
|
|
|
if reply.error() != QNetworkReply.NetworkError.NoError:
|
2025-12-02 20:55:51 +01:00
|
|
|
|
fehler.append(f"Verbindungsfehler: {reply.errorString()}")
|
|
|
|
|
|
else:
|
2025-12-17 17:45:18 +01:00
|
|
|
|
status = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute)
|
2025-12-02 20:55:51 +01:00
|
|
|
|
if status is None or status < 200 or status >= 400:
|
|
|
|
|
|
fehler.append(f"Link nicht erreichbar: HTTP {status}")
|
2025-12-17 17:45:18 +01:00
|
|
|
|
|
2025-12-02 20:55:51 +01:00
|
|
|
|
reply.deleteLater()
|
2025-12-17 17:45:18 +01:00
|
|
|
|
|
2025-12-02 20:55:51 +01:00
|
|
|
|
else:
|
2025-12-17 17:45:18 +01:00
|
|
|
|
# Lokale Pfade: Plausibilitätscheck
|
2025-12-02 20:55:51 +01:00
|
|
|
|
if "." not in self.link.split("/")[-1]:
|
|
|
|
|
|
warnungen.append("Der lokale Link sieht ungewöhnlich aus.")
|
|
|
|
|
|
|
2025-12-17 17:45:18 +01:00
|
|
|
|
return PruefErgebnis(
|
|
|
|
|
|
len(fehler) == 0,
|
|
|
|
|
|
daten=self.klassifiziere_anbieter(),
|
|
|
|
|
|
fehler=fehler,
|
|
|
|
|
|
warnungen=warnungen
|
|
|
|
|
|
)
|
2025-12-02 20:55:51 +01:00
|
|
|
|
|
|
|
|
|
|
def ausfuehren(self):
|
|
|
|
|
|
return self.pruefe_link()
|