Skip to content

Commit

Permalink
Reject json with duplicate keys? (qmk#18108)
Browse files Browse the repository at this point in the history
  • Loading branch information
zvecr authored and elpekenin committed Dec 7, 2022
1 parent 6d534b8 commit d785c2a
Showing 1 changed file with 13 additions and 2 deletions.
15 changes: 13 additions & 2 deletions lib/python/qmk/json_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,18 @@
from milc import cli


def json_load(json_file):
def _dict_raise_on_duplicates(ordered_pairs):
"""Reject duplicate keys."""
d = {}
for k, v in ordered_pairs:
if k in d:
raise ValueError("duplicate key: %r" % (k,))
else:
d[k] = v
return d


def json_load(json_file, strict=True):
"""Load a json file from disk.
Note: file must be a Path object.
Expand All @@ -20,7 +31,7 @@ def json_load(json_file):
# Not necessary if the data is provided via stdin
if isinstance(json_file, Path):
json_file = json_file.open(encoding='utf-8')
return hjson.load(json_file)
return hjson.load(json_file, object_pairs_hook=_dict_raise_on_duplicates if strict else None)

except (json.decoder.JSONDecodeError, hjson.HjsonDecodeError) as e:
cli.log.error('Invalid JSON encountered attempting to load {fg_cyan}%s{fg_reset}:\n\t{fg_red}%s', json_file, e)
Expand Down

0 comments on commit d785c2a

Please sign in to comment.