Files
seismo-relay/sfm/db_snapshot.py
T

25 lines
807 B
Python

"""
db_snapshot.py — WAL-safe snapshot / restore helpers for seismo_relay.db and
the waveform store, backing the /db/snapshot, /db/waveforms/recent.zip and
/db/restore endpoints in server.py. Kept out of server.py so the logic is
unit-testable without HTTP.
"""
from __future__ import annotations
import sqlite3
from pathlib import Path
def snapshot_db(src_path: Path, dest_path: Path) -> Path:
"""WAL-safe copy of a live SQLite DB via the SQLite online backup API.
Consistent even while the source is being written under WAL, and never
blocks the source's writers."""
src = sqlite3.connect(str(src_path))
dest = sqlite3.connect(str(dest_path))
try:
with dest:
src.backup(dest)
finally:
src.close()
dest.close()
return Path(dest_path)