From bc7b1268b88874e9db300a5f5a9be42729f6ca16 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Henryk=20Pl=C3=B6tz?= Date: Mon, 10 Sep 2018 17:58:29 +0200 Subject: [PATCH] Shorten the serializer output on level 2 (mostly in use in HIUPD, which has a field with count=999) --- fints/parser.py | 3 ++- tests/test_message_serializer.py | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/fints/parser.py b/fints/parser.py index 88eaef4..2978b3f 100644 --- a/fints/parser.py +++ b/fints/parser.py @@ -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)) diff --git a/tests/test_message_serializer.py b/tests/test_message_serializer.py index e51c71f..ee8f60e 100644 --- a/tests/test_message_serializer.py +++ b/tests/test_message_serializer.py @@ -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'] -- 2.47.2