]> git.ipfire.org Git - thirdparty/python-fints.git/commitdiff
Fully solve dependencies, I think. Run isort, cleanup imports
authorHenryk Plötz <henryk@ploetzli.ch>
Sat, 8 Sep 2018 19:32:08 +0000 (21:32 +0200)
committerRaphael Michel <mail@raphaelmichel.de>
Mon, 3 Dec 2018 18:34:29 +0000 (19:34 +0100)
27 files changed:
fints/client.py
fints/connection.py
fints/dialog.py
fints/exceptions.py
fints/fields.py
fints/formals.py
fints/message.py
fints/parser.py
fints/segments/_base.py [deleted file]
fints/segments/accounts.py
fints/segments/auth.py
fints/segments/bank.py
fints/segments/debit.py
fints/segments/depot.py
fints/segments/dialog.py
fints/segments/journal.py
fints/segments/message.py
fints/segments/saldo.py
fints/segments/statement.py
fints/segments/transfer.py
fints/types.py
fints/utils.py
tests/conftest.py
tests/test_formals.py
tests/test_message_parser.py
tests/test_message_serializer.py
tests/test_models.py

index 501e602cae5829844dd87be3916dfd34218b5002..9b41fcac600d5cfd52632d28d2f3d354ff2a7233 100644 (file)
@@ -1,46 +1,45 @@
 import datetime
 import logging
-import re
-import bleach
-from enum import Enum
-from decimal import Decimal
-from contextlib import contextmanager
 from collections import OrderedDict
+from contextlib import contextmanager
+from decimal import Decimal
+from enum import Enum
 
-from mt940.models import Balance
+import bleach
 from sepaxml import SepaTransfer
 
 from .connection import FinTSHTTPSConnection
 from .dialog import FinTSDialog
+from .exceptions import *
 from .formals import (
-    KTI1, Account3, BankIdentifier,
-    SynchronisationMode, TwoStepParametersCommon,
-    TANMediaType2, TANMediaClass4, CUSTOMER_ID_ANONYMOUS,
-    DescriptionRequired,
+    CUSTOMER_ID_ANONYMOUS, KTI1, BankIdentifier, DescriptionRequired,
+    SynchronisationMode, TANMediaClass4, TANMediaType2,
 )
 from .message import FinTSInstituteMessage
-from .models import (
-    SEPAAccount, TANChallenge, TANChallenge3,
-    TANChallenge4, TANChallenge5, TANChallenge6,
-)
+from .models import SEPAAccount
+from .parser import FinTS3Serializer
 from .security import (
     PinTanDummyEncryptionMechanism, PinTanOneStepAuthenticationMechanism,
     PinTanTwoStepAuthenticationMechanism,
 )
-from .segments.bank import HIBPA3, HIUPA4, HKKOM4
 from .segments.accounts import HISPA1, HKSPA1
-from .segments.auth import HKTAB4, HKTAB5, HKTAN3, HKTAN5, HIPINS1
+from .segments.auth import HIPINS1, HKTAB4, HKTAB5, HKTAN3, HKTAN5
+from .segments.bank import HIBPA3, HIUPA4, HKKOM4
+from .segments.debit import (
+    HKDBS1, HKDBS2, HKDMB1, HKDMC1, HKDME1, HKDME2,
+    HKDSC1, HKDSE1, HKDSE2, DebitResponseBase,
+)
 from .segments.depot import HKWPD5, HKWPD6
-from .segments.dialog import HISYN4, HKSYN3, HIRMG2, HIRMS2
-from .segments.debit import HKDSE1, HKDSE2, HKDME1, HKDME2, HKDSC1, HKDMC1, HKDBS1, HKDBS2, HKDMB1, DebitResponseBase
+from .segments.dialog import HIRMG2, HIRMS2, HISYN4, HKSYN3
+from .segments.journal import HKPRO3, HKPRO4
 from .segments.saldo import HKSAL5, HKSAL6, HKSAL7
-from .segments.statement import HKKAZ5, HKKAZ6, HKKAZ7, DKKKU2
+from .segments.statement import DKKKU2, HKKAZ5, HKKAZ6, HKKAZ7
 from .segments.transfer import HKCCM1, HKCCS1
-from .segments.journal import HKPRO3, HKPRO4
 from .types import SegmentSequence
-from .utils import MT535_Miniparser, Password, mt940_to_array, compress_datablob, decompress_datablob, SubclassesMixin
-from .parser import FinTS3Serializer
-from .exceptions import *
+from .utils import (
+    MT535_Miniparser, Password, SubclassesMixin,
+    compress_datablob, decompress_datablob, mt940_to_array,
+)
 
 logger = logging.getLogger(__name__)
 
@@ -1121,4 +1120,3 @@ class FinTS3PinTanClient(FinTS3Client):
             'tan_mechanisms': self.get_tan_mechanisms(),
         }
         return retval
