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
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-20 11:44 +0000
1from xml.etree import ElementTree
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)
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
29def xml_tags(filename):
30 loxkit_topology = ElementTree.parse(filename)
31 root = loxkit_topology.getroot()
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)
41 tags.setdefault(node.tag, [])
42 tags[node.tag].append(node)
43 return tags