From: Henryk Plötz Date: Thu, 9 Aug 2018 19:06:56 +0000 (+0200) Subject: Fix field inheritance over more than one level X-Git-Tag: v2.0.0~1^2~139 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a61f0d21f7bdaf7c92f6c99077d90b4caf255f12;p=thirdparty%2Fpython-fints.git Fix field inheritance over more than one level --- diff --git a/fints/formals.py b/fints/formals.py index d3abd95..50eabce 100644 --- a/fints/formals.py +++ b/fints/formals.py @@ -343,7 +343,8 @@ class ContainerMeta(type): retval = super().__new__(cls, name, bases, classdict) retval._fields = OrderedDict() for supercls in reversed(bases): - retval._fields.update((k,v) for (k,v) in supercls.__dict__.items() if isinstance(v, Field)) + if hasattr(supercls, '_fields'): + retval._fields.update((k,v) for (k,v) in supercls._fields.items()) retval._fields.update((k,v) for (k,v) in classdict.items() if isinstance(v, Field)) return retval diff --git a/tests/test_models.py b/tests/test_models.py index ecad679..41c1b9c 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -28,6 +28,18 @@ def test_fints3_only_de_and_deg(): class Foo(FinTS3Segment): c = DataElementGroupField(type=B) +def test_segment_subclassing(): + class Base1(FinTS3Segment): + a = NumericField() + + class Base2(Base1): + b = NumericField() + + class ISUBTST1(Base2): + c = NumericField() + + assert list( ISUBTST1._fields.keys() ) == ['header', 'a', 'b', 'c'] + def test_descriptor_subclassing(): a = DataElementField(type='an') assert isinstance(a, AlphanumericField)