-
index 23349fa7528f0ebd65a2585a670af939f3fa4fdf..8b624c22fdc7d47529aa3c75fe13d45a20bb2724 100644 (file)
@@ -1,13 +1,12 @@
 import base64
-import logging
 import io
+import logging
 
 import requests
-from fints.parser import FinTS3Parser
 from fints.utils import Password
 
-from .message import FinTSInstituteMessage, FinTSMessage
 from .exceptions import *
+from .message import FinTSInstituteMessage, FinTSMessage
 
 logger = logging.getLogger(__name__)
 
index 163d74b469a954ef4147c48e1817eb221e9ee726..4cc317d126147498cd3b28497ee0cfd143481be0 100644 (file)
@@ -1,19 +1,15 @@
+import io
 import logging
 import pickle
-import io
 
-from .formals import (
-    BankIdentifier, Language2, SynchronisationMode, SystemIDStatus, CUSTOMER_ID_ANONYMOUS,
-)
-from .message import (
-    FinTSCustomerMessage, FinTSMessage, MessageDirection,
-)
+from .connection import FinTSConnectionError
+from .exceptions import *
+from .formals import CUSTOMER_ID_ANONYMOUS, Language2, SystemIDStatus
+from .message import FinTSCustomerMessage, MessageDirection
 from .segments.auth import HKIDN2, HKVVB3
 from .segments.dialog import HKEND1
 from .segments.message import HNHBK3, HNHBS1
 from .utils import compress_datablob, decompress_datablob
-from .connection import FinTSConnectionError
-from .exceptions import *
 
 logger = logging.getLogger(__name__)
 
index 3fb5e0af5164647dbd70dece73e03b8ac9d484af..c34c3ffc94c16fb9c5329916ef16543baa542670 100644 (file)
@@ -18,4 +18,3 @@ class FinTSDialogInitError(FinTSDialogError):
 
 class FinTSConnectionError(FinTSError):
     pass
-
index 295f4a75836fa0caffc6a504f938d966a147b02b..4bf3c00c34d9477a81ea053143acf750a16e66d8 100644 (file)
@@ -2,12 +2,9 @@ import datetime
 import re
 import warnings
 
-from fints.types import (
-    Field, TypedField, SegmentSequence
-)
+from fints.types import Container, SegmentSequence, TypedField
 from fints.utils import (
-    DocTypeMixin, FieldRenderFormatStringMixin,
-    FixedLengthMixin, Password
+    DocTypeMixin, FieldRenderFormatStringMixin, FixedLengthMixin, Password,
 )
 
 
@@ -50,7 +47,7 @@ class GenericGroupField(DataElementGroupField):
 
     def _default_value(self):
         if self.type is None:
-            return fints.types.Container()
+            return Container()
         else:
             return self.type()
     
index 2c0ade7244f74f008ee6ae2a42b0203189e79f37..b13b5be0afb5f0f00ef2e0c2274112e4fc84c003 100644 (file)
@@ -1,7 +1,7 @@
 import re
 
-from fints.types import *  # The order is important!
 from fints.fields import *
+from fints.types import *
 from fints.utils import RepresentableEnum, ShortReprMixin
 
 CUSTOMER_ID_ANONYMOUS = '9999999999'
index 30d66d8a7eb3ed281da97ed341f8d69e2891038d..adced11e6304a1833e81f2830115ef70dc0bdd9e 100644 (file)
@@ -1,12 +1,8 @@
-import random
 from enum import Enum
 
 from .formals import SegmentSequence
-from .segments._base import FinTS3Segment
-from .segments.auth import HITANSBase
-from .segments.bank import HIBPA3
-from .segments.dialog import HIRMG2, HIRMS2
-from .segments.message import HNHBK3, HNHBS1
+from .segments.base import FinTS3Segment
+from .segments.dialog import HIRMS2
 
 
 class MessageDirection(Enum):
index 6a2a218489e94420b984e68c7a1030e38862c815..88eaef452e81a860ff27c819090f47f6be7dfafe 100644 (file)
@@ -6,7 +6,12 @@ from enum import Enum
 from .formals import (
     Container, DataElementGroupField, SegmentSequence, ValueList,
 )
-from .segments._base import FinTS3Segment
+# Ensure that all segment types are loaded (otherwise the subclass find won't see them)
+from .segments import (  # noqa
+    accounts, auth, bank, base, debit, depot, dialog,
+    journal, message, saldo, statement, transfer,
+)
+from .segments.base import FinTS3Segment
 
 # 
 # FinTS 3.0 structure:
