.vault-tools (ohne trading-plattform-pruefung und watermarks-remover), .claude/agents, .claude/skills, .claude/workflows, .claude/settings.json. Co-Authored-By: Claude Opus 5.5 <[email protected]>
47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
"""Verschiebt bereits hochgeladene Notizen aus dem aktiven Bereich in ein Archiv.
|
|
|
|
Ersteller: Pascal Michel
|
|
Erstellt: 2026-08-11
|
|
Doku: docs/code/archiv.md · Version und Änderungen: CHANGELOG.md
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
ARCHIV_ORDNERNAME = "nicht hochladen - ARCHIV"
|
|
|
|
|
|
def ist_archiviert(pfad: Path, quelle: Path) -> bool:
|
|
"""True, wenn der Pfad bereits unterhalb des Archiv-Unterverzeichnisses liegt.
|
|
|
|
Liegt pfad außerhalb von quelle (z. B. --nur mit einem externen Pfad), gilt
|
|
das als „nicht archiviert" — archiviere() wird für solche Pfade gar nicht
|
|
erst aufgerufen (siehe hochladen.py).
|
|
"""
|
|
try:
|
|
teile = pfad.relative_to(quelle).parts
|
|
except ValueError:
|
|
return False
|
|
return ARCHIV_ORDNERNAME in teile
|
|
|
|
|
|
def archivziel(pfad: Path, quelle: Path) -> Path:
|
|
"""Berechnet den Zielpfad im Archiv, ohne etwas zu verschieben."""
|
|
relativ = pfad.relative_to(quelle)
|
|
return quelle / ARCHIV_ORDNERNAME / relativ
|
|
|
|
|
|
def archiviere(pfad: Path, quelle: Path) -> Path:
|
|
"""Verschiebt die Datei ins Archiv-Unterverzeichnis; legt Ordner bei Bedarf an.
|
|
|
|
Existiert das Ziel schon, bleibt die Quelle liegen und es kommt FileExistsError.
|
|
Unter Windows wirft rename das ohnehin, unter POSIX würde es still überschreiben.
|
|
"""
|
|
ziel = archivziel(pfad, quelle)
|
|
if ziel.exists():
|
|
raise FileExistsError(f"Archivziel existiert schon: {ziel}")
|
|
ziel.parent.mkdir(parents=True, exist_ok=True)
|
|
pfad.rename(ziel)
|
|
return ziel
|