63 lines
1.6 KiB
Python
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
|