Skip to content

Commit 4916b18

Browse files
henrykraphaelm
authored andcommitted
More edge cases
1 parent ecf4aa4 commit 4916b18

File tree

3 files changed

+24
-4
lines changed

3 files changed

+24
-4
lines changed

fints/formals.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -466,8 +466,8 @@ class SecurityIdentificationDetails(DataElementGroup):
466466

467467
class SecurityDateTime(DataElementGroup):
468468
datetime_type = DataElementField(type='code', max_length=3)
469-
date = DataElementField(type='dat')
470-
time = DataElementField(type='tim')
469+
date = DataElementField(type='dat', required=False)
470+
time = DataElementField(type='tim', required=False)
471471

472472
class EncryptionAlgorithm(DataElementGroup):
473473
usage_encryption = DataElementField(type='code', max_length=3)
@@ -476,7 +476,7 @@ class EncryptionAlgorithm(DataElementGroup):
476476
algorithm_parameter_value = DataElementField(type='bin', max_length=512)
477477
algorithm_parameter_name = DataElementField(type='code', max_length=3)
478478
algorithm_parameter_iv_name = DataElementField(type='code', max_length=3)
479-
algorithm_parameter_iv_value = DataElementField(type='bin', max_length=512)
479+
algorithm_parameter_iv_value = DataElementField(type='bin', max_length=512, required=False)
480480

481481
class HashAlgorithm(DataElementGroup):
482482
usage_hash = DataElementField(type='code', max_length=3)

fints/segments/__init__.py

+2
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,5 @@ class HNSHA2(FinTS3Segment):
9090
class HIRMG2(FinTS3Segment):
9191
response = DataElementGroupField(type=Response, min_count=1, max_count=99)
9292

93+
class HIRMS2(FinTS3Segment):
94+
response = DataElementGroupField(type=Response, min_count=1, max_count=99)

tests/test_message_parser.py

+19-1
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,11 @@ def test_parse_complicated():
2929
m = FinTS3Parser().parse_message(COMPLICATED_EXAMPLE)
3030
assert len(m.segments) == 4
3131
assert m.segments[3].__class__.__name__ == "HNHBS1"
32+
m.print_nested()
3233

3334
def test_parse_counted():
3435
from fints.segments import FinTS3Segment
35-
from fints.formals import NumericField
36+
from fints.formals import NumericField, Container, ContainerField
3637

3738
class ITST1(FinTS3Segment):
3839
a = NumericField(count=3)
@@ -57,6 +58,23 @@ class ITST2(FinTS3Segment):
5758
assert len(m4.segments[0].a) == 2
5859
assert m4.segments[0].a[1] == 2
5960

61+
class InnerTest(Container):
62+
a = NumericField(max_count=3)
63+
64+
class ITST3(FinTS3Segment):
65+
b = ContainerField(type=InnerTest, max_count=99)
66+
67+
68+
m5 = FinTS3Parser().parse_message(b"ITST:1:3+12:42+345+61:62:63'")
69+
m5.print_nested()
70+
assert m5.segments[0].b[0].a[0] == 12
71+
assert m5.segments[0].b[0].a[1] == 42
72+
assert m5.segments[0].b[0].a[2] is None
73+
assert m5.segments[0].b[1].a[0] == 345
74+
assert m5.segments[0].b[2].a[0] == 61
75+
assert m5.segments[0].b[2].a[1] == 62
76+
assert m5.segments[0].b[2].a[2] == 63
77+
6078

6179
def test_parse_HIRMG2():
6280
d = b"HIRMG:3:2+0010::Nachricht entgegengenommen.+0100::Dialog beendet.'"

0 commit comments

Comments
 (0)