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:
co-authored by
Claude Sonnet 5
parent
1b5a715c70
commit
8cea9022f0
@@ -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
|
||||
---
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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]
|
||||
@@ -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()
|
||||
Reference in New Issue
Block a user