Skip to content

Commit ecc612d

Browse files
hf-kkleinKonstantin
andauthored
fix: recursion in AhbReader that lead to super large AHB models (#59)
--------- Co-authored-by: Konstantin <[email protected]>
1 parent 20c5d98 commit ecc612d

File tree

5 files changed

+2240
-109019
lines changed

5 files changed

+2240
-109019
lines changed

src/fundamend/reader/ahbreader.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,8 @@ def get_anwendungsfaelle(self) -> list[Anwendungsfall]:
224224
def _iter_segments_and_segment_groups(self, element: ET.Element) -> list[SegmentGroup | Segment]:
225225
"""recursive function that builds a list of all segments and segment groups"""
226226
result: list[Segment | SegmentGroup] = []
227-
if _is_anwendungsfall(element) or _is_format(element) or _is_uebertragungsdatei(element):
227+
should_go_deeper = _is_anwendungsfall(element) or _is_format(element) or _is_uebertragungsdatei(element)
228+
if should_go_deeper:
228229
for sub_element in element:
229230
result.extend(self._iter_segments_and_segment_groups(sub_element))
230231
if _is_segment_group(element):
@@ -235,14 +236,16 @@ def _iter_segments_and_segment_groups(self, element: ET.Element) -> list[Segment
235236

236237
def _read_anwendungsfall(self, original_element: ET.Element) -> Anwendungsfall:
237238
segments_and_groups = []
238-
root = self._element_tree.getroot()
239-
for element in root:
239+
for element in original_element:
240240
segments_and_groups.extend(self._iter_segments_and_segment_groups(element))
241+
format_element = original_element[0]
242+
if _is_uebertragungsdatei(format_element):
243+
format_element = original_element[0][0]
241244
return Anwendungsfall(
242245
pruefidentifikator=original_element.attrib["Pruefidentifikator"],
243246
beschreibung=original_element.attrib["Beschreibung"],
244247
kommunikation_von=original_element.attrib["Kommunikation_von"],
245-
format=original_element[0].tag.lstrip("M_"),
248+
format=format_element.tag.lstrip("M_"),
246249
segments=[s for s in segments_and_groups if isinstance(s, Segment)],
247250
segment_groups=[s for s in segments_and_groups if isinstance(s, SegmentGroup)],
248251
)

0 commit comments

Comments
 (0)