Files
horror/backend/app/backup.py
2026-09-16 17:00:35 +02:00

40 lines
1.0 KiB
Python

"""Nächtliche Kopie der Datenbank.
Sammlungen, Wertungen und Wünsche liegen nur in dieser einen Datei. Die
Kopie entsteht über SQLites eigene Backup-Schnittstelle — die ist auch
dann konsistent, wenn gerade jemand schreibt. Es bleiben die letzten
vierzehn Stände, jeder Tag einer.
"""
import logging
import sqlite3
from datetime import date
from .config import DB_PATH
log = logging.getLogger("app.backup")
BEHALTEN = 14
def sichern():
ordner = DB_PATH.parent / "backups"
ordner.mkdir(parents=True, exist_ok=True)
ziel = ordner / f"{DB_PATH.stem}-{date.today():%Y-%m-%d}{DB_PATH.suffix}"
quelle = sqlite3.connect(DB_PATH)
kopie = sqlite3.connect(ziel)
try:
quelle.backup(kopie)
finally:
kopie.close()
quelle.close()
# Die Namen sortieren nach Datum, das Alte steht vorn
alte = sorted(ordner.glob(f"{DB_PATH.stem}-*{DB_PATH.suffix}"))[:-BEHALTEN]
for alt in alte:
alt.unlink()
log.info("Datenbank gesichert: %s", ziel.name)
return ziel