Skip to content

Commit

Permalink
remove irrelevant lines in flatahb output (#351)
Browse files Browse the repository at this point in the history
* remove irrelevant lines in flatahb output

* added test
  • Loading branch information
DeltaDaniel committed Jul 10, 2024
1 parent 4a80418 commit 22e5673
Show file tree
Hide file tree
Showing 2 changed files with 151 additions and 1 deletion.
28 changes: 28 additions & 0 deletions src/kohlrahbi/unfoldedahb/unfoldedahbtable.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from pathlib import Path
from uuid import uuid4

import attrs
import pandas as pd
from maus.edifact import get_format_of_pruefidentifikator
from maus.models.anwendungshandbuch import (
Expand Down Expand Up @@ -357,6 +358,7 @@ def convert_to_flat_ahb(self) -> FlatAnwendungshandbuch:
index=unfolded_ahb_line.index,
)
)
lines = _remove_irrelevant_lines(lines)
try:
return FlatAnwendungshandbuch(meta=meta, lines=lines)
except ValueError:
Expand Down Expand Up @@ -481,3 +483,29 @@ def dump_xlsx(self, path_to_output_directory: Path) -> None:
self.meta_data.pruefidentifikator,
xlsx_output_directory_path / f"{self.meta_data.pruefidentifikator}.json",
)


def _remove_irrelevant_lines(lines: list[AhbLine]) -> list[AhbLine]:
"""
Removes lines that are irrelevant for the AHB.
"""
reduced_lines: list[AhbLine] = []
for line, next_line in zip(lines, lines[1:] + [None]):
line_dict = attrs.asdict(line)
next_line_dict: dict[str, str | None]
if next_line:
next_line_dict = attrs.asdict(next_line)
is_next_ahb_line_empty = next_line is None or next_line_dict["ahb_expression"] is None
is_ahb_line_only_segment_group_header = (
line_dict["segment_group_key"] is not None
and line_dict["segment_code"] is None
and line_dict["ahb_expression"] is None
)
is_empty_ahb_line = (
line_dict["segment_code"] is not None
and line_dict["section_name"] is not None
and line_dict["ahb_expression"] is None
) or (is_ahb_line_only_segment_group_header and is_next_ahb_line_empty)
if not is_empty_ahb_line:
reduced_lines.append(line)
return reduced_lines
124 changes: 123 additions & 1 deletion unittests/test_unfolded_ahb_table.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import pytest
from maus.edifact import EdifactFormat
from maus.models.anwendungshandbuch import AhbLine, AhbMetaInformation, FlatAnwendungshandbuch

from kohlrahbi.unfoldedahb import UnfoldedAhbTableMetaData
from kohlrahbi.unfoldedahb.unfoldedahbline import UnfoldedAhbLine
from kohlrahbi.unfoldedahb.unfoldedahbtable import UnfoldedAhb
from kohlrahbi.unfoldedahb.unfoldedahbtable import UnfoldedAhb, _remove_irrelevant_lines


class TestUnfoldedAhbTable:
Expand Down Expand Up @@ -204,3 +205,124 @@ def test_convert_to_flat_ahb(self) -> None:

def test_convert_to_dataframe(self):
pass

@pytest.mark.parametrize(
"input_lines, expected_output",
[
pytest.param(
[
AhbLine(
guid=None,
section_name="Ansprechpartner",
segment_group_key="SG3",
segment_code="CTA",
data_element="3139",
value_pool_entry="IC",
name="Informationskontakt",
ahb_expression="X",
index=3,
),
AhbLine(
guid=None,
section_name="Ansprechpartner",
segment_group_key="SG3",
segment_code="CTA",
data_element="3412",
value_pool_entry=None,
name="Name vom Ansprechpartner",
ahb_expression="X",
index=4,
),
],
[
AhbLine(
guid=None,
section_name="Ansprechpartner",
segment_group_key="SG3",
segment_code="CTA",
data_element="3139",
value_pool_entry="IC",
name="Informationskontakt",
ahb_expression="X",
index=3,
),
AhbLine(
guid=None,
section_name="Ansprechpartner",
segment_group_key="SG3",
segment_code="CTA",
data_element="3412",
value_pool_entry=None,
name="Name vom Ansprechpartner",
ahb_expression="X",
index=4,
),
],
id="Generic Case",
),
pytest.param(
[
AhbLine(
guid=None,
section_name=None,
segment_group_key="SG3",
segment_code=None,
data_element=None,
value_pool_entry=None,
name=None,
ahb_expression=None,
index=3,
),
],
[],
id="Next Line None and only SH_header",
),
pytest.param(
[
AhbLine(
guid=None,
section_name=None,
segment_group_key="SG3",
segment_code=None,
data_element=None,
value_pool_entry=None,
name=None,
ahb_expression=None,
index=0,
),
AhbLine(
guid=None,
section_name=None,
segment_group_key="SG3",
segment_code=None,
data_element=None,
value_pool_entry=None,
name=None,
ahb_expression=None,
index=1,
),
],
[],
id="Next Line empty and only SH_header",
),
pytest.param(
[
AhbLine(
guid=None,
section_name="Ansprechpartner",
segment_group_key="SG3",
segment_code="CTA",
data_element=None,
value_pool_entry=None,
name=None,
ahb_expression=None,
index=0,
),
],
[],
id="Empty Line",
),
],
)
def test_remove_irrelevant_lines(self, input_lines, expected_output):
assert _remove_irrelevant_lines(input_lines) == expected_output

0 comments on commit 22e5673

Please sign in to comment.