From 8381e50fe63dd0133d66c21c29b8c4d671e6b2d3 Mon Sep 17 00:00:00 2001 From: James Woglom Date: Sun, 15 Mar 2026 13:53:03 -0400 Subject: [PATCH] fix duplicate enum keys --- tconnectsync/eventparser/events.py | 6 ++--- tconnectsync/eventparser/transforms.py | 32 +++++++++++++++++++++++--- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/tconnectsync/eventparser/events.py b/tconnectsync/eventparser/events.py index 81e977e..2720e17 100644 --- a/tconnectsync/eventparser/events.py +++ b/tconnectsync/eventparser/events.py @@ -5286,9 +5286,9 @@ class LidCgmDataFsl3(BaseEvent): ValidAlgstateAlgstateIs100 = 2**7 EgvWasSuccessfullyAddedToCgmSubsystemArrayE = 2**8 OmrReadingType = 2**9 - SensorTypeSeeCgmtxtypeEnum = 2**11 - SensorTypeSeeCgmtxtypeEnum = 2**12 - SensorTypeSeeCgmtxtypeEnum = 2**13 + SensorTypeSeeCgmtxtypeEnum_11 = 2**11 + SensorTypeSeeCgmtxtypeEnum_12 = 2**12 + SensorTypeSeeCgmtxtypeEnum_13 = 2**13 @property def egvInfoBitmask(self): diff --git a/tconnectsync/eventparser/transforms.py b/tconnectsync/eventparser/transforms.py index daae999..b5113c4 100644 --- a/tconnectsync/eventparser/transforms.py +++ b/tconnectsync/eventparser/transforms.py @@ -39,15 +39,40 @@ def enumNameFormat(text): return f'{t[0].upper()}{t[1:]}' + +def uniqueMemberNames(tx): + names = {} + + for key, value in tx.items(): + name = enumNameFormat(value) + if not name: + continue + names.setdefault(name, []).append(str(key)) + + unique_names = {} + for key, value in tx.items(): + name = enumNameFormat(value) + if not name: + continue + + if len(names[name]) == 1: + unique_names[key] = name + continue + + unique_names[key] = f'{name}_{key}' + + return unique_names + def transform_enum(event_def, name, name_fmt, field, tx): out = [] + member_names = uniqueMemberNames(tx) lines_for_out = json.dumps(tx, indent=4).splitlines() out += [f'{enumNameFormat(name_fmt)}Map = {lines_for_out[0]}'] out += lines_for_out[1:] out += [''] out += [f'class {enumNameFormat(name_fmt)}Enum(Enum):'] out += [ - f' {enumNameFormat(v)} = {k}' for k, v in tx.items() if enumNameFormat(v) + f' {member_names[k]} = {k}' for k, v in tx.items() if k in member_names ] out += [''] out += [ @@ -77,13 +102,14 @@ def transform_dictionary(event_def, name, name_fmt, field, tx): def transform_bitmask(event_def, name, name_fmt, field, tx): out = [] + member_names = uniqueMemberNames(tx) lines_for_out = json.dumps(tx, indent=4).splitlines() out += [f'{enumNameFormat(name_fmt)}Map = {lines_for_out[0]}'] out += lines_for_out[1:] out += [''] out += [f'class {enumNameFormat(name_fmt)}Bitmask(IntFlag):',] out += [ - f' {enumNameFormat(v)} = 2**{k}' for k, v in tx.items() if enumNameFormat(v) + f' {member_names[k]} = 2**{k}' for k, v in tx.items() if k in member_names ] out += [''] out += [ @@ -129,4 +155,4 @@ TRANSFORMS = { 'bitmask': transform_bitmask, 'ratio': transform_ratio, 'battery_charge_percent': transform_battery_charge_percent -} \ No newline at end of file +}