Skip to content

Commit 249ed3f

Browse files
committed
Complete validation of Sender Info
1 parent 0242e39 commit 249ed3f

File tree

2 files changed

+546
-18
lines changed

2 files changed

+546
-18
lines changed

finvoice/sender/senderinfo.py

Lines changed: 236 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
# along with py-finvoice. If not, see <http://www.gnu.org/licenses/>.
2121
##
2222

23+
# Command line:
24+
# /usr/local/bin/generateDS.py -s "finvoice/sender/senderinfosubs.py" -o "finvoice/sender/senderinfo.py" --super="finvoice.sender.senderinfo" --external-encoding="iso8859-15" --no-dates --no-versions --validator-bodies="stubs/validator/sender/senderinfo/" --user-methods="generators.gends_user_methods_senderinfo" xsd/FinvoiceSenderInfo.xsd
25+
2326
import sys
2427
import getopt
2528
import re as re_
@@ -1490,6 +1493,37 @@ def buildAttributes(self, node, attrs, already_processed):
14901493
self.extensiontype_ = value
14911494
def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
14921495
pass
1496+
def validate_valueOf_(self, value):
1497+
if ( isinstance( value, basestring ) and value.__len__() <= 35 ):
1498+
pass
1499+
else:
1500+
raise_value_error( value, 'Expected less than 35 characters' )
1501+
return value
1502+
def build(self, node):
1503+
already_processed = set()
1504+
self.buildAttributes(node, node.attrib, already_processed)
1505+
self.valueOf_ = get_all_text_(node)
1506+
self.validate_valueOf_(self.valueOf_)
1507+
for child in node:
1508+
nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
1509+
self.buildChildren(child, node, nodeName_)
1510+
return self
1511+
def validate_IdentificationSchemeName(self, value):
1512+
if ( value == "IBAN" ):
1513+
pass
1514+
else:
1515+
raise_value_error( value, 'Expected "IBAN"' )
1516+
return value
1517+
def buildAttributes(self, node, attrs, already_processed):
1518+
value = find_attr_value_('IdentificationSchemeName', node)
1519+
if value is not None and 'IdentificationSchemeName' not in already_processed:
1520+
already_processed.add('IdentificationSchemeName')
1521+
self.IdentificationSchemeName = value
1522+
self.validate_IdentificationSchemeName(self.IdentificationSchemeName)
1523+
value = find_attr_value_('xsi:type', node)
1524+
if value is not None and 'xsi:type' not in already_processed:
1525+
already_processed.add('xsi:type')
1526+
self.extensiontype_ = value
14931527
# end class SellerAccountIDType
14941528

14951529

@@ -1586,6 +1620,37 @@ def buildAttributes(self, node, attrs, already_processed):
15861620
self.extensiontype_ = value
15871621
def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
15881622
pass
1623+
def validate_valueOf_(self, value):
1624+
if ( isinstance( value, basestring ) and 8 <= value.__len__() <= 11 ):
1625+
pass
1626+
else:
1627+
raise_value_error( value, 'Expected value between 8..11 characters' )
1628+
return value
1629+
def build(self, node):
1630+
already_processed = set()
1631+
self.buildAttributes(node, node.attrib, already_processed)
1632+
self.valueOf_ = get_all_text_(node)
1633+
self.validate_valueOf_(self.valueOf_)
1634+
for child in node:
1635+
nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
1636+
self.buildChildren(child, node, nodeName_)
1637+
return self
1638+
def validate_IdentificationSchemeName(self, value):
1639+
if ( value == "BIC" ):
1640+
pass
1641+
else:
1642+
raise_value_error( value, 'Expected "BIC"' )
1643+
return value
1644+
def buildAttributes(self, node, attrs, already_processed):
1645+
value = find_attr_value_('IdentificationSchemeName', node)
1646+
if value is not None and 'IdentificationSchemeName' not in already_processed:
1647+
already_processed.add('IdentificationSchemeName')
1648+
self.IdentificationSchemeName = value
1649+
self.validate_IdentificationSchemeName(self.IdentificationSchemeName)
1650+
value = find_attr_value_('xsi:type', node)
1651+
if value is not None and 'xsi:type' not in already_processed:
1652+
already_processed.add('xsi:type')
1653+
self.extensiontype_ = value
15891654
# end class SellerBicType
15901655

