Merge pull request #440 from jestabro/override-defaults

process overriding of defaultValue elements in XML interface definitions
This commit is contained in:
Robert Göhler 2021-02-03 15:43:22 +01:00 committed by GitHub
commit d8b526e8a1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -289,6 +289,8 @@ def get_working_commands():
print(e) print(e)
sys.exit(1) sys.exit(1)
override_defaults(xml)
try: try:
relaxng_xml = ET.parse(entry['schema_file']) relaxng_xml = ET.parse(entry['schema_file'])
validator = ET.RelaxNG(relaxng_xml) validator = ET.RelaxNG(relaxng_xml)
@ -343,7 +345,36 @@ def get_working_commands():
cmd['cmd'] = " ".join(cmd['name']) cmd['cmd'] = " ".join(cmd['name'])
return result return result
def override_defaults(xml):
root = xml.getroot()
defv = {}
xpath_str = f'//defaultValue'
xp = xml.xpath(xpath_str)
for element in xp:
ap = element.xpath('ancestor::*[@name]')
defv.setdefault((ap[-1].get("name"), str(ap[:-1])), []).append(element)
for k, v in defv.items():
if len(v) > 1:
override_element(v)
def override_element(l: list):
if len(l) < 2:
return
# assemble list of leafNodes of overriding defaultValues, for later removal
parents = []
for el in l[1:]:
parents.append(el.getparent())
# replace element with final override
l[0].getparent().replace(l[0], l[-1])
# remove all but overridden element
for el in parents:
el.getparent().remove(el)
if __name__ == "__main__": if __name__ == "__main__":
res = get_working_commands() res = get_working_commands()