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