init
This commit is contained in:
62
backend/projekte.py
Normal file
62
backend/projekte.py
Normal file
@@ -0,0 +1,62 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user