diff --git a/fints/segments/_base.py b/fints/segments/_base.py
deleted file mode 100644 (file)
index 7680f89..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-import re
-
-from fints.fields import DataElementField, DataElementGroupField, IntCodeField
-from fints.types import Container, ContainerMeta
-from fints.formals import SegmentHeader, SecurityClass
-from fints.utils import SubclassesMixin, classproperty
-
-TYPE_VERSION_RE = re.compile(r'^([A-Z]+)(\d+)$')
-
-class FinTS3SegmentMeta(ContainerMeta):
-    @staticmethod
-    def _check_fields_recursive(instance):
-        for name, field in instance._fields.items():
-            if not isinstance(field, (DataElementField, DataElementGroupField)):
-                raise TypeError("{}={!r} is not DataElementField or DataElementGroupField".format(name, field))
-            if isinstance(field, DataElementGroupField):
-                FinTS3SegmentMeta._check_fields_recursive(field.type)
-
-    def __new__(cls, name, bases, classdict):
-        retval = super().__new__(cls, name, bases, classdict)
-        FinTS3SegmentMeta._check_fields_recursive(retval)
-        return retval
-
-class FinTS3Segment(Container, SubclassesMixin, metaclass=FinTS3SegmentMeta):
-    header = DataElementGroupField(type=SegmentHeader, _d="Segmentkopf")
-
-    @classproperty
-    def TYPE(cls):
-        match = TYPE_VERSION_RE.match(cls.__name__)
-        if match:
-            return match.group(1)
-
-    @classproperty
-    def VERSION(cls):
-        match = TYPE_VERSION_RE.match(cls.__name__)
-        if match:
-            return int( match.group(2) )
-
-    def __init__(self, *args, **kwargs):
-        if 'header' not in kwargs:
-            kwargs['header'] = SegmentHeader(self.TYPE, None, self.VERSION)
-
-        args = (kwargs.pop('header'), ) + args
-
-        return super().__init__(*args, **kwargs)
-
-    @classmethod
-    def find_subclass(cls, segment):
-        h = SegmentHeader.naive_parse(segment[0])
-        target_cls = None
-
-        for possible_cls in cls._all_subclasses():
-            if getattr(possible_cls, 'TYPE', None) == h.type and getattr(possible_cls, 'VERSION', None) == h.version:
-                target_cls = possible_cls
-
-        if not target_cls:
-            target_cls = cls
-
-        return target_cls
-
-
-class ParameterSegment_22(FinTS3Segment):
-    max_number_tasks = DataElementField(type='num', max_length=3, _d="Maximale Anzahl Aufträge")
-    min_number_signatures = DataElementField(type='num', length=1, _d="Anzahl Signaturen mindestens")
-
-class ParameterSegment(FinTS3Segment):
-    max_number_tasks = DataElementField(type='num', max_length=3, _d="Maximale Anzahl Aufträge")
-    min_number_signatures = DataElementField(type='num', length=1, _d="Anzahl Signaturen mindestens")
-    security_class = IntCodeField(SecurityClass, length=1, _d="Sicherheitsklasse")
index 677c73e315f0c93c11f4c2d7d55eabbe42e9e983..3a8cc8e8addf7df5002be471361a2ec853fdae08 100644 (file)
@@ -1,6 +1,7 @@
-from ._base import FinTS3Segment, ParameterSegment
 from ..fields import DataElementGroupField
 from ..formals import KTZ1, Account3, GetSEPAAccountParameter1
+from .base import FinTS3Segment, ParameterSegment
+
 
 class HKSPA1(FinTS3Segment):
     """SEPA-Kontoverbindung anfordern, version 1
index 06131073f1f08921d6e050fd4081558e9c309d00..5ca7a8f018e0b568119f36c6d7810f2d597798b8 100644 (file)
@@ -1,13 +1,14 @@
 from fints.fields import CodeField, DataElementField, DataElementGroupField
 from fints.formals import (
-    BankIdentifier, Language2, SynchronisationMode, SystemIDStatus,
-    TANMediaType2, TANMediaClass4, TANMedia5, TANMediaClass3, TANMedia4, TANUsageOption,
-    KTI1, ParameterChallengeClass, ResponseHHDUC, ChallengeValidUntil,
-    ParameterTwostepTAN1, ParameterTwostepTAN2, ParameterTwostepTAN3, ParameterTwostepTAN4,
-    ParameterTwostepTAN5, ParameterTwostepTAN6, ParameterPinTan, SupportedLanguages2,
-    SupportedHBCIVersions2
+    KTI1, BankIdentifier, ChallengeValidUntil, Language2,
+    ParameterChallengeClass, ParameterPinTan, ParameterTwostepTAN1,
+    ParameterTwostepTAN2, ParameterTwostepTAN3, ParameterTwostepTAN4,
+    ParameterTwostepTAN5, ParameterTwostepTAN6, ResponseHHDUC,
+    SystemIDStatus, TANMedia4, TANMedia5, TANMediaClass3,
+    TANMediaClass4, TANMediaType2, TANUsageOption,
 )
-from ._base import FinTS3Segment, ParameterSegment
+
+from .base import FinTS3Segment, ParameterSegment
 
 
 class HKIDN2(FinTS3Segment):
@@ -180,5 +181,3 @@ class HIPINS1(ParameterSegment):
     Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Sicherheitsverfahren PIN/TAN 
     """
     parameter = DataElementGroupField(type=ParameterPinTan, _d="Parameter PIN/TAN-spezifische Informationen") 
