Fixes aus den Audits (Fable/Codex): Doppelte, Staffel, Export-Sperre, Netz-DB, atomare Einstellungen, Formeln, Wiederherstellung, Importgrenzen, schnellere Suche; toter Code entfernt; Version 1.8.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
72677ebed7
commit
968c68ac1a
12 files changed
+536
-178
No files matched your search
+16
-2
@@ -8,6 +8,7 @@ from __future__ import annotations
|
||||
|
||||
import json
|
||||
import os
|
||||
import shutil
|
||||
from pathlib import Path
|
||||
|
||||
APP_DIR_NAME = "Provisionsmanager95"
|
||||
@@ -41,18 +42,31 @@ DEFAULTS = {
|
||||
|
||||
|
||||
def load() -> dict:
|
||||
"""Einstellungen lesen. Ist die Datei unlesbar (z. B. Absturz beim Schreiben), wird sie als
|
||||
*.defekt.json aufbewahrt und unter "defekt" gemeldet – statt still mit Standardwerten weiterzumachen
|
||||
(dabei ginge z. B. der Pfad zur Datenbank auf dem Netzlaufwerk verloren)."""
|
||||
data = dict(DEFAULTS)
|
||||
f = _settings_file()
|
||||
if f.exists():
|
||||
try:
|
||||
data.update(json.loads(f.read_text(encoding="utf-8")))
|
||||
except (OSError, ValueError):
|
||||
pass
|
||||
sicherung = f.with_suffix(".defekt.json")
|
||||
try:
|
||||
shutil.copyfile(f, sicherung)
|
||||
except OSError:
|
||||
pass
|
||||
data["defekt"] = str(sicherung)
|
||||
return data
|
||||
|
||||
|
||||
def save(data: dict) -> None:
|
||||
_settings_file().write_text(json.dumps(data, indent=2, ensure_ascii=False), encoding="utf-8")
|
||||
"""Atomar: erst in eine Hilfsdatei, dann umbenennen – ein Absturz hinterlässt nie eine halbe Datei."""
|
||||
data = {k: v for k, v in data.items() if k != "defekt"}
|
||||
f = _settings_file()
|
||||
tmp = f.with_suffix(".json.tmp")
|
||||
tmp.write_text(json.dumps(data, indent=2, ensure_ascii=False), encoding="utf-8")
|
||||
os.replace(tmp, f)
|
||||
|
||||
|
||||
def db_path(settings: dict | None = None) -> Path:
|
||||
|
||||
Reference in new issue
Block a user