]> git.ipfire.org Git - thirdparty/python-fints.git/commitdiff
Move Mixins to utils to get them out of the autodoc
authorHenryk Plötz <henryk@ploetzli.ch>
Sun, 12 Aug 2018 22:52:45 +0000 (00:52 +0200)
committerRaphael Michel <mail@raphaelmichel.de>
Mon, 3 Dec 2018 18:34:29 +0000 (19:34 +0100)
docs/developer.rst
fints/fields.py
fints/formals.py
fints/utils.py

index 1d50781873f869cad31a0f2e28594acfcc6c1d1d..5bd994341b8a8d3ef118776658d10a9b0aee2156 100644 (file)
@@ -30,7 +30,7 @@ Example usage:
 
 .. note::
 
-  In general parsing followed by serialization is not idempotent: A message may contain empty list elements at the end, but our parser will never generate them.
+  In general parsing followed by serialization is not idempotent: A message may contain empty list elements at the end, but our serializer will never generate them.
 
 FinTS Segment Sequence
 ----------------------
index 3ab38de479080076203de451441684e06a2b5f04..e36642097b216e53cac1d9ee6bc7339d1275c60b 100644 (file)
@@ -3,7 +3,10 @@ import warnings
 from contextlib import suppress
 
 import fints.types
-from fints.utils import Password, SubclassesMixin
+from fints.utils import (
+    DocTypeMixin, FieldRenderFormatStringMixin,
+    FixedLengthMixin, Password, SubclassesMixin,
+)
 
 
 class Field:
@@ -104,39 +107,9 @@ class TypedField(Field, SubclassesMixin):
         self.type = type or getattr(self.__class__, 'type', None)
 
 
-class DocTypeMixin:
-    _DOC_TYPE = None
-
-    def __init__(self, *args, **kwargs):
-        super().__init__(*args, **kwargs)
-
-        type_ = self._DOC_TYPE
-        if type_ is None:
-            if isinstance(getattr(self, 'type', None), type):
-                type_ = getattr(self, 'type')
-
-        if type_ is not None:
-            if not self.__doc__:
-                self.__doc__ = ""
-
-            name = type_.__name__
-            if type_.__module__ != 'builtins':
-                name = "{}.{}".format(type_.__module__, name)
-
-            self.__doc__ = self.__doc__ + "\n\n:type: :class:`{}`".format(name)
-
 class DataElementField(DocTypeMixin, TypedField):
     pass
 
-class FieldRenderFormatStringMixin:
-    _FORMAT_STRING = None
-
-    def _render_value(self, value):
-        retval = self._FORMAT_STRING.format(value)
-        self._check_value_length(retval)
-
-        return retval
-
 class ContainerField(TypedField):
     def _check_value(self, value):
         if self.type:
@@ -233,16 +206,6 @@ class BinaryField(DataElementField):
 
     def _parse_value(self, value): return bytes(value)
 
-class FixedLengthMixin:
-    _FIXED_LENGTH = [None, None, None]
-    _DOC_TYPE = str
-
-    def __init__(self, *args, **kwargs):
-        for i, a in enumerate(('length', 'min_length', 'max_length')):
-            kwargs[a] = self._FIXED_LENGTH[i] if len(self._FIXED_LENGTH) > i else None
-
-        super().__init__(*args, **kwargs)
-
 class IDField(FixedLengthMixin, AlphanumericField):
     type = 'id'
     _DOC_TYPE = str
index 0ae9f13f0e741c30e70ba4f8ec84dbafee2b69ba..4a65cbb1492652fa4623041144ebcf89a476e834 100644 (file)
@@ -1,26 +1,10 @@
 import re
 
-from fints.types import * # The order is important!
+from fints.types import *  # The order is important!
 from fints.fields import *
+from fints.utils import ShortReprMixin
 
 
-class ShortReprMixin:
-    def __repr__(self):
-        return "{}{}({})".format(
-            "{}.".format(self.__class__.__module__),
-            self.__class__.__name__,
-            ", ".join(
-                ("{!r}".format(value) if not name.startswith("_") else "{}={!r}".format(name, value))
-                for (name, value) in self._repr_items
-            )
-        )
-
-    def print_nested(self, stream=None, level=0, indent="    ", prefix="", first_level_indent=True, trailer=""):
-        stream.write(
-            ( (prefix + level*indent) if first_level_indent else "")
-            + "{!r}{}\n".format(self, trailer)
-        )
-
 class DataElementGroup(Container):
     pass
 
index 7e64a16dbe941937bd0dab1bc44d411232b6da05..987847db4844d8972323f576fac24e003f671b3c 100644 (file)
@@ -63,6 +63,67 @@ class SubclassesMixin:
         yield cls
 
 
+class DocTypeMixin:
+    _DOC_TYPE = None
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
+        type_ = self._DOC_TYPE
+        if type_ is None:
+            if isinstance(getattr(self, 'type', None), type):
+                type_ = getattr(self, 'type')
+
+        if type_ is not None:
+            if not self.__doc__:
+                self.__doc__ = ""
+
+            name = type_.__name__
+            if type_.__module__ != 'builtins':
+                name = "{}.{}".format(type_.__module__, name)
+
+            self.__doc__ = self.__doc__ + "\n\n:type: :class:`{}`".format(name)
+
+
+class FieldRenderFormatStringMixin:
+    _FORMAT_STRING = None
+
+    def _render_value(self, value):
+        retval = self._FORMAT_STRING.format(value)
+        self._check_value_length(retval)
+
+        return retval
+
+
+class FixedLengthMixin:
+    _FIXED_LENGTH = [None, None, None]
+    _DOC_TYPE = str
+
+    def __init__(self, *args, **kwargs):
+        for i, a in enumerate(('length', 'min_length', 'max_length')):
+            kwargs[a] = self._FIXED_LENGTH[i] if len(self._FIXED_LENGTH) > i else None
+
+        super().__init__(*args, **kwargs)
+
+
+class ShortReprMixin:
+    def __repr__(self):
+        return "{}{}({})".format(
+            "{}.".format(self.__class__.__module__),
+            self.__class__.__name__,
+            ", ".join(
+                ("{!r}".format(value) if not name.startswith("_") else "{}={!r}".format(name, value))
+                for (name, value) in self._repr_items
+            )
+        )
+
+    def print_nested(self, stream=None, level=0, indent="    ", prefix="", first_level_indent=True, trailer=""):
+        stream.write(
+            ( (prefix + level*indent) if first_level_indent else "")
+            + "{!r}{}\n".format(self, trailer)
+        )
+
+
 class MT535_Miniparser:
     re_identification = re.compile(r"^:35B:ISIN\s(.*)\|(.*)\|(.*)$")
     re_marketprice = re.compile(r"^:90B::MRKT\/\/ACTU\/([A-Z]{3})(\d*),{1}(\d*)$")