Skip to content

Commit 378f099

Browse files
committed
Merge PR #95 and #97 into develop
2 parents bb76d5a + 88bdcec commit 378f099

2 files changed

Lines changed: 19 additions & 1 deletion

File tree

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
name: publiccode.yml validation
2+
3+
on: [pull_request, push]
4+
5+
jobs:
6+
publiccode_yml_validation:
7+
runs-on: ubuntu-latest
8+
steps:
9+
- uses: actions/checkout@v4
10+
- uses: italia/publiccode-parser-action@v1
11+
with:
12+
publiccode: 'publiccode.yml'

elementpath/xpath_nodes.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
# @author Davide Brunato <brunato@sissa.it>
99
#
1010
import importlib
11-
from collections import deque
11+
from collections import defaultdict, deque
1212
from collections.abc import Iterator
1313
from urllib.parse import urljoin
1414
from typing import cast, Any, Optional
@@ -1232,6 +1232,9 @@ def apply_schema(self, schema: ta.SchemaProxyType) -> None:
12321232
delattr(root_node, '_attributes')
12331233

12341234
iterators: deque[Any] = deque()
1235+
element_match_cache: defaultdict[
1236+
int, dict[str | None, XsdElementProtocol | None]
1237+
] = defaultdict(dict)
12351238
while True:
12361239
for node in children:
12371240
if not isinstance(node, EtreeElementNode):
@@ -1250,12 +1253,15 @@ def apply_schema(self, schema: ta.SchemaProxyType) -> None:
12501253
xsd_element = schema.get_element(node.name)
12511254
elif (content := xsd_types[-1].model_group) is None:
12521255
xsd_element = None
1256+
elif node.name in (sub_cache := element_match_cache[id(content)]):
1257+
xsd_element = sub_cache[node.name]
12531258
else:
12541259
for xsd_element in content.iter_elements():
12551260
if xsd_element.is_matching(node.name):
12561261
if xsd_element.name != node.name:
12571262
# a wildcard or a substitute
12581263
xsd_element = schema.get_element(node.name)
1264+
sub_cache[node.name] = xsd_element
12591265
break
12601266
else:
12611267
xsd_element = None

0 commit comments

Comments
 (0)