Skip to content

Commit a6db3fc

Browse files
committed
🎨 Merge enumeration values into string JSON
Problem: - If `libclang` is not available for `gen_str_catalog.py`, it is possible to provide (by fixed manual input) the `enums` part of the JSON output. When `libclang` is available, this input would be discarded -- regardless of whether it contains enum keys which aren't from parsing. Solution: - Merge the dictionaries for the parsed enum values.
1 parent 942b277 commit a6db3fc

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

test/log/catalog_extra.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
11
{
2-
"extra_key": "extra_value"
2+
"extra_key": "extra_value",
3+
"enums": {
4+
"ns::E": {
5+
"17": "extra_value"
6+
},
7+
"extra_enum": {
8+
"1": "value"
9+
}
10+
}
311
}

tools/gen_str_catalog.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -204,15 +204,20 @@ def write_json(messages, modules, enums, extra_inputs: list[str], filename: str,
204204
if not mod in d["modules"]:
205205
d["modules"].append(mod)
206206

207-
es = dict()
208-
for (k, (_, v)) in enums.items():
209-
es.update({k: {value: name for (name, value) in v.items()}})
210-
211-
str_catalog = dict(**d, enums=es)
207+
str_catalog = dict(**d, enums=dict())
212208
for extra in extra_inputs:
213209
with open(extra, "r") as f:
214210
str_catalog.update(json.load(f))
215211

212+
es = dict()
213+
for (k, (_, v)) in enums.items():
214+
es.update({k: {value: name for (name, value) in v.items()}})
215+
for (k, v) in es.items():
216+
if k in str_catalog["enums"]:
217+
str_catalog["enums"][k].update(v) # type: ignore
218+
else:
219+
str_catalog["enums"].update({k: v}) # type: ignore
220+
216221
with open(filename, "w") as f:
217222
json.dump(str_catalog, f, indent=4)
218223

0 commit comments

Comments
 (0)