52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
"""
|
||
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]
|