Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make enum-utils an optional dependency #163

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 35 additions & 36 deletions fints/formals.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import re

from enum_tools.documentation import document_enum

from fints.fields import *
from fints.types import *
from fints.utils import RepresentableEnum, ShortReprMixin
from fints.utils import RepresentableEnum, ShortReprMixin, doc_enum

CUSTOMER_ID_ANONYMOUS = '9999999999'

Expand All @@ -26,7 +25,7 @@ class ReferenceMessage(DataElementGroup):
message_number = NumericField(max_length=4)


@document_enum
@doc_enum
class SecurityMethod(RepresentableEnum):
DDV = 'DDV'
RAH = 'RAH'
Expand All @@ -40,7 +39,7 @@ class SecurityProfile(DataElementGroup):
security_method_version = DataElementField(type='num', _d="Version des Sicherheitsverfahrens")


@document_enum
@doc_enum
class IdentifiedRole(RepresentableEnum):
MS = '1' # doc: Message Sender
MR = '2' # doc: Message Receiver
Expand All @@ -52,7 +51,7 @@ class SecurityIdentificationDetails(DataElementGroup):
identifier = DataElementField(type='id')


@document_enum
@doc_enum
class DateTimeType(RepresentableEnum):
STS = '1' # doc: Sicherheitszeitstempel
CRT = '6' # doc: Certificate Revocation Time
Expand All @@ -64,12 +63,12 @@ class SecurityDateTime(DataElementGroup):
time = DataElementField(type='tim', required=False)


@document_enum
@doc_enum
class UsageEncryption(RepresentableEnum):
OSY = '2' # doc: Owner Symmetric


@document_enum
@doc_enum
class OperationMode(RepresentableEnum):
CBC = '2' # doc: Cipher Block Chaining
ISO_9796_1 = '16' # doc: ISO 9796-1 (bei RDH)
Expand All @@ -79,19 +78,19 @@ class OperationMode(RepresentableEnum):
ZZZ = '999' # doc: Gegenseitig vereinbart (DDV: Retail-MAC)


@document_enum
@doc_enum
class EncryptionAlgorithmCoded(RepresentableEnum):
TWOKEY3DES = '13' # doc: 2-Key-Triple-DES
AES256 = '14' # doc: AES-256


@document_enum
@doc_enum
class AlgorithmParameterName(RepresentableEnum):
KYE = '5' # doc: Symmetrischer Schlüssel, verschlüsselt mit symmetrischem Schlüssel
KYP = '6' # doc: Symmetrischer Schlüssel, verschlüsselt mit öffentlichem Schlüssel


@document_enum
@doc_enum
class AlgorithmParameterIVName(RepresentableEnum):
IVC = '1' # doc: Initialization value, clear text

Expand Down Expand Up @@ -162,7 +161,7 @@ class BankIdentifier(DataElementGroup):
bank_code = DataElementField(type='an', max_length=30)


@document_enum
@doc_enum
class KeyType(RepresentableEnum):
"""Schlüsselart"""
D = 'D' # doc: Schlüssel zur Erzeugung digitaler Signaturen
Expand Down Expand Up @@ -223,54 +222,54 @@ class AllowedTransaction(DataElementGroup):
limit_days = DataElementField(type='num', max_length=3, required=False)


@document_enum
@doc_enum
class TANTimeDialogAssociation(RepresentableEnum):
NOT_ALLOWED = '1' # doc: TAN nicht zeitversetzt / dialogübergreifend erlaubt
ALLOWED = '2' # doc: TAN zeitversetzt / dialogübergreifend erlaubt
BOTH = '3' # doc: beide Verfahren unterstützt
NOT_APPLICABLE = '4' # doc: nicht zutreffend


@document_enum
@doc_enum
class AllowedFormat(RepresentableEnum):
NUMERIC = '1' # doc: numerisch
ALPHANUMERIC = '2' # doc: alfanumerisch


