From: Henryk Plötz Date: Sun, 19 Aug 2018 18:48:16 +0000 (+0200) Subject: Add ZeroPaddedNumericField, Fix BooleanField._parse_value X-Git-Tag: v2.0.0~1^2~102 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c3e7b14d8aabdb8477d618e30b7a3d2fe85a40eb;p=thirdparty%2Fpython-fints.git Add ZeroPaddedNumericField, Fix BooleanField._parse_value --- 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))