From 1b05d1d624a8fbeff27a9802e0cd0cbf01aa9840 Mon Sep 17 00:00:00 2001 From: Dave Kuhlman <dkuhlman@davekuhlman.org> Date: Thu, 16 Aug 2018 15:31:13 -0700 Subject: [PATCH] v. 2.29.23 Automatically create mandatory children --- README.rst | 10 +++++++ generateDS.html | 23 +++++++++++++--- generateDS.py | 40 +++++++++++++++++++++++++--- generateDS.txt | 20 +++++++++++++- generateds_gui_notes.html | 6 ++--- generateds_gui_notes.txt | 2 +- gui/generateds_gui.py | 2 +- librarytemplate_howto.html | 6 ++--- librarytemplate_howto.txt | 2 +- process_includes.py | 2 +- setup.py | 2 +- tests/annotations1_sup.py | 4 +-- tests/anywildcard1_sup.py | 2 +- tests/defaults_cases1_sup.py | 24 ++++++++--------- tests/defaults_cases_always1_sup.py | 12 ++++----- tests/defaults_cases_always2_sup.py | 12 ++++----- tests/defaults_coverage1_sup.py | 24 ++++++++--------- tests/ipo1_sup.py | 6 ++--- tests/ipo2_sup.py | 6 ++--- tests/mapcleanname1_sup.py | 28 +++++++++---------- tests/mixedcontent1_sup.py | 2 +- tests/mixedcontent2_sup.py | 2 +- tests/out1_sup.py | 28 +++++++++---------- tests/people_procincl1_sup.py | 30 ++++++++++----------- tests/prefix_classname1_sup.py | 28 +++++++++---------- tests/recursive_simpletype1_sup.py | 2 +- tests/reference_simpletype1_sup.py | 4 +-- tests/simpletypes_other1_sup.py | 16 +++++------ tests/to_etree1_sup.py | 38 +++++++++++++------------- tests/validate_simpletypes1_sup.py | 14 +++++----- tests/validate_simpletypes2_sup.py | 14 +++++----- tutorial/generateds_tutorial.html | 6 ++--- tutorial/generateds_tutorial.txt | 2 +- tutorial/generateds_tutorial.zip | Bin 48768 -> 48772 bytes 34 files changed, 248 insertions(+), 171 deletions(-) diff --git a/README.rst b/README.rst index ea22cdc..e692f4d 100644 --- a/README.rst +++ b/README.rst @@ -141,6 +141,16 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Change history -------------- +Version 2.29.23 (08/16/2018) + +- Added new command line option "--create-mandatory-children". If a + child is defined with minOccurs="1" and maxOccurs="1" and the + child is xs:complexType and the child is not defined with + xs:simpleContent, then in the element's constructor generate code + that automatically creates an instance of the child. Thanks to + Vincent Helfre for analyzing this issue and providing guidance + toward a solution. + Version 2.29.22 (08/03/2018) - Fixed exception that occurs when (1) an xs:complexType is defined diff --git a/generateDS.html b/generateDS.html index ae3ed47..6dda5e4 100644 --- a/generateDS.html +++ b/generateDS.html @@ -220,7 +220,7 @@ They are used by updateversion.py. --> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.22</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.23</td> </tr> </tbody> </table> @@ -229,7 +229,7 @@ They are used by updateversion.py. --> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">date:</th><td class="field-body">August 03, 2018</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">August 16, 2018</td> </tr> </tbody> </table> @@ -661,6 +661,14 @@ Options: Default: "[('[-:.]', '_')]" --mixed-case-enums If used, do not uppercase simpleType enums names. Default is to make enum names uppercase. + --create-mandatory-children + If a child is defined with minOccurs="1" and + maxOccurs="1" and the child is xs:complexType + and the child is not defined with + xs:simpleContent, then in the element's + constructor generate code that automatically + creates an instance of the child. The default + is False, i.e. do not automatically create child. -q, --no-questions Do not ask questions, for example, force overwrite. --no-warnings Do not print warning messages. @@ -979,6 +987,15 @@ characters. Example: <dd>Do not uppercase the names of simpleType enums. The default (if this option is omitted) is to make generated enum names uppercase.</dd> +<dt>create-mandatory-children</dt> +<dd>If a child is defined with minOccurs="1" and maxOccurs="1" and +the child is xs:complexType and the child is not defined with +xs:simpleContent, then in the element's constructor generate +code that automatically creates an instance of the child. The +default is False, i.e. do not automatically create the child. +Note that if a value for the child's parameter is passed to the +constructor (which overrides the default value of None), then +the constructor will not create an instance.</dd> <dt>q, no-questions</dt> <dd>Do not ask questions. For example, if the "-f" command line option is omitted and the ouput file exists, then generateDS.py @@ -3392,7 +3409,7 @@ following among others:</p> <div class="footer"> <hr class="footer" /> <a class="reference external" href="generateDS.txt">View document source</a>. -Generated on: 2018-08-03 21:41 UTC. +Generated on: 2018-08-16 22:29 UTC. Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source. </div> diff --git a/generateDS.py b/generateDS.py index b74ac86..0f47548 100755 --- a/generateDS.py +++ b/generateDS.py @@ -126,6 +126,14 @@ Options: Default: "[('[-:.]', '_')]" --mixed-case-enums If used, do not uppercase simpleType enums names. Default is to make enum names uppercase. + --create-mandatory-children + If a child is defined with minOccurs="1" and + maxOccurs="1" and the child is xs:complexType + and the child is not defined with + xs:simpleContent, then in the element's + constructor generate code that automatically + creates an instance of the child. The default + is False, i.e. do not automatically create child. -q, --no-questions Do not ask questions, for example, force overwrite. --no-warnings Do not print warning messages. @@ -227,7 +235,7 @@ _log = logging.getLogger(__name__) # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## -VERSION = '2.29.22' +VERSION = '2.29.23' ##VERSION## BaseStrTypes = six.string_types @@ -253,6 +261,7 @@ NoQuestions = False NoDates = False NoVersion = False AlwaysExportDefault = False +CreateMandatoryChildren = False Dirpath = [] ExternalEncoding = '' Namespacedef = '' @@ -3707,7 +3716,8 @@ def generateBuildStandard_1( childType == NonPositiveIntegerType or childType == NegativeIntegerType or childType == NonNegativeIntegerType): - wrt(" %s nodeName_ == '%s':\n" % (keyword, origName, )) + wrt(" %s nodeName_ == '%s' and child_.text:\n" % ( + keyword, origName, )) wrt(" sval_ = child_.text\n") wrt(" try:\n") wrt(" ival_ = int(sval_)\n") @@ -3756,7 +3766,8 @@ def generateBuildStandard_1( elif (childType == FloatType or childType == DoubleType or childType == DecimalType): - wrt(" %s nodeName_ == '%s':\n" % (keyword, origName, )) + wrt(" %s nodeName_ == '%s' and child_.text:\n" % ( + keyword, origName, )) wrt(" sval_ = child_.text\n") wrt(" try:\n") wrt(" fval_ = float(sval_)\n") @@ -4239,6 +4250,11 @@ def generateCtor(wrt, prefix, element): _log.debug("Constructor child: %s" % name) _log.debug("Dump: %s" % child.__dict__) childType = child.getType() + childTypeDef = ElementDict.get(childType) + if childTypeDef is not None: + childSimpleContent = childTypeDef.getSimpleContent() + else: + childSimpleContent = False if childType == AnyTypeIdentifier: if child.getMaxOccurs() > 1: wrt(' if anytypeobjs_ is None:\n') @@ -4283,6 +4299,18 @@ def generateCtor(wrt, prefix, element): wrt(' self.%s = []\n' % (name, )) wrt(' else:\n') wrt(' self.%s = %s\n' % (name, mbrname)) + elif (CreateMandatoryChildren and + child.getMinOccurs() == 1 and + child.getMaxOccurs() == 1 and + child.isComplex() and + not childSimpleContent): + wrt(' if %s is None:\n' % (mbrname, )) + className = child.getType() + className = cleanupName(className) + wrt(' self.%s = globals()["%s"]()\n' % ( + name, className, )) + wrt(' else:\n') + wrt(' self.%s = %s\n' % (name, mbrname)) else: typeObj = ElementDict.get(child.getType()) if (child.getDefault() and @@ -7266,7 +7294,7 @@ def main(): UseGeneratedssuperLookup, UseSourceFileAsModuleName, \ PreserveCdataTags, CleanupNameList, \ NoWarnings, AlwaysExportDefault, \ - UppercaseEnums + UppercaseEnums, CreateMandatoryChildren outputText = True args = sys.argv[1:] try: @@ -7289,6 +7317,7 @@ def main(): 'no-warnings', 'no-collect-includes', 'no-redefine-groups', 'always-export-default', 'mixed-case-enums', + 'create-mandatory-children', ]) except getopt.GetoptError: usage() @@ -7312,6 +7341,7 @@ def main(): noCollectIncludes = False noRedefineGroups = False UppercaseEnums = True + CreateMandatoryChildren = False for option in options: if option[0] == '--session': sessionFilename = option[1] @@ -7496,6 +7526,8 @@ def main(): AlwaysExportDefault = True elif option[0] == '--mixed-case-enums': UppercaseEnums = False + elif option[0] == '--create-mandatory-children': + CreateMandatoryChildren = True if showVersion: print('generateDS.py version %s' % VERSION) sys.exit(0) diff --git a/generateDS.txt b/generateDS.txt index 7df9aaf..df257a6 100644 --- a/generateDS.txt +++ b/generateDS.txt @@ -12,7 +12,7 @@ generateDS -- Generate Data Structures from XML Schema .. version -:revision: 2.29.22 +:revision: 2.29.23 .. version @@ -348,6 +348,14 @@ Here is the usage message displayed by ``generateDS.py``:: Default: "[('[-:.]', '_')]" --mixed-case-enums If used, do not uppercase simpleType enums names. Default is to make enum names uppercase. + --create-mandatory-children + If a child is defined with minOccurs="1" and + maxOccurs="1" and the child is xs:complexType + and the child is not defined with + xs:simpleContent, then in the element's + constructor generate code that automatically + creates an instance of the child. The default + is False, i.e. do not automatically create child. -q, --no-questions Do not ask questions, for example, force overwrite. --no-warnings Do not print warning messages. @@ -701,6 +709,16 @@ mixed-case-enums this option is omitted) is to make generated enum names uppercase. +create-mandatory-children + If a child is defined with minOccurs="1" and maxOccurs="1" and + the child is xs:complexType and the child is not defined with + xs:simpleContent, then in the element's constructor generate + code that automatically creates an instance of the child. The + default is False, i.e. do not automatically create the child. + Note that if a value for the child's parameter is passed to the + constructor (which overrides the default value of None), then + the constructor will not create an instance. + q, no-questions Do not ask questions. For example, if the "-f" command line option is omitted and the ouput file exists, then generateDS.py diff --git a/generateds_gui_notes.html b/generateds_gui_notes.html index 1ef3444..4749cd3 100644 --- a/generateds_gui_notes.html +++ b/generateds_gui_notes.html @@ -220,7 +220,7 @@ They are used by updateversion.py. --> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.22</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.23</td> </tr> </tbody> </table> @@ -229,7 +229,7 @@ They are used by updateversion.py. --> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">date:</th><td class="field-body">August 03, 2018</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">August 16, 2018</td> </tr> </tbody> </table> @@ -401,7 +401,7 @@ $ mv generateds_gui.mo locale/ru/LC_MESSAGES/ <div class="footer"> <hr class="footer" /> <a class="reference external" href="generateds_gui_notes.txt">View document source</a>. -Generated on: 2018-08-03 21:41 UTC. +Generated on: 2018-08-16 22:29 UTC. Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source. </div> diff --git a/generateds_gui_notes.txt b/generateds_gui_notes.txt index 5cf503e..2bed923 100644 --- a/generateds_gui_notes.txt +++ b/generateds_gui_notes.txt @@ -12,7 +12,7 @@ GenerateDS GUI Notes .. version -:revision: 2.29.22 +:revision: 2.29.23 .. version diff --git a/gui/generateds_gui.py b/gui/generateds_gui.py index 2abb8e5..c0c1d36 100644 --- a/gui/generateds_gui.py +++ b/gui/generateds_gui.py @@ -41,7 +41,7 @@ from libgenerateDS.gui import generateds_gui_session # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## -VERSION = '2.29.22' +VERSION = '2.29.23' ##VERSION## diff --git a/librarytemplate_howto.html b/librarytemplate_howto.html index 6f7d1f0..7049ae9 100644 --- a/librarytemplate_howto.html +++ b/librarytemplate_howto.html @@ -217,7 +217,7 @@ dkuhlman (at) davekuhlman (dot) org <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.22</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.23</td> </tr> </tbody> </table> @@ -226,7 +226,7 @@ dkuhlman (at) davekuhlman (dot) org <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">date:</th><td class="field-body">August 03, 2018</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">August 16, 2018</td> </tr> </tbody> </table> @@ -380,7 +380,7 @@ this command for your needs. For example, you may need to use <div class="footer"> <hr class="footer" /> <a class="reference external" href="librarytemplate_howto.txt">View document source</a>. -Generated on: 2018-08-03 21:41 UTC. +Generated on: 2018-08-16 22:29 UTC. Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source. </div> diff --git a/librarytemplate_howto.txt b/librarytemplate_howto.txt index 7b69843..971c8fd 100644 --- a/librarytemplate_howto.txt +++ b/librarytemplate_howto.txt @@ -8,7 +8,7 @@ How to package a generateDS.py generated library .. version -:revision: 2.29.22 +:revision: 2.29.23 .. version diff --git a/process_includes.py b/process_includes.py index 1c451f1..f083e63 100755 --- a/process_includes.py +++ b/process_includes.py @@ -40,7 +40,7 @@ except ImportError: # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## -VERSION = '2.29.22' +VERSION = '2.29.23' ##VERSION## CatalogDict = {} diff --git a/setup.py b/setup.py index 3feac89..834c8f3 100644 --- a/setup.py +++ b/setup.py @@ -8,7 +8,7 @@ setup( # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## - version="2.29.22", + version="2.29.23", ##VERSION## author="Dave Kuhlman", author_email="dkuhlman@davekuhlman.org", diff --git a/tests/annotations1_sup.py b/tests/annotations1_sup.py index bd590ce..0d81841 100644 --- a/tests/annotations1_sup.py +++ b/tests/annotations1_sup.py @@ -912,7 +912,7 @@ class document2Type(GeneratedsSuper): comments_ = child_.text comments_ = self.gds_validate_string(comments_, node, 'comments') self.comments = comments_ - elif nodeName_ == 'rating': + elif nodeName_ == 'rating' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1011,7 +1011,7 @@ class document3Type(GeneratedsSuper): comments_ = child_.text comments_ = self.gds_validate_string(comments_, node, 'comments') self.comments = comments_ - elif nodeName_ == 'rating': + elif nodeName_ == 'rating' and child_.text: sval_ = child_.text try: ival_ = int(sval_) diff --git a/tests/anywildcard1_sup.py b/tests/anywildcard1_sup.py index f8186dd..1965ae0 100644 --- a/tests/anywildcard1_sup.py +++ b/tests/anywildcard1_sup.py @@ -1106,7 +1106,7 @@ class CatalogType(GeneratedsSuper): name_ = child_.text name_ = self.gds_validate_string(name_, node, 'name') self.name = name_ - elif nodeName_ == 'catagory': + elif nodeName_ == 'catagory' and child_.text: sval_ = child_.text try: ival_ = int(sval_) diff --git a/tests/defaults_cases1_sup.py b/tests/defaults_cases1_sup.py index 3209180..4538332 100644 --- a/tests/defaults_cases1_sup.py +++ b/tests/defaults_cases1_sup.py @@ -990,7 +990,7 @@ class DefaultType1(GeneratedsSuper): def buildAttributes(self, node, attrs, already_processed): pass def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): - if nodeName_ == 'normal01': + if nodeName_ == 'normal01' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1002,7 +1002,7 @@ class DefaultType1(GeneratedsSuper): normal02_ = child_.text normal02_ = self.gds_validate_string(normal02_, node, 'normal02') self.normal02 = normal02_ - elif nodeName_ == 'default01': + elif nodeName_ == 'default01' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1014,7 +1014,7 @@ class DefaultType1(GeneratedsSuper): default02_ = child_.text default02_ = self.gds_validate_string(default02_, node, 'default02') self.default02 = default02_ - elif nodeName_ == 'normal03': + elif nodeName_ == 'normal03' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1022,7 +1022,7 @@ class DefaultType1(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'normal03') self.normal03 = fval_ - elif nodeName_ == 'normal04': + elif nodeName_ == 'normal04' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1030,7 +1030,7 @@ class DefaultType1(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'normal04') self.normal04 = fval_ - elif nodeName_ == 'default03': + elif nodeName_ == 'default03' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1038,7 +1038,7 @@ class DefaultType1(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'default03') self.default03 = fval_ - elif nodeName_ == 'default04': + elif nodeName_ == 'default04' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1286,7 +1286,7 @@ class FixedType1(GeneratedsSuper): def buildAttributes(self, node, attrs, already_processed): pass def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): - if nodeName_ == 'normal01': + if nodeName_ == 'normal01' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1298,7 +1298,7 @@ class FixedType1(GeneratedsSuper): normal02_ = child_.text normal02_ = self.gds_validate_string(normal02_, node, 'normal02') self.normal02 = normal02_ - elif nodeName_ == 'fixed01': + elif nodeName_ == 'fixed01' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1310,7 +1310,7 @@ class FixedType1(GeneratedsSuper): fixed02_ = child_.text fixed02_ = self.gds_validate_string(fixed02_, node, 'fixed02') self.fixed02 = fixed02_ - elif nodeName_ == 'normal03': + elif nodeName_ == 'normal03' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1318,7 +1318,7 @@ class FixedType1(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'normal03') self.normal03 = fval_ - elif nodeName_ == 'normal04': + elif nodeName_ == 'normal04' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1326,7 +1326,7 @@ class FixedType1(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'normal04') self.normal04 = fval_ - elif nodeName_ == 'fixed03': + elif nodeName_ == 'fixed03' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1334,7 +1334,7 @@ class FixedType1(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'fixed03') self.fixed03 = fval_ - elif nodeName_ == 'fixed04': + elif nodeName_ == 'fixed04' and child_.text: sval_ = child_.text try: fval_ = float(sval_) diff --git a/tests/defaults_cases_always1_sup.py b/tests/defaults_cases_always1_sup.py index c4a28c0..fc155a5 100644 --- a/tests/defaults_cases_always1_sup.py +++ b/tests/defaults_cases_always1_sup.py @@ -955,7 +955,7 @@ class DefaultType1(GeneratedsSuper): def buildAttributes(self, node, attrs, already_processed): pass def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): - if nodeName_ == 'normal01': + if nodeName_ == 'normal01' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -967,7 +967,7 @@ class DefaultType1(GeneratedsSuper): normal02_ = child_.text normal02_ = self.gds_validate_string(normal02_, node, 'normal02') self.normal02 = normal02_ - elif nodeName_ == 'default01': + elif nodeName_ == 'default01' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -979,7 +979,7 @@ class DefaultType1(GeneratedsSuper): default02_ = child_.text default02_ = self.gds_validate_string(default02_, node, 'default02') self.default02 = default02_ - elif nodeName_ == 'normal03': + elif nodeName_ == 'normal03' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -987,7 +987,7 @@ class DefaultType1(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'normal03') self.normal03 = fval_ - elif nodeName_ == 'normal04': + elif nodeName_ == 'normal04' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -995,7 +995,7 @@ class DefaultType1(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'normal04') self.normal04 = fval_ - elif nodeName_ == 'default03': + elif nodeName_ == 'default03' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1003,7 +1003,7 @@ class DefaultType1(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'default03') self.default03 = fval_ - elif nodeName_ == 'default04': + elif nodeName_ == 'default04' and child_.text: sval_ = child_.text try: fval_ = float(sval_) diff --git a/tests/defaults_cases_always2_sup.py b/tests/defaults_cases_always2_sup.py index c4a28c0..fc155a5 100644 --- a/tests/defaults_cases_always2_sup.py +++ b/tests/defaults_cases_always2_sup.py @@ -955,7 +955,7 @@ class DefaultType1(GeneratedsSuper): def buildAttributes(self, node, attrs, already_processed): pass def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): - if nodeName_ == 'normal01': + if nodeName_ == 'normal01' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -967,7 +967,7 @@ class DefaultType1(GeneratedsSuper): normal02_ = child_.text normal02_ = self.gds_validate_string(normal02_, node, 'normal02') self.normal02 = normal02_ - elif nodeName_ == 'default01': + elif nodeName_ == 'default01' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -979,7 +979,7 @@ class DefaultType1(GeneratedsSuper): default02_ = child_.text default02_ = self.gds_validate_string(default02_, node, 'default02') self.default02 = default02_ - elif nodeName_ == 'normal03': + elif nodeName_ == 'normal03' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -987,7 +987,7 @@ class DefaultType1(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'normal03') self.normal03 = fval_ - elif nodeName_ == 'normal04': + elif nodeName_ == 'normal04' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -995,7 +995,7 @@ class DefaultType1(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'normal04') self.normal04 = fval_ - elif nodeName_ == 'default03': + elif nodeName_ == 'default03' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1003,7 +1003,7 @@ class DefaultType1(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'default03') self.default03 = fval_ - elif nodeName_ == 'default04': + elif nodeName_ == 'default04' and child_.text: sval_ = child_.text try: fval_ = float(sval_) diff --git a/tests/defaults_coverage1_sup.py b/tests/defaults_coverage1_sup.py index 052c02a..318cf4a 100644 --- a/tests/defaults_coverage1_sup.py +++ b/tests/defaults_coverage1_sup.py @@ -1039,7 +1039,7 @@ class DefaultType1(GeneratedsSuper): def buildAttributes(self, node, attrs, already_processed): pass def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): - if nodeName_ == 'default01': + if nodeName_ == 'default01' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1047,7 +1047,7 @@ class DefaultType1(GeneratedsSuper): raise_parse_error(child_, 'requires integer: %s' % exp) ival_ = self.gds_validate_integer(ival_, node, 'default01') self.default01 = ival_ - elif nodeName_ == 'normal01': + elif nodeName_ == 'normal01' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1063,7 +1063,7 @@ class DefaultType1(GeneratedsSuper): normal02_ = child_.text normal02_ = self.gds_validate_string(normal02_, node, 'normal02') self.normal02 = normal02_ - elif nodeName_ == 'default03': + elif nodeName_ == 'default03' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1071,7 +1071,7 @@ class DefaultType1(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'default03') self.default03 = fval_ - elif nodeName_ == 'normal03': + elif nodeName_ == 'normal03' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1079,7 +1079,7 @@ class DefaultType1(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'normal03') self.normal03 = fval_ - elif nodeName_ == 'default04': + elif nodeName_ == 'default04' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1087,7 +1087,7 @@ class DefaultType1(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'default04') self.default04 = fval_ - elif nodeName_ == 'normal04': + elif nodeName_ == 'normal04' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1374,7 +1374,7 @@ class DefaultType2(GeneratedsSuper): def buildAttributes(self, node, attrs, already_processed): pass def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): - if nodeName_ == 'default01': + if nodeName_ == 'default01' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1382,7 +1382,7 @@ class DefaultType2(GeneratedsSuper): raise_parse_error(child_, 'requires integer: %s' % exp) ival_ = self.gds_validate_integer(ival_, node, 'default01') self.default01 = ival_ - elif nodeName_ == 'normal01': + elif nodeName_ == 'normal01' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1398,7 +1398,7 @@ class DefaultType2(GeneratedsSuper): normal02_ = child_.text normal02_ = self.gds_validate_string(normal02_, node, 'normal02') self.normal02 = normal02_ - elif nodeName_ == 'default03': + elif nodeName_ == 'default03' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1406,7 +1406,7 @@ class DefaultType2(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'default03') self.default03 = fval_ - elif nodeName_ == 'normal03': + elif nodeName_ == 'normal03' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1414,7 +1414,7 @@ class DefaultType2(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'normal03') self.normal03 = fval_ - elif nodeName_ == 'default04': + elif nodeName_ == 'default04' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1422,7 +1422,7 @@ class DefaultType2(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'default04') self.default04 = fval_ - elif nodeName_ == 'normal04': + elif nodeName_ == 'normal04' and child_.text: sval_ = child_.text try: fval_ = float(sval_) diff --git a/tests/ipo1_sup.py b/tests/ipo1_sup.py index 82cd1f9..9f64f69 100644 --- a/tests/ipo1_sup.py +++ b/tests/ipo1_sup.py @@ -1067,7 +1067,7 @@ class item(GeneratedsSuper): productName_ = child_.text productName_ = self.gds_validate_string(productName_, node, 'productName') self.productName = productName_ - elif nodeName_ == 'quantity': + elif nodeName_ == 'quantity' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1077,7 +1077,7 @@ class item(GeneratedsSuper): raise_parse_error(child_, 'requires positiveInteger') ival_ = self.gds_validate_integer(ival_, node, 'quantity') self.quantity = ival_ - elif nodeName_ == 'USPrice': + elif nodeName_ == 'USPrice' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1371,7 +1371,7 @@ class USAddress(Address): self.state = state_ # validate type USState self.validate_USState(self.state) - elif nodeName_ == 'zip': + elif nodeName_ == 'zip' and child_.text: sval_ = child_.text try: ival_ = int(sval_) diff --git a/tests/ipo2_sup.py b/tests/ipo2_sup.py index 82cd1f9..9f64f69 100644 --- a/tests/ipo2_sup.py +++ b/tests/ipo2_sup.py @@ -1067,7 +1067,7 @@ class item(GeneratedsSuper): productName_ = child_.text productName_ = self.gds_validate_string(productName_, node, 'productName') self.productName = productName_ - elif nodeName_ == 'quantity': + elif nodeName_ == 'quantity' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1077,7 +1077,7 @@ class item(GeneratedsSuper): raise_parse_error(child_, 'requires positiveInteger') ival_ = self.gds_validate_integer(ival_, node, 'quantity') self.quantity = ival_ - elif nodeName_ == 'USPrice': + elif nodeName_ == 'USPrice' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1371,7 +1371,7 @@ class USAddress(Address): self.state = state_ # validate type USState self.validate_USState(self.state) - elif nodeName_ == 'zip': + elif nodeName_ == 'zip' and child_.text: sval_ = child_.text try: ival_ = int(sval_) diff --git a/tests/mapcleanname1_sup.py b/tests/mapcleanname1_sup.py index 2c6b831..0dfcead 100644 --- a/tests/mapcleanname1_sup.py +++ b/tests/mapcleanname1_sup.py @@ -831,7 +831,7 @@ class complex_type01(GeneratedsSuper): string_value01_ = child_.text string_value01_ = self.gds_validate_string(string_value01_, node, 'string_value01') self.string_value01 = string_value01_ - elif nodeName_ == 'integer_value01': + elif nodeName_ == 'integer_value01' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -839,7 +839,7 @@ class complex_type01(GeneratedsSuper): raise_parse_error(child_, 'requires integer: %s' % exp) ival_ = self.gds_validate_integer(ival_, node, 'integer_value01') self.integer_value01.append(ival_) - elif nodeName_ == 'float_value01': + elif nodeName_ == 'float_value01' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -961,7 +961,7 @@ class complex_type02(GeneratedsSuper): string_value02_ = child_.text string_value02_ = self.gds_validate_string(string_value02_, node, 'string_value02') self.string_value02 = string_value02_ - elif nodeName_ == 'integer_value02': + elif nodeName_ == 'integer_value02' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -969,7 +969,7 @@ class complex_type02(GeneratedsSuper): raise_parse_error(child_, 'requires integer: %s' % exp) ival_ = self.gds_validate_integer(ival_, node, 'integer_value02') self.integer_value02.append(ival_) - elif nodeName_ == 'float_value02': + elif nodeName_ == 'float_value02' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1079,7 +1079,7 @@ class complex_type03(complex_type02): string_value03_ = child_.text string_value03_ = self.gds_validate_string(string_value03_, node, 'string_value03') self.string_value03 = string_value03_ - elif nodeName_ == 'integer_value03': + elif nodeName_ == 'integer_value03' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1087,7 +1087,7 @@ class complex_type03(complex_type02): raise_parse_error(child_, 'requires integer: %s' % exp) ival_ = self.gds_validate_integer(ival_, node, 'integer_value03') self.integer_value03.append(ival_) - elif nodeName_ == 'float_value03': + elif nodeName_ == 'float_value03' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1205,7 +1205,7 @@ class type_(GeneratedsSuper): string_value02_ = child_.text string_value02_ = self.gds_validate_string(string_value02_, node, 'string_value02') self.string_value02 = string_value02_ - elif nodeName_ == 'integer_value02': + elif nodeName_ == 'integer_value02' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1213,7 +1213,7 @@ class type_(GeneratedsSuper): raise_parse_error(child_, 'requires integer: %s' % exp) ival_ = self.gds_validate_integer(ival_, node, 'integer_value02') self.integer_value02.append(ival_) - elif nodeName_ == 'float_value02': + elif nodeName_ == 'float_value02' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1323,7 +1323,7 @@ class complex_type04(type_): string_value03_ = child_.text string_value03_ = self.gds_validate_string(string_value03_, node, 'string_value03') self.string_value03 = string_value03_ - elif nodeName_ == 'integer_value03': + elif nodeName_ == 'integer_value03' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1331,7 +1331,7 @@ class complex_type04(type_): raise_parse_error(child_, 'requires integer: %s' % exp) ival_ = self.gds_validate_integer(ival_, node, 'integer_value03') self.integer_value03.append(ival_) - elif nodeName_ == 'float_value03': + elif nodeName_ == 'float_value03' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1449,7 +1449,7 @@ class build_(GeneratedsSuper): string_value02_ = child_.text string_value02_ = self.gds_validate_string(string_value02_, node, 'string_value02') self.string_value02 = string_value02_ - elif nodeName_ == 'integer_value02': + elif nodeName_ == 'integer_value02' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1457,7 +1457,7 @@ class build_(GeneratedsSuper): raise_parse_error(child_, 'requires integer: %s' % exp) ival_ = self.gds_validate_integer(ival_, node, 'integer_value02') self.integer_value02.append(ival_) - elif nodeName_ == 'float_value02': + elif nodeName_ == 'float_value02' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1567,7 +1567,7 @@ class complex_type05(build_): string_value03_ = child_.text string_value03_ = self.gds_validate_string(string_value03_, node, 'string_value03') self.string_value03 = string_value03_ - elif nodeName_ == 'integer_value03': + elif nodeName_ == 'integer_value03' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1575,7 +1575,7 @@ class complex_type05(build_): raise_parse_error(child_, 'requires integer: %s' % exp) ival_ = self.gds_validate_integer(ival_, node, 'integer_value03') self.integer_value03.append(ival_) - elif nodeName_ == 'float_value03': + elif nodeName_ == 'float_value03' and child_.text: sval_ = child_.text try: fval_ = float(sval_) diff --git a/tests/mixedcontent1_sup.py b/tests/mixedcontent1_sup.py index 4c311da..218fff3 100644 --- a/tests/mixedcontent1_sup.py +++ b/tests/mixedcontent1_sup.py @@ -1055,7 +1055,7 @@ class nestedType(GeneratedsSuper): nested2_ = child_.text nested2_ = self.gds_validate_string(nested2_, node, 'nested2') self.nested2.append(nested2_) - elif nodeName_ == 'nested3': + elif nodeName_ == 'nested3' and child_.text: sval_ = child_.text try: ival_ = int(sval_) diff --git a/tests/mixedcontent2_sup.py b/tests/mixedcontent2_sup.py index 4c311da..218fff3 100644 --- a/tests/mixedcontent2_sup.py +++ b/tests/mixedcontent2_sup.py @@ -1055,7 +1055,7 @@ class nestedType(GeneratedsSuper): nested2_ = child_.text nested2_ = self.gds_validate_string(nested2_, node, 'nested2') self.nested2.append(nested2_) - elif nodeName_ == 'nested3': + elif nodeName_ == 'nested3' and child_.text: sval_ = child_.text try: ival_ = int(sval_) diff --git a/tests/out1_sup.py b/tests/out1_sup.py index 93c8498..12f1c21 100644 --- a/tests/out1_sup.py +++ b/tests/out1_sup.py @@ -1460,7 +1460,7 @@ class person(GeneratedsSuper): interest_ = child_.text interest_ = self.gds_validate_string(interest_, node, 'interest') self.interest.append(interest_) - elif nodeName_ == 'category': + elif nodeName_ == 'category' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1886,7 +1886,7 @@ class programmer(person): email_ = child_.text email_ = self.gds_validate_string(email_, node, 'email') self.email = email_ - elif nodeName_ == 'elposint': + elif nodeName_ == 'elposint' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1896,7 +1896,7 @@ class programmer(person): raise_parse_error(child_, 'requires positiveInteger') ival_ = self.gds_validate_integer(ival_, node, 'elposint') self.elposint = ival_ - elif nodeName_ == 'elnonposint': + elif nodeName_ == 'elnonposint' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1906,7 +1906,7 @@ class programmer(person): raise_parse_error(child_, 'requires nonPositiveInteger') ival_ = self.gds_validate_integer(ival_, node, 'elnonposint') self.elnonposint = ival_ - elif nodeName_ == 'elnegint': + elif nodeName_ == 'elnegint' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1916,7 +1916,7 @@ class programmer(person): raise_parse_error(child_, 'requires negativeInteger') ival_ = self.gds_validate_integer(ival_, node, 'elnegint') self.elnegint = ival_ - elif nodeName_ == 'elnonnegint': + elif nodeName_ == 'elnonnegint' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1942,7 +1942,7 @@ class programmer(person): eltoken_ = "" eltoken_ = self.gds_validate_string(eltoken_, node, 'eltoken') self.eltoken = eltoken_ - elif nodeName_ == 'elshort': + elif nodeName_ == 'elshort' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1950,7 +1950,7 @@ class programmer(person): raise_parse_error(child_, 'requires integer: %s' % exp) ival_ = self.gds_validate_integer(ival_, node, 'elshort') self.elshort = ival_ - elif nodeName_ == 'ellong': + elif nodeName_ == 'ellong' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -2686,7 +2686,7 @@ class agent(GeneratedsSuper): lastname_ = child_.text lastname_ = self.gds_validate_string(lastname_, node, 'lastname') self.lastname = lastname_ - elif nodeName_ == 'priority': + elif nodeName_ == 'priority' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -2873,7 +2873,7 @@ class special_agent(GeneratedsSuper): lastname_ = child_.text lastname_ = self.gds_validate_string(lastname_, node, 'lastname') self.lastname = lastname_ - elif nodeName_ == 'priority': + elif nodeName_ == 'priority' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -3129,7 +3129,7 @@ class booster(GeneratedsSuper): lastname_ = child_.text lastname_ = self.gds_validate_string(lastname_, node, 'lastname') self.lastname = lastname_ - elif nodeName_ == 'other-name': + elif nodeName_ == 'other-name' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -3137,7 +3137,7 @@ class booster(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'other_name') self.other_name = fval_ - elif nodeName_ == 'class': + elif nodeName_ == 'class' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -3145,7 +3145,7 @@ class booster(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'class') self.class_ = fval_ - elif nodeName_ == 'other-value': + elif nodeName_ == 'other-value' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -3153,7 +3153,7 @@ class booster(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'other_value') self.other_value.append(fval_) - elif nodeName_ == 'type': + elif nodeName_ == 'type' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -3479,7 +3479,7 @@ class client_handlerType(GeneratedsSuper): fullname_ = child_.text fullname_ = self.gds_validate_string(fullname_, node, 'fullname') self.fullname = fullname_ - elif nodeName_ == 'refid': + elif nodeName_ == 'refid' and child_.text: sval_ = child_.text try: ival_ = int(sval_) diff --git a/tests/people_procincl1_sup.py b/tests/people_procincl1_sup.py index 11849ef..2264fa3 100644 --- a/tests/people_procincl1_sup.py +++ b/tests/people_procincl1_sup.py @@ -1247,7 +1247,7 @@ class person(GeneratedsSuper): interest_ = child_.text interest_ = self.gds_validate_string(interest_, node, 'interest') self.interest.append(interest_) - elif nodeName_ == 'category': + elif nodeName_ == 'category' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1588,7 +1588,7 @@ class agent(GeneratedsSuper): lastname_ = child_.text lastname_ = self.gds_validate_string(lastname_, node, 'lastname') self.lastname = lastname_ - elif nodeName_ == 'priority': + elif nodeName_ == 'priority' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1726,7 +1726,7 @@ class special_agent(GeneratedsSuper): lastname_ = child_.text lastname_ = self.gds_validate_string(lastname_, node, 'lastname') self.lastname = lastname_ - elif nodeName_ == 'priority': + elif nodeName_ == 'priority' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1894,7 +1894,7 @@ class booster(GeneratedsSuper): lastname_ = child_.text lastname_ = self.gds_validate_string(lastname_, node, 'lastname') self.lastname = lastname_ - elif nodeName_ == 'other-name': + elif nodeName_ == 'other-name' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1902,7 +1902,7 @@ class booster(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'other_name') self.other_name = fval_ - elif nodeName_ == 'class': + elif nodeName_ == 'class' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1910,7 +1910,7 @@ class booster(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'class') self.class_ = fval_ - elif nodeName_ == 'other-value': + elif nodeName_ == 'other-value' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1918,7 +1918,7 @@ class booster(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'other_value') self.other_value.append(fval_) - elif nodeName_ == 'type': + elif nodeName_ == 'type' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -2114,7 +2114,7 @@ class vehicle(GeneratedsSuper): already_processed.add('xsi:type') self.extensiontype_ = value def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): - if nodeName_ == 'wheelcount': + if nodeName_ == 'wheelcount' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -2559,7 +2559,7 @@ class programmer(person): email_ = child_.text email_ = self.gds_validate_string(email_, node, 'email') self.email = email_ - elif nodeName_ == 'elposint': + elif nodeName_ == 'elposint' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -2569,7 +2569,7 @@ class programmer(person): raise_parse_error(child_, 'requires positiveInteger') ival_ = self.gds_validate_integer(ival_, node, 'elposint') self.elposint = ival_ - elif nodeName_ == 'elnonposint': + elif nodeName_ == 'elnonposint' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -2579,7 +2579,7 @@ class programmer(person): raise_parse_error(child_, 'requires nonPositiveInteger') ival_ = self.gds_validate_integer(ival_, node, 'elnonposint') self.elnonposint = ival_ - elif nodeName_ == 'elnegint': + elif nodeName_ == 'elnegint' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -2589,7 +2589,7 @@ class programmer(person): raise_parse_error(child_, 'requires negativeInteger') ival_ = self.gds_validate_integer(ival_, node, 'elnegint') self.elnegint = ival_ - elif nodeName_ == 'elnonnegint': + elif nodeName_ == 'elnonnegint' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -2611,7 +2611,7 @@ class programmer(person): eltoken_ = "" eltoken_ = self.gds_validate_string(eltoken_, node, 'eltoken') self.eltoken = eltoken_ - elif nodeName_ == 'elshort': + elif nodeName_ == 'elshort' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -2619,7 +2619,7 @@ class programmer(person): raise_parse_error(child_, 'requires integer: %s' % exp) ival_ = self.gds_validate_integer(ival_, node, 'elshort') self.elshort = ival_ - elif nodeName_ == 'ellong': + elif nodeName_ == 'ellong' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -2724,7 +2724,7 @@ class client_handlerType(GeneratedsSuper): fullname_ = child_.text fullname_ = self.gds_validate_string(fullname_, node, 'fullname') self.fullname = fullname_ - elif nodeName_ == 'refid': + elif nodeName_ == 'refid' and child_.text: sval_ = child_.text try: ival_ = int(sval_) diff --git a/tests/prefix_classname1_sup.py b/tests/prefix_classname1_sup.py index 7d3c39a..ccaed97 100644 --- a/tests/prefix_classname1_sup.py +++ b/tests/prefix_classname1_sup.py @@ -1206,7 +1206,7 @@ class tomato_person(GeneratedsSuper): interest_ = child_.text interest_ = self.gds_validate_string(interest_, node, 'interest') self.interest.append(interest_) - elif nodeName_ == 'category': + elif nodeName_ == 'category' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1513,7 +1513,7 @@ class tomato_programmer(tomato_person): email_ = child_.text email_ = self.gds_validate_string(email_, node, 'email') self.email = email_ - elif nodeName_ == 'elposint': + elif nodeName_ == 'elposint' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1523,7 +1523,7 @@ class tomato_programmer(tomato_person): raise_parse_error(child_, 'requires positiveInteger') ival_ = self.gds_validate_integer(ival_, node, 'elposint') self.elposint = ival_ - elif nodeName_ == 'elnonposint': + elif nodeName_ == 'elnonposint' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1533,7 +1533,7 @@ class tomato_programmer(tomato_person): raise_parse_error(child_, 'requires nonPositiveInteger') ival_ = self.gds_validate_integer(ival_, node, 'elnonposint') self.elnonposint = ival_ - elif nodeName_ == 'elnegint': + elif nodeName_ == 'elnegint' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1543,7 +1543,7 @@ class tomato_programmer(tomato_person): raise_parse_error(child_, 'requires negativeInteger') ival_ = self.gds_validate_integer(ival_, node, 'elnegint') self.elnegint = ival_ - elif nodeName_ == 'elnonnegint': + elif nodeName_ == 'elnonnegint' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1569,7 +1569,7 @@ class tomato_programmer(tomato_person): eltoken_ = "" eltoken_ = self.gds_validate_string(eltoken_, node, 'eltoken') self.eltoken = eltoken_ - elif nodeName_ == 'elshort': + elif nodeName_ == 'elshort' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1577,7 +1577,7 @@ class tomato_programmer(tomato_person): raise_parse_error(child_, 'requires integer: %s' % exp) ival_ = self.gds_validate_integer(ival_, node, 'elshort') self.elshort = ival_ - elif nodeName_ == 'ellong': + elif nodeName_ == 'ellong' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -2032,7 +2032,7 @@ class tomato_agent(GeneratedsSuper): lastname_ = child_.text lastname_ = self.gds_validate_string(lastname_, node, 'lastname') self.lastname = lastname_ - elif nodeName_ == 'priority': + elif nodeName_ == 'priority' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -2149,7 +2149,7 @@ class tomato_special_agent(GeneratedsSuper): lastname_ = child_.text lastname_ = self.gds_validate_string(lastname_, node, 'lastname') self.lastname = lastname_ - elif nodeName_ == 'priority': + elif nodeName_ == 'priority' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -2308,7 +2308,7 @@ class tomato_booster(GeneratedsSuper): lastname_ = child_.text lastname_ = self.gds_validate_string(lastname_, node, 'lastname') self.lastname = lastname_ - elif nodeName_ == 'other-name': + elif nodeName_ == 'other-name' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -2316,7 +2316,7 @@ class tomato_booster(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'other_name') self.other_name = fval_ - elif nodeName_ == 'class': + elif nodeName_ == 'class' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -2324,7 +2324,7 @@ class tomato_booster(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'class') self.class_ = fval_ - elif nodeName_ == 'other-value': + elif nodeName_ == 'other-value' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -2332,7 +2332,7 @@ class tomato_booster(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'other_value') self.other_value.append(fval_) - elif nodeName_ == 'type': + elif nodeName_ == 'type' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -2530,7 +2530,7 @@ class tomato_client_handlerType(GeneratedsSuper): fullname_ = child_.text fullname_ = self.gds_validate_string(fullname_, node, 'fullname') self.fullname = fullname_ - elif nodeName_ == 'refid': + elif nodeName_ == 'refid' and child_.text: sval_ = child_.text try: ival_ = int(sval_) diff --git a/tests/recursive_simpletype1_sup.py b/tests/recursive_simpletype1_sup.py index ad25d51..850c8c3 100644 --- a/tests/recursive_simpletype1_sup.py +++ b/tests/recursive_simpletype1_sup.py @@ -814,7 +814,7 @@ class PersonType(GeneratedsSuper): def buildAttributes(self, node, attrs, already_processed): pass def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): - if nodeName_ == 'personId': + if nodeName_ == 'personId' and child_.text: sval_ = child_.text try: ival_ = int(sval_) diff --git a/tests/reference_simpletype1_sup.py b/tests/reference_simpletype1_sup.py index a65f200..9b1015f 100644 --- a/tests/reference_simpletype1_sup.py +++ b/tests/reference_simpletype1_sup.py @@ -833,7 +833,7 @@ class dummy(GeneratedsSuper): except ValueError as exp: raise_parse_error(node, 'Bad integer attribute: %s' % exp) def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): - if nodeName_ == 'test_ref_element': + if nodeName_ == 'test_ref_element' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -841,7 +841,7 @@ class dummy(GeneratedsSuper): raise_parse_error(child_, 'requires integer: %s' % exp) ival_ = self.gds_validate_integer(ival_, node, 'test_ref_element') self.test_ref_element = ival_ - elif nodeName_ == 'test_normal_element': + elif nodeName_ == 'test_normal_element' and child_.text: sval_ = child_.text try: ival_ = int(sval_) diff --git a/tests/simpletypes_other1_sup.py b/tests/simpletypes_other1_sup.py index 2e3d062..1a9c411 100644 --- a/tests/simpletypes_other1_sup.py +++ b/tests/simpletypes_other1_sup.py @@ -1117,7 +1117,7 @@ class simpleTypeTestDefs(GeneratedsSuper): datetime5_ = child_.text datetime5_ = self.gds_validate_string(datetime5_, node, 'datetime5') self.datetime5 = datetime5_ - elif nodeName_ == 'integerVal1': + elif nodeName_ == 'integerVal1' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1125,7 +1125,7 @@ class simpleTypeTestDefs(GeneratedsSuper): raise_parse_error(child_, 'requires integer: %s' % exp) ival_ = self.gds_validate_integer(ival_, node, 'integerVal1') self.integerVal1 = ival_ - elif nodeName_ == 'integerVal2': + elif nodeName_ == 'integerVal2' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1161,7 +1161,7 @@ class simpleTypeTestDefs(GeneratedsSuper): raise_parse_error(child_, 'requires boolean') ival_ = self.gds_validate_boolean(ival_, node, 'booleanVal2') self.booleanVal2.append(ival_) - elif nodeName_ == 'decimalVal1': + elif nodeName_ == 'decimalVal1' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1169,7 +1169,7 @@ class simpleTypeTestDefs(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'decimalVal1') self.decimalVal1 = fval_ - elif nodeName_ == 'decimalVal2': + elif nodeName_ == 'decimalVal2' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1177,7 +1177,7 @@ class simpleTypeTestDefs(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'decimalVal2') self.decimalVal2.append(fval_) - elif nodeName_ == 'doubleVal1': + elif nodeName_ == 'doubleVal1' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1185,7 +1185,7 @@ class simpleTypeTestDefs(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'doubleVal1') self.doubleVal1 = fval_ - elif nodeName_ == 'doubleVal2': + elif nodeName_ == 'doubleVal2' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1193,7 +1193,7 @@ class simpleTypeTestDefs(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'doubleVal2') self.doubleVal2.append(fval_) - elif nodeName_ == 'floatVal1': + elif nodeName_ == 'floatVal1' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1201,7 +1201,7 @@ class simpleTypeTestDefs(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'floatVal1') self.floatVal1 = fval_ - elif nodeName_ == 'floatVal2': + elif nodeName_ == 'floatVal2' and child_.text: sval_ = child_.text try: fval_ = float(sval_) diff --git a/tests/to_etree1_sup.py b/tests/to_etree1_sup.py index d360208..93dfd28 100644 --- a/tests/to_etree1_sup.py +++ b/tests/to_etree1_sup.py @@ -1192,7 +1192,7 @@ class personType(GeneratedsSuper): interest_ = child_.text interest_ = self.gds_validate_string(interest_, node, 'interest') self.interest.append(interest_) - elif nodeName_ == 'category': + elif nodeName_ == 'category' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1220,7 +1220,7 @@ class personType(GeneratedsSuper): description_ = child_.text description_ = self.gds_validate_string(description_, node, 'description') self.description = description_ - elif nodeName_ == 'range': + elif nodeName_ == 'range' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1542,7 +1542,7 @@ class programmerType(personType): email_ = child_.text email_ = self.gds_validate_string(email_, node, 'email') self.email = email_ - elif nodeName_ == 'elposint': + elif nodeName_ == 'elposint' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1552,7 +1552,7 @@ class programmerType(personType): raise_parse_error(child_, 'requires positiveInteger') ival_ = self.gds_validate_integer(ival_, node, 'elposint') self.elposint = ival_ - elif nodeName_ == 'elnonposint': + elif nodeName_ == 'elnonposint' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1562,7 +1562,7 @@ class programmerType(personType): raise_parse_error(child_, 'requires nonPositiveInteger') ival_ = self.gds_validate_integer(ival_, node, 'elnonposint') self.elnonposint = ival_ - elif nodeName_ == 'elnegint': + elif nodeName_ == 'elnegint' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1572,7 +1572,7 @@ class programmerType(personType): raise_parse_error(child_, 'requires negativeInteger') ival_ = self.gds_validate_integer(ival_, node, 'elnegint') self.elnegint = ival_ - elif nodeName_ == 'elnonnegint': + elif nodeName_ == 'elnonnegint' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1602,7 +1602,7 @@ class programmerType(personType): eltoken_ = "" eltoken_ = self.gds_validate_string(eltoken_, node, 'eltoken') self.eltoken = eltoken_ - elif nodeName_ == 'elshort': + elif nodeName_ == 'elshort' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1610,7 +1610,7 @@ class programmerType(personType): raise_parse_error(child_, 'requires integer: %s' % exp) ival_ = self.gds_validate_integer(ival_, node, 'elshort') self.elshort = ival_ - elif nodeName_ == 'ellong': + elif nodeName_ == 'ellong' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1864,7 +1864,7 @@ class python_programmerType(programmerType): favorite_editor_ = child_.text favorite_editor_ = self.gds_validate_string(favorite_editor_, node, 'favorite_editor') self.favorite_editor = favorite_editor_ - elif nodeName_ == 'flowvalue': + elif nodeName_ == 'flowvalue' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -2122,7 +2122,7 @@ class agentType(GeneratedsSuper): lastname_ = child_.text lastname_ = self.gds_validate_string(lastname_, node, 'lastname') self.lastname = lastname_ - elif nodeName_ == 'priority': + elif nodeName_ == 'priority' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -2240,7 +2240,7 @@ class special_agentType(agentType): lastname_ = child_.text lastname_ = self.gds_validate_string(lastname_, node, 'lastname') self.lastname = lastname_ - elif nodeName_ == 'priority': + elif nodeName_ == 'priority' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -2340,7 +2340,7 @@ class weird_agentType(agentType): lastname_ = child_.text lastname_ = self.gds_validate_string(lastname_, node, 'lastname') self.lastname = lastname_ - elif nodeName_ == 'priority': + elif nodeName_ == 'priority' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -2487,7 +2487,7 @@ class boosterType(GeneratedsSuper): lastname_ = child_.text lastname_ = self.gds_validate_string(lastname_, node, 'lastname') self.lastname = lastname_ - elif nodeName_ == 'other-name': + elif nodeName_ == 'other-name' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -2495,7 +2495,7 @@ class boosterType(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'other_name') self.other_name = fval_ - elif nodeName_ == 'class': + elif nodeName_ == 'class' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -2503,7 +2503,7 @@ class boosterType(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'class') self.class_ = fval_ - elif nodeName_ == 'other-value': + elif nodeName_ == 'other-value' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -2511,7 +2511,7 @@ class boosterType(GeneratedsSuper): raise_parse_error(child_, 'requires float or double: %s' % exp) fval_ = self.gds_validate_float(fval_, node, 'other_value') self.other_value.append(fval_) - elif nodeName_ == 'type': + elif nodeName_ == 'type' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -2667,7 +2667,7 @@ class vehicleType(GeneratedsSuper): already_processed.add('xsi:type') self.extensiontype_ = value def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): - if nodeName_ == 'wheelcount': + if nodeName_ == 'wheelcount' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -2884,7 +2884,7 @@ class hot_agent(GeneratedsSuper): lastname_ = child_.text lastname_ = self.gds_validate_string(lastname_, node, 'lastname') self.lastname = lastname_ - elif nodeName_ == 'priority': + elif nodeName_ == 'priority' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -2961,7 +2961,7 @@ class client_handlerType(GeneratedsSuper): fullname_ = child_.text fullname_ = self.gds_validate_string(fullname_, node, 'fullname') self.fullname = fullname_ - elif nodeName_ == 'refid': + elif nodeName_ == 'refid' and child_.text: sval_ = child_.text try: ival_ = int(sval_) diff --git a/tests/validate_simpletypes1_sup.py b/tests/validate_simpletypes1_sup.py index 772c0fd..98d98e8 100644 --- a/tests/validate_simpletypes1_sup.py +++ b/tests/validate_simpletypes1_sup.py @@ -1361,7 +1361,7 @@ class simpleOneType(GeneratedsSuper): self.integer_range_1_value_with_default = value self.validate_integer_range_1_st(self.integer_range_1_value_with_default) # validate type integer_range_1_st def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): - if nodeName_ == 'integer_range_1_value': + if nodeName_ == 'integer_range_1_value' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1383,7 +1383,7 @@ class simpleOneType(GeneratedsSuper): self.token_enum_value = token_enum_value_ # validate type token_enum_st self.validate_token_enum_st(self.token_enum_value) - elif nodeName_ == 'integer_range_incl_value': + elif nodeName_ == 'integer_range_incl_value' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1393,7 +1393,7 @@ class simpleOneType(GeneratedsSuper): self.integer_range_incl_value = ival_ # validate type integer_range_incl_st self.validate_integer_range_incl_st(self.integer_range_incl_value) - elif nodeName_ == 'integer_range_excl_value': + elif nodeName_ == 'integer_range_excl_value' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1415,7 +1415,7 @@ class simpleOneType(GeneratedsSuper): self.length_value = length_value_ # validate type length_st self.validate_length_st(self.length_value) - elif nodeName_ == 'totalDigits_value': + elif nodeName_ == 'totalDigits_value' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1509,7 +1509,7 @@ class simpleOneType(GeneratedsSuper): self.unicode_pattern_value = unicode_pattern_value_ # validate type unicode_pattern_st self.validate_unicode_pattern_st(self.unicode_pattern_value) - elif nodeName_ == 'anonymous_float_value': + elif nodeName_ == 'anonymous_float_value' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1519,7 +1519,7 @@ class simpleOneType(GeneratedsSuper): self.anonymous_float_value = fval_ # validate type anonymous_float_valueType self.validate_anonymous_float_valueType(self.anonymous_float_value) - elif nodeName_ == 'primative_integer': + elif nodeName_ == 'primative_integer' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1527,7 +1527,7 @@ class simpleOneType(GeneratedsSuper): raise_parse_error(child_, 'requires integer: %s' % exp) ival_ = self.gds_validate_integer(ival_, node, 'primative_integer') self.primative_integer = ival_ - elif nodeName_ == 'primative_float': + elif nodeName_ == 'primative_float' and child_.text: sval_ = child_.text try: fval_ = float(sval_) diff --git a/tests/validate_simpletypes2_sup.py b/tests/validate_simpletypes2_sup.py index 772c0fd..98d98e8 100644 --- a/tests/validate_simpletypes2_sup.py +++ b/tests/validate_simpletypes2_sup.py @@ -1361,7 +1361,7 @@ class simpleOneType(GeneratedsSuper): self.integer_range_1_value_with_default = value self.validate_integer_range_1_st(self.integer_range_1_value_with_default) # validate type integer_range_1_st def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): - if nodeName_ == 'integer_range_1_value': + if nodeName_ == 'integer_range_1_value' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1383,7 +1383,7 @@ class simpleOneType(GeneratedsSuper): self.token_enum_value = token_enum_value_ # validate type token_enum_st self.validate_token_enum_st(self.token_enum_value) - elif nodeName_ == 'integer_range_incl_value': + elif nodeName_ == 'integer_range_incl_value' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1393,7 +1393,7 @@ class simpleOneType(GeneratedsSuper): self.integer_range_incl_value = ival_ # validate type integer_range_incl_st self.validate_integer_range_incl_st(self.integer_range_incl_value) - elif nodeName_ == 'integer_range_excl_value': + elif nodeName_ == 'integer_range_excl_value' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1415,7 +1415,7 @@ class simpleOneType(GeneratedsSuper): self.length_value = length_value_ # validate type length_st self.validate_length_st(self.length_value) - elif nodeName_ == 'totalDigits_value': + elif nodeName_ == 'totalDigits_value' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1509,7 +1509,7 @@ class simpleOneType(GeneratedsSuper): self.unicode_pattern_value = unicode_pattern_value_ # validate type unicode_pattern_st self.validate_unicode_pattern_st(self.unicode_pattern_value) - elif nodeName_ == 'anonymous_float_value': + elif nodeName_ == 'anonymous_float_value' and child_.text: sval_ = child_.text try: fval_ = float(sval_) @@ -1519,7 +1519,7 @@ class simpleOneType(GeneratedsSuper): self.anonymous_float_value = fval_ # validate type anonymous_float_valueType self.validate_anonymous_float_valueType(self.anonymous_float_value) - elif nodeName_ == 'primative_integer': + elif nodeName_ == 'primative_integer' and child_.text: sval_ = child_.text try: ival_ = int(sval_) @@ -1527,7 +1527,7 @@ class simpleOneType(GeneratedsSuper): raise_parse_error(child_, 'requires integer: %s' % exp) ival_ = self.gds_validate_integer(ival_, node, 'primative_integer') self.primative_integer = ival_ - elif nodeName_ == 'primative_float': + elif nodeName_ == 'primative_float' and child_.text: sval_ = child_.text try: fval_ = float(sval_) diff --git a/tutorial/generateds_tutorial.html b/tutorial/generateds_tutorial.html index 3730ea9..5ecb044 100644 --- a/tutorial/generateds_tutorial.html +++ b/tutorial/generateds_tutorial.html @@ -219,7 +219,7 @@ They are used by updateversion.py. --> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.22</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.23</td> </tr> </tbody> </table> @@ -228,7 +228,7 @@ They are used by updateversion.py. --> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">date:</th><td class="field-body">August 03, 2018</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">August 16, 2018</td> </tr> </tbody> </table> @@ -1210,7 +1210,7 @@ named <tt class="docutils literal">garden_api.py</tt>, you can create an instanc <div class="footer"> <hr class="footer" /> <a class="reference external" href="generateds_tutorial.txt">View document source</a>. -Generated on: 2018-08-03 21:41 UTC. +Generated on: 2018-08-16 22:29 UTC. Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source. </div> diff --git a/tutorial/generateds_tutorial.txt b/tutorial/generateds_tutorial.txt index a85b9c3..dddd8f7 100644 --- a/tutorial/generateds_tutorial.txt +++ b/tutorial/generateds_tutorial.txt @@ -11,7 +11,7 @@ generateDS -- Introduction and Tutorial .. version -:revision: 2.29.22 +:revision: 2.29.23 .. version diff --git a/tutorial/generateds_tutorial.zip b/tutorial/generateds_tutorial.zip index 49e34849c5ccb29209e2ae4cdd5357a819ce7325..b1d6245bda6c9fa3d2b918bc5768299980209f80 100644 GIT binary patch delta 11535 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 B&{hBd delta 11550 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 QxfPR9zAXl0xc~qF07<dHs{jB1 -- GitLab