Skip to content

Commit 7a0a904

Browse files
committed
More validation in senderinfo
1 parent fcd5565 commit 7a0a904

File tree

5 files changed

+126
-10
lines changed

5 files changed

+126
-10
lines changed

MANIFEST

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# file GENERATED by distutils, do NOT edit
2+
setup.py
3+
finvoice/__init__.py
4+
finvoice/finvoice.py
5+
finvoice/finvoice201.py
6+
finvoice/finvoice201subs.py
7+
finvoice/finvoicesubs.py
8+
finvoice/ack/__init__.py
9+
finvoice/ack/ack.py
10+
finvoice/ack/ackEb.py
11+
finvoice/ack/ackEbsubs.py
12+
finvoice/ack/acksubs.py
13+
finvoice/attachment/__init__.py
14+
finvoice/attachment/attachment.py
15+
finvoice/attachment/attachmentsubs.py
16+
finvoice/receiver/__init__.py
17+
finvoice/receiver/receiverinfo.py
18+
finvoice/receiver/receiverinfosubs.py
19+
finvoice/receiver/receiverproposal.py
20+
finvoice/receiver/receiverproposalsubs.py
21+
finvoice/sender/__init__.py
22+
finvoice/sender/senderinfo.py
23+
finvoice/sender/senderinfosubs.py
24+
finvoice/soap/__init__.py
25+
finvoice/soap/envelope.py
26+
finvoice/soap/envelopesubs.py
27+
finvoice/soap/msgheader.py
28+
finvoice/soap/msgheadersubs.py

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Finvoice message can be used for invoicing and for other business messages, such
77

88
This Python module is based on the XSDs released by the Federation of Financial Services, Finland.
99

10-
#Tested
10+
# Tested
1111

1212
XML generated have been validated.
1313

finvoice/sender/senderinfo.py

Lines changed: 96 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,6 @@ def find_attr_value_(attr_name, node):
479479
class GDSParseError(Exception):
480480
pass
481481

