From: Henryk Plötz Date: Sat, 8 Sep 2018 19:11:12 +0000 (+0200) Subject: Shuffle segments around X-Git-Tag: v2.0.0~1^2~51 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d6eef2f1a69a1bb91623f9524d557b1de84d0c4c;p=thirdparty%2Fpython-fints.git Shuffle segments around --- diff --git a/fints/client.py b/fints/client.py index 2a181c6..501e602 100644 --- a/fints/client.py +++ b/fints/client.py @@ -27,11 +27,11 @@ from .security import ( PinTanDummyEncryptionMechanism, PinTanOneStepAuthenticationMechanism, PinTanTwoStepAuthenticationMechanism, ) -from .segments import HIBPA3, HIRMG2, HIRMS2, HIUPA4, HIPINS1, HKKOM4 +from .segments.bank import HIBPA3, HIUPA4, HKKOM4 from .segments.accounts import HISPA1, HKSPA1 -from .segments.auth import HKTAB4, HKTAB5, HKTAN3, HKTAN5 +from .segments.auth import HKTAB4, HKTAB5, HKTAN3, HKTAN5, HIPINS1 from .segments.depot import HKWPD5, HKWPD6 -from .segments.dialog import HISYN4, HKSYN3 +from .segments.dialog import HISYN4, HKSYN3, HIRMG2, HIRMS2 from .segments.debit import HKDSE1, HKDSE2, HKDME1, HKDME2, HKDSC1, HKDMC1, HKDBS1, HKDBS2, HKDMB1, DebitResponseBase from .segments.saldo import HKSAL5, HKSAL6, HKSAL7 from .segments.statement import HKKAZ5, HKKAZ6, HKKAZ7, DKKKU2 diff --git a/fints/message.py b/fints/message.py index dc6f5a2..30d66d8 100644 --- a/fints/message.py +++ b/fints/message.py @@ -2,7 +2,10 @@ import random from enum import Enum from .formals import SegmentSequence -from .segments import HIBPA3, HIRMG2, HIRMS2, FinTS3Segment, HITANSBase +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 diff --git a/fints/parser.py b/fints/parser.py index d313253..6a2a218 100644 --- a/fints/parser.py +++ b/fints/parser.py @@ -6,7 +6,7 @@ from enum import Enum from .formals import ( Container, DataElementGroupField, SegmentSequence, ValueList, ) -from .segments import FinTS3Segment +from .segments._base import FinTS3Segment # # FinTS 3.0 structure: diff --git a/fints/segments/__init__.py b/fints/segments/__init__.py index 59ab6cd..e69de29 100644 --- a/fints/segments/__init__.py +++ b/fints/segments/__init__.py @@ -1,173 +0,0 @@ -import re - -from fints.fields import CodeField, IntCodeField -from fints.formals import ( - KTZ1, AccountInformation, AccountLimit, AllowedTransaction, BankIdentifier, - Certificate, CompressionFunction, Container, ContainerMeta, - DataElementField, DataElementGroupField, EncryptionAlgorithm, HashAlgorithm, - KeyName, ParameterPinTan, ParameterTwostepTAN1, ParameterTwostepTAN2, - ParameterTwostepTAN3, ParameterTwostepTAN4, ParameterTwostepTAN5, - ParameterTwostepTAN6, ReferenceMessage, Response, SecurityApplicationArea, - SecurityClass, SecurityDateTime, SecurityIdentificationDetails, - SecurityProfile, SecurityRole, SegmentHeader, SegmentSequenceField, - SignatureAlgorithm, SupportedHBCIVersions2, SupportedLanguages2, UPDUsage, - UserDefinedSignature, Language2, CommunicationParameter2, -) -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 HIRMG2(FinTS3Segment): - "Rückmeldungen zur Gesamtnachricht" - responses = DataElementGroupField(type=Response, min_count=1, max_count=99, _d="Rückmeldung") - -class HIRMS2(FinTS3Segment): - "Rückmeldungen zu Segmenten" - responses = DataElementGroupField(type=Response, min_count=1, max_count=99, _d="Rückmeldung") - -class HIUPA4(FinTS3Segment): - "Userparameter allgemein" - user_identifier = DataElementField(type='id', _d="Benutzerkennung") - upd_version = DataElementField(type='num', max_length=3, _d="UPD-Version") - upd_usage = CodeField(UPDUsage, length=1, _d="UPD-Verwendung") - username = DataElementField(type='an', max_length=35, required=False, _d="Benutzername") - extension = DataElementField(type='an', max_length=2048, required=False, _d="Erweiterung, allgemein") - -class HIUPD6(FinTS3Segment): - "Kontoinformationen" - account_information = DataElementGroupField(type=AccountInformation, required=False, _d="Kontoverbindung") - iban = DataElementField(type='an', max_length=34, _d="IBAN") - customer_id = DataElementField(type='id', _d="Kunden-ID") - account_type = DataElementField(type='num', max_length=2, _d="Kontoart") - account_currency = DataElementField(type='cur', _d="Kontowährung") - name_account_owner_1 = DataElementField(type='an', max_length=27, _d="Name des Kontoinhabers 1") - name_account_owner_2 = DataElementField(type='an', max_length=27, required=False, _d="Name des Kontoinhabers 2") - account_product_name = DataElementField(type='an', max_length=30, required=False, _d="Kontoproduktbezeichnung") - account_limit = DataElementGroupField(type=AccountLimit, required=False, _d="Kontolimit") - allowed_transactions = DataElementGroupField(type=AllowedTransaction, count=999, required=False, _d="Erlaubte Geschäftsvorfälle") - extension = DataElementField(type='an', max_length=2048, required=False, _d="Erweiterung, kontobezogen") - -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") - -class HITANSBase(ParameterSegment): - pass - -class HITANS1(HITANSBase): - parameter = DataElementGroupField(type=ParameterTwostepTAN1) - -class HITANS2(HITANSBase): - parameter = DataElementGroupField(type=ParameterTwostepTAN2) - -class HITANS3(HITANSBase): - parameter = DataElementGroupField(type=ParameterTwostepTAN3) - -class HITANS4(HITANSBase): - parameter = DataElementGroupField(type=ParameterTwostepTAN4) - -class HITANS5(HITANSBase): - parameter = DataElementGroupField(type=ParameterTwostepTAN5) - -class HITANS6(HITANSBase): - parameter = DataElementGroupField(type=ParameterTwostepTAN6) - -class HIPINS1(ParameterSegment): - """PIN/TAN-spezifische Informationen, version 1 - - Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Sicherheitsverfahren PIN/TAN - """ - parameter = DataElementGroupField(type=ParameterPinTan, _d="Parameter PIN/TAN-spezifische Informationen") - - -class HIBPA3(FinTS3Segment): - """Bankparameter allgemein, version 3 - - Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Formals""" - bpd_version = DataElementField(type='num', max_length=3, _d="BPD-Version") - bank_identifier = DataElementGroupField(type=BankIdentifier, _d="Kreditinstitutskennung") - bank_name = DataElementField(type='an', max_length=60, _d="Kreditinstitutsbezeichnung") - number_tasks = DataElementField(type='num', max_length=3, _d="Anzahl Geschäftsvorfallarten pro Nachricht") - supported_languages = DataElementGroupField(type=SupportedLanguages2, _d="Unterstützte Sprachen") - supported_hbci_version = DataElementGroupField(type=SupportedHBCIVersions2, _d="Unterstützte HBCI-Versionen") - max_message_length = DataElementField(type='num', max_length=4, required=False, _d="Maximale Nachrichtengröße") - min_timeout = DataElementField(type='num', max_length=4, required=False, _d="Minimaler Timeout-Wert") - max_timeout = DataElementField(type='num', max_length=4, required=False, _d="Maximaler Timeout-Wert") - -class HKKOM4(FinTS3Segment): - """Kommunikationszugang anfordern, version 4 - - Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Formals""" - start_bank_identifier = DataElementGroupField(type=BankIdentifier, required=False, _d="Von Kreditinstitutskennung") - end_bank_identifier = DataElementGroupField(type=BankIdentifier, required=False, _d="Bis Kreditinstitutskennung") - max_number_responses = DataElementField(type='num', max_length=4, required=False, _d="Maximale Anzahl Einträge") - touchdown_point = DataElementField(type='an', max_length=35, required=False, _d="Aufsetzpunkt") - -class HIKOM4(FinTS3Segment): - """Kommunikationszugang rückmelden, version 4 - - Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Formals""" - bank_identifier = DataElementGroupField(type=BankIdentifier, _d="Kreditinstitutskennung") - default_language = CodeField(enum=Language2, max_length=3, _d="Standardsprache") - communication_parameters = DataElementGroupField(type=CommunicationParameter2, min_count=1, max_count=9, _d="Kommunikationsparameter") - -from . import ( - accounts, auth, debit, depot, dialog, message, saldo, statement, transfer, journal, -) diff --git a/fints/segments/_base.py b/fints/segments/_base.py new file mode 100644 index 0000000..7680f89 --- /dev/null +++ b/fints/segments/_base.py @@ -0,0 +1,69 @@ +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") diff --git a/fints/segments/accounts.py b/fints/segments/accounts.py index fad213d..677c73e 100644 --- a/fints/segments/accounts.py +++ b/fints/segments/accounts.py @@ -1,4 +1,4 @@ -from . import FinTS3Segment, ParameterSegment +from ._base import FinTS3Segment, ParameterSegment from ..fields import DataElementGroupField from ..formals import KTZ1, Account3, GetSEPAAccountParameter1 diff --git a/fints/segments/auth.py b/fints/segments/auth.py index c6278db..0613107 100644 --- a/fints/segments/auth.py +++ b/fints/segments/auth.py @@ -2,9 +2,12 @@ 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 + KTI1, ParameterChallengeClass, ResponseHHDUC, ChallengeValidUntil, + ParameterTwostepTAN1, ParameterTwostepTAN2, ParameterTwostepTAN3, ParameterTwostepTAN4, + ParameterTwostepTAN5, ParameterTwostepTAN6, ParameterPinTan, SupportedLanguages2, + SupportedHBCIVersions2 ) -from . import FinTS3Segment +from ._base import FinTS3Segment, ParameterSegment class HKIDN2(FinTS3Segment): @@ -149,3 +152,33 @@ class HITAB5(FinTS3Segment): tan_usage_option = CodeField(enum=TANUsageOption, _d="TAN_Einsatzoption") tan_media_list = DataElementGroupField(type=TANMedia5, max_count=99, required=False, _d="TAN-Medium-Liste") + +class HITANSBase(ParameterSegment): + pass + +class HITANS1(HITANSBase): + parameter = DataElementGroupField(type=ParameterTwostepTAN1) + +class HITANS2(HITANSBase): + parameter = DataElementGroupField(type=ParameterTwostepTAN2) + +class HITANS3(HITANSBase): + parameter = DataElementGroupField(type=ParameterTwostepTAN3) + +class HITANS4(HITANSBase): + parameter = DataElementGroupField(type=ParameterTwostepTAN4) + +class HITANS5(HITANSBase): + parameter = DataElementGroupField(type=ParameterTwostepTAN5) + +class HITANS6(HITANSBase): + parameter = DataElementGroupField(type=ParameterTwostepTAN6) + +class HIPINS1(ParameterSegment): + """PIN/TAN-spezifische Informationen, version 1 + + Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Sicherheitsverfahren PIN/TAN + """ + parameter = DataElementGroupField(type=ParameterPinTan, _d="Parameter PIN/TAN-spezifische Informationen") + + diff --git a/fints/segments/bank.py b/fints/segments/bank.py new file mode 100644 index 0000000..645b8f9 --- /dev/null +++ b/fints/segments/bank.py @@ -0,0 +1,56 @@ +from ._base import FinTS3Segment +from fints.fields import DataElementField, CodeField, DataElementGroupField +from fints.formals import UPDUsage, AccountInformation, AccountLimit, AllowedTransaction, BankIdentifier, Language2, CommunicationParameter2, SupportedLanguages2, SupportedHBCIVersions2 + +class HIBPA3(FinTS3Segment): + """Bankparameter allgemein, version 3 + + Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Formals""" + bpd_version = DataElementField(type='num', max_length=3, _d="BPD-Version") + bank_identifier = DataElementGroupField(type=BankIdentifier, _d="Kreditinstitutskennung") + bank_name = DataElementField(type='an', max_length=60, _d="Kreditinstitutsbezeichnung") + number_tasks = DataElementField(type='num', max_length=3, _d="Anzahl Geschäftsvorfallarten pro Nachricht") + supported_languages = DataElementGroupField(type=SupportedLanguages2, _d="Unterstützte Sprachen") + supported_hbci_version = DataElementGroupField(type=SupportedHBCIVersions2, _d="Unterstützte HBCI-Versionen") + max_message_length = DataElementField(type='num', max_length=4, required=False, _d="Maximale Nachrichtengröße") + min_timeout = DataElementField(type='num', max_length=4, required=False, _d="Minimaler Timeout-Wert") + max_timeout = DataElementField(type='num', max_length=4, required=False, _d="Maximaler Timeout-Wert") + +class HIUPA4(FinTS3Segment): + "Userparameter allgemein" + user_identifier = DataElementField(type='id', _d="Benutzerkennung") + upd_version = DataElementField(type='num', max_length=3, _d="UPD-Version") + upd_usage = CodeField(UPDUsage, length=1, _d="UPD-Verwendung") + username = DataElementField(type='an', max_length=35, required=False, _d="Benutzername") + extension = DataElementField(type='an', max_length=2048, required=False, _d="Erweiterung, allgemein") + +class HIUPD6(FinTS3Segment): + "Kontoinformationen" + account_information = DataElementGroupField(type=AccountInformation, required=False, _d="Kontoverbindung") + iban = DataElementField(type='an', max_length=34, _d="IBAN") + customer_id = DataElementField(type='id', _d="Kunden-ID") + account_type = DataElementField(type='num', max_length=2, _d="Kontoart") + account_currency = DataElementField(type='cur', _d="Kontowährung") + name_account_owner_1 = DataElementField(type='an', max_length=27, _d="Name des Kontoinhabers 1") + name_account_owner_2 = DataElementField(type='an', max_length=27, required=False, _d="Name des Kontoinhabers 2") + account_product_name = DataElementField(type='an', max_length=30, required=False, _d="Kontoproduktbezeichnung") + account_limit = DataElementGroupField(type=AccountLimit, required=False, _d="Kontolimit") + allowed_transactions = DataElementGroupField(type=AllowedTransaction, count=999, required=False, _d="Erlaubte Geschäftsvorfälle") + extension = DataElementField(type='an', max_length=2048, required=False, _d="Erweiterung, kontobezogen") + +class HKKOM4(FinTS3Segment): + """Kommunikationszugang anfordern, version 4 + + Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Formals""" + start_bank_identifier = DataElementGroupField(type=BankIdentifier, required=False, _d="Von Kreditinstitutskennung") + end_bank_identifier = DataElementGroupField(type=BankIdentifier, required=False, _d="Bis Kreditinstitutskennung") + max_number_responses = DataElementField(type='num', max_length=4, required=False, _d="Maximale Anzahl Einträge") + touchdown_point = DataElementField(type='an', max_length=35, required=False, _d="Aufsetzpunkt") + +class HIKOM4(FinTS3Segment): + """Kommunikationszugang rückmelden, version 4 + + Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Formals""" + bank_identifier = DataElementGroupField(type=BankIdentifier, _d="Kreditinstitutskennung") + default_language = CodeField(enum=Language2, max_length=3, _d="Standardsprache") + communication_parameters = DataElementGroupField(type=CommunicationParameter2, min_count=1, max_count=9, _d="Kommunikationsparameter") diff --git a/fints/segments/debit.py b/fints/segments/debit.py index 84763bc..33673de 100644 --- a/fints/segments/debit.py +++ b/fints/segments/debit.py @@ -1,8 +1,7 @@ -from . import FinTS3Segment +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 . import ParameterSegment class BatchDebitBase(FinTS3Segment): account = DataElementGroupField(type=KTI1, _d="Kontoverbindung international") diff --git a/fints/segments/depot.py b/fints/segments/depot.py index 63d6730..9bd781c 100644 --- a/fints/segments/depot.py +++ b/fints/segments/depot.py @@ -1,7 +1,7 @@ from fints.fields import DataElementField, DataElementGroupField from fints.formals import Account2, Account3 -from . import FinTS3Segment +from ._base import FinTS3Segment class HKWPD5(FinTS3Segment): diff --git a/fints/segments/dialog.py b/fints/segments/dialog.py index 9421ba0..5773eee 100644 --- a/fints/segments/dialog.py +++ b/fints/segments/dialog.py @@ -1,6 +1,6 @@ -from . import FinTS3Segment -from ..fields import CodeField, DataElementField -from ..formals import SynchronisationMode +from ._base import FinTS3Segment +from ..fields import CodeField, DataElementField, DataElementGroupField +from ..formals import SynchronisationMode, Response class HKSYN3(FinTS3Segment): @@ -21,3 +21,12 @@ class HKEND1(FinTS3Segment): Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Formals""" dialogue_id = DataElementField(type='id', _d="Dialog-ID") + +class HIRMG2(FinTS3Segment): + "Rückmeldungen zur Gesamtnachricht" + responses = DataElementGroupField(type=Response, min_count=1, max_count=99, _d="Rückmeldung") + +class HIRMS2(FinTS3Segment): + "Rückmeldungen zu Segmenten" + responses = DataElementGroupField(type=Response, min_count=1, max_count=99, _d="Rückmeldung") + diff --git a/fints/segments/journal.py b/fints/segments/journal.py index 4718bef..25a9b77 100644 --- a/fints/segments/journal.py +++ b/fints/segments/journal.py @@ -3,7 +3,7 @@ from fints.formals import ( ReferenceMessage, Response ) -from . import FinTS3Segment, ParameterSegment, ParameterSegment_22 +from ._base import FinTS3Segment, ParameterSegment, ParameterSegment_22 class HKPRO3(FinTS3Segment): """Statusprotokoll anfordern, version 3 diff --git a/fints/segments/message.py b/fints/segments/message.py index f214283..93d1f5b 100644 --- a/fints/segments/message.py +++ b/fints/segments/message.py @@ -10,7 +10,7 @@ from fints.formals import ( SecurityDateTime, SecurityIdentificationDetails, SecurityProfile, SecurityRole, SignatureAlgorithm, UserDefinedSignature, ) -from . import FinTS3Segment +from ._base import FinTS3Segment class HNHBK3(FinTS3Segment): diff --git a/fints/segments/saldo.py b/fints/segments/saldo.py index a426449..5f35a79 100644 --- a/fints/segments/saldo.py +++ b/fints/segments/saldo.py @@ -3,7 +3,7 @@ from fints.formals import ( KTI1, Account2, Account3, Amount1, Balance1, Balance2, Timestamp1, ) -from . import FinTS3Segment +from ._base import FinTS3Segment class HKSAL5(FinTS3Segment): diff --git a/fints/segments/statement.py b/fints/segments/statement.py index c3fede3..b3c6194 100644 --- a/fints/segments/statement.py +++ b/fints/segments/statement.py @@ -3,7 +3,7 @@ from fints.formals import ( KTI1, Account3, Account2, QueryCreditCardStatements2 ) -from . import FinTS3Segment, ParameterSegment +from ._base import FinTS3Segment, ParameterSegment diff --git a/fints/segments/transfer.py b/fints/segments/transfer.py index 7397696..515cf68 100644 --- a/fints/segments/transfer.py +++ b/fints/segments/transfer.py @@ -3,7 +3,7 @@ from fints.formals import ( KTI1, Amount1, BatchTransferParameter1 ) -from . import FinTS3Segment, ParameterSegment +from ._base import FinTS3Segment, ParameterSegment from ..models import SEPAAccount diff --git a/fints/types.py b/fints/types.py index b24cfd9..a44a015 100644 --- a/fints/types.py +++ b/fints/types.py @@ -2,7 +2,6 @@ from collections import Iterable, OrderedDict import fints.fields - class ValueList: def __init__(self, parent): self._parent = parent