From 04b5fdb308f203dcb2577d13e1901ae77cc576be Mon Sep 17 00:00:00 2001 From: =?utf8?q?Henryk=20Pl=C3=B6tz?= Date: Tue, 7 Aug 2018 17:36:47 +0200 Subject: [PATCH] Only ignore non-present fields if they're not required --- fints/parser.py | 3 ++- fints/segments/__init__.py | 4 ++-- tests/test_message_parser.py | 5 +++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/fints/parser.py b/fints/parser.py index 6886f67..34c6c24 100644 --- a/fints/parser.py +++ b/fints/parser.py @@ -120,7 +120,8 @@ class FinTS3Parser: try: val = next(data) except StopIteration: - pass + if field.required: + raise ValueError("Required field {}.{} was not present".format(clazz.__name__, name)) else: deg = self.parse_n_deg(field, val) setattr(seg, name, deg) diff --git a/fints/segments/__init__.py b/fints/segments/__init__.py index 014f5f8..1611a9c 100644 --- a/fints/segments/__init__.py +++ b/fints/segments/__init__.py @@ -66,7 +66,7 @@ class HNVSK3(FinTS3Segment): encryption_algorithm = DataElementGroupField(type=EncryptionAlgorithm) key_name = DataElementGroupField(type=KeyName) compression_function = DataElementField(type='code', max_length=3) - certificate = DataElementGroupField(type=Certificate) + certificate = DataElementGroupField(type=Certificate, required=False) class HNSHK4(FinTS3Segment): security_profile = DataElementGroupField(type=SecurityProfile) @@ -80,7 +80,7 @@ class HNSHK4(FinTS3Segment): hash_algorithm = DataElementGroupField(type=HashAlgorithm) signature_algorithm = DataElementGroupField(type=SignatureAlgorithm) key_name = DataElementGroupField(type=KeyName) - certificate = DataElementGroupField(type=Certificate) + certificate = DataElementGroupField(type=Certificate, required=False) diff --git a/tests/test_message_parser.py b/tests/test_message_parser.py index a5b85d8..30e57c6 100644 --- a/tests/test_message_parser.py +++ b/tests/test_message_parser.py @@ -55,3 +55,8 @@ def test_invalid(): with pytest.raises(ValueError): FinTS3Parser.explode_segments(message5) + + message6 = rb"""HNHBS:5:1'""" + with pytest.raises(ValueError, match='^Required field'): + m = FinTS3Parser().parse_message(message6) + -- 2.47.3