Skip to content

Commit fbb3682

Browse files
committed
Accept multiple <template> and do not descend into <SubTemplates>
1 parent 346630c commit fbb3682

1 file changed

Lines changed: 9 additions & 15 deletions

File tree

‎parser.py‎

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,16 @@ def parse_template(
4242

4343
parsed_rules: list[rule] = []
4444
next_visited = visited | {template_key}
45-
for rules_node in root.getElementsByTagNameNS("*", "Rules"):
45+
# Only the template's own <Rules> are in scope. Nested <SubTemplates>
46+
# form a hierarchy of separate templates, so they must not contribute
47+
# rules (and therefore entity scope) to the parent template.
48+
for rules_node in _elements(root):
49+
if rules_node.localName != "Rules":
50+
continue
4651
for node in _elements(rules_node):
47-
parsed_rules.append(self.parse_rule(node, visited=next_visited))
52+
# A <References> child unions one or more <Template>
53+
# references, so a single child may expand to several rules.
54+
parsed_rules.extend(self._visit_rule(node, "", next_visited))
4855

4956
return template(
5057
entity=(
@@ -58,19 +65,6 @@ def parse_template(
5865
uuid=root.attributes["uuid"].value,
5966
)
6067

61-
def parse_rule(
62-
self,
63-
root: Element,
64-
prefix: str = "",
65-
visited: frozenset[str] = frozenset(),
66-
) -> rule:
67-
parsed = self._visit_rule(root, prefix, visited)
68-
if len(parsed) != 1:
69-
raise ValueError(
70-
f"Expected one rule below {root.localName}, found {len(parsed)}"
71-
)
72-
return parsed[0]
73-
7468
def _visit_rule(
7569
self,
7670
node: Element,

0 commit comments

Comments
 (0)