feat(db): zip recent events' waveform files

This commit is contained in:
2026-07-02 06:30:11 +00:00
parent 31660d24e9
commit 916e6fcabb
2 changed files with 60 additions and 0 deletions
+34
View File
@@ -45,3 +45,37 @@ def test_snapshot_db_produces_queryable_copy(tmp_path):
n = conn.execute("SELECT COUNT(*) FROM t").fetchone()[0]
conn.close()
assert n == 5
def test_recent_waveforms_zip_bundles_all_per_event_files(tmp_path):
import zipfile
from sfm.database import SeismoDb
from sfm.waveform_store import WaveformStore
from sfm.db_snapshot import build_recent_waveforms_zip
db = SeismoDb(tmp_path / "seismo_relay.db") # creates schema on init
store = WaveformStore(tmp_path / "waveforms")
def add(serial, fn, ts):
d = store.root / serial
d.mkdir(parents=True, exist_ok=True)
for suffix in ("", ".h5", ".a5.pkl", ".sfm.json"):
(d / f"{fn}{suffix}").write_bytes(b"data")
_seed_event(db.db_path, serial, fn, ts)
add("BE111", "AAAA1111.OE0H", "2026-06-01T00:00:00")
add("BE111", "BBBB2222.OE0H", "2026-06-02T00:00:00") # newest
dest = tmp_path / "wf.zip"
stats = build_recent_waveforms_zip(db, store, n=1, dest_path=dest)
assert stats["events"] == 1
assert stats["files"] == 4
with zipfile.ZipFile(dest) as zf:
names = set(zf.namelist())
assert names == {
"BE111/BBBB2222.OE0H",
"BE111/BBBB2222.OE0H.h5",
"BE111/BBBB2222.OE0H.a5.pkl",
"BE111/BBBB2222.OE0H.sfm.json",
}