feat: preserve and encode raw 0C record in sidecar extensions for offline analysis
This commit is contained in:
@@ -127,6 +127,59 @@ def test_sidecar_write_and_read_round_trip(tmp_path: Path):
|
||||
assert loaded["source"]["kind"] == "sfm-ach"
|
||||
|
||||
|
||||
def test_sidecar_persists_raw_0c_record_in_extensions(tmp_path: Path):
|
||||
"""An Event with _raw_record populated should land its 210 bytes
|
||||
base64-encoded in extensions.raw_records.waveform_record_b64, so
|
||||
later analysis (e.g. mapping Peak Acceleration / Time of Peak / ZC
|
||||
Freq byte offsets) can run offline against the saved sidecar."""
|
||||
import base64
|
||||
|
||||
ev, _ = _make_synthetic_event()
|
||||
# Synthesize a 210-byte 0C record with embedded label needles so
|
||||
# the dump tool's anchor scan has something to find.
|
||||
raw = bytearray(210)
|
||||
raw[10:14] = b"Tran"
|
||||
raw[60:64] = b"Vert"
|
||||
raw[110:114] = b"Long"
|
||||
raw[160:164] = b"MicL"
|
||||
ev._raw_record = bytes(raw)
|
||||
|
||||
d = event_file_io.event_to_sidecar_dict(
|
||||
ev, serial="BE11529",
|
||||
blastware_filename="M529LKIQ.7M0W", blastware_filesize=1024,
|
||||
blastware_sha256="x" * 64, source_kind="sfm-live",
|
||||
)
|
||||
|
||||
rr = d["extensions"]["raw_records"]
|
||||
assert rr["waveform_record_len"] == 210
|
||||
decoded = base64.b64decode(rr["waveform_record_b64"])
|
||||
assert decoded == ev._raw_record
|
||||
|
||||
# Round-trip through write/read
|
||||
path = tmp_path / "raw0c.sfm.json"
|
||||
event_file_io.write_sidecar(path, d)
|
||||
loaded = event_file_io.read_sidecar(path)
|
||||
assert (
|
||||
base64.b64decode(loaded["extensions"]["raw_records"]["waveform_record_b64"])
|
||||
== ev._raw_record
|
||||
)
|
||||
|
||||
|
||||
def test_sidecar_omits_raw_records_when_event_has_no_0c(tmp_path: Path):
|
||||
"""Events without a _raw_record (e.g. constructed by importers that
|
||||
never see 0C) should NOT add an empty raw_records block — keep the
|
||||
sidecar clean for those flows."""
|
||||
ev, _ = _make_synthetic_event()
|
||||
assert ev._raw_record is None
|
||||
|
||||
d = event_file_io.event_to_sidecar_dict(
|
||||
ev, serial="BE11529",
|
||||
blastware_filename="M529LKIQ.7M0W", blastware_filesize=1024,
|
||||
blastware_sha256="x" * 64, source_kind="bw-import",
|
||||
)
|
||||
assert d["extensions"] == {}
|
||||
|
||||
|
||||
def test_sidecar_rejects_unsupported_schema_version(tmp_path: Path):
|
||||
path = tmp_path / "future.sfm.json"
|
||||
path.write_text(json.dumps({
|
||||
|
||||
Reference in New Issue
Block a user