Skip to content

Commit a89503b

Browse files
committed
process overriding of defaultValue elements in XML interface definitions
1 parent f701d66 commit a89503b

File tree

1 file changed

+33
-2
lines changed

1 file changed

+33
-2
lines changed

docs/_ext/testcoverage.py

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,13 +281,15 @@ def get_working_commands():
281281
while line:
282282
string = string + include_file(line.strip(), entry['input_dir'])
283283
line = fp.readline()
284-
284+
285285
try:
286286
xml = ET.parse(BytesIO(bytes(string, 'utf-8')))
287287
except Exception as e:
288288
print("Failed to load interface definition file {0}".format(f))
289289
print(e)
290290
sys.exit(1)
291+
292+
override_defaults(xml)
291293

292294
try:
293295
relaxng_xml = ET.parse(entry['schema_file'])
@@ -343,9 +345,38 @@ def get_working_commands():
343345
cmd['cmd'] = " ".join(cmd['name'])
344346
return result
345347

348+
def override_defaults(xml):
349+
root = xml.getroot()
350+
defv = {}
351+
352+
xpath_str = f'//defaultValue'
353+
xp = xml.xpath(xpath_str)
354+
355+
for element in xp:
356+
ap = element.xpath('ancestor::*[@name]')
357+
defv.setdefault((ap[-1].get("name"), str(ap[:-1])), []).append(element)
358+
359+
for k, v in defv.items():
360+
if len(v) > 1:
361+
override_element(v)
362+
363+
def override_element(l: list):
364+
if len(l) < 2:
365+
return
366+
367+
# assemble list of leafNodes of overriding defaultValues, for later removal
368+
parents = []
369+
for el in l[1:]:
370+
parents.append(el.getparent())
371+
372+
# replace element with final override
373+
l[0].getparent().replace(l[0], l[-1])
346374

375+
# remove all but overridden element
376+
for el in parents:
377+
el.getparent().remove(el)
347378

348379
if __name__ == "__main__":
349380
res = get_working_commands()
350381
print(json.dumps(res))
351-
#print(res['cfgcmd'][0])
382+
#print(res['cfgcmd'][0])

0 commit comments

Comments
 (0)