]> git.ipfire.org Git - thirdparty/python-fints.git/commitdiff
Fix field inheritance over more than one level
authorHenryk Plötz <henryk@ploetzli.ch>
Thu, 9 Aug 2018 19:06:56 +0000 (21:06 +0200)
committerRaphael Michel <mail@raphaelmichel.de>
Mon, 3 Dec 2018 18:34:17 +0000 (19:34 +0100)
fints/formals.py
tests/test_models.py

index d3abd95438253f4edca359590b41d26db874052e..50eabce402b4f699d7bc16a830e59ac869602bb0 100644 (file)
@@ -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
 
index ecad6790f317ce68031688743e87b6ee2c87a243..41c1b9c2faacb150d7c1113aa8b6596e47b19da3 100644 (file)
@@ -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)