15911656

@@ -1782,6 +1847,39 @@ def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
17821847
SellerServiceCode_ = self.gds_validate_string(SellerServiceCode_, node, 'SellerServiceCode')
17831848
self.SellerServiceCode = SellerServiceCode_
17841849
self.validate_SellerServiceCodeType(self.SellerServiceCode) # validate type SellerServiceCodeType
1850+
def validate_SellerInstructionFreeTextType(self, value):
1851+
if ( value.__len__() <= 3 ):
1852+
pass
1853+
else:
1854+
raise_value_error( value.__len__(), 'Expected maximum of 3 elements' )
1855+
return value
1856+
def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
1857+
if nodeName_ == 'SellerDirectDebitIdentifier':
1858+
SellerDirectDebitIdentifier_ = child_.text
1859+
SellerDirectDebitIdentifier_ = self.gds_validate_string(SellerDirectDebitIdentifier_, node, 'SellerDirectDebitIdentifier')
1860+
self.SellerDirectDebitIdentifier = SellerDirectDebitIdentifier_
1861+
self.validate_genericStringType0_35(self.SellerDirectDebitIdentifier) # validate type genericStringType0_35
1862+
elif nodeName_ == 'PaymentInstructionIdentifier':
1863+
PaymentInstructionIdentifier_ = child_.text
1864+
PaymentInstructionIdentifier_ = self.gds_validate_string(PaymentInstructionIdentifier_, node, 'PaymentInstructionIdentifier')
1865+
self.PaymentInstructionIdentifier = PaymentInstructionIdentifier_
1866+
self.validate_genericStringType1_35(self.PaymentInstructionIdentifier) # validate type genericStringType1_35
1867+
elif nodeName_ == 'SellerInstructionFreeText':
1868+
obj_ = SellerInstructionFreeTextType.factory()
1869+
obj_.build(child_)
1870+
self.SellerInstructionFreeText.append(obj_)
1871+
self.validate_SellerInstructionFreeTextType(self.SellerInstructionFreeText)
1872+
obj_.original_tagname_ = 'SellerInstructionFreeText'
1873+
elif nodeName_ == 'SellerInvoiceTypeDetails':
1874+
obj_ = SellerInvoiceTypeDetailsType.factory()
1875+
obj_.build(child_)
1876+
self.SellerInvoiceTypeDetails.append(obj_)
1877+
obj_.original_tagname_ = 'SellerInvoiceTypeDetails'
1878+
elif nodeName_ == 'SellerServiceCode':
1879+
SellerServiceCode_ = child_.text
1880+
SellerServiceCode_ = self.gds_validate_string(SellerServiceCode_, node, 'SellerServiceCode')
1881+
self.SellerServiceCode = SellerServiceCode_
1882+
self.validate_SellerServiceCodeType(self.SellerServiceCode) # validate type SellerServiceCodeType
17851883
# end class SellerInvoiceDetailsType
17861884

17871885

@@ -2370,6 +2468,34 @@ def buildAttributes(self, node, attrs, already_processed):
23702468
self.Format = value
23712469
def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
23722470
pass
2471+
def validate_valueOf_(self, value):
2472+
import datetime
2473+
if ( datetime.datetime.strptime( value, '%Y%m%d' ).strftime( '%Y%m%d' ) == value ):
2474+
pass
2475+
else:
2476+
raise_value_error( value, 'Time format does not match' )
2477+
return value
2478+
def build(self, node):
2479+
already_processed = set()
2480+
self.buildAttributes(node, node.attrib, already_processed)
2481+
self.valueOf_ = get_all_text_(node)
2482+
self.validate_valueOf_(self.valueOf_)
2483+
for child in node:
2484+
nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
2485+
self.buildChildren(child, node, nodeName_)
2486+
return self
2487+
def validate_Format(self, value):
2488+
if ( value == "CCYYMMDD" ):
2489+
pass
2490+
else:
2491+
raise_value_error( value, 'Expected "CCYYMMDD"' )
2492+
return value
2493+
def buildAttributes(self, node, attrs, already_processed):
2494+
value = find_attr_value_('Format', node)
2495+
if value is not None and 'Format' not in already_processed:
2496+
already_processed.add('Format')
2497+
self.Format = value
2498+
self.validate_Format(self.Format)
23732499
# end class date
23742500

