]> git.ipfire.org Git - thirdparty/python-fints.git/commitdiff
More edge cases
authorHenryk Plötz <henryk@ploetzli.ch>
Wed, 8 Aug 2018 15:25:11 +0000 (17:25 +0200)
committerRaphael Michel <mail@raphaelmichel.de>
Mon, 3 Dec 2018 18:34:17 +0000 (19:34 +0100)
fints/formals.py
fints/segments/__init__.py
tests/test_message_parser.py

index 490dbfcd2b3c01555e06d1dd26230d6d6e0000e5..00dc4446a171618885639747b9f4e89e9f74ca24 100644 (file)
@@ -466,8 +466,8 @@ class SecurityIdentificationDetails(DataElementGroup):
 
 class SecurityDateTime(DataElementGroup):
     datetime_type = DataElementField(type='code', max_length=3)
-    date = DataElementField(type='dat')
-    time = DataElementField(type='tim')
+    date = DataElementField(type='dat', required=False)
+    time = DataElementField(type='tim', required=False)
 
 class EncryptionAlgorithm(DataElementGroup):
     usage_encryption = DataElementField(type='code', max_length=3)
@@ -476,7 +476,7 @@ class EncryptionAlgorithm(DataElementGroup):
     algorithm_parameter_value = DataElementField(type='bin', max_length=512)
     algorithm_parameter_name = DataElementField(type='code', max_length=3)
     algorithm_parameter_iv_name = DataElementField(type='code', max_length=3)
-    algorithm_parameter_iv_value = DataElementField(type='bin', max_length=512)
+    algorithm_parameter_iv_value = DataElementField(type='bin', max_length=512, required=False)
 
 class HashAlgorithm(DataElementGroup):
     usage_hash = DataElementField(type='code', max_length=3)
index 0c1edd330e2fe065e190e6cbfdebedf8fcb74483..117438147cec675742056a7c032a191f5e87a5c8 100644 (file)
@@ -90,3 +90,5 @@ class HNSHA2(FinTS3Segment):
 class HIRMG2(FinTS3Segment):
     response = DataElementGroupField(type=Response, min_count=1, max_count=99)
 
+class HIRMS2(FinTS3Segment):
+    response = DataElementGroupField(type=Response, min_count=1, max_count=99)
index 8bd82d36bc4fcb83a8fb9dca197cce896be10d3b..19ae36c70ecb7a4eb3d6d7096a203068262689b5 100644 (file)
@@ -29,10 +29,11 @@ def test_parse_complicated():
     m = FinTS3Parser().parse_message(COMPLICATED_EXAMPLE)
     assert len(m.segments) == 4
     assert m.segments[3].__class__.__name__ == "HNHBS1"
+    m.print_nested()
 
 def test_parse_counted():
     from fints.segments import FinTS3Segment
-    from fints.formals import NumericField
+    from fints.formals import NumericField, Container, ContainerField
 
     class ITST1(FinTS3Segment):
         a = NumericField(count=3)
@@ -57,6 +58,23 @@ def test_parse_counted():
     assert len(m4.segments[0].a) == 2
     assert m4.segments[0].a[1] == 2
 
+    class InnerTest(Container):
+        a = NumericField(max_count=3)
+
+    class ITST3(FinTS3Segment):
+        b = ContainerField(type=InnerTest, max_count=99)
+
+
+    m5 = FinTS3Parser().parse_message(b"ITST:1:3+12:42+345+61:62:63'")
+    m5.print_nested()
+    assert m5.segments[0].b[0].a[0] == 12
+    assert m5.segments[0].b[0].a[1] == 42
+    assert m5.segments[0].b[0].a[2] is None
+    assert m5.segments[0].b[1].a[0] == 345
+    assert m5.segments[0].b[2].a[0] == 61
+    assert m5.segments[0].b[2].a[1] == 62
+    assert m5.segments[0].b[2].a[2] == 63
+
 
 def test_parse_HIRMG2():
     d = b"HIRMG:3:2+0010::Nachricht entgegengenommen.+0100::Dialog beendet.'"