From: Henryk Plötz Date: Wed, 8 Aug 2018 15:25:11 +0000 (+0200) Subject: More edge cases X-Git-Tag: v2.0.0~1^2~149 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4916b18cf5e0fe5ebc1d5e8de39631fd1bcbf49e;p=thirdparty%2Fpython-fints.git More edge cases --- diff --git a/fints/formals.py b/fints/formals.py index 490dbfc..00dc444 100644 --- a/fints/formals.py +++ b/fints/formals.py @@ -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) diff --git a/fints/segments/__init__.py b/fints/segments/__init__.py index 0c1edd3..1174381 100644 --- a/fints/segments/__init__.py +++ b/fints/segments/__init__.py @@ -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) diff --git a/tests/test_message_parser.py b/tests/test_message_parser.py index 8bd82d3..19ae36c 100644 --- a/tests/test_message_parser.py +++ b/tests/test_message_parser.py @@ -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.'"