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