@document_enum
@doc_enum
class TANListNumberRequired(RepresentableEnum):
NO = '0' # doc: Nein
YES = '2' # doc: Ja


@document_enum
@doc_enum
class InitializationMode(RepresentableEnum):
CLEARTEXT_PIN_NO_TAN = '00' # doc: Initialisierungsverfahren mit Klartext-PIN und ohne TAN
ENCRYPTED_PIN_NO_TAN = '01' # doc: Schablone 01: Verschlüsselte PIN und ohne TAN
MASK_02 = '02' # doc: Schablone 02: Reserviert, bei FinTS zur Zeit nicht verwendet


@document_enum
@doc_enum
class DescriptionRequired(RepresentableEnum):
MUST_NOT = '0' # doc: Bezeichnung des TAN-Mediums darf nicht angegeben werden
MAY = '1' # doc: Bezeichnung des TAN-Mediums kann angegeben werden
MUST = '2' # doc: Bezeichnung des TAN-Mediums muss angegeben werden


@document_enum
@doc_enum
class SMSChargeAccountRequired(RepresentableEnum):
MUST_NOT = '0' # doc: SMS-Abbuchungskonto darf nicht angegeben werden
MAY = '1' # doc: SMS-Abbuchungskonto kann angegeben werden
MUST = '2' # doc: SMS-Abbuchungskonto muss angegeben werden


@document_enum
@doc_enum
class PrincipalAccountRequired(RepresentableEnum):
MUST_NOT = '0' # doc: Auftraggeberkonto darf nicht angegeben werden
MUST = '2' # doc: Auftraggeberkonto muss angegeben werden, wenn im Geschäftsvorfall enthalten


@document_enum
@doc_enum
class TaskHashAlgorithm(RepresentableEnum):
NONE = '0' # doc: Auftrags-Hashwert nicht unterstützt
RIPEMD_160 = '1' # doc: RIPEMD-160
Expand Down Expand Up @@ -472,7 +471,7 @@ class ParameterPinTan(DataElementGroup):
transaction_tans_required = DataElementGroupField(type=TransactionTanRequired, max_count=999, required=False)


@document_enum
@doc_enum
class Language2(RepresentableEnum):
"""Dialogsprache

Expand Down Expand Up @@ -580,7 +579,7 @@ def from_sepa_account(cls, acc):
)


@document_enum
@doc_enum
class SecurityRole(RepresentableEnum):
"""Rolle des Sicherheitslieferanten, kodiert, version 2

Expand All @@ -593,7 +592,7 @@ class SecurityRole(RepresentableEnum):
WIT = '4' # doc: Zeuge/Übermittler, nicht Erfasser


@document_enum
@doc_enum
class CompressionFunction(RepresentableEnum):
"""Komprimierungsfunktion, version 2

Expand All @@ -609,7 +608,7 @@ class CompressionFunction(RepresentableEnum):
ZZZ = '999' # doc: Gegenseitig vereinbart


@document_enum
@doc_enum
class SecurityApplicationArea(RepresentableEnum):
"""Bereich der Sicherheitsapplikation, kodiert, version 2

Expand All @@ -620,7 +619,7 @@ class SecurityApplicationArea(RepresentableEnum):
SHT = '2' # doc: Von Signaturkopf bis Signaturabschluss


@document_enum
@doc_enum
class SecurityClass(RepresentableEnum):
"""Sicherheitsklasse, version 1

Expand All @@ -634,7 +633,7 @@ class SecurityClass(RepresentableEnum):
NON_REPUD_QUAL = 4 # doc: Sicherheitsdienst 'Non-Repudiation' mit fortgeschrittener bzw. qualifizierter elektronischer Signatur, zwingende Zertifikatsprüfung


@document_enum
@doc_enum
class UPDUsage(RepresentableEnum):
"""UPD-Verwendung, version 2

Expand All @@ -645,7 +644,7 @@ class UPDUsage(RepresentableEnum):
UPD_INCONCLUSIVE = '1' # doc: Bei nicht aufgeführten Geschäftsvorfällen ist keine Aussage möglich, ob diese erlaubt oder gesperrt sind


