# -*- coding: utf-8 -*- """Pruefstand: ein Merkzettel in den Temp-Ordner wird verworfen. DER FALL, DER DAZU GEFUEHRT HAT (07.09.2026) -------------------------------------------- Die installierte Fassung fuehrte ihr Journal in `%TEMP%/abnahme_bst/Daten` - haengengeblieben aus einem Abnahmelauf vom 03.09. Windows raeumt den Temp-Ordner von selbst auf (Datentraegerbereinigung, Speicheroptimierung); das Journal waere ohne Vorwarnung verschwunden. Es geht um aufbewahrungspflichtige Aufzeichnungen, zehn Jahre (§ 147 AO). Ich habe daraufhin `_ist_temp()` geschrieben, ausfuehrlich begruendet - und NICHT ANGESCHLOSSEN. Die Funktion stand da und wurde von niemandem gerufen; der Schutz war ein Kommentar, keine Massnahme. Zwei Pruefagenten haben das unabhaengig voneinander gefunden, einer davon mit einer Messung, die zeigte, dass das Journal weiterhin im Temp landet. ⚠️ Das ist die schlimmste Sorte Fehler: ein Kommentar, der eine Schutzmassnahme zusichert, die es nicht gibt. Wer die Datei liest, haelt die Falle fuer geschlossen. Deshalb dieser Pruefstand - er prueft nicht, ob die FUNKTION existiert, sondern ob sie WIRKT. Angefasst wird nichts Echtes: LOCALAPPDATA zeigt waehrend des Laufs auf einen eigenen Ordner, der danach wieder verschwindet. ⚠️ Dieser Ordner liegt AUSSERHALB des Temp-Ordners - im ersten Anlauf hatte ich ihn mit tempfile.mkdtemp() angelegt, und der liegt selbst im Temp. Dann erkennt _ist_temp auch die Vergleichspfade als Temp und der Pruefstand meldet Fehler, die es nicht gibt. Wer das Verhalten IM Temp-Ordner prueft, darf seine Spielwiese nicht dort aufbauen. """ import importlib import os import shutil import sys import tempfile HIER = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, HIER) echtes_lad = os.environ.get("LOCALAPPDATA", "") spielwiese = os.path.join(os.path.expanduser("~"), ".pruef_merkzettel") shutil.rmtree(spielwiese, ignore_errors=True) os.makedirs(spielwiese, exist_ok=True) os.environ["LOCALAPPDATA"] = spielwiese # Als EXE tun, sonst nimmt ablage.py den Quellordner und der Merkzettel # spielt gar keine Rolle. sys.frozen = True sys.argv = [os.path.join(spielwiese, "Steuerrechnungstool.exe")] import ablage # noqa: E402 from pruefhelfer import fehler, pruefe importlib.reload(ablage) # ---- 1. Die Funktion erkennt einen Temp-Pfad --------------------------- temp = tempfile.gettempdir() pruefe(ablage._ist_temp(os.path.join(temp, "abnahme_bst", "Daten")), "ein Pfad im Temp-Ordner wird als solcher erkannt") pruefe(not ablage._ist_temp(os.path.join(spielwiese, "ravokk")), "ein normaler Pfad nicht") # ---- 2. Und sie WIRKT - das ist der Punkt ------------------------------ # Genau so sah der Merkzettel bei ihm aus. falscher = os.path.join(temp, "abnahme_bst_pruefstand", "Daten") os.makedirs(falscher, exist_ok=True) zeiger = ablage._zeiger_datei() os.makedirs(os.path.dirname(zeiger), exist_ok=True) with open(zeiger, "w", encoding="utf-8") as f: f.write(falscher) gewaehlt = ablage.daten_ordner() print(f" (Merkzettel zeigte auf {falscher})") print(f" (gewaehlt wurde {gewaehlt})") pruefe(not ablage._ist_temp(gewaehlt), f"der Datenordner liegt NICHT im Temp-Ordner ({gewaehlt})") pruefe(os.path.normcase(gewaehlt) != os.path.normcase(falscher), "dem Merkzettel wurde nicht gefolgt") pruefe("ravokk" in gewaehlt.lower(), f"stattdessen der Ordner der Firma ({gewaehlt})") # ---- 3. Ein GUELTIGER Merkzettel wird weiter befolgt ------------------- # Der Schutz darf nicht dazu fuehren, dass jemand seinen bewusst gewaehlten # Ordner verliert - etwa ein Netzlaufwerk. gewollt = os.path.join(spielwiese, "woanders", "Daten") os.makedirs(gewollt, exist_ok=True) with open(zeiger, "w", encoding="utf-8") as f: f.write(gewollt) pruefe(os.path.normcase(ablage.daten_ordner()) == os.path.normcase(gewollt), "ein gueltiger Merkzettel wird weiter befolgt") os.environ["LOCALAPPDATA"] = echtes_lad shutil.rmtree(spielwiese, ignore_errors=True) shutil.rmtree(os.path.dirname(falscher), ignore_errors=True) if fehler: print(f"ROT | {len(fehler)} Punkt(e) nicht erfuellt") sys.exit(1) print("GRUEN | Der Temp-Schutz ist angeschlossen und wirkt")