"""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