90 lines
3.5 KiB
Python
90 lines
3.5 KiB
Python
# -*- 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)
|