From: Henryk Plötz Date: Mon, 10 Sep 2018 15:58:29 +0000 (+0200) Subject: Shorten the serializer output on level 2 (mostly in use in HIUPD, which has a field... X-Git-Tag: v2.0.0~1^2~40 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bc7b1268b88874e9db300a5f5a9be42729f6ca16;p=thirdparty%2Fpython-fints.git Shorten the serializer output on level 2 (mostly in use in HIUPD, which has a field with count=999) --- 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']