Coverage for /usr/local/lib/python3.11/site-packages/twinpad_backend/xml_parsing.py: 12%

32 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-10-20 11:44 +0000

1from xml.etree import ElementTree 

2 

3 

4def depth_iter(element, tag=None): 

5 stack = [] 

6 stack.append(iter([element])) 

7 while stack: 

8 e = next(stack[-1], None) 

9 if e == None: 

10 stack.pop() 

11 else: 

12 stack.append(iter(e)) 

13 if tag == None or e.tag == tag: 

14 yield (e, len(stack) - 1) 

15 

16 

17def extract_subname_ref(name): 

18 for separator1, separator2 in (("[", "]"), ("(", ")")): 

19 if separator1 in name: 

20 subname, ref = name.split(separator1) 

21 if " " in ref: 

22 ref = ref.split(" ")[0] 

23 else: 

24 ref = ref.lstrip(separator1).rstrip(separator2) 

25 return subname, ref 

26 return None 

27 

28 

29def xml_tags(filename): 

30 loxkit_topology = ElementTree.parse(filename) 

31 root = loxkit_topology.getroot() 

32 

33 tags_depth = {} 

34 tags = {} 

35 for node, depth in depth_iter(root): 

36 node_text = node.text.replace("\n", "") if node.text else "" 

37 # node_str = f"{' '*(depth-1)}{node.tag}: {node_text}\n" 

38 tags_depth.setdefault(node.tag, set()) 

39 tags_depth[node.tag].add(depth) 

40 

41 tags.setdefault(node.tag, []) 

42 tags[node.tag].append(node) 

43 return tags