Skip to content

Commit 9a45e07

Browse files
hf-kkleinKonstantin
andauthored
fix: use EdifactFormat as type for the format property of AHB & MIG (#129)
* fix: use `EdifactFormat` as type for the `format` property of AHB & MIG and ensure that actually the correct tag is used to determine the format (this is a workaround to #57) * one more * isort * please mypy --------- Co-authored-by: Konstantin <[email protected]>
1 parent 0f33371 commit 9a45e07

File tree

8 files changed

+24
-14
lines changed

8 files changed

+24
-14
lines changed

src/fundamend/models/anwendungshandbuch.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
from datetime import date
77

8+
from efoli import EdifactFormat
9+
810
from fundamend.models.base import FundamendBaseModel
911

1012

@@ -128,7 +130,7 @@ class Anwendungsfall(FundamendBaseModel):
128130
pruefidentifikator: str #: e.g. '25001'
129131
beschreibung: str #: e.g. 'Berechnungsformel'
130132
kommunikation_von: str #: e.g. 'NB an MSB / LF'
131-
format: str #: e.g. 'UTILTS'
133+
format: EdifactFormat #: e.g. 'UTILTS'
132134
elements: tuple[Segment | SegmentGroup, ...]
133135

134136
@property

src/fundamend/models/messageimplementationguide.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
from datetime import date
44
from enum import StrEnum
55

6+
from efoli import EdifactFormat
7+
68
from .base import FundamendBaseModel
79

810
# I didn't invent the data model ;)
@@ -168,6 +170,6 @@ class MessageImplementationGuide(FundamendBaseModel):
168170
versionsnummer: str
169171
"""e.g. '1.1c'"""
170172

171-
format: str #: e.g. 'UTILTS'
173+
format: EdifactFormat #: e.g. 'UTILTS'
172174

173175
elements: tuple[Segment | SegmentGroup, ...]

src/fundamend/reader/ahbreader.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
from datetime import date, datetime
88
from pathlib import Path
99

10+
from efoli import EdifactFormat
11+
1012
from fundamend.models.anwendungshandbuch import (
1113
Anwendungsfall,
1214
Anwendungshandbuch,
@@ -249,11 +251,13 @@ def _read_anwendungsfall(self, original_element: ET.Element) -> Anwendungsfall:
249251
format_element = original_element[0]
250252
if _is_uebertragungsdatei(format_element):
251253
format_element = original_element[0][0]
254+
if not format_element.tag.startswith("M_"):
255+
format_element = next((child for child in original_element[0] if child.tag.startswith("M_")))
252256
return Anwendungsfall(
253257
pruefidentifikator=original_element.attrib["Pruefidentifikator"],
254258
beschreibung=original_element.attrib["Beschreibung"],
255259
kommunikation_von=original_element.attrib["Kommunikation_von"],
256-
format=lstrip("M_", format_element.tag),
260+
format=EdifactFormat(lstrip("M_", format_element.tag)),
257261
elements=tuple(segments_and_groups),
258262
)
259263

src/fundamend/reader/migreader.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
from datetime import date, datetime
77
from pathlib import Path
88

9+
from efoli import EdifactFormat
10+
911
from fundamend.models.messageimplementationguide import (
1012
Code,
1113
DataElement,
@@ -160,12 +162,12 @@ def get_version(self) -> str:
160162
root = self._element_tree.getroot() # might be either <M_FORMAT> or <Uebertragungsdatei>
161163
return root.attrib["Versionsnummer"]
162164

163-
def get_format(self) -> str:
165+
def get_format(self) -> EdifactFormat:
164166
"""returns the format of the message implementation guide, e.g. 'UTILTS'"""
165167
root = self._element_tree.getroot()
166168
if _is_uebertragungsdatei(root):
167169
root = _get_first_tag_starting_with_m(root)
168-
return lstrip("M_", root.tag) # converts 'M_UTILTS' to 'UTILTS'
170+
return EdifactFormat(lstrip("M_", root.tag)) # converts 'M_UTILTS' to 'UTILTS'
169171

170172
def _iter_segments_and_segment_groups(self, element: ET.Element) -> list[SegmentGroup | Segment]:
171173
"""recursive function that builds a list of all segments and segment groups"""

src/fundamend/sqlmodels/anwendungshandbuch.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from typing import Optional, Union
66
from uuid import UUID
77

8-
from efoli import EdifactFormatVersion
8+
from efoli import EdifactFormat, EdifactFormatVersion
99

1010
# pylint: disable=too-few-public-methods, duplicate-code, missing-function-docstring
1111

@@ -338,7 +338,7 @@ class Anwendungsfall(SQLModel, table=True):
338338
pruefidentifikator: str = Field(index=True) #: e.g. '25001'
339339
beschreibung: str = Field(index=True) #: e.g. 'Berechnungsformel'
340340
kommunikation_von: str #: e.g. 'NB an MSB / LF'
341-
format: str = Field(index=True) #: e.g. 'UTILTS'
341+
format: EdifactFormat = Field(index=True) #: e.g. 'UTILTS'
342342
segments: list[Segment] = Relationship(back_populates="anwendungsfall")
343343
segment_groups: list[SegmentGroup] = Relationship(back_populates="anwendungsfall")
344344
position: Optional[int] = Field(default=None, index=True)

src/fundamend/sqlmodels/expression_view.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ class AhbExpression(SQLModel, table=True):
238238
)
239239
id: uuid.UUID = Field(primary_key=True, default_factory=uuid.uuid4)
240240
edifact_format_version: EdifactFormatVersion = Field(index=True)
241-
format: str = Field(index=True) # the edifact format, e.g. 'UTILMD'
241+
format: EdifactFormat = Field(index=True) # the edifact format, e.g. 'UTILMD'
242242
# expressions and conditions are always interpreted on a per-format basis (no pruefidentifikator required)
243243
expression: str = Field(index=True) #: e.g 'Muss [1] U [2]'
244244
node_texts: str = Field()

unittests/__snapshots__/test_ahbreader.ambr

Lines changed: 3 additions & 3 deletions
Large diffs are not rendered by default.

unittests/__snapshots__/test_migreader.ambr

Lines changed: 3 additions & 3 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)