43 als "vernachlässigbar" eingestufte Funktionen (dialog_wrapper.py, message_wrapper.py, os_wrapper.py, qgisui_wrapper.py, qt_wrapper.py, DataGrabber.py, LayerLoader.py, Pruefmanager.py, navigation.py, print_tab.py) tragen jetzt den Vermerk "von Test abgesehen, weil vernachlässigbar; HD 18.09.2026". Fehlalarme der Testkatalog-Heuristik (Dateipruefer._ist_leer/_handle_leere_eingabe, linkpruefer.py komplett, Pruefmanager._handle_datei_existiert) und der als Bug erfasste tote Code (Pruefmanager._ask_use_or_replace_pufferlayer, #60) bleiben unangetastet. 41 Funktionen im zur Grundüberarbeitung anstehenden Print-Bereich (print_logic.py, print_layout.py, print_layout_baufreigabe.py) tragen den Vermerk "Test ausgesetzt, zunächst Refactor". Reine Dokumentationsänderung, kein Verhalten geändert. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
115 lines
2.6 KiB
Python
115 lines
2.6 KiB
Python
"""
|
||
sn_basis/functions/os_wrapper.py – Betriebssystem-Abstraktion
|
||
"""
|
||
|
||
from pathlib import Path
|
||
import platform
|
||
from typing import Union
|
||
|
||
|
||
# ---------------------------------------------------------
|
||
# OS-Erkennung
|
||
# ---------------------------------------------------------
|
||
|
||
_SYSTEM = platform.system().lower()
|
||
|
||
if _SYSTEM.startswith("win"):
|
||
OS_NAME = "windows"
|
||
elif _SYSTEM.startswith("darwin"):
|
||
OS_NAME = "macos"
|
||
else:
|
||
OS_NAME = "linux"
|
||
|
||
IS_WINDOWS = OS_NAME == "windows"
|
||
IS_LINUX = OS_NAME == "linux"
|
||
IS_MACOS = OS_NAME == "macos"
|
||
|
||
|
||
# ---------------------------------------------------------
|
||
# OS-Eigenschaften
|
||
# ---------------------------------------------------------
|
||
|
||
PATH_SEPARATOR = "\\" if IS_WINDOWS else "/"
|
||
LINE_SEPARATOR = "\r\n" if IS_WINDOWS else "\n"
|
||
|
||
|
||
# ---------------------------------------------------------
|
||
# Pfad-Utilities
|
||
# ---------------------------------------------------------
|
||
|
||
_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()
|
||
except Exception:
|
||
return Path(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.
|
||
|
||
von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
|
||
"""
|
||
try:
|
||
return Path(path).is_absolute()
|
||
except Exception:
|
||
return False
|
||
|
||
|
||
def basename(path: _PathLike) -> str:
|
||
"""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:
|
||
return ""
|
||
|
||
|
||
# ---------------------------------------------------------
|
||
# Dateisystem-Eigenschaften
|
||
# ---------------------------------------------------------
|
||
|
||
def is_case_sensitive_fs() -> bool:
|
||
"""
|
||
Gibt zurück, ob das Dateisystem case-sensitiv ist.
|
||
"""
|
||
# Windows ist immer case-insensitive
|
||
if IS_WINDOWS:
|
||
return False
|
||
|
||
# macOS meist case-insensitive, aber nicht garantiert
|
||
if IS_MACOS:
|
||
return False
|
||
|
||
# Linux praktisch immer case-sensitiv
|
||
return True
|
||
|
||
|
||
def path_suffix(path: _PathLike) -> str:
|
||
"""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:
|
||
return ""
|