482-
483482
def raise_parse_error(node, msg):
484483
if XMLParser_import_library == XMLParser_import_lxml:
485484
msg = '%s (element %s/line %d)' % (
@@ -489,6 +488,13 @@ def raise_parse_error(node, msg):
489488
raise GDSParseError(msg)
490489

491490

491+
class GDSValueError(Exception):
492+
pass
493+
494+
def raise_value_error(value, msg):
495+
msg = '%s (got "%s")' % (msg, value, )
496+
raise GDSValueError(msg)
497+
492498
class MixedContainer:
493499
# Constants for category:
494500
CategoryNone = 0
@@ -676,10 +682,26 @@ def get_Version(self): return self.Version
676682
def set_Version(self, Version): self.Version = Version
677683
def validate_genericStringType5_35(self, value):
678684
# Validate type genericStringType5_35, a restriction on xs:string.
679-
pass
685+
if ( 5 <= value.__len__() <= 35 ):
686+
pass
687+
else:
688+
raise_parse_error( value.__len__(), 'Expected value between 5..35 characters' )
689+
return value
680690
def validate_YesNoType(self, value):
681691
# Validate type YesNoType, a restriction on xs:NMTOKEN.
682-
pass
692+
if ( value != "YES" and value != "NO" ):
693+
raise_parse_error( value, 'Expected "YES" or "NO"' )
694+
return value
695+
def validate_genericStringValue5_35(self, value):
696+
if ( 5 <= value.__len__() <= 35 ):
697+
pass
698+
else:
699+
raise_value_error( value.__len__(), 'Expected value between 5..35 characters' )
700+
return value
701+
def validate_YesNoValue(self, value):
702+
if ( value != "YES" and value != "NO" ):
703+
raise_value_error( value, 'Expected "YES" or "NO"' )
704+
return value
683705
def hasContent_(self):
684706
if (
685707
self.MessageDetails is not None or
@@ -726,6 +748,7 @@ def exportChildren(self, outfile, level, namespace_='', name_='FinvoiceSenderInf
726748
if self.SellerPartyDetails is not None:
727749
self.SellerPartyDetails.export(outfile, level, namespace_, name_='SellerPartyDetails', pretty_print=pretty_print)
728750
if self.SellerOrganisationUnitNumber is not None:
751+
self.validate_genericStringValue5_35(self.SellerOrganisationUnitNumber)
729752
showIndent(outfile, level, pretty_print)
730753
outfile.write('<%sSellerOrganisationUnitNumber>%s</%sSellerOrganisationUnitNumber>%s' % (namespace_, self.gds_format_string(quote_xml(self.SellerOrganisationUnitNumber).encode(ExternalEncoding), input_name='SellerOrganisationUnitNumber'), namespace_, eol_))
731754
if self.InvoiceSenderInformationDetails is not None:
@@ -735,9 +758,11 @@ def exportChildren(self, outfile, level, namespace_='', name_='FinvoiceSenderInf
735758
if self.SellerInvoiceDetails is not None:
736759
self.SellerInvoiceDetails.export(outfile, level, namespace_, name_='SellerInvoiceDetails', pretty_print=pretty_print)
737760
if self.ProposedDueDateAccepted is not None:
761+
self.validate_YesNoValue(self.ProposedDueDateAccepted)
738762
showIndent(outfile, level, pretty_print)
739763
outfile.write('<%sProposedDueDateAccepted>%s</%sProposedDueDateAccepted>%s' % (namespace_, self.gds_format_string(quote_xml(self.ProposedDueDateAccepted).encode(ExternalEncoding), input_name='ProposedDueDateAccepted'), namespace_, eol_))
740764
if self.ProposedInvoicePeriodAccepted is not None:
765+
self.validate_YesNoValue(self.ProposedInvoicePeriodAccepted)
741766
showIndent(outfile, level, pretty_print)
742767
outfile.write('<%sProposedInvoicePeriodAccepted>%s</%sProposedInvoicePeriodAccepted>%s' % (namespace_, self.gds_format_string(quote_xml(self.ProposedInvoicePeriodAccepted).encode(ExternalEncoding), input_name='ProposedInvoicePeriodAccepted'), namespace_, eol_))
743768
def exportLiteral(self, outfile, level, name_='FinvoiceSenderInfo'):
@@ -765,6 +790,7 @@ def exportLiteralChildren(self, outfile, level, name_):
765790
showIndent(outfile, level)
766791
outfile.write('),\n')
767792
if self.SellerOrganisationUnitNumber is not None:
793+
self.validate_genericStringValue5_35(self.SellerOrganisationUnitNumber)
768794
showIndent(outfile, level)
769795
outfile.write('SellerOrganisationUnitNumber=%s,\n' % quote_python(self.SellerOrganisationUnitNumber).encode(ExternalEncoding))
770796
if self.InvoiceSenderInformationDetails is not None:
@@ -792,9 +818,11 @@ def exportLiteralChildren(self, outfile, level, name_):
792818
showIndent(outfile, level)
793819
outfile.write('),\n')
794820
if self.ProposedDueDateAccepted is not None:
821+
self.validate_YesNoValue(self.ProposedDueDateAccepted)
795822
showIndent(outfile, level)
796823
outfile.write('ProposedDueDateAccepted=%s,\n' % quote_python(self.ProposedDueDateAccepted).encode(ExternalEncoding))
797824
if self.ProposedInvoicePeriodAccepted is not None:
825+
self.validate_YesNoValue(self.ProposedInvoicePeriodAccepted)
798826
showIndent(outfile, level)
799827
outfile.write('ProposedInvoicePeriodAccepted=%s,\n' % quote_python(self.ProposedInvoicePeriodAccepted).encode(ExternalEncoding))
800828
def build(self, node):
@@ -884,16 +912,60 @@ def get_NewInvoiceSenderIntermediatorAddress(self): return self.NewInvoiceSender
884912
def set_NewInvoiceSenderIntermediatorAddress(self, NewInvoiceSenderIntermediatorAddress): self.NewInvoiceSenderIntermediatorAddress = NewInvoiceSenderIntermediatorAddress
885913
def validate_genericStringType0_70(self, value):
886914
# Validate type genericStringType0_70, a restriction on xs:string.
887-
pass
915+
if ( 0 <= value.__len__() <= 70 ):
916+
pass
917+
else:
918+
raise_parse_error( value.__len__(), 'Expected value between 0..70 characters' )
919+
return value
888920
def validate_genericStringType0_512(self, value):
889921
# Validate type genericStringType0_512, a restriction on xs:string.
890-
pass
922+
if ( 0 <= value.__len__() <= 512 ):
923+
pass
924+
else:
925+
raise_parse_error( value.__len__(), 'Expected value between 0..512 characters' )
926+
return value
891927
def validate_genericStringType0_35(self, value):
892928
# Validate type genericStringType0_35, a restriction on xs:string.
893-
pass
929+
if ( 0 <= value.__len__() <= 35 ):
930+
pass
931+
else:
932+
raise_parse_error( value.__len__(), 'Expected value between 0..35 characters' )
933+
return value
894934
def validate_genericNMtokenType8_11(self, value):
895935
# Validate type genericNMtokenType8_11, a restriction on genericNMtokenType.
896-
pass
936+
if ( 8 <= value.__len__() <= 11 ):
937+
pass
938+
else:
939+
raise_parse_error( value.__len__(), 'Expected value between 8..11 characters' )
940+
return value
941+
def validate_genericStringValue0_70(self, value):
942+
# Validate type genericStringType0_70, a restriction on xs:string.
943+
if ( 0 <= value.__len__() <= 70 ):
944+
pass
945+
else:
946+
raise_value_error( value.__len__(), 'Expected value between 0..70 characters' )
947+
return value
948+
def validate_genericStringValue0_512(self, value):
949+
# Validate type genericStringType0_512, a restriction on xs:string.
950+
if ( 0 <= value.__len__() <= 512 ):
951+
pass
952+
else:
953+
raise_value_error( value.__len__(), 'Expected value between 0..512 characters' )
954+
return value
955+
def validate_genericStringValue0_35(self, value):
956+
# Validate type genericStringType0_35, a restriction on xs:string.
957+
if ( 0 <= value.__len__() <= 35 ):
958+
pass
959+
else:
960+
raise_value_error( value.__len__(), 'Expected value between 0..35 characters' )
961+
return value
962+
def validate_genericNMtokenValue8_11(self, value):
963+
# Validate type genericNMtokenType8_11, a restriction on genericNMtokenType.
964+
if ( 8 <= value.__len__() <= 11 ):
965+
pass
966+
else:
967+
raise_value_error( value.__len__(), 'Expected value between 8..11 characters' )
968+
return value
897969
def hasContent_(self):
898970
if (
899971
self.SellerWebaddressNameText is not None or
@@ -932,21 +1004,27 @@ def exportChildren(self, outfile, level, namespace_='', name_='InvoiceSenderInfo
9321004
else:
9331005
eol_ = ''
9341006
if self.SellerWebaddressNameText is not None:
1007+
self.validate_genericStringValue0_70(self.SellerWebaddressNameText)
9351008
showIndent(outfile, level, pretty_print)
9361009
outfile.write('<%sSellerWebaddressNameText>%s</%sSellerWebaddressNameText>%s' % (namespace_, self.gds_format_string(quote_xml(self.SellerWebaddressNameText).encode(ExternalEncoding), input_name='SellerWebaddressNameText'), namespace_, eol_))
9371010
if self.SellerWebaddressText is not None:
1011+
self.validate_genericStringValue0_512(self.SellerWebaddressText)
9381012
showIndent(outfile, level, pretty_print)
9391013
outfile.write('<%sSellerWebaddressText>%s</%sSellerWebaddressText>%s' % (namespace_, self.gds_format_string(quote_xml(self.SellerWebaddressText).encode(ExternalEncoding), input_name='SellerWebaddressText'), namespace_, eol_))
9401014
if self.InvoiceSenderAddress is not None:
1015+
self.validate_genericStringValue0_35(self.InvoiceSenderAddress)
9411016
showIndent(outfile, level, pretty_print)
9421017
outfile.write('<%sInvoiceSenderAddress>%s</%sInvoiceSenderAddress>%s' % (namespace_, self.gds_format_string(quote_xml(self.InvoiceSenderAddress).encode(ExternalEncoding), input_name='InvoiceSenderAddress'), namespace_, eol_))
9431018
if self.InvoiceSenderIntermediatorAddress is not None:
1019+
self.validate_genericNMtokenValue8_11(self.InvoiceSenderIntermediatorAddress)
9441020
showIndent(outfile, level, pretty_print)
9451021
outfile.write('<%sInvoiceSenderIntermediatorAddress>%s</%sInvoiceSenderIntermediatorAddress>%s' % (namespace_, self.gds_format_string(quote_xml(self.InvoiceSenderIntermediatorAddress).encode(ExternalEncoding), input_name='InvoiceSenderIntermediatorAddress'), namespace_, eol_))
9461022
if self.NewInvoiceSenderAddress is not None:
1023+
self.validate_genericStringValue0_35(self.NewInvoiceSenderAddress)
9471024
showIndent(outfile, level, pretty_print)
9481025
outfile.write('<%sNewInvoiceSenderAddress>%s</%sNewInvoiceSenderAddress>%s' % (namespace_, self.gds_format_string(quote_xml(self.NewInvoiceSenderAddress).encode(ExternalEncoding), input_name='NewInvoiceSenderAddress'), namespace_, eol_))
9491026
if self.NewInvoiceSenderIntermediatorAddress is not None:
1027+
self.validate_genericNMtokenValue8_11(self.NewInvoiceSenderIntermediatorAddress)
9501028
showIndent(outfile, level, pretty_print)
9511029
outfile.write('<%sNewInvoiceSenderIntermediatorAddress>%s</%sNewInvoiceSenderIntermediatorAddress>%s' % (namespace_, self.gds_format_string(quote_xml(self.NewInvoiceSenderIntermediatorAddress).encode(ExternalEncoding), input_name='NewInvoiceSenderIntermediatorAddress'), namespace_, eol_))
9521030
def exportLiteral(self, outfile, level, name_='InvoiceSenderInformationDetailsType'):
@@ -959,21 +1037,27 @@ def exportLiteralAttributes(self, outfile, level, already_processed, name_):
9591037
pass
9601038
def exportLiteralChildren(self, outfile, level, name_):
9611039
if self.SellerWebaddressNameText is not None:
1040+
self.validate_genericStringValue0_70(self.SellerWebaddressNameText)
9621041
showIndent(outfile, level)
9631042
outfile.write('SellerWebaddressNameText=%s,\n' % quote_python(self.SellerWebaddressNameText).encode(ExternalEncoding))
9641043
if self.SellerWebaddressText is not None:
1044+
self.validate_genericStringValue0_512(self.SellerWebaddressText)
9651045
showIndent(outfile, level)
9661046
outfile.write('SellerWebaddressText=%s,\n' % quote_python(self.SellerWebaddressText).encode(ExternalEncoding))
9671047
if self.InvoiceSenderAddress is not None:
1048+
self.validate_genericStringValue0_35(self.InvoiceSenderAddress)
9681049
showIndent(outfile, level)
9691050
outfile.write('InvoiceSenderAddress=%s,\n' % quote_python(self.InvoiceSenderAddress).encode(ExternalEncoding))
9701051
if self.InvoiceSenderIntermediatorAddress is not None:
1052+
self.validate_genericNMtokenValue8_11(self.InvoiceSenderIntermediatorAddress)
9711053
showIndent(outfile, level)
9721054
outfile.write('InvoiceSenderIntermediatorAddress=%s,\n' % quote_python(self.InvoiceSenderIntermediatorAddress).encode(ExternalEncoding))
9731055
if self.NewInvoiceSenderAddress is not None:
1056+
self.validate_genericStringValue0_35(self.NewInvoiceSenderAddress)
9741057
showIndent(outfile, level)
9751058
outfile.write('NewInvoiceSenderAddress=%s,\n' % quote_python(self.NewInvoiceSenderAddress).encode(ExternalEncoding))
9761059
if self.NewInvoiceSenderIntermediatorAddress is not None:
1060+
self.validate_genericNMtokenValue8_11(self.NewInvoiceSenderIntermediatorAddress)
9771061
showIndent(outfile, level)
9781062
outfile.write('NewInvoiceSenderIntermediatorAddress=%s,\n' % quote_python(self.NewInvoiceSenderIntermediatorAddress).encode(ExternalEncoding))
9791063
def build(self, node):
@@ -2896,6 +2980,10 @@ def factory(*args_, **kwargs_):
28962980
factory = staticmethod(factory)
28972981
def get_valueOf_(self): return self.valueOf_
28982982
def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
2983+
def validate_valueOf_value(self, value):
2984+
if ( value.__len__() > 35 ):
2985+
raise_value_error( value.__len__(), 'Expected value less than 35 characters' )
2986+
return value
28992987
def hasContent_(self):
29002988
if (
29012989
self.valueOf_ or
@@ -2911,6 +2999,7 @@ def export(self, outfile, level, namespace_='', name_='SellerInvoiceTypeTextType
29112999
eol_ = ''
29123000
if self.original_tagname_ is not None:
29133001
name_ = self.original_tagname_
3002+
self.validate_valueOf_value(self.valueOf_) # validate valueOf_
29143003
showIndent(outfile, level, pretty_print)
29153004
outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
29163005
already_processed = set()

finvoice/sender/senderinfosubs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
import sys
2323

24-
import finvoice as supermod
24+
import finvoice.sender.senderinfo as supermod
2525

2626
etree_ = None
2727
Verbose_import_ = False

samples/senderinfo.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,6 @@
112112
reload( sys )
113113

114114
sys.setdefaultencoding( 'iso8859-15' )
115-
sys.path.append( './' )
116115

117116
from finvoice.sender.senderinfo import ExternalEncoding
118117
from finvoice.sender.senderinfo import FinvoiceSenderInfo

0 commit comments

Comments
 (0)