From c3e7b14d8aabdb8477d618e30b7a3d2fe85a40eb Mon Sep 17 00:00:00 2001 From: =?utf8?q?Henryk=20Pl=C3=B6tz?= Date: Sun, 19 Aug 2018 20:48:16 +0200 Subject: [PATCH] Add ZeroPaddedNumericField, Fix BooleanField._parse_value --- fints/fields.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/fints/fields.py b/fints/fields.py index 7190175..b6cec5f 100644 --- a/fints/fields.py +++ b/fints/fields.py @@ -187,6 +187,23 @@ class NumericField(FieldRenderFormatStringMixin, DataElementField): raise TypeError("Leading zeroes not allowed for value of type 'num': {!r}".format(value)) return int(_value, 10) +class ZeroPaddedNumericField(NumericField): + type = '' + _DOC_TYPE = int + + def __init__(self, *args, **kwargs): + if not kwargs.get('length', None): + raise ValueError("ZeroPaddedNumericField needs length argument") + super().__init__(*args, **kwargs) + + @property + def _FORMAT_STRING(self): + return "{:0" + str(self.length) + "d}" + + def _parse_value(self, value): + _value = str(value) + return int(_value, 10) + class DigitsField(FieldRenderFormatStringMixin, DataElementField): type = 'dig' _DOC_TYPE = str @@ -230,9 +247,9 @@ class BooleanField(FixedLengthMixin, AlphanumericField): def _parse_value(self, value): if value is None: return None - if value == "J": + if value == "J" or value is True: return True - elif value == "N": + elif value == "N" or value is False: return False else: raise ValueError("Invalid value {!r} for BooleanField".format(value)) -- 2.39.5