Skip to content

Commit db1e751

Browse files
committed
fix the duplicate error
1 parent 8375a34 commit db1e751

2 files changed

Lines changed: 11 additions & 5 deletions

File tree

openxc/generator/structures.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -161,9 +161,6 @@ def merge_signals(self, data):
161161
states.append(SignalState(raw_match, name))
162162
signal_data.pop('states', None)
163163

164-
if signal_name in self.signals:
165-
fatal_error('ERROR: Signal %s in %s has more than one definition' % (signal_name, self.name))
166-
167164
signal = self.signals[signal_name]
168165
signal.name = signal_name
169166
signal.message_set = self.message_set
@@ -173,7 +170,6 @@ def merge_signals(self, data):
173170
signal.states = states
174171
signal.merge_signal(signal_data)
175172

176-
177173
def validate(self):
178174
if self.bus_name is None:
179175
LOG.warning("No default or explicit bus for message %s" % self.id)

openxc/utils.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,21 @@ def find_file(filename, search_paths):
8989
fatal_error("Unable to find '%s' in search paths (%s)" % (
9090
filename, search_paths))
9191

92+
# https://stackoverflow.com/a/14902564
93+
def dict_raise_on_duplicates(ordered_pairs):
94+
"""Reject duplicate keys."""
95+
d = {}
96+
for k, v in ordered_pairs:
97+
if k in d:
98+
raise ValueError("duplicate key: %r" % (k,))
99+
else:
100+
d[k] = v
101+
return d
92102

93103
def load_json_from_search_path(filename, search_paths):
94104
with open(find_file(filename, search_paths)) as json_file:
95105
try:
96-
data = json.load(json_file)
106+
data = json.load(json_file, object_pairs_hook=dict_raise_on_duplicates)
97107
except ValueError as e:
98108
fatal_error("%s does not contain valid JSON: \n%s\n" %
99109
(filename, e))

0 commit comments

Comments
 (0)