From 41b8a635791d1f95d12e22f653d1f2cc29988b45 Mon Sep 17 00:00:00 2001 From: konstantin Date: Sat, 24 Dec 2022 00:27:19 +0100 Subject: [PATCH 1/2] =?UTF-8?q?=E2=9C=A8=20Introduce=20optional=20`use=5Fc?= =?UTF-8?q?ases`=20per=20`EbdTableRow`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ebdtable2graph/models/ebd_table.py | 14 ++++++++++++++ unittests/test_ebd_table_models.py | 22 ++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/ebdtable2graph/models/ebd_table.py b/src/ebdtable2graph/models/ebd_table.py index 3726f188..3a44076a 100644 --- a/src/ebdtable2graph/models/ebd_table.py +++ b/src/ebdtable2graph/models/ebd_table.py @@ -129,6 +129,20 @@ class EbdTableRow: """ One table row splits into multiple sub rows: one sub row for each check result (ja/nein) """ + use_cases: Optional[List[str]] = attrs.field( + validator=attrs.validators.deep_iterable( + member_validator=attrs.validators.instance_of(str), + iterable_validator=attrs.validators.min_len(1), # if the list is not None, it has to have entries + ), + default=None, + ) + """ + If certain rows of the EBD table are only relevant for specific use cases/scenarios, you can denote them here. + E.g. E_0462 step_number 15 may only be applied for use_cases=["Einzug"]. + and E_0462 step_number 16 is only relevant for use_cases=["Einzug", "iMS/kME mit RLM"]. + + None means, there are no restrictions to when the check from the row shall be performed. + """ def has_subsequent_steps(self) -> bool: """ diff --git a/unittests/test_ebd_table_models.py b/unittests/test_ebd_table_models.py index fc1d089d..06a01945 100644 --- a/unittests/test_ebd_table_models.py +++ b/unittests/test_ebd_table_models.py @@ -111,6 +111,28 @@ def test_has_subsequent_steps(self, row: EbdTableRow, expected_result: bool): actual = row.has_subsequent_steps() assert actual == expected_result + def test_ebd_table_row_use_cases(self): + row_17_in_e0462 = EbdTableRow( + step_number="17", + description="Liegt das Eingangsdatum der Anmeldung mehr als sechs Wochen nach dem Lieferbeginndatum der Anmeldung?", + use_cases=["Einzug", "kME ohne RLM/mME/ Pauschalanlage"], + sub_rows=[ + EbdTableSubRow( + check_result=EbdCheckResult(result=True, subsequent_step_number=None), + result_code="A06", + note="Cluster: Ablehnung\nFristüberschreitung bei kME ohne RLM/mME/ Pauschalanlage", + ), + EbdTableSubRow( + check_result=EbdCheckResult(result=False, subsequent_step_number="21"), + result_code=None, + note=None, + ), + ], + ) + assert isinstance(row_17_in_e0462, EbdTableRow) + assert row_17_in_e0462.use_cases is not None + # if it can be instantiated with use cases that's a good enough test for the model + def test_answer_code_aastersik(self): """ This is an example from 6.27.1 E_0455_Information prüfen. From d50ac5383dd1c06b894d757594d6858b303d804b Mon Sep 17 00:00:00 2001 From: konstantin Date: Sat, 24 Dec 2022 00:30:10 +0100 Subject: [PATCH 2/2] fix validator --- src/ebdtable2graph/models/ebd_table.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/ebdtable2graph/models/ebd_table.py b/src/ebdtable2graph/models/ebd_table.py index 3a44076a..ea22180d 100644 --- a/src/ebdtable2graph/models/ebd_table.py +++ b/src/ebdtable2graph/models/ebd_table.py @@ -130,9 +130,11 @@ class EbdTableRow: One table row splits into multiple sub rows: one sub row for each check result (ja/nein) """ use_cases: Optional[List[str]] = attrs.field( - validator=attrs.validators.deep_iterable( - member_validator=attrs.validators.instance_of(str), - iterable_validator=attrs.validators.min_len(1), # if the list is not None, it has to have entries + validator=attrs.validators.optional( + attrs.validators.deep_iterable( # type:ignore[arg-type] + member_validator=attrs.validators.instance_of(str), + iterable_validator=attrs.validators.min_len(1), # if the list is not None, it has to have entries + ) ), default=None, )