-
-
index 645b8f93a3ea5cff42ea20f3ee773f54a85b97a5..812ff3baa8ad39060f49f5bc4d3e95dcd1ba7af6 100644 (file)
@@ -1,6 +1,12 @@
-from ._base import FinTS3Segment
-from fints.fields import DataElementField, CodeField, DataElementGroupField
-from fints.formals import UPDUsage, AccountInformation, AccountLimit, AllowedTransaction, BankIdentifier, Language2, CommunicationParameter2, SupportedLanguages2, SupportedHBCIVersions2
+from fints.fields import CodeField, DataElementField, DataElementGroupField
+from fints.formals import (
+    AccountInformation, AccountLimit, AllowedTransaction,
+    BankIdentifier, CommunicationParameter2, Language2,
+    SupportedHBCIVersions2, SupportedLanguages2, UPDUsage,
+)
+
+from .base import FinTS3Segment
+
 
 class HIBPA3(FinTS3Segment):
     """Bankparameter allgemein, version 3
index 33673de46d394e2e368330386dd78f79db0b346b..9d64d8bb5f5d00c6adc1198c70b3139841ac3a89 100644 (file)
@@ -1,7 +1,14 @@
-from ._base import FinTS3Segment, ParameterSegment
-from ..models import SEPAAccount
-from ..fields import DataElementField, DataElementGroupField, CodeField
-from ..formals import ScheduledCOR1DebitParameter1, ScheduledCOR1BatchDebitParameter1, KTI1, Amount1, ScheduledBatchDebitParameter1, ScheduledBatchDebitParameter2, ScheduledDebitParameter1, ScheduledDebitParameter2, SupportedSEPAPainMessages1, QueryScheduledDebitParameter1, QueryScheduledDebitParameter2, SEPACCode1, StatusSEPATask1, QueryScheduledBatchDebitParameter1
+from ..fields import CodeField, DataElementField, DataElementGroupField
+from ..formals import (
+    KTI1, Amount1, QueryScheduledBatchDebitParameter1,
+    QueryScheduledDebitParameter1, QueryScheduledDebitParameter2,
+    ScheduledBatchDebitParameter1, ScheduledBatchDebitParameter2,
+    ScheduledCOR1BatchDebitParameter1, ScheduledCOR1DebitParameter1,
+    ScheduledDebitParameter1, ScheduledDebitParameter2, SEPACCode1,
+    StatusSEPATask1, SupportedSEPAPainMessages1,
+)
+from .base import FinTS3Segment, ParameterSegment
+
 
 class BatchDebitBase(FinTS3Segment):
     account = DataElementGroupField(type=KTI1, _d="Kontoverbindung international")
@@ -233,6 +240,3 @@ class HIDMBS1(ParameterSegment):
 
     Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Messages -- Multibankfähige Geschäftsvorfälle """
     parameter = DataElementGroupField(type=QueryScheduledBatchDebitParameter1, _d="Parameter Bestand terminierter SEPA-Sammellastschriften")
-
-
-
index 9bd781cc49cfdff77b9a568ae98f2ca081211026..94bd4de22f329ec7a9d94ba08d5502f3c7c006cf 100644 (file)
@@ -1,7 +1,7 @@
 from fints.fields import DataElementField, DataElementGroupField
 from fints.formals import Account2, Account3
 
-from ._base import FinTS3Segment
+from .base import FinTS3Segment
 
 
 class HKWPD5(FinTS3Segment):
index 5773eeed61867e3de5cf884802e1c3a501737124..0e34f3d32c903afe2ad2a42f1574c5a69d1d1d7b 100644 (file)
@@ -1,6 +1,6 @@
-from ._base import FinTS3Segment
 from ..fields import CodeField, DataElementField, DataElementGroupField
-from ..formals import SynchronisationMode, Response
+from ..formals import Response, SynchronisationMode
+from .base import FinTS3Segment
 
 
 class HKSYN3(FinTS3Segment):
@@ -29,4 +29,3 @@ class HIRMG2(FinTS3Segment):
 class HIRMS2(FinTS3Segment):
     "Rückmeldungen zu Segmenten"
     responses = DataElementGroupField(type=Response, min_count=1, max_count=99, _d="Rückmeldung")
-
index 25a9b7725673c966b489caa4f9646125ce8a4be5..83252de8cc50c1573e938321feb266d5121eae71 100644 (file)
@@ -1,9 +1,8 @@
 from fints.fields import DataElementField, DataElementGroupField
-from fints.formals import (
-    ReferenceMessage, Response
-)
+from fints.formals import ReferenceMessage, Response
+
+from .base import FinTS3Segment, ParameterSegment, ParameterSegment_22
 
