]> git.ipfire.org Git - thirdparty/python-fints.git/commitdiff
Ignore end-of-sequence for open-end multiple fields
authorHenryk Plötz <henryk@ploetzli.ch>
Thu, 9 Aug 2018 00:10:56 +0000 (02:10 +0200)
committerRaphael Michel <mail@raphaelmichel.de>
Mon, 3 Dec 2018 18:34:17 +0000 (19:34 +0100)
fints/formals.py
fints/parser.py
fints/segments/__init__.py

index 7695b7446a5b0b81546f3c7166db03bdbff10271..b95b89b8059332d9007d7a700e887a236aaec6ca 100644 (file)
@@ -540,3 +540,23 @@ class AllowedTransaction(DataElementGroup):
     limit_type = DataElementField(type='code', length=1, required=False)
     limit_amount = DataElementField(type='btg', required=False)
     limit_days = DataElementField(type='num', max_length=3, required=False)
+
+class TwoStepParameters(DataElementGroup):
+    security_function = DataElementField(type='code', max_length=3)
+    tan_process = DataElementField(type='code', length=1)
+    technical_identification_tan_process = DataElementField(type='id')
+    name_twostep_process = DataElementField(type='an', max_length=30)
+    max_length_tan_entry = DataElementField(type='num', max_length=2)
+    allowed_format_tan_entry = DataElementField(type='code', length=1)
+    return_value_text = DataElementField(type='an', max_length=30)
+    max_length_return_value = DataElementField(type='num', max_length=3)
+    number_supported_tan_lists = DataElementField(type='num', length=1)
+    multiple_tans_allowed = DataElementField(type='jn')
+    tan_time_delayed_allowed = DataElementField(type='jn')
+
+class ParameterTwostepTAN(DataElementGroup):
+    onestep_method_allowed = DataElementField(type='jn')
+    multiple_tasks_allowed = DataElementField(type='jn')
+    hash_algorithm = DataElementField(type='code', length=1)
+    security_profile_bank_signature = DataElementField(type='code', length=1)
+    twostep_parameters = DataElementGroupField(type=TwoStepParameters, min_count=1, max_count=98)
index 70cbf3d625d1249377045768d813da2a01e2e7d9..26c0664a18ae5955fcd573b936bbb1bab438cb97 100644 (file)
@@ -190,6 +190,7 @@ class FinTS3Parser:
         for number, (name, field) in enumerate(retval._fields.items()):
             repeat = field.count != 1
             constructed = isinstance(field, DataElementGroupField)
+            is_last = number == len(retval._fields)-1
 
             if not repeat:
                 if not constructed:
@@ -212,7 +213,8 @@ class FinTS3Parser:
                             break
 
                     else:
-                        deg = self.parse_deg(field.type, data_i, required and field.required)
+                        require_last = (field.max_count is None) if is_last else True
+                        deg = self.parse_deg(field.type, data_i, require_last and required and field.required)
                         getattr(retval, name)[i] = deg
 
                     i = i + 1
index 1b9a41ea82d3541f5aee80c3cf060540b94b67b0..5d1cdc05e3707035795112c10ebd74d25ab6284e 100644 (file)
@@ -1,6 +1,6 @@
 import re
 
-from fints.formals import Container, ContainerMeta, SegmentHeader, DataElementGroupField, DataElementField, ReferenceMessage, SegmentSequenceField, SecurityProfile, SecurityIdentificationDetails, SecurityDateTime, EncryptionAlgorithm, KeyName, Certificate, HashAlgorithm, SignatureAlgorithm, UserDefinedSignature, Response, AccountInformation, AccountLimit, AllowedTransaction
+from fints.formals import Container, ContainerMeta, SegmentHeader, DataElementGroupField, DataElementField, ReferenceMessage, SegmentSequenceField, SecurityProfile, SecurityIdentificationDetails, SecurityDateTime, EncryptionAlgorithm, KeyName, Certificate, HashAlgorithm, SignatureAlgorithm, UserDefinedSignature, Response, AccountInformation, AccountLimit, AllowedTransaction, ParameterTwostepTAN
 
 from fints.utils import classproperty, SubclassesMixin
 
@@ -126,3 +126,16 @@ class HIUPD6(FinTS3Segment):
     account_limit = DataElementGroupField(type=AccountLimit, required=False)
     allowed_transactions = DataElementGroupField(type=AllowedTransaction, max_count=999, required=False)
     extension = DataElementField(type='an', max_length=2048, required=False)
+
+class HISYN4(FinTS3Segment):
+    customer_system_id = DataElementField(type='id')
+    message_number = DataElementField(type='num', max_length=4, required=False)
+    security_reference_signature_key = DataElementField(type='num', max_length=16, required=False)
+    security_reference_digital_signature = DataElementField(type='num', max_length=16, required=False)
+
+
+class HITANS1(FinTS3Segment):
+    max_number_tasks = DataElementField(type='num', max_length=3)
+    min_number_signatures = DataElementField(type='num', length=1)
+    security_class = DataElementField(type='num', length=1)
+    parameters_twostep_tan = DataElementGroupField(type=ParameterTwostepTAN)