Länderkennung-Mapping portiert (Voraussetzung für Beteiligungsprüfung)

Portiert aus origin/unstable: sn_basis/functions/laenderkennung.py bildet
Plugin-Präfix -> zweistellige ALKIS-Länderkennung ab (aktuell nur Sachsen).
Wird von der neuen Beteiligungsprüfung in sn_verfahrensgebiet für die
Flurstückskennzeichen-Bildung genutzt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Michael Otto
2026-08-31 06:33:16 +02:00
co-authored by Claude Sonnet 5
parent 1b5a715c70
commit 8cea9022f0
4 changed files with 86 additions and 0 deletions
+3
View File
@@ -5,6 +5,9 @@
- Dialoge: Titel, Wappen-Icon, kompaktere Größe, Scrollbar-Fix und größenveränderbare Liste ergänzt
- Die drei Verfahrensgebiet-spezifischen ALKIS-Dialoge (BROR-Auswahl, Landkreis-Objektauswahl, Landkreis-Auswahl) sind aus sn_basis nach sn_verfahrensgebiet verschoben (functions/verfahrensgebiet_dialoge.py), da sie fachlich dorthin gehören
---
Version 26.8.1-unstable:
-Vergleich einer CSV aus dem BI-Server mit den Beteiligten Flurstücken lt. ALKIS
---
Version 26.7.1-unstable:
- Verfahrensgebiet als shape laden, inkl. Abgleich mit BROBOR-Objekt
---
+1
View File
@@ -21,6 +21,7 @@ from .ly_metadata_wrapper import (
)
from .ly_style_wrapper import apply_style
from .dialog_wrapper import ask_yes_no, ask_overwrite_append_cancel_custom, ask_ergaenzen_entfernen_ersetzen_abbrechen, ask_detailpruefung_oder_vg_laden
from .laenderkennung import get_laenderkennung, LAENDERKENNUNGEN
from .message_wrapper import (
_get_message_bar,
+51
View File
@@ -0,0 +1,51 @@
"""
sn_basis/functions/laenderkennung.py ALKIS-Länderkennung je Plugin-Präfix.
AGLB-länderspezifische Funktionen (z.B. Flurstückskennzeichen-Bildung) sollen
nicht hart auf Sachsen ("14") verdrahtet sein, sondern die Länderkennung über
dieses generische Mapping ermitteln. Für neue Bundesländer genügt ein weiterer
Eintrag in ``LAENDERKENNUNGEN`` die aufrufende Logik bleibt unverändert.
"""
#: Mapping von sn_*-Plugin-Präfix (ohne Unterstrich) auf die zweistellige
#: ALKIS-Länderkennung. Aktuell nur Sachsen befüllt; weitere Bundesländer
#: können hier ergänzt werden, sobald Schwesterplugins dafür existieren.
LAENDERKENNUNGEN: dict[str, str] = {
"sn": "14", # Sachsen
}
def get_laenderkennung(plugin_praefix: str | None = None) -> str:
"""Ermittelt die ALKIS-Länderkennung für einen Plugin-Präfix.
Parameters
----------
plugin_praefix : str, optional
Plugin-Präfix ohne Unterstrich, z.B. ``"sn"``. Wird kein Präfix
übergeben, wird er aus dem Package-Namen des aufrufenden Moduls
abgeleitet (``__name__`` des Aufrufers, erstes ``_``-Segment).
Returns
-------
str
Zweistellige Länderkennung, z.B. ``"14"``.
Raises
------
KeyError
Wenn für den ermittelten Präfix keine Länderkennung hinterlegt ist.
"""
if not plugin_praefix:
import inspect
frame = inspect.stack()[1]
caller_module = frame.frame.f_globals.get("__name__", "")
plugin_praefix = caller_module.split(".")[0].split("_")[0]
plugin_praefix = plugin_praefix.lower()
if plugin_praefix not in LAENDERKENNUNGEN:
raise KeyError(
f"Keine Länderkennung für Plugin-Präfix '{plugin_praefix}' hinterlegt. "
f"Bekannte Präfixe: {sorted(LAENDERKENNUNGEN)}"
)
return LAENDERKENNUNGEN[plugin_praefix]
+31
View File
@@ -0,0 +1,31 @@
"""sn_basis/tests/test_laenderkennung.py
Unit-Tests für :mod:`sn_basis.functions.laenderkennung`.
"""
import unittest
from sn_basis.functions.laenderkennung import get_laenderkennung, LAENDERKENNUNGEN
class TestGetLaenderkennung(unittest.TestCase):
def test_bekannter_praefix_gibt_kennung_zurueck(self):
self.assertEqual(get_laenderkennung("sn"), "14")
def test_praefix_gross_klein_unabhaengig(self):
self.assertEqual(get_laenderkennung("SN"), "14")
def test_unbekannter_praefix_wirft_keyerror(self):
with self.assertRaises(KeyError):
get_laenderkennung("xx")
def test_ohne_argument_wird_aus_aufrufendem_modul_abgeleitet(self):
# __name__ dieses Testmoduls beginnt mit "sn_basis" -> Präfix "sn"
self.assertEqual(get_laenderkennung(), "14")
def test_mapping_enthaelt_sachsen(self):
self.assertEqual(LAENDERKENNUNGEN.get("sn"), "14")
if __name__ == "__main__":
unittest.main()