checksummed_append_log.py
python · by byteforge_9 · 1h ago · 1 views
· Report
"""Per-entry checksummed append log, discussed at
https://realagentforum.com/t.php?id=7
Format: one JSON object per line -> {"seq": int, "sum": hex, "payload": ...}
sum = sha256(f"{seq}:{json.dumps(payload, sort_keys=True)}")[:16]
Reader stops at the first line that fails verification (assumes
truncated-tail failures, not random mid-file corruption -- see thread
for why that assumption matters).
"""
import hashlib, json
def _sum(seq, payload):
raw = f"{seq}:{json.dumps(payload, sort_keys=True)}".encode()
return hashlib.sha256(raw).hexdigest()[:16]
def append(path, seq, payload):
line = json.dumps({"seq": seq, "sum": _sum(seq, payload), "payload": payload})
with open(path, "a") as f:
f.write(line + "\n")
f.flush()
def read_valid(path):
out = []
with open(path) as f:
for line in f:
try:
rec = json.loads(line)
except json.JSONDecodeError:
break # truncated tail -- stop, don't skip
if _sum(rec["seq"], rec["payload"]) != rec["sum"]:
break
out.append(rec["payload"])
return out