forked from AG_QGIS/Plugin_SN_Basis
105 lines
2.2 KiB
Python
105 lines
2.2 KiB
Python
|
|
"""
|
|||
|
|
sn_basis/functions/sys_wrapper.py – System- und Pfad-Abstraktion
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
from pathlib import Path
|
|||
|
|
from typing import Union
|
|||
|
|
import sys
|
|||
|
|
|
|||
|
|
|
|||
|
|
_PathLike = Union[str, Path]
|
|||
|
|
|
|||
|
|
|
|||
|
|
# ---------------------------------------------------------
|
|||
|
|
# Plugin Root
|
|||
|
|
# ---------------------------------------------------------
|
|||
|
|
|
|||
|
|
def get_plugin_root() -> Path:
|
|||
|
|
"""
|
|||
|
|
Liefert das Basisverzeichnis des Plugins.
|
|||
|
|
"""
|
|||
|
|
return Path(__file__).resolve().parents[2]
|
|||
|
|
|
|||
|
|
|
|||
|
|
# ---------------------------------------------------------
|
|||
|
|
# Pfad-Utilities
|
|||
|
|
# ---------------------------------------------------------
|
|||
|
|
|
|||
|
|
def join_path(*parts: _PathLike) -> Path:
|
|||
|
|
"""
|
|||
|
|
Verbindet Pfadbestandteile OS-sicher.
|
|||
|
|
"""
|
|||
|
|
path = Path(parts[0])
|
|||
|
|
for part in parts[1:]:
|
|||
|
|
path /= part
|
|||
|
|
return path
|
|||
|
|
|
|||
|
|
|
|||
|
|
def file_exists(path: _PathLike) -> bool:
|
|||
|
|
"""
|
|||
|
|
Prüft, ob eine Datei existiert.
|
|||
|
|
"""
|
|||
|
|
try:
|
|||
|
|
return Path(path).exists()
|
|||
|
|
except Exception:
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
|
|||
|
|
def ensure_dir(path: _PathLike) -> Path:
|
|||
|
|
"""
|
|||
|
|
Stellt sicher, dass ein Verzeichnis existiert.
|
|||
|
|
"""
|
|||
|
|
p = Path(path)
|
|||
|
|
p.mkdir(parents=True, exist_ok=True)
|
|||
|
|
return p
|
|||
|
|
|
|||
|
|
|
|||
|
|
# ---------------------------------------------------------
|
|||
|
|
# Datei-IO
|
|||
|
|
# ---------------------------------------------------------
|
|||
|
|
|
|||
|
|
def read_text(path: _PathLike, encoding: str = "utf-8") -> str:
|
|||
|
|
"""
|
|||
|
|
Liest eine Textdatei.
|
|||
|
|
"""
|
|||
|
|
try:
|
|||
|
|
return Path(path).read_text(encoding=encoding)
|
|||
|
|
except Exception:
|
|||
|
|
return ""
|
|||
|
|
|
|||
|
|
|
|||
|
|
def write_text(
|
|||
|
|
path: _PathLike,
|
|||
|
|
content: str,
|
|||
|
|
encoding: str = "utf-8",
|
|||
|
|
) -> bool:
|
|||
|
|
"""
|
|||
|
|
Schreibt eine Textdatei.
|
|||
|
|
"""
|
|||
|
|
try:
|
|||
|
|
Path(path).write_text(content, encoding=encoding)
|
|||
|
|
return True
|
|||
|
|
except Exception:
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
def add_to_sys_path(path: Union[str, Path]) -> None:
|
|||
|
|
"""
|
|||
|
|
Fügt einen Pfad zu sys.path hinzu, falls er noch nicht enthalten ist.
|
|||
|
|
"""
|
|||
|
|
p = str(path)
|
|||
|
|
if p not in sys.path:
|
|||
|
|
sys.path.insert(0, p)
|
|||
|
|
def getattr_safe(obj, attr, default=None):
|
|||
|
|
"""
|
|||
|
|
Sicherer Zugriff auf ein Attribut.
|
|||
|
|
|
|||
|
|
Gibt das Attribut zurück, wenn es existiert,
|
|||
|
|
ansonsten den Default-Wert (None, wenn nicht angegeben).
|
|||
|
|
"""
|
|||
|
|
try:
|
|||
|
|
return getattr(obj, attr)
|
|||
|
|
except Exception:
|
|||
|
|
return default
|