]> git.ipfire.org Git - thirdparty/python-fints.git/commitdiff
Shorten the serializer output on level 2 (mostly in use in HIUPD, which has a field...
authorHenryk Plötz <henryk@ploetzli.ch>
Mon, 10 Sep 2018 15:58:29 +0000 (17:58 +0200)
committerRaphael Michel <mail@raphaelmichel.de>
Mon, 3 Dec 2018 18:34:29 +0000 (19:34 +0100)
fints/parser.py
tests/test_message_serializer.py

index 88eaef452e81a860ff27c819090f47f6be7dfafe..2978b3f4d0681fc5a6e4fecff666b4495f10d128 100644 (file)
@@ -431,8 +431,9 @@ class FinTS3Serializer:
             level2 = []
             for deg in segment:
                 if isinstance(deg, (list, tuple)):
+                    highest_index = max(((i+1) for (i,e) in enumerate(deg) if e != b'' and e is not None), default=0)
                     level2.append(
-                        b":".join(FinTS3Serializer.escape_value(de) for de in deg)
+                        b":".join(FinTS3Serializer.escape_value(de) for de in deg[:highest_index])
                     )
                 else:
                     level2.append(FinTS3Serializer.escape_value(deg))
index e51c71f3c2b9c4ca1eeb86d665b55d923084b2f5..ee8f60e3542ba85b22a5d0c7f1cdca96b5688e22 100644 (file)
@@ -41,6 +41,26 @@ def test_implode_1():
 
     assert FinTS3Parser.explode_segments(s) == m
 
+def test_implode_shorten():
+    m = [
+        [
+            ['IIMPTST', '1', '2'],
+            [None, None],
+            [None, 'a', None],
+            [None, None, 'b'],
+            [None, 'c', None, 'd'],
+            [None, 'e', None, 'f', None],
+            [None, 'g', None, None, None],
+            [None, None, None, None],
+            [None, None, None, None],
+        ],
+    ]
+
+    s = FinTS3Serializer.implode_segments(m)
+
+    assert s == rb"""IIMPTST:1:2++:a+::b+:c::d+:e::f+:g++'"""
+
+
 def test_implode_roundtrip_simple():
     segments = FinTS3Parser.explode_segments(TEST_MESSAGES['basic_simple'])
     assert FinTS3Serializer.implode_segments(segments) == TEST_MESSAGES['basic_simple']