Files
planer2/backend/projekte.py
2026-07-24 22:39:23 +02:00

63 lines
1.6 KiB
Python

"""Projekte = Ordner unter daten/. Kein Registry-File, das Listing ist die Liste."""
import shutil
import config
def _pruefe_name(name: str):
if not name or not name.strip():
raise ValueError("Projektname darf nicht leer sein")
if "/" in name or "\\" in name or name.startswith("."):
raise ValueError("Ungültiger Projektname")
def _ordner(name: str):
_pruefe_name(name)
return config.DATEN_DIR / name
def liste() -> list[dict]:
if not config.DATEN_DIR.exists():
return []
ordner = sorted(
(p for p in config.DATEN_DIR.iterdir() if p.is_dir()),
key=lambda p: p.name.lower(),
)
return [
{"name": p.name, "anzahl": len(list(p.glob("*.md")))}
for p in ordner
]
def anlegen(name: str):
ziel = _ordner(name)
if ziel.exists():
raise ValueError(f"Projekt „{name}“ existiert bereits")
ziel.mkdir(parents=True)
def umbenennen(alt: str, neu: str):
quelle = _ordner(alt)
ziel = _ordner(neu)
if not quelle.is_dir():
raise FileNotFoundError(f"Projekt „{alt}“ nicht gefunden")
if ziel.exists():
raise ValueError(f"Projekt „{neu}“ existiert bereits")
quelle.rename(ziel)
def loeschen(name: str):
ordner = _ordner(name)
if not ordner.is_dir():
raise FileNotFoundError(f"Projekt „{name}“ nicht gefunden")
shutil.rmtree(ordner)
def wurzel(name: str):
"""Projektordner für Feature-Zugriffe; FileNotFoundError bei unbekanntem Projekt."""
ordner = _ordner(name)
if not ordner.is_dir():
raise FileNotFoundError(f"Projekt „{name}“ nicht gefunden")
return ordner