get_plugin_root() löst keine Symlinks/Junctions mehr auf (Verfahrensgebiet #50) #62

Merged
Daniel merged 1 commits from bugfix/50-get-plugin-root-junction into unstable 2026-09-17 14:16:21 +00:00
Member

Was

Ursache von Verfahrensgebiet #50 ("QML-Dateien greifen nicht") behoben: get_plugin_root()
löste über .resolve() Symlinks/Junctions zum echten Zielverzeichnis auf. Im per
link_qgis_profile.py verknüpften Dev-Setup landete die Funktion dadurch beim Workspace-Root
statt beim QGIS-Plugin-Ordner – alle Aufrufer (Stilpruefer, apply_style in sn_basis/sn_plan41,
Datenschreiber, vln_api_logic, tab_a_logic) fanden ihre Assets nicht. Issue: Verfahrensgebiet #50

Wie geprüft

  • python scripts/run_tests.py sn_basis --baseline: 90/91 bestanden, kein NEU ROT (der eine
    Fehlschlag ist der bekannte, unabhängige openpyxl-Umgebungsfehler, Basis #21).
  • Neuer Test test_get_plugin_root_folgt_keiner_verzeichnisverknuepfung legt eine echte
    Verzeichnisverknüpfung an (Symlink, unter Windows per Junction wie link_qgis_profile.py)
    und zeigt den Fehler vor dem Fix rot, danach grün.
  • QGIS-Test: empfohlen, aber noch nicht durchgeführt – einmal mit link_qgis_profile.py
    verknüpft gegenprüfen, dass QML-Stile jetzt wirklich angewendet werden (die Debug-print()s
    in apply_style()/LayerLoader.apply_style() zeigen den aufgelösten Pfad).

Änderungen an Verträgen

keine – get_plugin_root()s Signatur und Rückgabetyp bleiben gleich, nur die interne
Pfadauflösung ändert sich. Für ZIP-/Repository-Installationen (kein Symlink im Plugin-Ordner)
ist das Verhalten identisch zu vorher.

Übergabenotiz

Aufgabe: Verfahrensgebiet #50 – Ursache für nicht angewendete QML-Stile beheben.
Stand: fertig, QGIS-Gegenprobe mit link_qgis_profile.py-Setup steht noch aus.
Geändert:

  • functions/sys_wrapper.py: get_plugin_root() nutzt .absolute() statt .resolve().
  • tests/test_sys_wrapper.py: neue Testdatei, ein Test mit echter Verzeichnisverknüpfung.
  • changelog.txt: Bugfix-Eintrag ergänzt.
    Nachweis: siehe „Wie geprüft“.
    Entscheidungen/Annahmen: Die Debug-print()-Aufrufe in ly_style_wrapper.apply_style()
    und LayerLoader.apply_style() (seit März 2026 unbereinigt) habe ich bewusst nicht
    angefasst – das ist ein eigenes Aufräumthema, nicht Teil dieses Fixes.
    Offen / nächste Schritte:
  1. Nach Merge: einmal in einer echten link_qgis_profile.py-Verknüpfung in QGIS gegenprüfen,
    dass Stile jetzt greifen (Verfahrensgebiet #50 kann dann geschlossen werden).
  2. Debug-print()s in beiden apply_style()-Implementierungen aufräumen (separates Ticket).
    Wissensbasis: nichts Neues – der Fund ist bereits als Kommentar in Verfahrensgebiet #50
    dokumentiert.
    Kontext für die nächste Sitzung: functions/sys_wrapper.py, functions/ly_style_wrapper.py,
    modules/LayerLoader.py.

Checkliste

  • Nur Änderungen zum Issue
  • Keine direkten Qt/QGIS-Importe, keine Debug-print
  • changelog.txt ergänzt
  • Wissensbasis nachgezogen (Kommentar in Verfahrensgebiet #50 vorhanden)
## Was Ursache von Verfahrensgebiet #50 ("QML-Dateien greifen nicht") behoben: `get_plugin_root()` löste über `.resolve()` Symlinks/Junctions zum echten Zielverzeichnis auf. Im per `link_qgis_profile.py` verknüpften Dev-Setup landete die Funktion dadurch beim Workspace-Root statt beim QGIS-Plugin-Ordner – alle Aufrufer (Stilpruefer, apply_style in sn_basis/sn_plan41, Datenschreiber, vln_api_logic, tab_a_logic) fanden ihre Assets nicht. Issue: Verfahrensgebiet #50 ## Wie geprüft - `python scripts/run_tests.py sn_basis --baseline`: 90/91 bestanden, kein NEU ROT (der eine Fehlschlag ist der bekannte, unabhängige `openpyxl`-Umgebungsfehler, Basis #21). - Neuer Test `test_get_plugin_root_folgt_keiner_verzeichnisverknuepfung` legt eine echte Verzeichnisverknüpfung an (Symlink, unter Windows per Junction wie `link_qgis_profile.py`) und zeigt den Fehler vor dem Fix rot, danach grün. - QGIS-Test: empfohlen, aber noch nicht durchgeführt – einmal mit `link_qgis_profile.py` verknüpft gegenprüfen, dass QML-Stile jetzt wirklich angewendet werden (die Debug-`print()`s in `apply_style()`/`LayerLoader.apply_style()` zeigen den aufgelösten Pfad). ## Änderungen an Verträgen keine – `get_plugin_root()`s Signatur und Rückgabetyp bleiben gleich, nur die interne Pfadauflösung ändert sich. Für ZIP-/Repository-Installationen (kein Symlink im Plugin-Ordner) ist das Verhalten identisch zu vorher. ## Übergabenotiz **Aufgabe:** Verfahrensgebiet #50 – Ursache für nicht angewendete QML-Stile beheben. **Stand:** fertig, QGIS-Gegenprobe mit `link_qgis_profile.py`-Setup steht noch aus. **Geändert:** - `functions/sys_wrapper.py`: `get_plugin_root()` nutzt `.absolute()` statt `.resolve()`. - `tests/test_sys_wrapper.py`: neue Testdatei, ein Test mit echter Verzeichnisverknüpfung. - `changelog.txt`: Bugfix-Eintrag ergänzt. **Nachweis:** siehe „Wie geprüft“. **Entscheidungen/Annahmen:** Die Debug-`print()`-Aufrufe in `ly_style_wrapper.apply_style()` und `LayerLoader.apply_style()` (seit März 2026 unbereinigt) habe ich bewusst **nicht** angefasst – das ist ein eigenes Aufräumthema, nicht Teil dieses Fixes. **Offen / nächste Schritte:** 1. Nach Merge: einmal in einer echten `link_qgis_profile.py`-Verknüpfung in QGIS gegenprüfen, dass Stile jetzt greifen (Verfahrensgebiet #50 kann dann geschlossen werden). 2. Debug-`print()`s in beiden `apply_style()`-Implementierungen aufräumen (separates Ticket). **Wissensbasis:** nichts Neues – der Fund ist bereits als Kommentar in Verfahrensgebiet #50 dokumentiert. **Kontext für die nächste Sitzung:** `functions/sys_wrapper.py`, `functions/ly_style_wrapper.py`, `modules/LayerLoader.py`. ## Checkliste - [x] Nur Änderungen zum Issue - [x] Keine direkten Qt/QGIS-Importe, keine Debug-`print` - [x] `changelog.txt` ergänzt - [x] Wissensbasis nachgezogen (Kommentar in Verfahrensgebiet #50 vorhanden)
Daniel added 1 commit 2026-09-17 14:16:10 +00:00
Ursache für "QML-Dateien greifen nicht" (Verfahrensgebiet #50): get_plugin_root()
nutzte Path(__file__).resolve(), was Junctions zum echten Zielverzeichnis
auflöst. link_qgis_profile.py verknüpft die Klone im QGIS-Profil per Junction
unter ihrem Paketnamen (sn_verfahrensgebiet, sn_plan41, ...) - .resolve()
sprang dabei zurück zum Workspace-Root, wo die Klone unter ihrem Repo-Namen
(Plugin_SN_*) liegen. Alle Aufrufer von get_plugin_root() (Stilpruefer,
ly_style_wrapper.apply_style, LayerLoader.apply_style, Datenschreiber,
sn_plan41 vln_api_logic/tab_a_logic) suchten dadurch am falschen Ort.

.absolute() statt .resolve(): __file__ liefert beim Import über die Junction
bereits den korrekten, unaufgelösten Pfad - nichts, was aufgelöst werden
müsste. Für echte ZIP-/Repository-Installationen (kein Symlink im Plugin-
Ordner) ändert sich nichts, da dort nichts aufzulösen ist.

Test test_get_plugin_root_folgt_keiner_verzeichnisverknuepfung legt eine
echte Verzeichnisverknüpfung an (Symlink, unter Windows via Junction wie
link_qgis_profile.py) und zeigt den Fehler vor dem Fix rot, danach grün.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Daniel merged commit 1705d5f988 into unstable 2026-09-17 14:16:21 +00:00
Daniel deleted branch bugfix/50-get-plugin-root-junction 2026-09-17 14:16:21 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: AG_QGIS/Plugin_SN_Basis#62