From: Henryk Plötz Date: Tue, 7 Aug 2018 15:36:47 +0000 (+0200) Subject: Only ignore non-present fields if they're not required X-Git-Tag: v2.0.0~1^2~156 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=04b5fdb308f203dcb2577d13e1901ae77cc576be;p=thirdparty%2Fpython-fints.git Only ignore non-present fields if they're not required --- 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) +