-from ._base import FinTS3Segment, ParameterSegment, ParameterSegment_22
 
 class HKPRO3(FinTS3Segment):
     """Statusprotokoll anfordern, version 3
index 93d1f5b049fbe8690df32fd0a7dd5ff8fd9b7d92..fc7fc68954fa3b4739949b13191eabff37bd38f8 100644 (file)
@@ -1,5 +1,3 @@
-import time
-
 from fints.fields import (
     CodeField, DataElementField, DataElementGroupField,
     SegmentSequenceField, ZeroPaddedNumericField,
@@ -10,7 +8,8 @@ from fints.formals import (
     SecurityDateTime, SecurityIdentificationDetails, SecurityProfile,
     SecurityRole, SignatureAlgorithm, UserDefinedSignature,
 )
-from ._base import FinTS3Segment
+
+from .base import FinTS3Segment
 
 
 class HNHBK3(FinTS3Segment):
index 5f35a796e5a3a60c72eab2fc4a96beb45ae53a5b..e94ccb55e9bc9077458e4655a1ae2dc531f3b810 100644 (file)
@@ -3,7 +3,7 @@ from fints.formals import (
     KTI1, Account2, Account3, Amount1, Balance1, Balance2, Timestamp1,
 )
 
-from ._base import FinTS3Segment
+from .base import FinTS3Segment
 
 
 class HKSAL5(FinTS3Segment):
index b3c61945d73cb5d994186693c53c19638b7f1f5c..c479a04946f7185ad2b0007b09e22c2a3b1a8c8e 100644 (file)
@@ -1,10 +1,7 @@
 from fints.fields import DataElementField, DataElementGroupField
-from fints.formals import (
-    KTI1, Account3, Account2, QueryCreditCardStatements2
-)
-
-from ._base import FinTS3Segment, ParameterSegment
+from fints.formals import KTI1, Account2, Account3, QueryCreditCardStatements2
 
+from .base import FinTS3Segment, ParameterSegment
 
 
 class HKKAZ5(FinTS3Segment):
index 515cf68fc2ebd1ad82af612b74aeb4af8d619d84..3bc6e3fe9448e04c45f1089a4bff5faedc58545c 100644 (file)
@@ -1,10 +1,7 @@
-from fints.fields import CodeField, DataElementField, DataElementGroupField
-from fints.formals import (
-    KTI1, Amount1, BatchTransferParameter1
-)
+from fints.fields import DataElementField, DataElementGroupField
+from fints.formals import KTI1, Amount1, BatchTransferParameter1
 
-from ._base import FinTS3Segment, ParameterSegment
-from ..models import SEPAAccount
+from .base import FinTS3Segment, ParameterSegment
 
 
 class HKCCS1(FinTS3Segment):
index c623125f47f2817a80c40e93d0a65ad23cccf542..a49fb5b7bc3584852e7994e6b80c357c13e400fd 100644 (file)
@@ -1,8 +1,9 @@
-from contextlib import suppress
 from collections import Iterable, OrderedDict
+from contextlib import suppress
 
 from .utils import SubclassesMixin
 
+
 class Field:
     def __init__(self, length=None, min_length=None, max_length=None, count=None, min_count=None, max_count=None, required=True, _d=None):
         if length is not None and (min_length is not None or max_length is not None):
index 4d6b35b84c0f35921ba3d0b2d1859bdc498d7c9d..d408c0731a34834375b47febfab526a8cb3e9f95 100644 (file)
@@ -1,7 +1,7 @@
-import inspect
-import re
 import base64
+import inspect
 import json
+import re
 import zlib
 from contextlib import contextmanager
 from datetime import datetime
index 31457b46bcfb2dda55e25b02d35a006e0bfe4828..c939e616889f613f0937a0b383333ddba707e4bf 100644 (file)
@@ -2,7 +2,6 @@ import glob
 import os.path
 
 import fints.parser
-import pytest
 
 TEST_MESSAGES = {
     os.path.basename(f).rsplit('.')[0]: open(f, 'rb').read() for f in 
index 1914ec258eb3094be2f0b63a83df9da691963939..6292b544e4e9181b7dab852a6789d477305df79c 100644 (file)
@@ -1,6 +1,6 @@
 import pytest
 from fints.formals import (
-    AlphanumericField, Container, ContainerField, DataElementField,
+    Container, ContainerField, DataElementField,
     DataElementGroupField, DigitsField, Field, GenericGroupField,
     NumericField, SegmentHeader, SegmentSequence,
 )
index 89a5f6dc3338d02c25869b23067e5b2e5537ad0b..7cb997943b4be5e753b06ae0adee98ef17381d19 100644 (file)
@@ -2,7 +2,7 @@ import pytest
 from conftest import TEST_MESSAGES
 from fints.formals import SegmentSequence
 from fints.parser import FinTS3Parser, FinTSParserError, FinTSParserWarning
-from fints.segments import FinTS3Segment
+from fints.segments.base import FinTS3Segment
 
 
 @pytest.mark.parametrize("input_name", TEST_MESSAGES.keys())
@@ -25,7 +25,7 @@ def test_parse_other(input_name):
     m.print_nested()
 
 def test_parse_counted():
-    from fints.segments import FinTS3Segment
+    from fints.segments.base import FinTS3Segment
     from fints.formals import NumericField, Container, ContainerField
 
     class ITST1(FinTS3Segment):
index 8283eba73be937c7c7f9030a91ad24a5e43cd5dc..e51c71f3c2b9c4ca1eeb86d665b55d923084b2f5 100644 (file)
@@ -2,7 +2,7 @@ import pytest
 from conftest import TEST_MESSAGES
 from fints.formals import NumericField
 from fints.parser import FinTS3Parser, FinTS3Serializer
-from fints.segments import FinTS3Segment
+from fints.segments.base import FinTS3Segment
 
 
 def test_serialize_1():
@@ -63,7 +63,7 @@ def test_escape():
 def test_serialize_2():
     from fints.formals import SegmentSequence
     import fints.formals, fints.segments
-    s = SegmentSequence([fints.segments.message.HNHBK3(header=fints.formals.SegmentHeader('HNHBK', 1, 3), message_size='000000000428', hbci_version=300, dialogue_id='430711670077=043999659571CN9D=', message_number=2, reference_message=fints.formals.ReferenceMessage(dialogue_id='430711670077=043999659571CN9D=', message_number=2)), fints.segments.message.HNVSK3(header=fints.formals.SegmentHeader('HNVSK', 998, 3), security_profile=fints.formals.SecurityProfile(security_method='PIN', security_method_version=1), security_function='998', security_role='1', security_identification_details=fints.formals.SecurityIdentificationDetails(identified_role='2', cid=None, identifier='oIm3BlHv6mQBAADYgbPpp+kWrAQA'), security_datetime=fints.formals.SecurityDateTime(date_time_type='1'), encryption_algorithm=fints.formals.EncryptionAlgorithm(usage_encryption='2', operation_mode='2', encryption_algorithm='13', algorithm_parameter_value=b'00000000', algorithm_parameter_name='5', algorithm_parameter_iv_name='1'), key_name=fints.formals.KeyName(bank_identifier=fints.formals.BankIdentifier(country_identifier='280', bank_code='15050500'), user_id='hermes', key_type='S', key_number=0, key_version=0), compression_function='0'), fints.segments.message.HNVSD1(header=fints.formals.SegmentHeader('HNVSD', 999, 1), data=SegmentSequence([fints.segments.message.HNSHK4(header=fints.formals.SegmentHeader('HNSHK', 2, 4), security_profile=fints.formals.SecurityProfile(security_method='PIN', security_method_version=1), security_function='999', security_reference='9166926', security_application_area='1', security_role='1', security_identification_details=fints.formals.SecurityIdentificationDetails(identified_role='2', cid=None, identifier='oIm3BlHv6mQBAADYgbPpp+kWrAQA'), security_reference_number=1, security_datetime=fints.formals.SecurityDateTime(date_time_type='1'), hash_algorithm=fints.formals.HashAlgorithm(usage_hash='1', hash_algorithm='999', algorithm_parameter_name='1'), signature_algorithm=fints.formals.SignatureAlgorithm(usage_signature='6', signature_algorithm='10', operation_mode='16'), key_name=fints.formals.KeyName(bank_identifier=fints.formals.BankIdentifier(country_identifier='280', bank_code='15050500'), user_id='hermes', key_type='S', key_number=0, key_version=0)), fints.segments.HIRMG2(header=fints.formals.SegmentHeader('HIRMG', 3, 2), responses=[fints.formals.Response(code='0010', reference_element=None, text='Nachricht entgegengenommen.'), fints.formals.Response(code='0100', reference_element=None, text='Dialog beendet.')]), fints.segments.message.HNSHA2(header=fints.formals.SegmentHeader('HNSHA', 4, 2), security_reference='9166926')])), fints.segments.message.HNHBS1(header=fints.formals.SegmentHeader('HNHBS', 5, 1), message_number=2)])
+    s = SegmentSequence([fints.segments.message.HNHBK3(header=fints.formals.SegmentHeader('HNHBK', 1, 3), message_size='000000000428', hbci_version=300, dialogue_id='430711670077=043999659571CN9D=', message_number=2, reference_message=fints.formals.ReferenceMessage(dialogue_id='430711670077=043999659571CN9D=', message_number=2)), fints.segments.message.HNVSK3(header=fints.formals.SegmentHeader('HNVSK', 998, 3), security_profile=fints.formals.SecurityProfile(security_method='PIN', security_method_version=1), security_function='998', security_role='1', security_identification_details=fints.formals.SecurityIdentificationDetails(identified_role='2', cid=None, identifier='oIm3BlHv6mQBAADYgbPpp+kWrAQA'), security_datetime=fints.formals.SecurityDateTime(date_time_type='1'), encryption_algorithm=fints.formals.EncryptionAlgorithm(usage_encryption='2', operation_mode='2', encryption_algorithm='13', algorithm_parameter_value=b'00000000', algorithm_parameter_name='5', algorithm_parameter_iv_name='1'), key_name=fints.formals.KeyName(bank_identifier=fints.formals.BankIdentifier(country_identifier='280', bank_code='15050500'), user_id='hermes', key_type='S', key_number=0, key_version=0), compression_function='0'), fints.segments.message.HNVSD1(header=fints.formals.SegmentHeader('HNVSD', 999, 1), data=SegmentSequence([fints.segments.message.HNSHK4(header=fints.formals.SegmentHeader('HNSHK', 2, 4), security_profile=fints.formals.SecurityProfile(security_method='PIN', security_method_version=1), security_function='999', security_reference='9166926', security_application_area='1', security_role='1', security_identification_details=fints.formals.SecurityIdentificationDetails(identified_role='2', cid=None, identifier='oIm3BlHv6mQBAADYgbPpp+kWrAQA'), security_reference_number=1, security_datetime=fints.formals.SecurityDateTime(date_time_type='1'), hash_algorithm=fints.formals.HashAlgorithm(usage_hash='1', hash_algorithm='999', algorithm_parameter_name='1'), signature_algorithm=fints.formals.SignatureAlgorithm(usage_signature='6', signature_algorithm='10', operation_mode='16'), key_name=fints.formals.KeyName(bank_identifier=fints.formals.BankIdentifier(country_identifier='280', bank_code='15050500'), user_id='hermes', key_type='S', key_number=0, key_version=0)), fints.segments.dialog.HIRMG2(header=fints.formals.SegmentHeader('HIRMG', 3, 2), responses=[fints.formals.Response(code='0010', reference_element=None, text='Nachricht entgegengenommen.'), fints.formals.Response(code='0100', reference_element=None, text='Dialog beendet.')]), fints.segments.message.HNSHA2(header=fints.formals.SegmentHeader('HNSHA', 4, 2), security_reference='9166926')])), fints.segments.message.HNHBS1(header=fints.formals.SegmentHeader('HNHBS', 5, 1), message_number=2)])
     
     assert FinTS3Serializer().serialize_message(s) == TEST_MESSAGES['basic_simple']
 
index 6520026b9283431e04b9a466b5c2e4a669990e9c..05e4d39860f01c9b1d8936d11a573c4b6a10fab9 100644 (file)
@@ -5,7 +5,7 @@ from fints.formals import (
     AlphanumericField, DataElementField, GenericField,
     NumericField, SegmentHeader, SegmentSequence,
 )
-from fints.segments import FinTS3Segment
+from fints.segments.base import FinTS3Segment
 from fints.segments.message import HNHBK3, HNHBS1
 
 
@@ -16,7 +16,7 @@ def test_metaclass_foo():
     assert a._fields['header']
 
 def test_fints3_only_de_and_deg():
-    from fints.formals import Field, Container, DataElementGroupField, ContainerField
+    from fints.formals import Field, Container, DataElementGroupField
 
     with pytest.raises(TypeError, match="b=.* is not DataElementField or DataElementGroupField"):
         class Foo(FinTS3Segment):
@@ -120,7 +120,7 @@ def test_find_subclass():
 def test_nested_output_evalable():
     import fints.segments, fints.formals
 
-    a = SegmentSequence([fints.segments.message.HNHBK3(header=fints.formals.SegmentHeader('HNHBK', 1, 3, None), message_size='000000000428', hbci_version=300, dialogue_id='430711670077=043999659571CN9D=', message_number=2, reference_message=fints.formals.ReferenceMessage(dialogue_id='430711670077=043999659571CN9D=', message_number=2)), fints.segments.message.HNVSK3(header=fints.formals.SegmentHeader('HNVSK', 998, 3, None), security_profile=fints.formals.SecurityProfile(security_method='PIN', security_method_version=1), security_function='998', security_role='1', security_identification_details=fints.formals.SecurityIdentificationDetails(identified_role='2', cid=None, identifier='oIm3BlHv6mQBAADYgbPpp+kWrAQA'), security_datetime=fints.formals.SecurityDateTime(date_time_type='1', date=None, time=None), encryption_algorithm=fints.formals.EncryptionAlgorithm(usage_encryption='2', operation_mode='2', encryption_algorithm='13', algorithm_parameter_value=b'00000000', algorithm_parameter_name='5', algorithm_parameter_iv_name='1', algorithm_parameter_iv_value=None), key_name=fints.formals.KeyName(bank_identifier=fints.formals.BankIdentifier(country_identifier='280', bank_code='15050500'), user_id='hermes', key_type='S', key_number=0, key_version=0), compression_function='0', certificate=fints.formals.Certificate(certificate_type=None, certificate_content=None)), fints.segments.message.HNVSD1(header=fints.formals.SegmentHeader('HNVSD', 999, 1, None), data=SegmentSequence([fints.segments.message.HNSHK4(header=fints.formals.SegmentHeader('HNSHK', 2, 4, None), security_profile=fints.formals.SecurityProfile(security_method='PIN', security_method_version=1), security_function='999', security_reference='9166926', security_application_area='1', security_role='1', security_identification_details=fints.formals.SecurityIdentificationDetails(identified_role='2', cid=None, identifier='oIm3BlHv6mQBAADYgbPpp+kWrAQA'), security_reference_number=1, security_datetime=fints.formals.SecurityDateTime(date_time_type='1', date=None, time=None), hash_algorithm=fints.formals.HashAlgorithm(usage_hash='1', hash_algorithm='999', algorithm_parameter_name='1', algorithm_parameter_value=None), signature_algorithm=fints.formals.SignatureAlgorithm(usage_signature='6', signature_algorithm='10', operation_mode='16'), key_name=fints.formals.KeyName(bank_identifier=fints.formals.BankIdentifier(country_identifier='280', bank_code='15050500'), user_id='hermes', key_type='S', key_number=0, key_version=0), certificate=fints.formals.Certificate(certificate_type=None, certificate_content=None)), fints.segments.FinTS3Segment(header=fints.formals.SegmentHeader('HIRMG', 3, 2, None), _additional_data=[['0010', None, 'Nachricht entgegengenommen.'], ['0100', None, 'Dialog beendet.']]), fints.segments.FinTS3Segment(header=fints.formals.SegmentHeader('HNSHA', 4, 2, None), _additional_data=['9166926'])])), fints.segments.message.HNHBS1(header=fints.formals.SegmentHeader('HNHBS', 5, 1, None), message_number=2)])
+    a = SegmentSequence([fints.segments.message.HNHBK3(header=fints.formals.SegmentHeader('HNHBK', 1, 3, None), message_size='000000000428', hbci_version=300, dialogue_id='430711670077=043999659571CN9D=', message_number=2, reference_message=fints.formals.ReferenceMessage(dialogue_id='430711670077=043999659571CN9D=', message_number=2)), fints.segments.message.HNVSK3(header=fints.formals.SegmentHeader('HNVSK', 998, 3, None), security_profile=fints.formals.SecurityProfile(security_method='PIN', security_method_version=1), security_function='998', security_role='1', security_identification_details=fints.formals.SecurityIdentificationDetails(identified_role='2', cid=None, identifier='oIm3BlHv6mQBAADYgbPpp+kWrAQA'), security_datetime=fints.formals.SecurityDateTime(date_time_type='1', date=None, time=None), encryption_algorithm=fints.formals.EncryptionAlgorithm(usage_encryption='2', operation_mode='2', encryption_algorithm='13', algorithm_parameter_value=b'00000000', algorithm_parameter_name='5', algorithm_parameter_iv_name='1', algorithm_parameter_iv_value=None), key_name=fints.formals.KeyName(bank_identifier=fints.formals.BankIdentifier(country_identifier='280', bank_code='15050500'), user_id='hermes', key_type='S', key_number=0, key_version=0), compression_function='0', certificate=fints.formals.Certificate(certificate_type=None, certificate_content=None)), fints.segments.message.HNVSD1(header=fints.formals.SegmentHeader('HNVSD', 999, 1, None), data=SegmentSequence([fints.segments.message.HNSHK4(header=fints.formals.SegmentHeader('HNSHK', 2, 4, None), security_profile=fints.formals.SecurityProfile(security_method='PIN', security_method_version=1), security_function='999', security_reference='9166926', security_application_area='1', security_role='1', security_identification_details=fints.formals.SecurityIdentificationDetails(identified_role='2', cid=None, identifier='oIm3BlHv6mQBAADYgbPpp+kWrAQA'), security_reference_number=1, security_datetime=fints.formals.SecurityDateTime(date_time_type='1', date=None, time=None), hash_algorithm=fints.formals.HashAlgorithm(usage_hash='1', hash_algorithm='999', algorithm_parameter_name='1', algorithm_parameter_value=None), signature_algorithm=fints.formals.SignatureAlgorithm(usage_signature='6', signature_algorithm='10', operation_mode='16'), key_name=fints.formals.KeyName(bank_identifier=fints.formals.BankIdentifier(country_identifier='280', bank_code='15050500'), user_id='hermes', key_type='S', key_number=0, key_version=0), certificate=fints.formals.Certificate(certificate_type=None, certificate_content=None)), fints.segments.base.FinTS3Segment(header=fints.formals.SegmentHeader('HIRMG', 3, 2, None), _additional_data=[['0010', None, 'Nachricht entgegengenommen.'], ['0100', None, 'Dialog beendet.']]), fints.segments.base.FinTS3Segment(header=fints.formals.SegmentHeader('HNSHA', 4, 2, None), _additional_data=['9166926'])])), fints.segments.message.HNHBS1(header=fints.formals.SegmentHeader('HNHBS', 5, 1, None), message_number=2)])
 
     output = StringIO()
     a.print_nested(stream=output)