23752501

@@ -2655,6 +2781,37 @@ def buildAttributes(self, node, attrs, already_processed):
26552781
super(SellerAccountIDType1, self).buildAttributes(node, attrs, already_processed)
26562782
def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
26572783
pass
2784+
def validate_valueOf_(self, value):
2785+
if ( isinstance( value, basestring ) and value.__len__() <= 35 ):
2786+
pass
2787+
else:
2788+
raise_value_error( value, 'Expected less than 35 characters' )
2789+
return value
2790+
def build(self, node):
2791+
already_processed = set()
2792+
self.buildAttributes(node, node.attrib, already_processed)
2793+
self.valueOf_ = get_all_text_(node)
2794+
self.validate_valueOf_(self.valueOf_)
2795+
for child in node:
2796+
nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
2797+
self.buildChildren(child, node, nodeName_)
2798+
return self
2799+
def validate_IdentificationSchemeName(self, value):
2800+
if ( value == "IBAN" ):
2801+
pass
2802+
else:
2803+
raise_value_error( value, 'Expected "IBAN"' )
2804+
return value
2805+
def buildAttributes(self, node, attrs, already_processed):
2806+
value = find_attr_value_('IdentificationSchemeName', node)
2807+
if value is not None and 'IdentificationSchemeName' not in already_processed:
2808+
already_processed.add('IdentificationSchemeName')
2809+
self.IdentificationSchemeName = value
2810+
self.validate_IdentificationSchemeName(self.IdentificationSchemeName)
2811+
value = find_attr_value_('xsi:type', node)
2812+
if value is not None and 'xsi:type' not in already_processed:
2813+
already_processed.add('xsi:type')
2814+
self.extensiontype_ = value
26582815
# end class SellerAccountIDType1
26592816

26602817

@@ -2732,6 +2889,37 @@ def buildAttributes(self, node, attrs, already_processed):
27322889
super(SellerBicType2, self).buildAttributes(node, attrs, already_processed)
27332890
def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
27342891
pass
2892+
def validate_valueOf_(self, value):
2893+
if ( isinstance( value, basestring ) and 8 <= value.__len__() <= 11 ):
2894+
pass
2895+
else:
2896+
raise_value_error( value, 'Expected value between 8..11 characters' )
2897+
return value
2898+
def build(self, node):
2899+
already_processed = set()
2900+
self.buildAttributes(node, node.attrib, already_processed)
2901+
self.valueOf_ = get_all_text_(node)
2902+
self.validate_valueOf_(self.valueOf_)
2903+
for child in node:
2904+
nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
2905+
self.buildChildren(child, node, nodeName_)
2906+
return self
2907+
def validate_IdentificationSchemeName(self, value):
2908+
if ( value == "BIC" ):
2909+
pass
2910+
else:
2911+
raise_value_error( value, 'Expected "BIC"' )
2912+
return value
2913+
def buildAttributes(self, node, attrs, already_processed):
2914+
value = find_attr_value_('IdentificationSchemeName', node)
2915+
if value is not None and 'IdentificationSchemeName' not in already_processed:
2916+
already_processed.add('IdentificationSchemeName')
2917+
self.IdentificationSchemeName = value
2918+
self.validate_IdentificationSchemeName(self.IdentificationSchemeName)
2919+
value = find_attr_value_('xsi:type', node)
2920+
if value is not None and 'xsi:type' not in already_processed:
2921+
already_processed.add('xsi:type')
2922+
self.extensiontype_ = value
27352923
# end class SellerBicType2
27362924

27372925

