diff --git a/changelog.txt b/changelog.txt index f4e38bb..15ecd0e 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,4 @@ +- Testkatalog-Klassifizierung in Docstrings festgehalten: 43 als „vernachlässigbar" eingestufte Funktionen tragen jetzt den Vermerk „von Test abgesehen, weil vernachlässigbar", 41 Print-Bereich-Funktionen (`print_logic.py`, `print_layout.py`, `print_layout_baufreigabe.py`) den Vermerk „Test ausgesetzt, zunächst Refactor" – keine Verhaltensänderung - Tests für weitere zentrale Funktionen ergänzt: Verfahrensgebiet-Zustandsverwaltung, Dock-Verwaltung, Pruefmanager-/Dateipruefer-Entscheidungswege, Fundament-Wrapper (Pfade, Landkreise, Nachrichten, Layer-Existenz/-Stil, GPKG-Layer-Prüfung, QGIS-3/4-Geometriekompatibilität) und Projekteigenschaften-Tab (#65) - Tests für die Kernpipeline ergänzt: Datenabruf (WFS/REST/OGR-URL-Bau, Raumfilter), Datenschreiber (GPKG-Schreiben, Laden, Log), LayerLoader (CRS-Transformation, Raum-/Geometriefilter) und excel_importer (Linklisten-Import) waren zuvor ohne Testdatei (#63) - Bugfix: `get_plugin_root()` löst keine Symlinks/Junctions mehr auf – im per `link_qgis_profile.py` verknüpften Dev-Setup zeigte die Funktion sonst auf den Workspace-Root statt auf den QGIS-Plugin-Ordner, wodurch Assets von Fachplugins (z. B. QML-Stile in sn_verfahrensgebiet/sn_plan41) nicht gefunden wurden (Verfahrensgebiet #50) diff --git a/functions/dialog_wrapper.py b/functions/dialog_wrapper.py index 15833c8..47ea050 100644 --- a/functions/dialog_wrapper.py +++ b/functions/dialog_wrapper.py @@ -43,6 +43,8 @@ def show_info_dialog(title: str, message: str, parent: Any = None) -> None: """ Zeigt einen modalen Info-Dialog mit OK-Button. Blockiert bis der Nutzer bestätigt. + + von Test abgesehen, weil vernachlässigbar; HD 18.09.2026 """ try: if QT_VERSION == 0: # Mock-Modus @@ -59,7 +61,10 @@ def ask_text( default_text: str = "", parent: Any = None, ) -> tuple[str, bool]: - """Zeigt einen modalen Texteingabe-Dialog und gibt Text + OK-Status zurück.""" + """Zeigt einen modalen Texteingabe-Dialog und gibt Text + OK-Status zurück. + + von Test abgesehen, weil vernachlässigbar; HD 18.09.2026 + """ try: if QT_VERSION == 0: # Mock-Modus print(f"Mock-Modus: ask_text('{title}') -> '{default_text}'") @@ -154,6 +159,8 @@ def ask_ergaenzen_entfernen_ersetzen_abbrechen( ------- Literal["ergaenzen", "entfernen", "ersetzen", "abbrechen"] Genaue Entscheidung des Nutzers. + + von Test abgesehen, weil vernachlässigbar; HD 18.09.2026 """ if QT_VERSION == 0: # Mock-Modus print(f"Mock-Modus: ask_ergaenzen_entfernen_ersetzen_abbrechen('{title}') → abbrechen") @@ -207,6 +214,8 @@ def ask_detailpruefung_oder_vg_laden( ------- Literal["detailpruefung", "als_vg_laden", "abbrechen"] Genaue Entscheidung des Nutzers. + + von Test abgesehen, weil vernachlässigbar; HD 18.09.2026 """ if QT_VERSION == 0: # Mock-Modus print(f"Mock-Modus: ask_detailpruefung_oder_vg_laden('{title}') → abbrechen") @@ -256,6 +265,8 @@ def ask_detailpruefung_oder_abbrechen( ------- Literal["detailpruefung", "abbrechen"] Genaue Entscheidung des Nutzers. + + von Test abgesehen, weil vernachlässigbar; HD 18.09.2026 """ if QT_VERSION == 0: # Mock-Modus print(f"Mock-Modus: ask_detailpruefung_oder_abbrechen('{title}') → abbrechen") @@ -326,6 +337,7 @@ class ProgressDialog: pass def set_total(self, total: int) -> None: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" self.total = max(total, 1) if QT_VERSION == 0: return @@ -334,6 +346,7 @@ class ProgressDialog: self._dlg.setMaximum(self.total) def set_value(self, value: int) -> None: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" if QT_VERSION == 0: self.value = value return @@ -346,6 +359,7 @@ class ProgressDialog: QCoreApplication.processEvents() def set_label(self, text: str) -> None: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" if QT_VERSION == 0: self.label = text return @@ -355,6 +369,7 @@ class ProgressDialog: QCoreApplication.processEvents() def is_canceled(self) -> bool: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" if QT_VERSION == 0: return self._canceled @@ -364,6 +379,7 @@ class ProgressDialog: return self._canceled def close(self) -> None: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" if QT_VERSION == 0: return @@ -375,6 +391,8 @@ class ProgressDialog: Wird aufgerufen, nachdem ein modaler Subdialog (z. B. Auswahlbox) geschlossen wurde und der Fortschrittsdialog wieder sichtbar sein soll. + + von Test abgesehen, weil vernachlässigbar; HD 18.09.2026 """ if QT_VERSION == 0: return @@ -388,5 +406,6 @@ class ProgressDialog: def create_progress_dialog(total: int, title: str = "Fortschritt", label: str = "Verarbeite...") -> ProgressDialog: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" return ProgressDialog(total, title, label) diff --git a/functions/message_wrapper.py b/functions/message_wrapper.py index c6f75f3..4a504b2 100644 --- a/functions/message_wrapper.py +++ b/functions/message_wrapper.py @@ -65,6 +65,7 @@ def push_message( def info(title: str, text: str, duration: int = 5): + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" level = Qgis.MessageLevel.Info return push_message(level, title, text, duration) @@ -75,10 +76,12 @@ def warning(title: str, text: str, duration: int = 5): def error(title: str, text: str, duration: int = 5): + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" level = Qgis.MessageLevel.Critical return push_message(level, title, text, duration) def success(title: str, text: str, duration: int = 5): + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" level = Qgis.MessageLevel.Success return push_message(level, title, text, duration) diff --git a/functions/os_wrapper.py b/functions/os_wrapper.py index 5558072..f712112 100644 --- a/functions/os_wrapper.py +++ b/functions/os_wrapper.py @@ -43,6 +43,8 @@ _PathLike = Union[str, Path] def normalize_path(path: _PathLike) -> Path: """ Normalisiert einen Pfad OS-unabhängig. + + von Test abgesehen, weil vernachlässigbar; HD 18.09.2026 """ try: return Path(path).expanduser().resolve() @@ -53,12 +55,17 @@ def normalize_path(path: _PathLike) -> Path: def get_home_dir() -> Path: """ Liefert das Home-Verzeichnis des aktuellen Users. + + von Test abgesehen, weil vernachlässigbar; HD 18.09.2026 """ return Path.home() def is_absolute_path(path: _PathLike) -> bool: - """Prüft, ob ein Pfad absolut ist.""" + """Prüft, ob ein Pfad absolut ist. + + von Test abgesehen, weil vernachlässigbar; HD 18.09.2026 + """ try: return Path(path).is_absolute() except Exception: @@ -66,7 +73,10 @@ def is_absolute_path(path: _PathLike) -> bool: def basename(path: _PathLike) -> str: - """Gibt den finalen Namen des Pfades zurück (Dateiname oder Ordner).""" + """Gibt den finalen Namen des Pfades zurück (Dateiname oder Ordner). + + von Test abgesehen, weil vernachlässigbar; HD 18.09.2026 + """ try: return Path(path).name except Exception: @@ -94,7 +104,10 @@ def is_case_sensitive_fs() -> bool: def path_suffix(path: _PathLike) -> str: - """Gibt die Dateiendung eines Pfades zurück (inklusive Punkt).""" + """Gibt die Dateiendung eines Pfades zurück (inklusive Punkt). + + von Test abgesehen, weil vernachlässigbar; HD 18.09.2026 + """ try: return Path(path).suffix except Exception: diff --git a/functions/qgisui_wrapper.py b/functions/qgisui_wrapper.py index 5ca92f8..9bcc85f 100644 --- a/functions/qgisui_wrapper.py +++ b/functions/qgisui_wrapper.py @@ -129,6 +129,7 @@ except Exception: # --------------------------------------------------------- def get_main_window(): + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" try: return iface.mainWindow() except Exception: @@ -147,6 +148,7 @@ def open_layout_designer(layout: Any) -> Any: # --------------------------------------------------------- def add_dock_widget(area, dock: Any) -> None: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" try: iface.addDockWidget(area, dock) except Exception: @@ -154,6 +156,7 @@ def add_dock_widget(area, dock: Any) -> None: def remove_dock_widget(dock: Any) -> None: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" try: iface.removeDockWidget(dock) except Exception: @@ -199,6 +202,7 @@ def remove_menu(menu): # --------------------------------------------------------- def add_toolbar(toolbar: Any) -> None: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" try: iface.addToolBar(toolbar) except Exception: @@ -206,6 +210,7 @@ def add_toolbar(toolbar: Any) -> None: def remove_toolbar(toolbar: Any) -> None: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" try: iface.removeToolBar(toolbar) except Exception: diff --git a/functions/qt_wrapper.py b/functions/qt_wrapper.py index e94917b..a085b52 100644 --- a/functions/qt_wrapper.py +++ b/functions/qt_wrapper.py @@ -58,11 +58,17 @@ QIcon: Type[Any] = object def exec_dialog(dialog: Any) -> Any: - """Führt Dialog modal aus (Qt6: exec(), Qt5: exec_(), Mock: YES)""" + """Führt Dialog modal aus (Qt6: exec(), Qt5: exec_(), Mock: YES) + + von Test abgesehen, weil vernachlässigbar; HD 18.09.2026 + """ raise NotImplementedError("Qt nicht initialisiert") def debug_qt_status() -> None: - """Debug: Zeigt Qt-Status für Troubleshooting.""" + """Debug: Zeigt Qt-Status für Troubleshooting. + + von Test abgesehen, weil vernachlässigbar; HD 18.09.2026 + """ print(f"🔍 QT_VERSION: {QT_VERSION}") print(f"🔍 QMessageBox Typ: {getattr(QMessageBox, '__name__', type(QMessageBox).__name__)}") print(f"🔍 YES Wert: {YES} (Typ: {type(YES) if YES is not None else 'None'})") diff --git a/modules/DataGrabber.py b/modules/DataGrabber.py index b68a853..7cd2f59 100644 --- a/modules/DataGrabber.py +++ b/modules/DataGrabber.py @@ -66,7 +66,10 @@ class DataGrabber: # Öffentliche API # ------------------------------------------------------------------ def set_source(self, source: str) -> None: - """Setzt die aktuell zu untersuchende Rohquelle.""" + """Setzt die aktuell zu untersuchende Rohquelle. + + von Test abgesehen, weil vernachlässigbar; HD 18.09.2026 + """ self._source = source SourceType = str # "excel" | "datenbank" | "dienst" | "unbekannt" @@ -309,6 +312,7 @@ class DataGrabber: def _process_database_source( self, db_path: str ) -> Tuple[SourceDict, List[pruef_ergebnis]]: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" print(f"[DataGrabber] Debug: _process_database_source called, db_path={db_path}") source_dict: SourceDict = {} results: List[pruef_ergebnis] = [] @@ -320,6 +324,7 @@ class DataGrabber: def _process_service_source( self, link: str ) -> Tuple[SourceDict, List[pruef_ergebnis]]: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" source_dict: SourceDict = {} results: List[pruef_ergebnis] = [] return source_dict, results diff --git a/modules/LayerLoader.py b/modules/LayerLoader.py index 363aaa4..2410e41 100644 --- a/modules/LayerLoader.py +++ b/modules/LayerLoader.py @@ -40,6 +40,7 @@ class LayerLoader: _LAYER_TIMEOUT_MS = 30_000 # 30 Sekunden def _was_canceled(self, cancel_callback: Optional[Any]) -> bool: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" if not callable(cancel_callback): return False try: @@ -48,6 +49,7 @@ class LayerLoader: return False def _process_events(self) -> None: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" try: if hasattr(qt, "QCoreApplication") and hasattr(qt.QCoreApplication, "processEvents"): qt.QCoreApplication.processEvents() diff --git a/modules/Pruefmanager.py b/modules/Pruefmanager.py index 22238f7..fed4e63 100644 --- a/modules/Pruefmanager.py +++ b/modules/Pruefmanager.py @@ -43,6 +43,7 @@ class Pruefmanager: warning(thema, meldung) def report_summary(self, summary: dict) -> None: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" geladen = summary.get("geladen", []) fehler = summary.get("fehler", {}) ausserhalb = summary.get("ausserhalb", []) @@ -60,7 +61,10 @@ class Pruefmanager: # Allgemeine Nutzerinteraktionen # ------------------------------------------------------------------ def zeige_hinweis(self, titel: str, meldung: str) -> None: - """Zeigt eine modale Hinweismeldung mit OK-Button.""" + """Zeigt eine modale Hinweismeldung mit OK-Button. + + von Test abgesehen, weil vernachlässigbar; HD 18.09.2026 + """ from sn_basis.functions.dialog_wrapper import show_info_dialog show_info_dialog(titel, meldung, parent=self.parent) diff --git a/modules/print_layout.py b/modules/print_layout.py index 3ed2aa7..4e23932 100644 --- a/modules/print_layout.py +++ b/modules/print_layout.py @@ -105,6 +105,7 @@ class PrintLayout: height_mm: float, object_name: str | None = None, ) -> Any: + """Test ausgesetzt, zunächst Refactor""" template = self._OBJECT_TEMPLATES[template_name] map_item = QgsLayoutItemMap(layout) map_item.setId(template["id"]) @@ -117,6 +118,7 @@ class PrintLayout: return map_item def _set_item_frame_stroke_width(self, item: Any, stroke_width_mm: float) -> None: + """Test ausgesetzt, zunächst Refactor""" set_frame_stroke_width = getattr(item, "setFrameStrokeWidth", None) if not callable(set_frame_stroke_width): return @@ -152,6 +154,7 @@ class PrintLayout: pass def _fit_extent_to_map_item(self, extent: Any, map_width_mm: float, map_height_mm: float) -> Any: + """Test ausgesetzt, zunächst Refactor""" if extent is None: return extent if map_width_mm <= 0 or map_height_mm <= 0: @@ -222,6 +225,7 @@ class PrintLayout: object_name: str | None = None, v_align: str = "top", ) -> Any: + """Test ausgesetzt, zunächst Refactor""" if self._current_layout is None: raise RuntimeError("Kein Layout aktiv. Bitte create_single_page_layout() aufrufen.") return self._create_label_item( @@ -247,6 +251,7 @@ class PrintLayout: map_height_mm: float, kartenname_auswahl: str = "", ) -> None: + """Test ausgesetzt, zunächst Refactor""" if self._current_layout is None: raise RuntimeError("Kein Layout aktiv.") @@ -389,6 +394,7 @@ class PrintLayout: object_name: str | None = None, v_align: str = "top", ) -> Any: + """Test ausgesetzt, zunächst Refactor""" template = self._OBJECT_TEMPLATES[template_name] label = QgsLayoutItemLabel(layout) item_id = object_name or template["id"] @@ -468,6 +474,7 @@ class PrintLayout: return label def _resolve_visible_map_layers(self, map_item: Any) -> list[Any]: + """Test ausgesetzt, zunächst Refactor""" layers_method = getattr(map_item, "layers", None) if callable(layers_method): try: @@ -789,12 +796,14 @@ class PrintLayout: pass def _apply_grid_common_settings(self, grid: Any) -> None: + """Test ausgesetzt, zunächst Refactor""" self._safe_grid_call(grid, "setEnabled", True) self._safe_grid_call(grid, "setUnits", MAP_GRID_UNIT_MAP_UNIT) self._safe_grid_call(grid, "setIntervalX", self._GRID_INTERVAL_MAP_UNITS) self._safe_grid_call(grid, "setIntervalY", self._GRID_INTERVAL_MAP_UNITS) def _safe_grid_call(self, grid: Any, method_name: str, *args: Any) -> None: + """Test ausgesetzt, zunächst Refactor""" if any(arg is None for arg in args): return method = getattr(grid, method_name, None) @@ -806,6 +815,7 @@ class PrintLayout: pass def _apply_grid_annotation_text_style(self, grid: Any) -> None: + """Test ausgesetzt, zunächst Refactor""" if QgsTextFormat is object: self._safe_grid_call( grid, @@ -915,6 +925,7 @@ class PrintLayout: height_mm: float, stroke_width_mm: float = 0.3, ) -> Any: + """Test ausgesetzt, zunächst Refactor""" box = QgsLayoutItemLabel(layout) box.setId(object_name) diff --git a/modules/print_layout_baufreigabe.py b/modules/print_layout_baufreigabe.py index e0b3153..6d3b376 100644 --- a/modules/print_layout_baufreigabe.py +++ b/modules/print_layout_baufreigabe.py @@ -116,6 +116,8 @@ class PrintLayoutBaufreigabe(PrintLayout): Raises: ValueError: Falls Name bereits existiert oder Format ungültig ist + + Test ausgesetzt, zunächst Refactor """ # Seitenformat auswählen (nur A3/A4 im Querformat) if din_format == "DIN A3": @@ -267,8 +269,10 @@ class PrintLayoutBaufreigabe(PrintLayout): map_height_mm: float, ) -> None: """Erstellt Legende, Quellenangabe und Kartenschild für Baufreigabe-Layout. - + Angepasst für 80mm Kartenschild statt 180mm. + + Test ausgesetzt, zunächst Refactor """ if self._current_layout is None: raise RuntimeError("Kein Layout aktiv.") @@ -392,7 +396,10 @@ class PrintLayoutBaufreigabe(PrintLayout): ) def _calc_atlas_margin_percent(self, map_width_mm: float, map_height_mm: float) -> float: - """Berechnet Atlas-Margin in Prozent, sodass etwa 10 mm Rand sichtbar bleiben.""" + """Berechnet Atlas-Margin in Prozent, sodass etwa 10 mm Rand sichtbar bleiben. + + Test ausgesetzt, zunächst Refactor + """ margin_mm = self._ATLAS_FRAME_MARGIN_MM if map_width_mm <= 2 * margin_mm or map_height_mm <= 2 * margin_mm: return 5.0 diff --git a/modules/print_logic.py b/modules/print_logic.py index 3fbd51b..cbcf534 100644 --- a/modules/print_logic.py +++ b/modules/print_logic.py @@ -121,9 +121,11 @@ class PrintLogic: self._previous_map_tool: Any | None = None def _failed_result(self) -> dict: + """Test ausgesetzt, zunächst Refactor""" return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0} def _show_target_size_too_small(self) -> dict: + """Test ausgesetzt, zunächst Refactor""" self.pruefmanager.zeige_hinweis( "Zielgröße zu klein", "Die gewählte Zielgröße reicht für den Einzelblatt-Druck nicht aus.", @@ -131,11 +133,13 @@ class PrintLogic: return self._failed_result() def _is_enabled_flag(self, raw_value: Any) -> bool: + """Test ausgesetzt, zunächst Refactor""" if raw_value in (None, ""): return True return str(raw_value).strip().lower() in {"1", "true", "ja", "yes", "on"} def _resolve_layer_from_project(self) -> object | None: + """Test ausgesetzt, zunächst Refactor""" project = QgsProject.instance() # Primär: neue zentrale Variable aus sn_verfahrensgebiet_manager layer_id = (get_variable("verfahrensgebiet_layer", scope="project") or "").strip() @@ -156,6 +160,7 @@ class PrintLogic: return None def _resolve_active_layer(self) -> object | None: + """Test ausgesetzt, zunächst Refactor""" active_layer_fn = getattr(iface, "activeLayer", None) if not callable(active_layer_fn): return None @@ -165,6 +170,7 @@ class PrintLogic: return None def _get_druckpuffer_cm(self) -> int: + """Test ausgesetzt, zunächst Refactor""" raw_value = get_variable(DRUCKPUFFER_VAR, scope="project") try: value = int(str(raw_value).strip()) @@ -173,9 +179,11 @@ class PrintLogic: return max(0, value) def _get_druckpuffer_m(self, plotmassstab: float) -> float: + """Test ausgesetzt, zunächst Refactor""" return (self._get_druckpuffer_cm() * 10.0 * plotmassstab) / 1000.0 def _import_qgis_symbol(self, module_name: str, symbol_name: str) -> Any | None: + """Test ausgesetzt, zunächst Refactor""" try: module = importlib.import_module(module_name) except Exception: @@ -183,6 +191,7 @@ class PrintLogic: return getattr(module, symbol_name, None) def _build_rectangle(self, x_min: float, y_min: float, x_max: float, y_max: float) -> Any | None: + """Test ausgesetzt, zunächst Refactor""" qgs_rectangle = self._import_qgis_symbol("qgis.core", "QgsRectangle") if qgs_rectangle is None: return None @@ -192,6 +201,7 @@ class PrintLogic: return None def _clone_extent(self, extent: Any) -> Any | None: + """Test ausgesetzt, zunächst Refactor""" if extent is None: return None @@ -258,6 +268,7 @@ class PrintLogic: return expanded or extent def _get_existing_layer_by_name(self, layer_name: str) -> object | None: + """Test ausgesetzt, zunächst Refactor""" project = QgsProject.instance() map_layers_by_name = getattr(project, "mapLayersByName", None) if not callable(map_layers_by_name): @@ -271,6 +282,7 @@ class PrintLogic: return matches[0] def _create_druckrechteck_layer(self, reference_layer: object | None) -> object | None: + """Test ausgesetzt, zunächst Refactor""" existing_layer = self._get_existing_layer_by_name(DRUCKRECHTECK_LAYER_NAME) if existing_layer is not None: return existing_layer @@ -299,6 +311,7 @@ class PrintLogic: return layer def _clear_layer_features(self, layer: object) -> None: + """Test ausgesetzt, zunächst Refactor""" get_features = getattr(layer, "getFeatures", None) data_provider = getattr(layer, "dataProvider", lambda: None)() if not callable(get_features) or data_provider is None: @@ -330,6 +343,8 @@ class PrintLogic: Returns: (created_layer, layer_id) oder (None, "") bei Fehler + + Test ausgesetzt, zunächst Refactor """ # Source-Layer bestimmen if source_layer is None: @@ -475,6 +490,8 @@ class PrintLogic: Wird nach erfolgreicher Baufreigabe-Layout-Erstellung aufgerufen. Setzt den Coverage-Layer (aus sn_abdeckungslayer Variable) und konfiguriert den Atlas mit allen Optionen aus der AtlasConfig. + + Test ausgesetzt, zunächst Refactor """ try: if atlas_config is None: @@ -612,6 +629,7 @@ class PrintLogic: return False def _store_druckrechteck(self, layer: object, rectangle: Any) -> bool: + """Test ausgesetzt, zunächst Refactor""" qgs_feature = self._import_qgis_symbol("qgis.core", "QgsFeature") qgs_geometry = self._import_qgis_symbol("qgis.core", "QgsGeometry") if qgs_feature is None or qgs_geometry is None: @@ -660,6 +678,7 @@ class PrintLogic: return True def activate_druckrechteck_capture(self, reference_layer: object | None = None) -> bool: + """Test ausgesetzt, zunächst Refactor""" layer = self._create_druckrechteck_layer(reference_layer) if layer is None: self.pruefmanager.zeige_hinweis( @@ -790,6 +809,7 @@ class PrintLogic: return True def _resolve_selection_layer(self, fallback_layer: object | None) -> object | None: + """Test ausgesetzt, zunächst Refactor""" active_layer = self._resolve_active_layer() if active_layer is not None: selected_count = getattr(active_layer, "selectedFeatureCount", None) @@ -803,6 +823,7 @@ class PrintLogic: return fallback_layer def _get_selected_extent(self, layer: object | None) -> Any | None: + """Test ausgesetzt, zunächst Refactor""" if layer is None: return None @@ -959,10 +980,12 @@ class PrintLogic: return self._buffer_extent(extent, plotmassstab), resolved_layer def set_kartenname_for_auswahl(self, auswahl: str) -> None: + """Test ausgesetzt, zunächst Refactor""" kartenname = KARTENNAME_BY_AUSWAHL.get(auswahl, "") set_variable(KARTENNAME_VAR, kartenname, scope="project") def set_plotmassstab_for_auswahl(self, auswahl: str, aktueller_massstab: float | None = None) -> None: + """Test ausgesetzt, zunächst Refactor""" if auswahl == MASSSTAB_WIE_KARTENFENSTER: if aktueller_massstab and aktueller_massstab > 0: set_variable(PLOTMASSSTAB_VAR, str(int(round(aktueller_massstab))), scope="project") @@ -974,15 +997,18 @@ class PrintLogic: set_variable(PLOTMASSSTAB_VAR, value, scope="project") def set_view_for_auswahl(self, auswahl: str) -> None: + """Test ausgesetzt, zunächst Refactor""" if auswahl == THEMA_WIE_KARTENFENSTER: set_variable(VIEW_VAR, "aktuell", scope="project") return set_variable(VIEW_VAR, auswahl or "", scope="project") def set_zielgroesse_for_auswahl(self, auswahl: str) -> None: + """Test ausgesetzt, zunächst Refactor""" set_variable(ZIELGROESSE_VAR, auswahl if auswahl in DIN_GROESSEN else DIN_STANDARD, scope="project") def set_formfaktor(self, endlosrolle: bool) -> None: + """Test ausgesetzt, zunächst Refactor""" set_variable(FORMFAKTOR_VAR, "Endlosrolle" if endlosrolle else "Blatt", scope="project") def set_druckbereich_for_auswahl(self, auswahl: str) -> None: @@ -1056,10 +1082,14 @@ class PrintLogic: fixed_width_mm: float, fixed_height_mm: float, ) -> tuple[float, float]: + """Test ausgesetzt, zunächst Refactor""" return map_width_mm + fixed_width_mm, map_height_mm + fixed_height_mm def _get_required_map_dimensions_mm(self, extent: Any, plotmassstab: float) -> tuple[float, float]: - """Berechnet die benötigte Kartenfenstergröße in mm für Extent und Maßstab.""" + """Berechnet die benötigte Kartenfenstergröße in mm für Extent und Maßstab. + + Test ausgesetzt, zunächst Refactor + """ if extent is None or not isinstance(plotmassstab, (int, float)) or plotmassstab <= 0: return 0.0, 0.0 @@ -1167,6 +1197,7 @@ class PrintLogic: formfaktor: bool, druckbereich_auswahl: str, ) -> dict: + """Test ausgesetzt, zunächst Refactor""" resolved_layer = layer or self._resolve_layer_from_project() if kartenname_auswahl not in (KARTENNAME_38, KARTENNAME_41, KARTENNAME_BAUFREIGABE): diff --git a/ui/navigation.py b/ui/navigation.py index 35bbf45..84010fb 100644 --- a/ui/navigation.py +++ b/ui/navigation.py @@ -31,6 +31,7 @@ class Navigation: def init_ui(self): + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" print(">>> Navigation.init_ui() CALLED") main_window = get_main_window() diff --git a/ui/tabs/print_tab.py b/ui/tabs/print_tab.py index 4446c80..fcd15e3 100644 --- a/ui/tabs/print_tab.py +++ b/ui/tabs/print_tab.py @@ -332,6 +332,7 @@ class PrintTab(QWidget): self._restore_atlas_layer_selection() def _on_kartenname_changed(self, value: str) -> None: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" if value in (KARTENNAME_38, KARTENNAME_41, KARTENNAME_BAUFREIGABE): set_variable(KARTENNAME_VAR, value, scope="project") else: @@ -345,27 +346,32 @@ class PrintTab(QWidget): self.logic.set_kartenname_for_auswahl(value) def _on_massstab_changed(self, value: str) -> None: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" set_variable(MASSSTAB_VAR, value, scope="project") if self.logic: self.logic.set_plotmassstab_for_auswahl(value, self._get_current_canvas_scale()) def _on_thema_changed(self, value: str) -> None: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" set_variable(THEMA_VAR, value, scope="project") if self.logic: self.logic.set_view_for_auswahl(value) def _on_zielgroesse_changed(self, value: str) -> None: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" set_variable(ZIELGROESSE_UI_VAR, value, scope="project") if self.logic: self.logic.set_zielgroesse_for_auswahl(value) def _on_formfaktor_changed(self, state: int) -> None: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" checked = bool(state) set_variable(FORMFAKTOR_UI_VAR, "Endlosrolle" if checked else "Blatt", scope="project") if self.logic: self.logic.set_formfaktor(checked) def _on_druckbereich_changed(self, value: str) -> None: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" if value not in DRUCKBEREICH_OPTIONEN: value = DRUCKBEREICH_VERFAHRENSGEBIET set_variable(DRUCKBEREICH_VAR, value, scope="project") @@ -423,6 +429,7 @@ class PrintTab(QWidget): self._druckpuffer_button.setText(self._format_druckpuffer_label(puffer_value)) def _format_druckpuffer_label(self, value_cm: int) -> str: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" return f"{value_cm} cm" def _on_vorlage_erstellen(self) -> None: @@ -480,6 +487,7 @@ class PrintTab(QWidget): pass def _on_project_changed(self, *args) -> None: + """von Test abgesehen, weil vernachlässigbar; HD 18.09.2026""" _ = args self._disconnect_theme_collection_signals() self._theme_signal_connected = False