Files
API_Karte_QGISDemo/tools/headless_dienste_test.py
T

90 lines
3.5 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
"""Die Linkliste im Plugin: holen, Layer bauen, Stil anwenden — gegen die echte Schnittstelle.
Aufruf (macOS, QGIS 4.2 im Bundle; VLN_TOKEN = API-Key aus dem Login):
APP=/Applications/QGIS-final-4_2_0.app; LIB="$APP/Contents/Resources/python3.12"
QT_QPA_PLATFORM=offscreen PROJ_DATA="$APP/Contents/Resources/qgis/proj" \\
PYTHONPATH="$LIB:$LIB/lib-dynload:$LIB/site-packages" \\
"$APP/Contents/MacOS/python3.12" tools/headless_dienste_test.py
"""
import os, sys, tempfile, time
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from qgis.core import QgsApplication, QgsNetworkAccessManager, QgsProject
app = QgsApplication([], True)
QgsApplication.setPrefixPath("/Applications/QGIS-final-4_2_0.app/Contents/MacOS", True)
QgsApplication.setPluginPath("/Applications/QGIS-final-4_2_0.app/Contents/PlugIns/qgis")
app.initQgis()
from qgis.PyQt.QtNetwork import QNetworkProxyFactory, QNetworkDiskCache
QNetworkProxyFactory.setUseSystemConfiguration(False)
c = QNetworkDiskCache(); c.setCacheDirectory(tempfile.mkdtemp())
QgsNetworkAccessManager.instance().setCache(c)
from vln_karten import linkliste as LL
from vln_karten.api_client import KartenApiClient
BASE, KEY, VKZ = "https://api.flurneuordnung-sachsen.de/v2", os.environ["VLN_TOKEN"], "27027"
FEHLER = []
def pruefe(b, t):
print((" OK " if b else " FEHL ") + t)
if not b:
FEHLER.append(t)
client = KartenApiClient(base_url=BASE, api_key=KEY)
print("== 1) Liste holen ==")
t = time.time()
dienste = LL.dienste_laden(client, VKZ)
pruefe(len(dienste) > 0, "%d Dienste in %.2f s" % (len(dienste), time.time() - t))
pruefe(all({"name", "provider", "url", "herkunft"} <= set(d) for d in dienste),
"alle Felder vorhanden, die der Layerbau braucht")
print("== 2) Layer bauen, je Anbieter einer ==")
gebaut = {}
for d in dienste:
p = d["provider"]
if p in gebaut:
continue
t = time.time()
lyr = LL.layer_bauen(d)
ok = lyr is not None and lyr.isValid()
gebaut[p] = ok
pruefe(ok, "%-5s %-34s %s (%.1f s)" % (p, d["name"][:34],
"gueltig" if ok else (lyr.error().message()[:60] if lyr else "kein Layer"),
time.time() - t))
if ok and hasattr(lyr, "featureCount"):
print(" Features:", lyr.featureCount())
print("== 3) Stil aus der Datenbank anwenden ==")
mit_stil = [d for d in dienste if d.get("stil")]
if mit_stil:
d = mit_stil[0]
lyr = LL.layer_bauen(d)
if lyr is not None and lyr.isValid():
vorher = lyr.renderer().type() if hasattr(lyr, "renderer") and lyr.renderer() else "-"
ok, meldung = LL.stil_anwenden(lyr, BASE, d["id"], KEY)
nachher = lyr.renderer().type() if hasattr(lyr, "renderer") and lyr.renderer() else "-"
pruefe(ok, "Stil fuer '%s': %s (Renderer %s -> %s)" % (d["name"], meldung or "angewendet",
vorher, nachher))
else:
print(" (Layer nicht gueltig, Stil nicht pruefbar)")
else:
print(" (kein Eintrag mit Stil)")
print("== 4) ohne Stil meldet sauber ==")
ohne = [d for d in dienste if not d.get("stil")]
if ohne:
lyr = LL.layer_bauen(ohne[0])
if lyr is not None and lyr.isValid():
ok, meldung = LL.stil_anwenden(lyr, BASE, ohne[0]["id"], KEY)
pruefe(not ok and "kein Stil" in meldung, "Meldung statt Fehler: %s" % meldung)
app.exitQgis()
print("== %d Fehler ==" % len(FEHLER))
for f in FEHLER:
print(" -", f)
sys.exit(1 if FEHLER else 0)