Drei getrennte Flurstuecke-Ladelogiken auf eine konsolidiert (#47)
handle_flurst_aus_gemarkungen() hatte eine eigene Kopie des "Layer bereits vorhanden"-Dialogs und rief lade_flurstuecke_per_gemarkung direkt auf, statt die bereits vorhandene, getestete Logik in flurstueck_alkis() wiederzuverwenden. Grund war, dass ohne_dialog=True zwei unabhaengige Dinge zugleich abschaltete: die Schluessel-Abfrage per ask_text UND den Existenz-Dialog samt Anhaengen-Dedup. Neuer Parameter ohne_schluessel_abfrage trennt beides: er ueberspringt nur die Schluessel-Abfrage (Schluessel kommen bereits aus der Gemarkungen-Layer-Auswahl), der Existenz-Dialog mit Dedup bleibt aktiv. ohne_dialog bleibt fuer die automatischen Pipelines unveraendert. handle_flurst_alkis() und handle_flurst_aus_gemarkungen() teilen sich jetzt zusaetzlich die Nachbehandlung des Ladeergebnisses (_uebernimm_flurstuecke_ergebnis). lade_flurstuecke_per_gemarkung() wird wieder nur noch von einer Stelle aus aufgerufen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -75,7 +75,7 @@ def _check_existing_flurstueck_layer(tab_widget):
|
||||
return None, LoadStatus.NONE
|
||||
|
||||
|
||||
def vorhandene_kennzeichen(layer) -> set:
|
||||
def _vorhandene_kennzeichen(layer) -> set:
|
||||
"""Liefert die ``flurstueckskennzeichen``-Werte, die ``layer`` bereits enthält.
|
||||
|
||||
Fehlt das Feld, wird eine leere Menge zurückgegeben (kein Abgleich möglich).
|
||||
@@ -171,6 +171,7 @@ def flurstueck_alkis(
|
||||
vorgabe_namen: Optional[List[str]] = None,
|
||||
bbox=None,
|
||||
ohne_dialog: bool = False,
|
||||
ohne_schluessel_abfrage: bool = False,
|
||||
) -> Tuple[Optional[QgsVectorLayer], LoadStatus]:
|
||||
"""Lädt Flurstücke aus dem ALKIS-WFS anhand von Gemarkungsschlüsseln.
|
||||
|
||||
@@ -184,17 +185,27 @@ def flurstueck_alkis(
|
||||
Eltern-Widget für Dialoge.
|
||||
vorgabe_schluessel : list of str, optional
|
||||
Vorausgefüllte Gemarkungsnummern (4-stellig). Im Dialog als Standard
|
||||
angezeigt; bei ``ohne_dialog=True`` direkt verwendet.
|
||||
angezeigt; bei ``ohne_dialog=True`` oder ``ohne_schluessel_abfrage=True``
|
||||
direkt verwendet.
|
||||
vorgabe_namen : list of str, optional
|
||||
Menschenlesbare Gemarkungsbezeichnungen für den Dialog-Hinweistext.
|
||||
bbox :
|
||||
Nicht mehr verwendet (WFS unterstützt keinen BBox-Filter). Bleibt
|
||||
für Rückwärtskompatibilität in der Signatur erhalten.
|
||||
ohne_dialog : bool, optional
|
||||
``True``: Überspringt die Gemarkungsschlüssel-Nutzerabfrage und verwendet
|
||||
``vorgabe_schluessel`` direkt. Vorhandene Layer werden ohne Rückfrage
|
||||
ersetzt. Gedacht für die automatische Pipeline
|
||||
(``verfahrensgebiet_alkis_komplett``). Standard: ``False``.
|
||||
``True``: Überspringt sowohl die Gemarkungsschlüssel-Nutzerabfrage (wie
|
||||
``ohne_schluessel_abfrage``) als auch die Rückfrage bei einem bereits
|
||||
vorhandenen Layer – dieser wird dann immer ersetzt. Gedacht für die
|
||||
automatischen Pipelines (``verfahrensgebiet_alkis_komplett``,
|
||||
``verfahrensgebiet_shape_komplett``). Standard: ``False``.
|
||||
ohne_schluessel_abfrage : bool, optional
|
||||
``True``: Überspringt nur die Gemarkungsschlüssel-Nutzerabfrage und
|
||||
verwendet ``vorgabe_schluessel`` direkt; die Rückfrage bei einem
|
||||
bereits vorhandenen Layer (Überschreiben/Anhängen/Abbrechen, inkl.
|
||||
Dedup beim Anhängen) bleibt aktiv. Für Aufrufer, die die Schlüssel
|
||||
bereits anderweitig ermittelt haben (z. B. aus einer Layer-Auswahl),
|
||||
aber trotzdem interaktiv mit einem bestehenden Layer umgehen wollen.
|
||||
Wirkungslos, wenn ``ohne_dialog=True`` gesetzt ist. Standard: ``False``.
|
||||
|
||||
Returns
|
||||
-------
|
||||
@@ -220,8 +231,8 @@ def flurstueck_alkis(
|
||||
append_target = existing
|
||||
|
||||
# --- Schritt 2: Gemarkungsschlüssel bestimmen -------------------------
|
||||
if ohne_dialog:
|
||||
# Pipeline-Modus: vorgabe_schluessel direkt verwenden, kein Dialog
|
||||
if ohne_dialog or ohne_schluessel_abfrage:
|
||||
# vorgabe_schluessel direkt verwenden, kein ask_text-Dialog
|
||||
if not vorgabe_schluessel:
|
||||
return None, LoadStatus.NONE
|
||||
schluessel_liste = [s.strip() for s in vorgabe_schluessel if s.strip()]
|
||||
@@ -272,7 +283,7 @@ def flurstueck_alkis(
|
||||
alle_feats = list(layer.getFeatures())
|
||||
neue_feats = alle_feats
|
||||
if layer.fields().indexFromName(FELD_FLURSTUECKSKENNZEICHEN) >= 0:
|
||||
vorhandene = vorhandene_kennzeichen(append_target)
|
||||
vorhandene = _vorhandene_kennzeichen(append_target)
|
||||
neue_feats = [
|
||||
f for f in alle_feats
|
||||
if str(f[FELD_FLURSTUECKSKENNZEICHEN] or "").strip() not in vorhandene
|
||||
|
||||
Reference in New Issue
Block a user