@document_enum
@doc_enum
class SystemIDStatus(RepresentableEnum):
"""Kundensystem-Status, version 2

Expand All @@ -654,7 +653,7 @@ class SystemIDStatus(RepresentableEnum):
ID_NECESSARY = '1' # doc: Kundensystem-ID wird benötigt


@document_enum
@doc_enum
class SynchronizationMode(RepresentableEnum):
"""Synchronisierungsmodus, version 2

Expand All @@ -664,7 +663,7 @@ class SynchronizationMode(RepresentableEnum):
SIGNATURE_ID = '2' # doc: Signatur-ID zurückmelden


@document_enum
@doc_enum
class CreditDebit2(RepresentableEnum):
"""Soll-Haben-Kennzeichen, version 2

Expand Down Expand Up @@ -720,7 +719,7 @@ class Timestamp1(DataElementGroup):
time = DataElementField(type='tim', required=False, _d="Uhrzeit")


@document_enum
@doc_enum
class TANMediaType2(RepresentableEnum):
"""TAN-Medium-Art

Expand All @@ -731,7 +730,7 @@ class TANMediaType2(RepresentableEnum):
AVAILABLE = '2' # doc: Verfügbar


@document_enum
@doc_enum
class TANMediaClass3(RepresentableEnum):
"""TAN-Medium-Klasse, version 3

Expand All @@ -744,7 +743,7 @@ class TANMediaClass3(RepresentableEnum):
SECODER = 'S' # doc: Secoder


@document_enum
@doc_enum
class TANMediaClass4(RepresentableEnum):
"""TAN-Medium-Klasse, version 4

Expand All @@ -758,7 +757,7 @@ class TANMediaClass4(RepresentableEnum):
BILATERAL = 'B' # doc: Bilateral vereinbart


@document_enum
@doc_enum
class TANMediumStatus(RepresentableEnum):
"""Status

Expand Down Expand Up @@ -817,7 +816,7 @@ class TANMedia5(DataElementGroup):
active_since = DataElementField(type='dat', required=False, _d="Freigeschaltet am")


@document_enum
@doc_enum
class TANUsageOption(RepresentableEnum):
"""TAN-Einsatzoption

Expand Down Expand Up @@ -863,7 +862,7 @@ class BatchTransferParameter1(DataElementGroup):
single_booking_allowed = DataElementField(type='jn', _d="Einzelbuchung erlaubt")


@document_enum
@doc_enum
class ServiceType2(RepresentableEnum):
T_ONLINE = 1 # doc: T-Online
TCP_IP = 2 # doc: TCP/IP (Protokollstack SLIP/PPP)
Expand Down Expand Up @@ -995,14 +994,14 @@ class QueryCreditCardStatements2(DataElementGroup):
date_range_allowed = DataElementField(type='jn', _d="Zeitraum möglich")


@document_enum
@doc_enum
class SEPACCode1(RepresentableEnum):
REVERSAL = '1' # doc: Reversal
REVOCATION = '2' # doc: Revocation
DELETION = '3' # doc: Delete


@document_enum
@doc_enum
class StatusSEPATask1(RepresentableEnum):
PENDING = '1' # doc: In Terminierung
DECLINED = '2' # doc: Abgelehnt von erster Inkassostelle
Expand Down
11 changes: 9 additions & 2 deletions fints/utils.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import base64
import inspect
import json
import re
import threading
import zlib
from contextlib import contextmanager
from datetime import datetime
from enum import Enum
from enum import Enum, EnumType

import mt940

Expand Down Expand Up @@ -336,3 +335,11 @@ def changed(reduced=False):


log_configuration = LogConfiguration()

try:
from enum_tools import document_enum

doc_enum = document_enum
except ImportError:
def doc_enum(an_enum: EnumType) -> EnumType:
return an_enum
Loading