@@ -2963,6 +3151,21 @@ def buildAttributes(self, node, attrs, already_processed):
29633151
super(SellerInstructionFreeTextType, self).buildAttributes(node, attrs, already_processed)
29643152
def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
29653153
pass
3154+
def validate_valueOf_(self, value):
3155+
if ( isinstance( value, basestring ) and 1 <= value.__len__() <= 420 ):
3156+
pass
3157+
else:
3158+
raise_value_error( value, 'Expected value between 1..420 characters' )
3159+
return value
3160+
def build(self, node):
3161+
already_processed = set()
3162+
self.buildAttributes(node, node.attrib, already_processed)
3163+
self.valueOf_ = get_all_text_(node)
3164+
self.validate_valueOf_(self.valueOf_)
3165+
for child in node:
3166+
nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
3167+
self.buildChildren(child, node, nodeName_)
3168+
return self
29663169
# end class SellerInstructionFreeTextType
29673170

29683171

@@ -3077,6 +3280,24 @@ def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
30773280
obj_.build(child_)
30783281
self.SellerInvoiceIdentifierText.append(obj_)
30793282
obj_.original_tagname_ = 'SellerInvoiceIdentifierText'
3283+
def validate_SellerInvoiceIdentifierTextType3(self, value):
3284+
if ( value.__len__() <= 2 ):
3285+
pass
3286+
else:
3287+
raise_value_error( value, 'Expected maximum of 2 elements' )
3288+
return value
3289+
def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
3290+
if nodeName_ == 'SellerInvoiceTypeText':
3291+
obj_ = SellerInvoiceTypeTextType.factory()
3292+
obj_.build(child_)
3293+
self.SellerInvoiceTypeText = obj_
3294+
obj_.original_tagname_ = 'SellerInvoiceTypeText'
3295+
elif nodeName_ == 'SellerInvoiceIdentifierText':
3296+
obj_ = SellerInvoiceIdentifierTextType3.factory()
3297+
obj_.build(child_)
3298+
self.SellerInvoiceIdentifierText.append(obj_)
3299+
self.validate_SellerInvoiceIdentifierTextType3(self.SellerInvoiceIdentifierText);
3300+
obj_.original_tagname_ = 'SellerInvoiceIdentifierText'
30803301
# end class SellerInvoiceTypeDetailsType
30813302

30823303

@@ -3154,21 +3375,6 @@ def buildAttributes(self, node, attrs, already_processed):
31543375
super(SellerInvoiceTypeTextType, self).buildAttributes(node, attrs, already_processed)
31553376
def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
31563377
pass
3157-
def validate_valueOf_(self, value):
3158-
if ( isinstance( value, basestring ) and 0 <= value.__len__() <= 35 ):
3159-
pass
3160-
else:
3161-
raise_value_error( value, 'Expected value between 0..35 characters' )
3162-
return value
3163-
def build(self, node):
3164-
already_processed = set()
3165-
self.buildAttributes(node, node.attrib, already_processed)
3166-
self.valueOf_ = get_all_text_(node)
3167-
self.validate_valueOf_(self.valueOf_)
3168-
for child in node:
3169-
nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
3170-
self.buildChildren(child, node, nodeName_)
3171-
return self
31723378
# end class SellerInvoiceTypeTextType
31733379

31743380

@@ -3434,6 +3640,21 @@ def buildAttributes(self, node, attrs, already_processed):
34343640
super(SellerInvoiceIdentifierTextType3, self).buildAttributes(node, attrs, already_processed)
34353641
def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
34363642
pass
3643+
def validate_valueOf_(self, value):
3644+
if ( isinstance( value, basestring ) and 4 <= value.__len__() <= 70 ):
3645+
pass
3646+
else:
3647+
raise_value_error( value, 'Expected value between 4..70 characters' )
3648+
return value
3649+
def build(self, node):
3650+
already_processed = set()
3651+
self.buildAttributes(node, node.attrib, already_processed)
3652+
self.valueOf_ = get_all_text_(node)
3653+
self.validate_valueOf_(self.valueOf_)
3654+
for child in node:
3655+
nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
3656+
self.buildChildren(child, node, nodeName_)
3657+
return self
34373658
# end class SellerInvoiceIdentifierTextType3
34383659

34393660

0 commit comments

Comments
 (0)