Skip to content

Commit 0d2d134

Browse files
committed
handle duplicate keys in extended header
1 parent 01ba1f9 commit 0d2d134

1 file changed

Lines changed: 11 additions & 4 deletions

File tree

sigmf/convert/blue.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -461,15 +461,23 @@ def get_tag(tag):
461461
global_info["blue:keywords"] = h_keywords
462462
global_info["blue:adjunct"] = h_adjunct
463463

464-
# merge extended header fields
464+
# merge extended header fields, handling duplicate keys
465465
if h_extended:
466466
extended = {}
467+
tag_counts = {}
467468
for entry in h_extended:
468-
key = entry.get("tag")
469+
tag = entry.get("tag")
469470
value = entry.get("value")
470471
if hasattr(value, "item"):
471472
value = value.item()
472-
extended[key] = value
473+
474+
# handle duplicate tags by numbering them
475+
if tag in extended:
476+
tag_counts[tag] = tag_counts.get(tag, 0) + 1
477+
numbered_tag = f"{tag}_{tag_counts[tag]}"
478+
extended[numbered_tag] = value
479+
else:
480+
extended[tag] = value
473481
global_info["blue:extended"] = extended
474482

475483
blue_start_time = float(h_fixed.get("timecode", 0))
@@ -557,7 +565,6 @@ def validate_fixed(h_fixed: dict) -> None:
557565
raise SigMFConversionError(f"Invalid value for {rep_field}: {h_fixed[rep_field]}")
558566
if h_fixed["data_size"] < 0:
559567
raise SigMFConversionError(f"Invalid data_size: {h_fixed['data_size']} (must be >= 0)")
560-
# validate format code is supported
561568
if len(h_fixed["format"]) != 2 or h_fixed["format"][0] not in "SC" or h_fixed["format"][1] not in TYPE_MAP:
562569
raise SigMFConversionError(f"Unsupported data format: {h_fixed['format']}")
563570

0 commit comments

Comments
 (0)