mirror of
https://github.com/vyos/vyos-documentation.git
synced 2025-10-26 08:41:46 +01:00
Merge pull request #440 from jestabro/override-defaults
process overriding of defaultValue elements in XML interface definitions
This commit is contained in:
commit
d8b526e8a1
@ -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()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user