Erster Stand des Repositories AG_QGIS/Projektwissen (bisher Arbeitstitel "Workspace", ADR 0006). Der lokale Ordner heisst weiter AG_QGIS, weil darin auch die Plugin-Klone liegen. Git verbindlich (ADR 0007), aus dem bisherigen Wiki-Konzept entwickelt: - docs/leitfaden/05_git_arbeitsweise.md mit Kanal-Kette, Branch-Namen und Gitea-Branch-Schutz. - Der Einstiegspunkt eines Fixes richtet sich nach dem Kanal, in dem der Fehler sitzt; ein Fix an testing oder stable ist erst mit der Rueckfuehrung nach unten abgeschlossen. Das fehlte bisher. - Der stabile Kanal heisst stable, nicht main: der Release-Workflow in Repository:hidden/workflows fuehrt git checkout "$CHANNEL" aus, der Branchname muss also dem Kanalnamen entsprechen. Er existiert in keinem Plugin-Repo und ist vom Maintainer anzulegen. - Der Mensch drueckt ab: .claude/settings.json sperrt push, merge, tag. - scripts/hallo.py und /hallo holen den Stand aller Klone, per Fast-Forward wo gefahrlos; nie mergen, stashen oder verwerfen. Ticketzugriff: - scripts/gitea.py liest Issues, Kommentare und PRs ueber die oeffentliche API, ohne Token, nur GET. Schreibendes nur als Entwurf in entwuerfe/. - Skill sn-ticket. Tests (ADR 0009): - docs/leitfaden/06_tests.md: Testebenen, Testpflicht, und wie eine Fachperson beurteilt, ob Tests fachlich sinnvoll sind. - scripts/testkatalog.py erzeugt docs/tests/testkatalog.md per ast-Parsing, ohne Import und ohne QGIS. Befund: nur 100 von 332 Tests haben einen Docstring, sn_basis keinen einzigen von 87. - Vorlage und erste Testkonzept-Seite mit Mermaid. Dabei gefunden und gegen origin geprueft: _ermittle_gebietstyp_aus_fbschl hat keinen Test, obwohl PR #44/#45 genau diese Funktion tolerant gemacht hat. - docs/konzept/07_qgis_tests_plan.md: Stufenplan fuer Tests gegen echtes QGIS. Dabei aufgefallen: QGIS 3.40 ist seit Januar 2026 End of Life, qgis_min steht aber noch darauf. Werkzeuge (ADR 0008): - 04_werkzeuge_einrichten.md nur noch Claude Code als CLI und in VS Code. - .vscode/ entfernt, brauchbare Einstellungen als persoenliche Vorlage. Ausserdem: README als Einstieg neu aufgebaut, Mermaid-Diagramm in schnittstellen.md repariert (unmaskierte Klammern, rendert seither nicht). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2.9 KiB
2.9 KiB
name, description
| name | description |
|---|---|
| sn-neues-fachplugin | Neues sn_*-Fachplugin oder neuen Tab nach dem Integrationsvertrag von sn_basis anlegen (Registrierung in Menü/Toolbar, DockManager, BaseDockWidget, Tabs, Services, Release-Dateien). Verwenden bei "neues Plugin", "Plugin anlegen", "FLT/Topografie/Widmung ausbauen", "neuen Tab hinzufügen". |
Neues Fachplugin anlegen
Vertrag: docs/architektur/schnittstellen.md Abschnitte 1–2. Minimalmuster: Plugin_SN_Widmung/. Vollständiges Muster mit Services: Plugin_SN_Verfahrensgebiet/main.py und ui/dockwidget.py.
Dateien (Paketname sn_<name>, Repo Plugin_SN_<Name>)
__init__.py classFactory(iface) → Klasse aus main.py
main.py Klasse <Name>: __init__(iface), initGui(), unload(), run()
ui/dockwidget.py class DockWidget(BaseDockWidget): tabs = [ArbeitsTab, PrintTab, SettingsTab]
ui/tabs/<tab>.py class <Tab>(QWidget): tab_title = "…"; optional set_services(...), cleanup()
functions/… Fachfunktionen (keine Qt-Importe außer über Wrapper)
tests/__init__.py, tests/test_main.py Mock-Modus (Muster: Plugin_SN_Verfahrensgebiet/tests/test_main.py)
changelog.txt, README.md, .gitignore
.gitea/workflows/release.yaml Kopie aus einem bestehenden Plugin (unverändert)
.gitea/templates/metadata.template Name, Beschreibung, Homepage/Tracker/Repository-URLs dieses Repos, qgisMinimumVersion=3.40, supportsQt6=true
main.py – Pflichtverhalten
initGui():basis = plugins.get("sn_basis"); ohnebasis.uinichts tun (Basis ruft später nach). Sonstself.action = basis.ui.add_action(self.plugin_name, self.run, tooltip=…, priority=<frei, 10/20/30 sind vergeben>), dannbasis.ui.finalize_menu_and_toolbar().run(): Dock erzeugen,setObjectName("sn_dock_<name klein>"),dock.action = self.action,DockManager.show(dock),basis.ui.set_active_plugin(self.action).unload():iface.removeDockWidget,deleteLater,basis.ui.remove_action(self.action).- Services:
Pruefmanager(ui_modus="qgis")undDataGrabber(pruefmanager=…)in__init__anlegen und an das Dock geben, wenn Prüfungen/Datenabruf gebraucht werden.
Imports
Nur from qgis.utils import plugins (main.py) und sn_basis.functions.*/sn_basis.modules.*/sn_basis.ui.*. Kein qgis.core, kein PyQt*.
Registrieren im Workspace
workspace.toml: Eintrag[[repos]]mitpaket,rolle,tests.docs/architektur/modulkarte.mdundschnittstellen.md(Priorität) ergänzen.- Repo-
AGENTS.md/CLAUDE.mdausdocs/vorlagen/AGENTS.repo.mdundCLAUDE.repo.md. - Gitea: Repo-Variable
ZIP_FOLDER=sn_<name>und Secret/Variablen wie bei den anderen Plugins (Maintainer).
Abnahme
python scripts/run_tests.py sn_<name>grün (mindestenstest_main.py).- In QGIS: Plugin erscheint in Menü/Toolbar „LNO Sachsen“, Dock öffnet, andere Docks schließen, Unload hinterlässt keine Reste.