]> git.ipfire.org Git - thirdparty/python-fints.git/commitdiff
Only ignore non-present fields if they're not required
authorHenryk Plötz <henryk@ploetzli.ch>
Tue, 7 Aug 2018 15:36:47 +0000 (17:36 +0200)
committerRaphael Michel <mail@raphaelmichel.de>
Mon, 3 Dec 2018 18:34:17 +0000 (19:34 +0100)
fints/parser.py
fints/segments/__init__.py
tests/test_message_parser.py

index 6886f679ecc3d423184e637b5c5710c5bb8b0303..34c6c2494a3428651b649e9f09713c108347f810 100644 (file)
@@ -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)
index 014f5f8cf883e55d30f24fcc0eae23f448e9cb3e..1611a9c20f5e8039f8d35acb6a045bad8fcda963 100644 (file)
@@ -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)
 
 
 
index a5b85d8138bc47f127cdde527f9c3c4ed00fee69..30e57c634bc8726e7090bf042acc5b7331ac0389 100644 (file)
@@ -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)
+