diff --git a/MANIFEST.in b/MANIFEST.in index 056e6c88fefc0b6ac40e49706b186545c9679341..475b8d27369b2a70f0176353210685eb62ef3e7d 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -53,12 +53,14 @@ include tests/anysimpletype.xsd include tests/anysimpletype1_sup.py tests/anysimpletype1_sub.py include tests/anywildcard.xsd include tests/anywildcard1_sup.py tests/anywildcard1_sub.py +include tests/anywildcard2_sup.py tests/anywildcard2_sub.py include tests/literal1.py include tests/valueof.xsd tests/valueof.xml include tests/groups.xsd tests/groups.xml include tests/annotations.xsd include tests/annotations1_sup.py tests/annotations1_sub.py include tests/annotations2_sup.py tests/annotations2_sub.py +include tests/recursive_simpletype.xsd include tests/recursive_simpletype1_sup.py tests/recursive_simpletype1_sub.py include tests/recursive_simpletype2_sup.py tests/recursive_simpletype2_sub.py include tests/ipo.xml @@ -76,6 +78,14 @@ include tests/abstract_type.xsd include tests/abstract_type1_sup.py tests/abstract_type1_sub.py include tests/abstract_type2_sup.py tests/abstract_type2_sub.py +include tests/simpletypes_other.xsd +include tests/simpletypes_other1_sup.py tests/simpletypes1_other_sub.py +include tests/simpletypes_other2_sup.py tests/simpletypes_other2_sub.py + +include tests/attr_groups.xsd +include tests/attr_groups1_sup.py tests/attr_groups1_sub.py +include tests/attr_groups2_sup.py tests/attr_groups2_sub.py + include gui/generateds_gui.py include gui/generateds_gui.glade include gui/generateds_gui_session.py diff --git a/PKG-INFO b/PKG-INFO index 08ad651874706df897ef73a62b545811dc20039e..db4abf916435a5f62121f757fdb720a8086ef70a 100644 --- a/PKG-INFO +++ b/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 1.0 Name: generateDS -Version: 2.8a +Version: 2.8b Summary: Generate Python data structures and XML parser from Xschema Home-page: http://www.rexx.com/~dkuhlman/generateDS.html Author: Dave Kuhlman diff --git a/generateDS.egg-info/PKG-INFO b/generateDS.egg-info/PKG-INFO index 08ad651874706df897ef73a62b545811dc20039e..db4abf916435a5f62121f757fdb720a8086ef70a 100644 --- a/generateDS.egg-info/PKG-INFO +++ b/generateDS.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 1.0 Name: generateDS -Version: 2.8a +Version: 2.8b Summary: Generate Python data structures and XML parser from Xschema Home-page: http://www.rexx.com/~dkuhlman/generateDS.html Author: Dave Kuhlman diff --git a/generateDS.egg-info/SOURCES.txt b/generateDS.egg-info/SOURCES.txt index 4dbd18488f58f113d0396a107c4dda1be191afa3..b853b16e9c701c2e011335ba75c088f88b460d80 100644 --- a/generateDS.egg-info/SOURCES.txt +++ b/generateDS.egg-info/SOURCES.txt @@ -79,6 +79,13 @@ tests/anysimpletype1_sup.py tests/anywildcard.xsd tests/anywildcard1_sub.py tests/anywildcard1_sup.py +tests/anywildcard2_sub.py +tests/anywildcard2_sup.py +tests/attr_groups.xsd +tests/attr_groups1_sub.py +tests/attr_groups1_sup.py +tests/attr_groups2_sub.py +tests/attr_groups2_sup.py tests/extensions.xsd tests/extensions1_sub.py tests/extensions1_sup.py @@ -106,6 +113,7 @@ tests/people_procincl2_sub.py tests/people_procincl2_sup.py tests/people_procincl_a.xsd tests/people_procincl_b.xsd +tests/recursive_simpletype.xsd tests/recursive_simpletype1_sub.py tests/recursive_simpletype1_sup.py tests/recursive_simpletype2_sub.py @@ -116,6 +124,10 @@ tests/simplecontent_restriction1_sup.py tests/simpletype_memberspecs.xsd tests/simpletype_memberspecs1_sub.py tests/simpletype_memberspecs1_sup.py +tests/simpletypes_other.xsd +tests/simpletypes_other1_sup.py +tests/simpletypes_other2_sub.py +tests/simpletypes_other2_sup.py tests/test.py tests/valueof.xml tests/valueof.xsd diff --git a/generateDS.html b/generateDS.html index 407f4b2f024179cbb73d8275de54bd46e1e6293a..a24901645a538dc841908fecb34a68e9a61cdab1 100644 --- a/generateDS.html +++ b/generateDS.html @@ -3,7 +3,7 @@ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -<meta name="generator" content="Docutils 0.10: http://docutils.sourceforge.net/" /> +<meta name="generator" content="Docutils 0.11: http://docutils.sourceforge.net/" /> <title>generateDS -- Generate Data Structures from XML Schema</title> <meta name="author" content="Dave Kuhlman" /> <style type="text/css"> @@ -216,7 +216,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.8a</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.8b</td> </tr> </tbody> </table> @@ -225,7 +225,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">December 14, 2012</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">January 28, 2013</td> </tr> </tbody> </table> diff --git a/generateDS.py b/generateDS.py index 8a9f4df2aac5e20009f99eb764f6399e84b3ad53..2397a6e3b2a771dbc0d80cafa41b0db9a9d2a388 100755 --- a/generateDS.py +++ b/generateDS.py @@ -155,7 +155,7 @@ logging.disable(logging.INFO) # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## -VERSION = '2.8a' +VERSION = '2.8b' ##VERSION## GenerateProperties = 0 @@ -2419,11 +2419,11 @@ def generateExportLiteralFn_2(wrt, child, name, fill): if childType == DateTimeType: wrt('%s showIndent(outfile, level)\n' % fill) wrt("%s outfile.write('%%s,\\n' %% self.gds_format_datetime(" - "%s, input_name='%s'))\n" % (fill, name, name, )) + "%s_, input_name='%s'))\n" % (fill, name, name, )) elif childType == DateType: wrt('%s showIndent(outfile, level)\n' % fill) wrt("%s outfile.write('%%s,\\n' %% self.gds_format_date(" - "%s, input_name='%s'))\n" % (fill, name, name, )) + "%s_, input_name='%s'))\n" % (fill, name, name, )) elif (childType in StringType or childType == TokenType or childType in DateTimeGroupType): @@ -2436,17 +2436,17 @@ def generateExportLiteralFn_2(wrt, child, name, fill): childType == NegativeIntegerType or \ childType == NonNegativeIntegerType: wrt('%s showIndent(outfile, level)\n' % fill) - wrt("%s outfile.write('%%d,\\n' %% %s)\n" % (fill, name)) + wrt("%s outfile.write('%%d,\\n' %% %s_)\n" % (fill, name)) elif childType == BooleanType: wrt('%s showIndent(outfile, level)\n' % fill) - wrt("%s outfile.write('%%s,\\n' %% %s)\n" % (fill, name)) + wrt("%s outfile.write('%%s,\\n' %% %s_)\n" % (fill, name)) elif childType == FloatType or \ childType == DecimalType: wrt('%s showIndent(outfile, level)\n' % fill) wrt("%s outfile.write('%%f,\\n' %% %s_)\n" % (fill, name)) elif childType == DoubleType: wrt('%s showIndent(outfile, level)\n' % fill) - wrt("%s outfile.write('%%e,\\n' %% %s)\n" % (fill, name)) + wrt("%s outfile.write('%%e,\\n' %% %s_)\n" % (fill, name)) else: wrt('%s showIndent(outfile, level)\n' % fill) name1 = mapName(cleanupName(child.getType())) diff --git a/generateDS.txt b/generateDS.txt index 354840a1bab01de23505e0688204026e99b46d7b..208dbcad35676cbad8cbea7bbfe56c65799f5c58 100644 --- a/generateDS.txt +++ b/generateDS.txt @@ -11,7 +11,7 @@ generateDS -- Generate Data Structures from XML Schema .. version -:revision: 2.8a +:revision: 2.8b .. version diff --git a/gui/generateds_gui.py b/gui/generateds_gui.py index 23e1ec8b37317bfc87af2ce24eeebe82f73c0752..4b67c7febd5dbdde050d547b980d998676bcf3fb 100755 --- a/gui/generateds_gui.py +++ b/gui/generateds_gui.py @@ -31,7 +31,7 @@ from libgenerateDS.gui import generateds_gui_session # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## -VERSION = '2.8a' +VERSION = '2.8b' ##VERSION## diff --git a/libgenerateDS/gui/generateds_gui.py b/libgenerateDS/gui/generateds_gui.py index 23e1ec8b37317bfc87af2ce24eeebe82f73c0752..4b67c7febd5dbdde050d547b980d998676bcf3fb 100755 --- a/libgenerateDS/gui/generateds_gui.py +++ b/libgenerateDS/gui/generateds_gui.py @@ -31,7 +31,7 @@ from libgenerateDS.gui import generateds_gui_session # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## -VERSION = '2.8a' +VERSION = '2.8b' ##VERSION## diff --git a/librarytemplate_howto.html b/librarytemplate_howto.html index 4615a3ea4436e91ec508b08c5d63258ab7cd313e..f9b29ab27dfa5143a4c848d7e3c005983c18f157 100644 --- a/librarytemplate_howto.html +++ b/librarytemplate_howto.html @@ -3,7 +3,7 @@ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -<meta name="generator" content="Docutils 0.10: http://docutils.sourceforge.net/" /> +<meta name="generator" content="Docutils 0.11: http://docutils.sourceforge.net/" /> <title>How to package a generateDS.py generated library</title> <meta name="author" content="Dave Kuhlman" /> <style type="text/css"> @@ -214,7 +214,7 @@ tt.docutils { <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.8a</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.8b</td> </tr> </tbody> </table> @@ -223,7 +223,7 @@ tt.docutils { <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">date:</th><td class="field-body">November 14, 2012</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">January 28, 2013</td> </tr> </tbody> </table> diff --git a/librarytemplate_howto.txt b/librarytemplate_howto.txt index 9251da83f90fae3761c12066e87dc116b727cde2..2fbd5d9a824b703ad153d4b8acd7fc69340a4f9c 100644 --- a/librarytemplate_howto.txt +++ b/librarytemplate_howto.txt @@ -8,7 +8,7 @@ How to package a generateDS.py generated library .. version -:revision: 2.8a +:revision: 2.8b .. version diff --git a/process_includes.py b/process_includes.py index 54055b515314d5ecb1e4fb48bcb719e79efadfc7..a4d60c098a231b389abf46e9e247e8e28c56a6ab 100755 --- a/process_includes.py +++ b/process_includes.py @@ -30,7 +30,7 @@ from lxml import etree # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## -VERSION = '2.8a' +VERSION = '2.8b' ##VERSION## Namespaces = {'xs': 'http://www.w3.org/2001/XMLSchema'} diff --git a/setup.py b/setup.py index de21a1f2707d483d472118648da315eafe5a888f..0e261bc296ec39f403704b025c9f4ed899192ab0 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ setup(name="generateDS", # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## - version="2.8a", + version="2.8b", ##VERSION## author="Dave Kuhlman", author_email="dkuhlman@rexx.com", diff --git a/tests/anywildcard2_sub.py b/tests/anywildcard2_sub.py new file mode 100644 index 0000000000000000000000000000000000000000..bd99f732fddeadf796056b09ea345f2242049eb7 --- /dev/null +++ b/tests/anywildcard2_sub.py @@ -0,0 +1,203 @@ +#!/usr/bin/env python + +# +# Generated by generateDS.py. +# + +import sys + +import anywildcard2_sup as supermod + +etree_ = None +Verbose_import_ = False +( XMLParser_import_none, XMLParser_import_lxml, + XMLParser_import_elementtree + ) = range(3) +XMLParser_import_library = None +try: + # lxml + from lxml import etree as etree_ + XMLParser_import_library = XMLParser_import_lxml + if Verbose_import_: + print("running with lxml.etree") +except ImportError: + try: + # cElementTree from Python 2.5+ + import xml.etree.cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree on Python 2.5+") + except ImportError: + try: + # ElementTree from Python 2.5+ + import xml.etree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree on Python 2.5+") + except ImportError: + try: + # normal cElementTree install + import cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree") + except ImportError: + try: + # normal ElementTree install + import elementtree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree") + except ImportError: + raise ImportError( + "Failed to import ElementTree from any known place") + +def parsexml_(*args, **kwargs): + if (XMLParser_import_library == XMLParser_import_lxml and + 'parser' not in kwargs): + # Use the lxml ElementTree compatible parser so that, e.g., + # we ignore comments. + kwargs['parser'] = etree_.ETCompatXMLParser() + doc = etree_.parse(*args, **kwargs) + return doc + +# +# Globals +# + +ExternalEncoding = 'ascii' + +# +# Data representation classes +# + +class PlantType_singleSub(supermod.PlantType_single): + def __init__(self, name=None, anytypeobjs_=None, description=None): + super(PlantType_singleSub, self).__init__(name, anytypeobjs_, description, ) +supermod.PlantType_single.subclass = PlantType_singleSub +# end class PlantType_singleSub + + +class PlantType_multipleSub(supermod.PlantType_multiple): + def __init__(self, name=None, anytypeobjs_=None, description=None): + super(PlantType_multipleSub, self).__init__(name, anytypeobjs_, description, ) +supermod.PlantType_multiple.subclass = PlantType_multipleSub +# end class PlantType_multipleSub + + +class DescriptionTypeSub(supermod.DescriptionType): + def __init__(self, name=None, size=None): + super(DescriptionTypeSub, self).__init__(name, size, ) +supermod.DescriptionType.subclass = DescriptionTypeSub +# end class DescriptionTypeSub + + +class CatalogTypeSub(supermod.CatalogType): + def __init__(self, name=None, catagory=None): + super(CatalogTypeSub, self).__init__(name, catagory, ) +supermod.CatalogType.subclass = CatalogTypeSub +# end class CatalogTypeSub + + +class PlantType_single_nochildSub(supermod.PlantType_single_nochild): + def __init__(self, anytypeobjs_=None): + super(PlantType_single_nochildSub, self).__init__(anytypeobjs_, ) +supermod.PlantType_single_nochild.subclass = PlantType_single_nochildSub +# end class PlantType_single_nochildSub + + +class PlantType_multiple_nochildSub(supermod.PlantType_multiple_nochild): + def __init__(self, anytypeobjs_=None): + super(PlantType_multiple_nochildSub, self).__init__(anytypeobjs_, ) +supermod.PlantType_multiple_nochild.subclass = PlantType_multiple_nochildSub +# end class PlantType_multiple_nochildSub + + + +def get_root_tag(node): + tag = supermod.Tag_pattern_.match(node.tag).groups()[-1] + rootClass = None + rootClass = supermod.GDSClassesMapping.get(tag) + if rootClass is None and hasattr(supermod, tag): + rootClass = getattr(supermod, tag) + return tag, rootClass + + +def parse(inFilename): + doc = parsexml_(inFilename) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'PlantType_single' + rootClass = supermod.PlantType_single + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('<?xml version="1.0" ?>\n') +## rootObj.export(sys.stdout, 0, name_=rootTag, +## namespacedef_='', +## pretty_print=True) + doc = None + return rootObj + + +def parseString(inString): + from StringIO import StringIO + doc = parsexml_(StringIO(inString)) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'PlantType_single' + rootClass = supermod.PlantType_single + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('<?xml version="1.0" ?>\n') +## rootObj.export(sys.stdout, 0, name_=rootTag, +## namespacedef_='') + return rootObj + + +def parseLiteral(inFilename): + doc = parsexml_(inFilename) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'PlantType_single' + rootClass = supermod.PlantType_single + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('#from anywildcard2_sup import *\n\n') +## sys.stdout.write('import anywildcard2_sup as model_\n\n') +## sys.stdout.write('rootObj = model_.PlantType_single(\n') +## rootObj.exportLiteral(sys.stdout, 0, name_="PlantType_single") +## sys.stdout.write(')\n') + return rootObj + + +USAGE_TEXT = """ +Usage: python ???.py <infilename> +""" + +def usage(): + print USAGE_TEXT + sys.exit(1) + + +def main(): + args = sys.argv[1:] + if len(args) != 1: + usage() + infilename = args[0] + root = parse(infilename) + + +if __name__ == '__main__': + #import pdb; pdb.set_trace() + main() + + diff --git a/tests/anywildcard2_sup.py b/tests/anywildcard2_sup.py new file mode 100644 index 0000000000000000000000000000000000000000..738983d4044551fd59d25433d7abd2725a52d4c3 --- /dev/null +++ b/tests/anywildcard2_sup.py @@ -0,0 +1,1140 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# +# Generated by generateDS.py. +# + +import sys +import getopt +import re as re_ +import base64 +from datetime import datetime, tzinfo, timedelta + +etree_ = None +Verbose_import_ = False +( XMLParser_import_none, XMLParser_import_lxml, + XMLParser_import_elementtree + ) = range(3) +XMLParser_import_library = None +try: + # lxml + from lxml import etree as etree_ + XMLParser_import_library = XMLParser_import_lxml + if Verbose_import_: + print("running with lxml.etree") +except ImportError: + try: + # cElementTree from Python 2.5+ + import xml.etree.cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree on Python 2.5+") + except ImportError: + try: + # ElementTree from Python 2.5+ + import xml.etree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree on Python 2.5+") + except ImportError: + try: + # normal cElementTree install + import cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree") + except ImportError: + try: + # normal ElementTree install + import elementtree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree") + except ImportError: + raise ImportError( + "Failed to import ElementTree from any known place") + +def parsexml_(*args, **kwargs): + if (XMLParser_import_library == XMLParser_import_lxml and + 'parser' not in kwargs): + # Use the lxml ElementTree compatible parser so that, e.g., + # we ignore comments. + kwargs['parser'] = etree_.ETCompatXMLParser() + doc = etree_.parse(*args, **kwargs) + return doc + +# +# User methods +# +# Calls to the methods in these classes are generated by generateDS.py. +# You can replace these methods by re-implementing the following class +# in a module named generatedssuper.py. + +try: + from generatedssuper import GeneratedsSuper +except ImportError, exp: + + class GeneratedsSuper(object): + tzoff_pattern = re_.compile(r'(\+|-)((0\d|1[0-3]):[0-5]\d|14:00)$') + class _FixedOffsetTZ(tzinfo): + def __init__(self, offset, name): + self.__offset = timedelta(minutes = offset) + self.__name = name + def utcoffset(self, dt): + return self.__offset + def tzname(self, dt): + return self.__name + def dst(self, dt): + return None + def gds_format_string(self, input_data, input_name=''): + return input_data + def gds_validate_string(self, input_data, node, input_name=''): + return input_data + def gds_format_base64(self, input_data, input_name=''): + return base64.b64encode(input_data) + def gds_validate_base64(self, input_data, node, input_name=''): + return input_data + def gds_format_integer(self, input_data, input_name=''): + return '%d' % input_data + def gds_validate_integer(self, input_data, node, input_name=''): + return input_data + def gds_format_integer_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_integer_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + try: + fvalue = float(value) + except (TypeError, ValueError), exp: + raise_parse_error(node, 'Requires sequence of integers') + return input_data + def gds_format_float(self, input_data, input_name=''): + return '%f' % input_data + def gds_validate_float(self, input_data, node, input_name=''): + return input_data + def gds_format_float_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_float_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + try: + fvalue = float(value) + except (TypeError, ValueError), exp: + raise_parse_error(node, 'Requires sequence of floats') + return input_data + def gds_format_double(self, input_data, input_name=''): + return '%e' % input_data + def gds_validate_double(self, input_data, node, input_name=''): + return input_data + def gds_format_double_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_double_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + try: + fvalue = float(value) + except (TypeError, ValueError), exp: + raise_parse_error(node, 'Requires sequence of doubles') + return input_data + def gds_format_boolean(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_boolean(self, input_data, node, input_name=''): + return input_data + def gds_format_boolean_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_boolean_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + if value not in ('true', '1', 'false', '0', ): + raise_parse_error(node, + 'Requires sequence of booleans ' + '("true", "1", "false", "0")') + return input_data + def gds_validate_datetime(self, input_data, node, input_name=''): + return input_data + def gds_format_datetime(self, input_data, input_name=''): + _svalue = input_data.strftime('%Y-%m-%dT%H:%M:%S') + if input_data.tzinfo is not None: + tzoff = input_data.tzinfo.utcoffset(input_data) + if tzoff is not None: + total_seconds = tzoff.seconds + (86400 * tzoff.days) + if total_seconds == 0: + _svalue += 'Z' + else: + if total_seconds < 0: + _svalue += '-' + total_seconds *= -1 + else: + _svalue += '+' + hours = total_seconds // 3600 + minutes = (total_seconds - (hours * 3600)) // 60 + _svalue += '{0:02d}:{1:02d}'.format(hours, minutes) + return _svalue + def gds_parse_datetime(self, input_data, node, input_name=''): + tz = None + if input_data[-1] == 'Z': + tz = GeneratedsSuper._FixedOffsetTZ(0, 'GMT') + input_data = input_data[:-1] + else: + results = GeneratedsSuper.tzoff_pattern.search(input_data) + if results is not None: + tzoff_parts = results.group(2).split(':') + tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1]) + if results.group(1) == '-': + tzoff *= -1 + tz = GeneratedsSuper._FixedOffsetTZ( + tzoff, results.group(0)) + input_data = input_data[:-6] + return datetime.strptime(input_data, + '%Y-%m-%dT%H:%M:%S').replace(tzinfo = tz) + def gds_validate_date(self, input_data, node, input_name=''): + return input_data + def gds_format_date(self, input_data, input_name=''): + _svalue = input_data.strftime('%Y-%m-%d') + if input_data.tzinfo is not None: + tzoff = input_data.tzinfo.utcoffset(input_data) + if tzoff is not None: + total_seconds = tzoff.seconds + (86400 * tzoff.days) + if total_seconds == 0: + _svalue += 'Z' + else: + if total_seconds < 0: + _svalue += '-' + total_seconds *= -1 + else: + _svalue += '+' + hours = total_seconds // 3600 + minutes = (total_seconds - (hours * 3600)) // 60 + _svalue += '{0:02d}:{1:02d}'.format(hours, minutes) + return _svalue + def gds_parse_date(self, input_data, node, input_name=''): + tz = None + if input_data[-1] == 'Z': + tz = GeneratedsSuper._FixedOffsetTZ(0, 'GMT') + input_data = input_data[:-1] + else: + results = GeneratedsSuper.tzoff_pattern.search(input_data) + if results is not None: + tzoff_parts = results.group(2).split(':') + tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1]) + if results.group(1) == '-': + tzoff *= -1 + tz = GeneratedsSuper._FixedOffsetTZ( + tzoff, results.group(0)) + input_data = input_data[:-6] + return datetime.strptime(input_data, + '%Y-%m-%d').replace(tzinfo = tz) + def gds_str_lower(self, instring): + return instring.lower() + def get_path_(self, node): + path_list = [] + self.get_path_list_(node, path_list) + path_list.reverse() + path = '/'.join(path_list) + return path + Tag_strip_pattern_ = re_.compile(r'\{.*\}') + def get_path_list_(self, node, path_list): + if node is None: + return + tag = GeneratedsSuper.Tag_strip_pattern_.sub('', node.tag) + if tag: + path_list.append(tag) + self.get_path_list_(node.getparent(), path_list) + def get_class_obj_(self, node, default_class=None): + class_obj1 = default_class + if 'xsi' in node.nsmap: + classname = node.get('{%s}type' % node.nsmap['xsi']) + if classname is not None: + names = classname.split(':') + if len(names) == 2: + classname = names[1] + class_obj2 = globals().get(classname) + if class_obj2 is not None: + class_obj1 = class_obj2 + return class_obj1 + def gds_build_any(self, node, type_name=None): + return None + + +# +# If you have installed IPython you can uncomment and use the following. +# IPython is available from http://ipython.scipy.org/. +# + +## from IPython.Shell import IPShellEmbed +## args = '' +## ipshell = IPShellEmbed(args, +## banner = 'Dropping into IPython', +## exit_msg = 'Leaving Interpreter, back to program.') + +# Then use the following line where and when you want to drop into the +# IPython shell: +# ipshell('<some message> -- Entering ipshell.\nHit Ctrl-D to exit') + +# +# Globals +# + +ExternalEncoding = 'ascii' +Tag_pattern_ = re_.compile(r'({.*})?(.*)') +String_cleanup_pat_ = re_.compile(r"[\n\r\s]+") +Namespace_extract_pat_ = re_.compile(r'{(.*)}(.*)') + +# +# Support/utility functions. +# + +def showIndent(outfile, level, pretty_print=True): + if pretty_print: + for idx in range(level): + outfile.write(' ') + +def quote_xml(inStr): + if not inStr: + return '' + s1 = (isinstance(inStr, basestring) and inStr or + '%s' % inStr) + s1 = s1.replace('&', '&') + s1 = s1.replace('<', '<') + s1 = s1.replace('>', '>') + return s1 + +def quote_attrib(inStr): + s1 = (isinstance(inStr, basestring) and inStr or + '%s' % inStr) + s1 = s1.replace('&', '&') + s1 = s1.replace('<', '<') + s1 = s1.replace('>', '>') + if '"' in s1: + if "'" in s1: + s1 = '"%s"' % s1.replace('"', """) + else: + s1 = "'%s'" % s1 + else: + s1 = '"%s"' % s1 + return s1 + +def quote_python(inStr): + s1 = inStr + if s1.find("'") == -1: + if s1.find('\n') == -1: + return "'%s'" % s1 + else: + return "'''%s'''" % s1 + else: + if s1.find('"') != -1: + s1 = s1.replace('"', '\\"') + if s1.find('\n') == -1: + return '"%s"' % s1 + else: + return '"""%s"""' % s1 + +def get_all_text_(node): + if node.text is not None: + text = node.text + else: + text = '' + for child in node: + if child.tail is not None: + text += child.tail + return text + +def find_attr_value_(attr_name, node): + attrs = node.attrib + attr_parts = attr_name.split(':') + value = None + if len(attr_parts) == 1: + value = attrs.get(attr_name) + elif len(attr_parts) == 2: + prefix, name = attr_parts + namespace = node.nsmap.get(prefix) + if namespace is not None: + value = attrs.get('{%s}%s' % (namespace, name, )) + return value + + +class GDSParseError(Exception): + pass + +def raise_parse_error(node, msg): + if XMLParser_import_library == XMLParser_import_lxml: + msg = '%s (element %s/line %d)' % ( + msg, node.tag, node.sourceline, ) + else: + msg = '%s (element %s)' % (msg, node.tag, ) + raise GDSParseError(msg) + + +class MixedContainer: + # Constants for category: + CategoryNone = 0 + CategoryText = 1 + CategorySimple = 2 + CategoryComplex = 3 + # Constants for content_type: + TypeNone = 0 + TypeText = 1 + TypeString = 2 + TypeInteger = 3 + TypeFloat = 4 + TypeDecimal = 5 + TypeDouble = 6 + TypeBoolean = 7 + TypeBase64 = 8 + def __init__(self, category, content_type, name, value): + self.category = category + self.content_type = content_type + self.name = name + self.value = value + def getCategory(self): + return self.category + def getContenttype(self, content_type): + return self.content_type + def getValue(self): + return self.value + def getName(self): + return self.name + def export(self, outfile, level, name, namespace, pretty_print=True): + if self.category == MixedContainer.CategoryText: + # Prevent exporting empty content as empty lines. + if self.value.strip(): + outfile.write(self.value) + elif self.category == MixedContainer.CategorySimple: + self.exportSimple(outfile, level, name) + else: # category == MixedContainer.CategoryComplex + self.value.export(outfile, level, namespace, name, pretty_print) + def exportSimple(self, outfile, level, name): + if self.content_type == MixedContainer.TypeString: + outfile.write('<%s>%s</%s>' % + (self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeInteger or \ + self.content_type == MixedContainer.TypeBoolean: + outfile.write('<%s>%d</%s>' % + (self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeFloat or \ + self.content_type == MixedContainer.TypeDecimal: + outfile.write('<%s>%f</%s>' % + (self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeDouble: + outfile.write('<%s>%g</%s>' % + (self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeBase64: + outfile.write('<%s>%s</%s>' % + (self.name, base64.b64encode(self.value), self.name)) + def exportLiteral(self, outfile, level, name): + if self.category == MixedContainer.CategoryText: + showIndent(outfile, level) + outfile.write('model_.MixedContainer(%d, %d, "%s", "%s"),\n' + % (self.category, self.content_type, self.name, self.value)) + elif self.category == MixedContainer.CategorySimple: + showIndent(outfile, level) + outfile.write('model_.MixedContainer(%d, %d, "%s", "%s"),\n' + % (self.category, self.content_type, self.name, self.value)) + else: # category == MixedContainer.CategoryComplex + showIndent(outfile, level) + outfile.write('model_.MixedContainer(%d, %d, "%s",\n' % \ + (self.category, self.content_type, self.name,)) + self.value.exportLiteral(outfile, level + 1) + showIndent(outfile, level) + outfile.write(')\n') + + +class MemberSpec_(object): + def __init__(self, name='', data_type='', container=0): + self.name = name + self.data_type = data_type + self.container = container + def set_name(self, name): self.name = name + def get_name(self): return self.name + def set_data_type(self, data_type): self.data_type = data_type + def get_data_type_chain(self): return self.data_type + def get_data_type(self): + if isinstance(self.data_type, list): + if len(self.data_type) > 0: + return self.data_type[-1] + else: + return 'xs:string' + else: + return self.data_type + def set_container(self, container): self.container = container + def get_container(self): return self.container + +def _cast(typ, value): + if typ is None or value is None: + return value + return typ(value) + +# +# Data representation classes. +# + +class PlantType_single(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('name', 'xs:string', 0), + MemberSpec_('', 'xs:string', 0), + MemberSpec_('description', 'DescriptionType', 0), + ] + subclass = None + superclass = None + def __init__(self, name=None, anytypeobjs_=None, description=None): + self.name = name + self.anytypeobjs_ = anytypeobjs_ + self.description = description + def factory(*args_, **kwargs_): + if PlantType_single.subclass: + return PlantType_single.subclass(*args_, **kwargs_) + else: + return PlantType_single(*args_, **kwargs_) + factory = staticmethod(factory) + def get_name(self): return self.name + def set_name(self, name): self.name = name + def get_anytypeobjs_(self): return self.anytypeobjs_ + def set_anytypeobjs_(self, anytypeobjs_): self.anytypeobjs_ = anytypeobjs_ + def get_description(self): return self.description + def set_description(self, description): self.description = description + def export(self, outfile, level, namespace_='', name_='PlantType_single', namespacedef_='', pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = [] + self.exportAttributes(outfile, level, already_processed, namespace_, name_='PlantType_single') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + showIndent(outfile, level, pretty_print) + outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) + else: + outfile.write('/>%s' % (eol_, )) + def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='PlantType_single'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='PlantType_single', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.name is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sname>%s</%sname>%s' % (namespace_, self.gds_format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_, eol_)) + if self.description is not None: + self.description.export(outfile, level, namespace_, name_='description', pretty_print=pretty_print) + if self.anytypeobjs_ is not None: + self.anytypeobjs_.export(outfile, level, namespace_, pretty_print=pretty_print) + def hasContent_(self): + if ( + self.name is not None or + self.anytypeobjs_ is not None or + self.description is not None + ): + return True + else: + return False + def exportLiteral(self, outfile, level, name_='PlantType_single'): + level += 1 + self.exportLiteralAttributes(outfile, level, [], name_) + if self.hasContent_(): + self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, already_processed, name_): + pass + def exportLiteralChildren(self, outfile, level, name_): + if self.name is not None: + showIndent(outfile, level) + outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) + if self.anytypeobjs_ is not None: + showIndent(outfile, level) + outfile.write('anytypeobjs_=model_.anytypeobjs_(\n') + self.anytypeobjs_.exportLiteral(outfile, level) + showIndent(outfile, level) + outfile.write('),\n') + if self.description is not None: + showIndent(outfile, level) + outfile.write('description=model_.DescriptionType(\n') + self.description.exportLiteral(outfile, level, name_='description') + showIndent(outfile, level) + outfile.write('),\n') + def build(self, node): + self.buildAttributes(node, node.attrib, []) + for child in node: + nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] + self.buildChildren(child, node, nodeName_) + def buildAttributes(self, node, attrs, already_processed): + pass + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + if nodeName_ == 'name': + name_ = child_.text + name_ = self.gds_validate_string(name_, node, 'name') + self.name = name_ + elif nodeName_ == 'description': + obj_ = DescriptionType.factory() + obj_.build(child_) + self.set_description(obj_) + else: + obj_ = self.gds_build_any(child_, 'PlantType_single') + if obj_ is not None: + self.set_anytypeobjs_(obj_) +# end class PlantType_single + + +class PlantType_multiple(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('name', 'xs:string', 0), + MemberSpec_('', 'xs:string', 1), + MemberSpec_('description', 'DescriptionType', 0), + ] + subclass = None + superclass = None + def __init__(self, name=None, anytypeobjs_=None, description=None): + self.name = name + if anytypeobjs_ is None: + self.anytypeobjs_ = [] + else: + self.anytypeobjs_ = anytypeobjs_ + self.description = description + def factory(*args_, **kwargs_): + if PlantType_multiple.subclass: + return PlantType_multiple.subclass(*args_, **kwargs_) + else: + return PlantType_multiple(*args_, **kwargs_) + factory = staticmethod(factory) + def get_name(self): return self.name + def set_name(self, name): self.name = name + def get_anytypeobjs_(self): return self.anytypeobjs_ + def set_anytypeobjs_(self, anytypeobjs_): self.anytypeobjs_ = anytypeobjs_ + def add_anytypeobjs_(self, value): self.anytypeobjs_.append(value) + def insert_anytypeobjs_(self, index, value): self._anytypeobjs_[index] = value + def get_description(self): return self.description + def set_description(self, description): self.description = description + def export(self, outfile, level, namespace_='', name_='PlantType_multiple', namespacedef_='', pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = [] + self.exportAttributes(outfile, level, already_processed, namespace_, name_='PlantType_multiple') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + showIndent(outfile, level, pretty_print) + outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) + else: + outfile.write('/>%s' % (eol_, )) + def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='PlantType_multiple'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='PlantType_multiple', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.name is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sname>%s</%sname>%s' % (namespace_, self.gds_format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_, eol_)) + if self.description is not None: + self.description.export(outfile, level, namespace_, name_='description', pretty_print=pretty_print) + for obj_ in self.anytypeobjs_: + obj_.export(outfile, level, namespace_, pretty_print=pretty_print) + def hasContent_(self): + if ( + self.name is not None or + self.anytypeobjs_ or + self.description is not None + ): + return True + else: + return False + def exportLiteral(self, outfile, level, name_='PlantType_multiple'): + level += 1 + self.exportLiteralAttributes(outfile, level, [], name_) + if self.hasContent_(): + self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, already_processed, name_): + pass + def exportLiteralChildren(self, outfile, level, name_): + if self.name is not None: + showIndent(outfile, level) + outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) + showIndent(outfile, level) + outfile.write('anytypeobjs_=[\n') + level += 1 + for anytypeobjs_ in self.anytypeobjs_: + anytypeobjs_.exportLiteral(outfile, level) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + if self.description is not None: + showIndent(outfile, level) + outfile.write('description=model_.DescriptionType(\n') + self.description.exportLiteral(outfile, level, name_='description') + showIndent(outfile, level) + outfile.write('),\n') + def build(self, node): + self.buildAttributes(node, node.attrib, []) + for child in node: + nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] + self.buildChildren(child, node, nodeName_) + def buildAttributes(self, node, attrs, already_processed): + pass + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + if nodeName_ == 'name': + name_ = child_.text + name_ = self.gds_validate_string(name_, node, 'name') + self.name = name_ + elif nodeName_ == 'description': + obj_ = DescriptionType.factory() + obj_.build(child_) + self.set_description(obj_) + else: + obj_ = self.gds_build_any(child_, 'PlantType_multiple') + if obj_ is not None: + self.add_anytypeobjs_(obj_) +# end class PlantType_multiple + + +class DescriptionType(GeneratedsSuper): + """A standard complexType.""" + member_data_items_ = [ + MemberSpec_('name', 'xs:string', 0), + MemberSpec_('size', 'xs:string', 0), + ] + subclass = None + superclass = None + def __init__(self, name=None, size=None): + self.name = name + self.size = size + def factory(*args_, **kwargs_): + if DescriptionType.subclass: + return DescriptionType.subclass(*args_, **kwargs_) + else: + return DescriptionType(*args_, **kwargs_) + factory = staticmethod(factory) + def get_name(self): return self.name + def set_name(self, name): self.name = name + def get_size(self): return self.size + def set_size(self, size): self.size = size + def export(self, outfile, level, namespace_='', name_='DescriptionType', namespacedef_='', pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = [] + self.exportAttributes(outfile, level, already_processed, namespace_, name_='DescriptionType') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + showIndent(outfile, level, pretty_print) + outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) + else: + outfile.write('/>%s' % (eol_, )) + def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='DescriptionType'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='DescriptionType', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.name is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sname>%s</%sname>%s' % (namespace_, self.gds_format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_, eol_)) + if self.size is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%ssize>%s</%ssize>%s' % (namespace_, self.gds_format_string(quote_xml(self.size).encode(ExternalEncoding), input_name='size'), namespace_, eol_)) + def hasContent_(self): + if ( + self.name is not None or + self.size is not None + ): + return True + else: + return False + def exportLiteral(self, outfile, level, name_='DescriptionType'): + level += 1 + self.exportLiteralAttributes(outfile, level, [], name_) + if self.hasContent_(): + self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, already_processed, name_): + pass + def exportLiteralChildren(self, outfile, level, name_): + if self.name is not None: + showIndent(outfile, level) + outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) + if self.size is not None: + showIndent(outfile, level) + outfile.write('size=%s,\n' % quote_python(self.size).encode(ExternalEncoding)) + def build(self, node): + self.buildAttributes(node, node.attrib, []) + for child in node: + nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] + self.buildChildren(child, node, nodeName_) + def buildAttributes(self, node, attrs, already_processed): + pass + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + if nodeName_ == 'name': + name_ = child_.text + name_ = self.gds_validate_string(name_, node, 'name') + self.name = name_ + elif nodeName_ == 'size': + size_ = child_.text + size_ = self.gds_validate_string(size_, node, 'size') + self.size = size_ +# end class DescriptionType + + +class CatalogType(GeneratedsSuper): + """A standard complexType.""" + member_data_items_ = [ + MemberSpec_('name', 'xs:string', 0), + MemberSpec_('catagory', 'xs:integer', 0), + ] + subclass = None + superclass = None + def __init__(self, name=None, catagory=None): + self.name = name + self.catagory = catagory + def factory(*args_, **kwargs_): + if CatalogType.subclass: + return CatalogType.subclass(*args_, **kwargs_) + else: + return CatalogType(*args_, **kwargs_) + factory = staticmethod(factory) + def get_name(self): return self.name + def set_name(self, name): self.name = name + def get_catagory(self): return self.catagory + def set_catagory(self, catagory): self.catagory = catagory + def export(self, outfile, level, namespace_='', name_='CatalogType', namespacedef_='', pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = [] + self.exportAttributes(outfile, level, already_processed, namespace_, name_='CatalogType') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + showIndent(outfile, level, pretty_print) + outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) + else: + outfile.write('/>%s' % (eol_, )) + def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='CatalogType'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='CatalogType', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.name is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sname>%s</%sname>%s' % (namespace_, self.gds_format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_, eol_)) + if self.catagory is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%scatagory>%s</%scatagory>%s' % (namespace_, self.gds_format_integer(self.catagory, input_name='catagory'), namespace_, eol_)) + def hasContent_(self): + if ( + self.name is not None or + self.catagory is not None + ): + return True + else: + return False + def exportLiteral(self, outfile, level, name_='CatalogType'): + level += 1 + self.exportLiteralAttributes(outfile, level, [], name_) + if self.hasContent_(): + self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, already_processed, name_): + pass + def exportLiteralChildren(self, outfile, level, name_): + if self.name is not None: + showIndent(outfile, level) + outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) + if self.catagory is not None: + showIndent(outfile, level) + outfile.write('catagory=%d,\n' % self.catagory) + def build(self, node): + self.buildAttributes(node, node.attrib, []) + for child in node: + nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] + self.buildChildren(child, node, nodeName_) + def buildAttributes(self, node, attrs, already_processed): + pass + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + if nodeName_ == 'name': + name_ = child_.text + name_ = self.gds_validate_string(name_, node, 'name') + self.name = name_ + elif nodeName_ == 'catagory': + sval_ = child_.text + try: + ival_ = int(sval_) + except (TypeError, ValueError), exp: + raise_parse_error(child_, 'requires integer: %s' % exp) + ival_ = self.gds_validate_integer(ival_, node, 'catagory') + self.catagory = ival_ +# end class CatalogType + + +class PlantType_single_nochild(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('', 'xs:string', 0), + ] + subclass = None + superclass = None + def __init__(self, anytypeobjs_=None): + self.anytypeobjs_ = anytypeobjs_ + def factory(*args_, **kwargs_): + if PlantType_single_nochild.subclass: + return PlantType_single_nochild.subclass(*args_, **kwargs_) + else: + return PlantType_single_nochild(*args_, **kwargs_) + factory = staticmethod(factory) + def get_anytypeobjs_(self): return self.anytypeobjs_ + def set_anytypeobjs_(self, anytypeobjs_): self.anytypeobjs_ = anytypeobjs_ + def export(self, outfile, level, namespace_='', name_='PlantType_single_nochild', namespacedef_='', pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = [] + self.exportAttributes(outfile, level, already_processed, namespace_, name_='PlantType_single_nochild') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + showIndent(outfile, level, pretty_print) + outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) + else: + outfile.write('/>%s' % (eol_, )) + def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='PlantType_single_nochild'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='PlantType_single_nochild', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.anytypeobjs_ is not None: + self.anytypeobjs_.export(outfile, level, namespace_, pretty_print=pretty_print) + def hasContent_(self): + if ( + self.anytypeobjs_ is not None + ): + return True + else: + return False + def exportLiteral(self, outfile, level, name_='PlantType_single_nochild'): + level += 1 + self.exportLiteralAttributes(outfile, level, [], name_) + if self.hasContent_(): + self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, already_processed, name_): + pass + def exportLiteralChildren(self, outfile, level, name_): + if self.anytypeobjs_ is not None: + showIndent(outfile, level) + outfile.write('anytypeobjs_=model_.anytypeobjs_(\n') + self.anytypeobjs_.exportLiteral(outfile, level) + showIndent(outfile, level) + outfile.write('),\n') + def build(self, node): + self.buildAttributes(node, node.attrib, []) + for child in node: + nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] + self.buildChildren(child, node, nodeName_) + def buildAttributes(self, node, attrs, already_processed): + pass + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + obj_ = self.gds_build_any(child_, 'PlantType_single_nochild') + if obj_ is not None: + self.set_anytypeobjs_(obj_) +# end class PlantType_single_nochild + + +class PlantType_multiple_nochild(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('', 'xs:string', 1), + ] + subclass = None + superclass = None + def __init__(self, anytypeobjs_=None): + if anytypeobjs_ is None: + self.anytypeobjs_ = [] + else: + self.anytypeobjs_ = anytypeobjs_ + def factory(*args_, **kwargs_): + if PlantType_multiple_nochild.subclass: + return PlantType_multiple_nochild.subclass(*args_, **kwargs_) + else: + return PlantType_multiple_nochild(*args_, **kwargs_) + factory = staticmethod(factory) + def get_anytypeobjs_(self): return self.anytypeobjs_ + def set_anytypeobjs_(self, anytypeobjs_): self.anytypeobjs_ = anytypeobjs_ + def add_anytypeobjs_(self, value): self.anytypeobjs_.append(value) + def insert_anytypeobjs_(self, index, value): self._anytypeobjs_[index] = value + def export(self, outfile, level, namespace_='', name_='PlantType_multiple_nochild', namespacedef_='', pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = [] + self.exportAttributes(outfile, level, already_processed, namespace_, name_='PlantType_multiple_nochild') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + showIndent(outfile, level, pretty_print) + outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) + else: + outfile.write('/>%s' % (eol_, )) + def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='PlantType_multiple_nochild'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='PlantType_multiple_nochild', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + for obj_ in self.anytypeobjs_: + obj_.export(outfile, level, namespace_, pretty_print=pretty_print) + def hasContent_(self): + if ( + self.anytypeobjs_ + ): + return True + else: + return False + def exportLiteral(self, outfile, level, name_='PlantType_multiple_nochild'): + level += 1 + self.exportLiteralAttributes(outfile, level, [], name_) + if self.hasContent_(): + self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, already_processed, name_): + pass + def exportLiteralChildren(self, outfile, level, name_): + showIndent(outfile, level) + outfile.write('anytypeobjs_=[\n') + level += 1 + for anytypeobjs_ in self.anytypeobjs_: + anytypeobjs_.exportLiteral(outfile, level) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + def build(self, node): + self.buildAttributes(node, node.attrib, []) + for child in node: + nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] + self.buildChildren(child, node, nodeName_) + def buildAttributes(self, node, attrs, already_processed): + pass + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + obj_ = self.gds_build_any(child_, 'PlantType_multiple_nochild') + if obj_ is not None: + self.add_anytypeobjs_(obj_) +# end class PlantType_multiple_nochild + + +GDSClassesMapping = { + 'description': DescriptionType, +} + + +USAGE_TEXT = """ +Usage: python <Parser>.py [ -s ] <in_xml_file> +""" + +def usage(): + print USAGE_TEXT + sys.exit(1) + + +def get_root_tag(node): + tag = Tag_pattern_.match(node.tag).groups()[-1] + rootClass = GDSClassesMapping.get(tag) + if rootClass is None: + rootClass = globals().get(tag) + return tag, rootClass + + +def parse(inFileName): + doc = parsexml_(inFileName) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'PlantType_single' + rootClass = PlantType_single + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('<?xml version="1.0" ?>\n') +## rootObj.export(sys.stdout, 0, name_=rootTag, +## namespacedef_='', +## pretty_print=True) + return rootObj + + +def parseString(inString): + from StringIO import StringIO + doc = parsexml_(StringIO(inString)) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'PlantType_single' + rootClass = PlantType_single + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('<?xml version="1.0" ?>\n') +## rootObj.export(sys.stdout, 0, name_="PlantType_single", +## namespacedef_='') + return rootObj + + +def parseLiteral(inFileName): + doc = parsexml_(inFileName) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'PlantType_single' + rootClass = PlantType_single + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('#from anywildcard2_sup import *\n\n') +## sys.stdout.write('from datetime import datetime as datetime_\n\n') +## sys.stdout.write('import anywildcard2_sup as model_\n\n') +## sys.stdout.write('rootObj = model_.rootTag(\n') +## rootObj.exportLiteral(sys.stdout, 0, name_=rootTag) +## sys.stdout.write(')\n') + return rootObj + + +def main(): + args = sys.argv[1:] + if len(args) == 1: + parse(args[0]) + else: + usage() + + +if __name__ == '__main__': + #import pdb; pdb.set_trace() + main() + + +__all__ = [ + "CatalogType", + "DescriptionType", + "PlantType_multiple", + "PlantType_multiple_nochild", + "PlantType_single", + "PlantType_single_nochild" + ] diff --git a/tests/attr_groups.xsd b/tests/attr_groups.xsd new file mode 100644 index 0000000000000000000000000000000000000000..98a2afdb5ffb60f54fef645c2b38ad8879d53ad0 --- /dev/null +++ b/tests/attr_groups.xsd @@ -0,0 +1,33 @@ +<?xml version="1.0"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <xsd:element name="getUser" type="axlapi:GetUserReq"/> + + <xsd:complexType name="GetUserReq"> + <xsd:sequence> + <xsd:element name="returnedTags" type="axlapi:RUser" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="sequence" type="xsd:unsignedLong"/> + <xsd:attributeGroup ref="ValuesGroup01"/> + </xsd:complexType> + + <xsd:attributeGroup name="ValuesGroup01"> + <xsd:attribute name="value01" type="xsd:string"/> + <xsd:attribute name="value02" type="xsd:integer"/> + <xsd:attributeGroup ref="ValuesGroup02"/> + </xsd:attributeGroup> + + <xsd:attributeGroup name="ValuesGroup02"> + <xsd:attribute name="value03" type="xsd:string"/> + <xsd:attribute name="value04" type="xsd:integer"/> + <xsd:attributeGroup ref="ValuesGroup03"/> + </xsd:attributeGroup> + + <xsd:attributeGroup name="ValuesGroup03"> + <xsd:attribute name="value05" type="xsd:string"/> + <xsd:attribute name="value06" type="xsd:integer"/> + <xsd:attribute name="value07" type="xsd:integer"/> + </xsd:attributeGroup> + +</xsd:schema> + diff --git a/tests/attr_groups1_sub.py b/tests/attr_groups1_sub.py new file mode 100644 index 0000000000000000000000000000000000000000..4570b4786d1296cead5a9b267ac8349df2c44330 --- /dev/null +++ b/tests/attr_groups1_sub.py @@ -0,0 +1,168 @@ +#!/usr/bin/env python + +# +# Generated by generateDS.py. +# + +import sys + +import attr_groups2_sup as supermod + +etree_ = None +Verbose_import_ = False +( XMLParser_import_none, XMLParser_import_lxml, + XMLParser_import_elementtree + ) = range(3) +XMLParser_import_library = None +try: + # lxml + from lxml import etree as etree_ + XMLParser_import_library = XMLParser_import_lxml + if Verbose_import_: + print("running with lxml.etree") +except ImportError: + try: + # cElementTree from Python 2.5+ + import xml.etree.cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree on Python 2.5+") + except ImportError: + try: + # ElementTree from Python 2.5+ + import xml.etree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree on Python 2.5+") + except ImportError: + try: + # normal cElementTree install + import cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree") + except ImportError: + try: + # normal ElementTree install + import elementtree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree") + except ImportError: + raise ImportError( + "Failed to import ElementTree from any known place") + +def parsexml_(*args, **kwargs): + if (XMLParser_import_library == XMLParser_import_lxml and + 'parser' not in kwargs): + # Use the lxml ElementTree compatible parser so that, e.g., + # we ignore comments. + kwargs['parser'] = etree_.ETCompatXMLParser() + doc = etree_.parse(*args, **kwargs) + return doc + +# +# Globals +# + +ExternalEncoding = 'ascii' + +# +# Data representation classes +# + +class GetUserReqSub(supermod.GetUserReq): + def __init__(self, value04=None, value05=None, value06=None, value07=None, value01=None, value02=None, value03=None, sequence=None, returnedTags=None): + super(GetUserReqSub, self).__init__(value04, value05, value06, value07, value01, value02, value03, sequence, returnedTags, ) +supermod.GetUserReq.subclass = GetUserReqSub +# end class GetUserReqSub + + + +def get_root_tag(node): + tag = supermod.Tag_pattern_.match(node.tag).groups()[-1] + rootClass = None + rootClass = supermod.GDSClassesMapping.get(tag) + if rootClass is None and hasattr(supermod, tag): + rootClass = getattr(supermod, tag) + return tag, rootClass + + +def parse(inFilename): + doc = parsexml_(inFilename) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'getUser' + rootClass = supermod.GetUserReq + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('<?xml version="1.0" ?>\n') +## rootObj.export(sys.stdout, 0, name_=rootTag, +## namespacedef_='', +## pretty_print=True) + doc = None + return rootObj + + +def parseString(inString): + from StringIO import StringIO + doc = parsexml_(StringIO(inString)) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'getUser' + rootClass = supermod.GetUserReq + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('<?xml version="1.0" ?>\n') +## rootObj.export(sys.stdout, 0, name_=rootTag, +## namespacedef_='') + return rootObj + + +def parseLiteral(inFilename): + doc = parsexml_(inFilename) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'getUser' + rootClass = supermod.GetUserReq + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('#from attr_groups2_sup import *\n\n') +## sys.stdout.write('import attr_groups2_sup as model_\n\n') +## sys.stdout.write('rootObj = model_.getUser(\n') +## rootObj.exportLiteral(sys.stdout, 0, name_="getUser") +## sys.stdout.write(')\n') + return rootObj + + +USAGE_TEXT = """ +Usage: python ???.py <infilename> +""" + +def usage(): + print USAGE_TEXT + sys.exit(1) + + +def main(): + args = sys.argv[1:] + if len(args) != 1: + usage() + infilename = args[0] + root = parse(infilename) + + +if __name__ == '__main__': + #import pdb; pdb.set_trace() + main() + + diff --git a/tests/attr_groups1_sup.py b/tests/attr_groups1_sup.py new file mode 100644 index 0000000000000000000000000000000000000000..b1d75710a76ca7933cecbf196f86673689cbd90e --- /dev/null +++ b/tests/attr_groups1_sup.py @@ -0,0 +1,772 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# +# Generated by generateDS.py. +# + +import sys +import getopt +import re as re_ +import base64 +from datetime import datetime, tzinfo, timedelta + +etree_ = None +Verbose_import_ = False +( XMLParser_import_none, XMLParser_import_lxml, + XMLParser_import_elementtree + ) = range(3) +XMLParser_import_library = None +try: + # lxml + from lxml import etree as etree_ + XMLParser_import_library = XMLParser_import_lxml + if Verbose_import_: + print("running with lxml.etree") +except ImportError: + try: + # cElementTree from Python 2.5+ + import xml.etree.cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree on Python 2.5+") + except ImportError: + try: + # ElementTree from Python 2.5+ + import xml.etree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree on Python 2.5+") + except ImportError: + try: + # normal cElementTree install + import cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree") + except ImportError: + try: + # normal ElementTree install + import elementtree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree") + except ImportError: + raise ImportError( + "Failed to import ElementTree from any known place") + +def parsexml_(*args, **kwargs): + if (XMLParser_import_library == XMLParser_import_lxml and + 'parser' not in kwargs): + # Use the lxml ElementTree compatible parser so that, e.g., + # we ignore comments. + kwargs['parser'] = etree_.ETCompatXMLParser() + doc = etree_.parse(*args, **kwargs) + return doc + +# +# User methods +# +# Calls to the methods in these classes are generated by generateDS.py. +# You can replace these methods by re-implementing the following class +# in a module named generatedssuper.py. + +try: + from generatedssuper import GeneratedsSuper +except ImportError, exp: + + class GeneratedsSuper(object): + tzoff_pattern = re_.compile(r'(\+|-)((0\d|1[0-3]):[0-5]\d|14:00)$') + class _FixedOffsetTZ(tzinfo): + def __init__(self, offset, name): + self.__offset = timedelta(minutes = offset) + self.__name = name + def utcoffset(self, dt): + return self.__offset + def tzname(self, dt): + return self.__name + def dst(self, dt): + return None + def gds_format_string(self, input_data, input_name=''): + return input_data + def gds_validate_string(self, input_data, node, input_name=''): + return input_data + def gds_format_base64(self, input_data, input_name=''): + return base64.b64encode(input_data) + def gds_validate_base64(self, input_data, node, input_name=''): + return input_data + def gds_format_integer(self, input_data, input_name=''): + return '%d' % input_data + def gds_validate_integer(self, input_data, node, input_name=''): + return input_data + def gds_format_integer_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_integer_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + try: + fvalue = float(value) + except (TypeError, ValueError), exp: + raise_parse_error(node, 'Requires sequence of integers') + return input_data + def gds_format_float(self, input_data, input_name=''): + return '%f' % input_data + def gds_validate_float(self, input_data, node, input_name=''): + return input_data + def gds_format_float_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_float_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + try: + fvalue = float(value) + except (TypeError, ValueError), exp: + raise_parse_error(node, 'Requires sequence of floats') + return input_data + def gds_format_double(self, input_data, input_name=''): + return '%e' % input_data + def gds_validate_double(self, input_data, node, input_name=''): + return input_data + def gds_format_double_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_double_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + try: + fvalue = float(value) + except (TypeError, ValueError), exp: + raise_parse_error(node, 'Requires sequence of doubles') + return input_data + def gds_format_boolean(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_boolean(self, input_data, node, input_name=''): + return input_data + def gds_format_boolean_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_boolean_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + if value not in ('true', '1', 'false', '0', ): + raise_parse_error(node, + 'Requires sequence of booleans ' + '("true", "1", "false", "0")') + return input_data + def gds_validate_datetime(self, input_data, node, input_name=''): + return input_data + def gds_format_datetime(self, input_data, input_name=''): + _svalue = input_data.strftime('%Y-%m-%dT%H:%M:%S') + if input_data.tzinfo is not None: + tzoff = input_data.tzinfo.utcoffset(input_data) + if tzoff is not None: + total_seconds = tzoff.seconds + (86400 * tzoff.days) + if total_seconds == 0: + _svalue += 'Z' + else: + if total_seconds < 0: + _svalue += '-' + total_seconds *= -1 + else: + _svalue += '+' + hours = total_seconds // 3600 + minutes = (total_seconds - (hours * 3600)) // 60 + _svalue += '{0:02d}:{1:02d}'.format(hours, minutes) + return _svalue + def gds_parse_datetime(self, input_data, node, input_name=''): + tz = None + if input_data[-1] == 'Z': + tz = GeneratedsSuper._FixedOffsetTZ(0, 'GMT') + input_data = input_data[:-1] + else: + results = GeneratedsSuper.tzoff_pattern.search(input_data) + if results is not None: + tzoff_parts = results.group(2).split(':') + tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1]) + if results.group(1) == '-': + tzoff *= -1 + tz = GeneratedsSuper._FixedOffsetTZ( + tzoff, results.group(0)) + input_data = input_data[:-6] + return datetime.strptime(input_data, + '%Y-%m-%dT%H:%M:%S').replace(tzinfo = tz) + def gds_validate_date(self, input_data, node, input_name=''): + return input_data + def gds_format_date(self, input_data, input_name=''): + _svalue = input_data.strftime('%Y-%m-%d') + if input_data.tzinfo is not None: + tzoff = input_data.tzinfo.utcoffset(input_data) + if tzoff is not None: + total_seconds = tzoff.seconds + (86400 * tzoff.days) + if total_seconds == 0: + _svalue += 'Z' + else: + if total_seconds < 0: + _svalue += '-' + total_seconds *= -1 + else: + _svalue += '+' + hours = total_seconds // 3600 + minutes = (total_seconds - (hours * 3600)) // 60 + _svalue += '{0:02d}:{1:02d}'.format(hours, minutes) + return _svalue + def gds_parse_date(self, input_data, node, input_name=''): + tz = None + if input_data[-1] == 'Z': + tz = GeneratedsSuper._FixedOffsetTZ(0, 'GMT') + input_data = input_data[:-1] + else: + results = GeneratedsSuper.tzoff_pattern.search(input_data) + if results is not None: + tzoff_parts = results.group(2).split(':') + tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1]) + if results.group(1) == '-': + tzoff *= -1 + tz = GeneratedsSuper._FixedOffsetTZ( + tzoff, results.group(0)) + input_data = input_data[:-6] + return datetime.strptime(input_data, + '%Y-%m-%d').replace(tzinfo = tz) + def gds_str_lower(self, instring): + return instring.lower() + def get_path_(self, node): + path_list = [] + self.get_path_list_(node, path_list) + path_list.reverse() + path = '/'.join(path_list) + return path + Tag_strip_pattern_ = re_.compile(r'\{.*\}') + def get_path_list_(self, node, path_list): + if node is None: + return + tag = GeneratedsSuper.Tag_strip_pattern_.sub('', node.tag) + if tag: + path_list.append(tag) + self.get_path_list_(node.getparent(), path_list) + def get_class_obj_(self, node, default_class=None): + class_obj1 = default_class + if 'xsi' in node.nsmap: + classname = node.get('{%s}type' % node.nsmap['xsi']) + if classname is not None: + names = classname.split(':') + if len(names) == 2: + classname = names[1] + class_obj2 = globals().get(classname) + if class_obj2 is not None: + class_obj1 = class_obj2 + return class_obj1 + def gds_build_any(self, node, type_name=None): + return None + + +# +# If you have installed IPython you can uncomment and use the following. +# IPython is available from http://ipython.scipy.org/. +# + +## from IPython.Shell import IPShellEmbed +## args = '' +## ipshell = IPShellEmbed(args, +## banner = 'Dropping into IPython', +## exit_msg = 'Leaving Interpreter, back to program.') + +# Then use the following line where and when you want to drop into the +# IPython shell: +# ipshell('<some message> -- Entering ipshell.\nHit Ctrl-D to exit') + +# +# Globals +# + +ExternalEncoding = 'ascii' +Tag_pattern_ = re_.compile(r'({.*})?(.*)') +String_cleanup_pat_ = re_.compile(r"[\n\r\s]+") +Namespace_extract_pat_ = re_.compile(r'{(.*)}(.*)') + +# +# Support/utility functions. +# + +def showIndent(outfile, level, pretty_print=True): + if pretty_print: + for idx in range(level): + outfile.write(' ') + +def quote_xml(inStr): + if not inStr: + return '' + s1 = (isinstance(inStr, basestring) and inStr or + '%s' % inStr) + s1 = s1.replace('&', '&') + s1 = s1.replace('<', '<') + s1 = s1.replace('>', '>') + return s1 + +def quote_attrib(inStr): + s1 = (isinstance(inStr, basestring) and inStr or + '%s' % inStr) + s1 = s1.replace('&', '&') + s1 = s1.replace('<', '<') + s1 = s1.replace('>', '>') + if '"' in s1: + if "'" in s1: + s1 = '"%s"' % s1.replace('"', """) + else: + s1 = "'%s'" % s1 + else: + s1 = '"%s"' % s1 + return s1 + +def quote_python(inStr): + s1 = inStr + if s1.find("'") == -1: + if s1.find('\n') == -1: + return "'%s'" % s1 + else: + return "'''%s'''" % s1 + else: + if s1.find('"') != -1: + s1 = s1.replace('"', '\\"') + if s1.find('\n') == -1: + return '"%s"' % s1 + else: + return '"""%s"""' % s1 + +def get_all_text_(node): + if node.text is not None: + text = node.text + else: + text = '' + for child in node: + if child.tail is not None: + text += child.tail + return text + +def find_attr_value_(attr_name, node): + attrs = node.attrib + attr_parts = attr_name.split(':') + value = None + if len(attr_parts) == 1: + value = attrs.get(attr_name) + elif len(attr_parts) == 2: + prefix, name = attr_parts + namespace = node.nsmap.get(prefix) + if namespace is not None: + value = attrs.get('{%s}%s' % (namespace, name, )) + return value + + +class GDSParseError(Exception): + pass + +def raise_parse_error(node, msg): + if XMLParser_import_library == XMLParser_import_lxml: + msg = '%s (element %s/line %d)' % ( + msg, node.tag, node.sourceline, ) + else: + msg = '%s (element %s)' % (msg, node.tag, ) + raise GDSParseError(msg) + + +class MixedContainer: + # Constants for category: + CategoryNone = 0 + CategoryText = 1 + CategorySimple = 2 + CategoryComplex = 3 + # Constants for content_type: + TypeNone = 0 + TypeText = 1 + TypeString = 2 + TypeInteger = 3 + TypeFloat = 4 + TypeDecimal = 5 + TypeDouble = 6 + TypeBoolean = 7 + TypeBase64 = 8 + def __init__(self, category, content_type, name, value): + self.category = category + self.content_type = content_type + self.name = name + self.value = value + def getCategory(self): + return self.category + def getContenttype(self, content_type): + return self.content_type + def getValue(self): + return self.value + def getName(self): + return self.name + def export(self, outfile, level, name, namespace, pretty_print=True): + if self.category == MixedContainer.CategoryText: + # Prevent exporting empty content as empty lines. + if self.value.strip(): + outfile.write(self.value) + elif self.category == MixedContainer.CategorySimple: + self.exportSimple(outfile, level, name) + else: # category == MixedContainer.CategoryComplex + self.value.export(outfile, level, namespace, name, pretty_print) + def exportSimple(self, outfile, level, name): + if self.content_type == MixedContainer.TypeString: + outfile.write('<%s>%s</%s>' % + (self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeInteger or \ + self.content_type == MixedContainer.TypeBoolean: + outfile.write('<%s>%d</%s>' % + (self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeFloat or \ + self.content_type == MixedContainer.TypeDecimal: + outfile.write('<%s>%f</%s>' % + (self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeDouble: + outfile.write('<%s>%g</%s>' % + (self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeBase64: + outfile.write('<%s>%s</%s>' % + (self.name, base64.b64encode(self.value), self.name)) + def exportLiteral(self, outfile, level, name): + if self.category == MixedContainer.CategoryText: + showIndent(outfile, level) + outfile.write('model_.MixedContainer(%d, %d, "%s", "%s"),\n' + % (self.category, self.content_type, self.name, self.value)) + elif self.category == MixedContainer.CategorySimple: + showIndent(outfile, level) + outfile.write('model_.MixedContainer(%d, %d, "%s", "%s"),\n' + % (self.category, self.content_type, self.name, self.value)) + else: # category == MixedContainer.CategoryComplex + showIndent(outfile, level) + outfile.write('model_.MixedContainer(%d, %d, "%s",\n' % \ + (self.category, self.content_type, self.name,)) + self.value.exportLiteral(outfile, level + 1) + showIndent(outfile, level) + outfile.write(')\n') + + +class MemberSpec_(object): + def __init__(self, name='', data_type='', container=0): + self.name = name + self.data_type = data_type + self.container = container + def set_name(self, name): self.name = name + def get_name(self): return self.name + def set_data_type(self, data_type): self.data_type = data_type + def get_data_type_chain(self): return self.data_type + def get_data_type(self): + if isinstance(self.data_type, list): + if len(self.data_type) > 0: + return self.data_type[-1] + else: + return 'xs:string' + else: + return self.data_type + def set_container(self, container): self.container = container + def get_container(self): return self.container + +def _cast(typ, value): + if typ is None or value is None: + return value + return typ(value) + +# +# Data representation classes. +# + +class GetUserReq(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('value04', 'xsd:integer', 0), + MemberSpec_('value05', 'xsd:string', 0), + MemberSpec_('value06', 'xsd:integer', 0), + MemberSpec_('value07', 'xsd:integer', 0), + MemberSpec_('value01', 'xsd:string', 0), + MemberSpec_('value02', 'xsd:integer', 0), + MemberSpec_('value03', 'xsd:string', 0), + MemberSpec_('sequence', 'xsd:unsignedLong', 0), + MemberSpec_('returnedTags', 'xsd:string', 0), + ] + subclass = None + superclass = None + def __init__(self, value04=None, value05=None, value06=None, value07=None, value01=None, value02=None, value03=None, sequence=None, returnedTags=None): + self.value04 = _cast(int, value04) + self.value05 = _cast(None, value05) + self.value06 = _cast(int, value06) + self.value07 = _cast(int, value07) + self.value01 = _cast(None, value01) + self.value02 = _cast(int, value02) + self.value03 = _cast(None, value03) + self.sequence = _cast(int, sequence) + self.returnedTags = returnedTags + def factory(*args_, **kwargs_): + if GetUserReq.subclass: + return GetUserReq.subclass(*args_, **kwargs_) + else: + return GetUserReq(*args_, **kwargs_) + factory = staticmethod(factory) + def get_returnedTags(self): return self.returnedTags + def set_returnedTags(self, returnedTags): self.returnedTags = returnedTags + def get_value04(self): return self.value04 + def set_value04(self, value04): self.value04 = value04 + def get_value05(self): return self.value05 + def set_value05(self, value05): self.value05 = value05 + def get_value06(self): return self.value06 + def set_value06(self, value06): self.value06 = value06 + def get_value07(self): return self.value07 + def set_value07(self, value07): self.value07 = value07 + def get_value01(self): return self.value01 + def set_value01(self, value01): self.value01 = value01 + def get_value02(self): return self.value02 + def set_value02(self, value02): self.value02 = value02 + def get_value03(self): return self.value03 + def set_value03(self, value03): self.value03 = value03 + def get_sequence(self): return self.sequence + def set_sequence(self, sequence): self.sequence = sequence + def export(self, outfile, level, namespace_='', name_='GetUserReq', namespacedef_='', pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = [] + self.exportAttributes(outfile, level, already_processed, namespace_, name_='GetUserReq') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + showIndent(outfile, level, pretty_print) + outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) + else: + outfile.write('/>%s' % (eol_, )) + def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='GetUserReq'): + if self.value04 is not None and 'value04' not in already_processed: + already_processed.append('value04') + outfile.write(' value04="%s"' % self.gds_format_integer(self.value04, input_name='value04')) + if self.value05 is not None and 'value05' not in already_processed: + already_processed.append('value05') + outfile.write(' value05=%s' % (self.gds_format_string(quote_attrib(self.value05).encode(ExternalEncoding), input_name='value05'), )) + if self.value06 is not None and 'value06' not in already_processed: + already_processed.append('value06') + outfile.write(' value06="%s"' % self.gds_format_integer(self.value06, input_name='value06')) + if self.value07 is not None and 'value07' not in already_processed: + already_processed.append('value07') + outfile.write(' value07="%s"' % self.gds_format_integer(self.value07, input_name='value07')) + if self.value01 is not None and 'value01' not in already_processed: + already_processed.append('value01') + outfile.write(' value01=%s' % (self.gds_format_string(quote_attrib(self.value01).encode(ExternalEncoding), input_name='value01'), )) + if self.value02 is not None and 'value02' not in already_processed: + already_processed.append('value02') + outfile.write(' value02="%s"' % self.gds_format_integer(self.value02, input_name='value02')) + if self.value03 is not None and 'value03' not in already_processed: + already_processed.append('value03') + outfile.write(' value03=%s' % (self.gds_format_string(quote_attrib(self.value03).encode(ExternalEncoding), input_name='value03'), )) + if self.sequence is not None and 'sequence' not in already_processed: + already_processed.append('sequence') + outfile.write(' sequence="%s"' % self.gds_format_integer(self.sequence, input_name='sequence')) + def exportChildren(self, outfile, level, namespace_='', name_='GetUserReq', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.returnedTags is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sreturnedTags>%s</%sreturnedTags>%s' % (namespace_, self.gds_format_string(quote_xml(self.returnedTags).encode(ExternalEncoding), input_name='returnedTags'), namespace_, eol_)) + def hasContent_(self): + if ( + self.returnedTags is not None + ): + return True + else: + return False + def exportLiteral(self, outfile, level, name_='GetUserReq'): + level += 1 + self.exportLiteralAttributes(outfile, level, [], name_) + if self.hasContent_(): + self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, already_processed, name_): + if self.value04 is not None and 'value04' not in already_processed: + already_processed.append('value04') + showIndent(outfile, level) + outfile.write('value04 = %d,\n' % (self.value04,)) + if self.value05 is not None and 'value05' not in already_processed: + already_processed.append('value05') + showIndent(outfile, level) + outfile.write('value05 = "%s",\n' % (self.value05,)) + if self.value06 is not None and 'value06' not in already_processed: + already_processed.append('value06') + showIndent(outfile, level) + outfile.write('value06 = %d,\n' % (self.value06,)) + if self.value07 is not None and 'value07' not in already_processed: + already_processed.append('value07') + showIndent(outfile, level) + outfile.write('value07 = %d,\n' % (self.value07,)) + if self.value01 is not None and 'value01' not in already_processed: + already_processed.append('value01') + showIndent(outfile, level) + outfile.write('value01 = "%s",\n' % (self.value01,)) + if self.value02 is not None and 'value02' not in already_processed: + already_processed.append('value02') + showIndent(outfile, level) + outfile.write('value02 = %d,\n' % (self.value02,)) + if self.value03 is not None and 'value03' not in already_processed: + already_processed.append('value03') + showIndent(outfile, level) + outfile.write('value03 = "%s",\n' % (self.value03,)) + if self.sequence is not None and 'sequence' not in already_processed: + already_processed.append('sequence') + showIndent(outfile, level) + outfile.write('sequence = %d,\n' % (self.sequence,)) + def exportLiteralChildren(self, outfile, level, name_): + if self.returnedTags is not None: + showIndent(outfile, level) + outfile.write('returnedTags=%s,\n' % quote_python(self.returnedTags).encode(ExternalEncoding)) + def build(self, node): + self.buildAttributes(node, node.attrib, []) + for child in node: + nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] + self.buildChildren(child, node, nodeName_) + def buildAttributes(self, node, attrs, already_processed): + value = find_attr_value_('value04', node) + if value is not None and 'value04' not in already_processed: + already_processed.append('value04') + try: + self.value04 = int(value) + except ValueError, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + value = find_attr_value_('value05', node) + if value is not None and 'value05' not in already_processed: + already_processed.append('value05') + self.value05 = value + value = find_attr_value_('value06', node) + if value is not None and 'value06' not in already_processed: + already_processed.append('value06') + try: + self.value06 = int(value) + except ValueError, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + value = find_attr_value_('value07', node) + if value is not None and 'value07' not in already_processed: + already_processed.append('value07') + try: + self.value07 = int(value) + except ValueError, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + value = find_attr_value_('value01', node) + if value is not None and 'value01' not in already_processed: + already_processed.append('value01') + self.value01 = value + value = find_attr_value_('value02', node) + if value is not None and 'value02' not in already_processed: + already_processed.append('value02') + try: + self.value02 = int(value) + except ValueError, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + value = find_attr_value_('value03', node) + if value is not None and 'value03' not in already_processed: + already_processed.append('value03') + self.value03 = value + value = find_attr_value_('sequence', node) + if value is not None and 'sequence' not in already_processed: + already_processed.append('sequence') + try: + self.sequence = int(value) + except ValueError, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + if nodeName_ == 'returnedTags': + returnedTags_ = child_.text + returnedTags_ = self.gds_validate_string(returnedTags_, node, 'returnedTags') + self.returnedTags = returnedTags_ +# end class GetUserReq + + +GDSClassesMapping = { + 'getUser': GetUserReq, +} + + +USAGE_TEXT = """ +Usage: python <Parser>.py [ -s ] <in_xml_file> +""" + +def usage(): + print USAGE_TEXT + sys.exit(1) + + +def get_root_tag(node): + tag = Tag_pattern_.match(node.tag).groups()[-1] + rootClass = GDSClassesMapping.get(tag) + if rootClass is None: + rootClass = globals().get(tag) + return tag, rootClass + + +def parse(inFileName): + doc = parsexml_(inFileName) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'getUser' + rootClass = GetUserReq + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('<?xml version="1.0" ?>\n') +## rootObj.export(sys.stdout, 0, name_=rootTag, +## namespacedef_='', +## pretty_print=True) + return rootObj + + +def parseString(inString): + from StringIO import StringIO + doc = parsexml_(StringIO(inString)) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'getUser' + rootClass = GetUserReq + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('<?xml version="1.0" ?>\n') +## rootObj.export(sys.stdout, 0, name_="getUser", +## namespacedef_='') + return rootObj + + +def parseLiteral(inFileName): + doc = parsexml_(inFileName) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'getUser' + rootClass = GetUserReq + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('#from attr_groups2_sup import *\n\n') +## sys.stdout.write('from datetime import datetime as datetime_\n\n') +## sys.stdout.write('import attr_groups2_sup as model_\n\n') +## sys.stdout.write('rootObj = model_.rootTag(\n') +## rootObj.exportLiteral(sys.stdout, 0, name_=rootTag) +## sys.stdout.write(')\n') + return rootObj + + +def main(): + args = sys.argv[1:] + if len(args) == 1: + parse(args[0]) + else: + usage() + + +if __name__ == '__main__': + #import pdb; pdb.set_trace() + main() + + +__all__ = [ + "GetUserReq" + ] diff --git a/tests/attr_groups2_sub.py b/tests/attr_groups2_sub.py new file mode 100644 index 0000000000000000000000000000000000000000..4570b4786d1296cead5a9b267ac8349df2c44330 --- /dev/null +++ b/tests/attr_groups2_sub.py @@ -0,0 +1,168 @@ +#!/usr/bin/env python + +# +# Generated by generateDS.py. +# + +import sys + +import attr_groups2_sup as supermod + +etree_ = None +Verbose_import_ = False +( XMLParser_import_none, XMLParser_import_lxml, + XMLParser_import_elementtree + ) = range(3) +XMLParser_import_library = None +try: + # lxml + from lxml import etree as etree_ + XMLParser_import_library = XMLParser_import_lxml + if Verbose_import_: + print("running with lxml.etree") +except ImportError: + try: + # cElementTree from Python 2.5+ + import xml.etree.cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree on Python 2.5+") + except ImportError: + try: + # ElementTree from Python 2.5+ + import xml.etree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree on Python 2.5+") + except ImportError: + try: + # normal cElementTree install + import cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree") + except ImportError: + try: + # normal ElementTree install + import elementtree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree") + except ImportError: + raise ImportError( + "Failed to import ElementTree from any known place") + +def parsexml_(*args, **kwargs): + if (XMLParser_import_library == XMLParser_import_lxml and + 'parser' not in kwargs): + # Use the lxml ElementTree compatible parser so that, e.g., + # we ignore comments. + kwargs['parser'] = etree_.ETCompatXMLParser() + doc = etree_.parse(*args, **kwargs) + return doc + +# +# Globals +# + +ExternalEncoding = 'ascii' + +# +# Data representation classes +# + +class GetUserReqSub(supermod.GetUserReq): + def __init__(self, value04=None, value05=None, value06=None, value07=None, value01=None, value02=None, value03=None, sequence=None, returnedTags=None): + super(GetUserReqSub, self).__init__(value04, value05, value06, value07, value01, value02, value03, sequence, returnedTags, ) +supermod.GetUserReq.subclass = GetUserReqSub +# end class GetUserReqSub + + + +def get_root_tag(node): + tag = supermod.Tag_pattern_.match(node.tag).groups()[-1] + rootClass = None + rootClass = supermod.GDSClassesMapping.get(tag) + if rootClass is None and hasattr(supermod, tag): + rootClass = getattr(supermod, tag) + return tag, rootClass + + +def parse(inFilename): + doc = parsexml_(inFilename) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'getUser' + rootClass = supermod.GetUserReq + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('<?xml version="1.0" ?>\n') +## rootObj.export(sys.stdout, 0, name_=rootTag, +## namespacedef_='', +## pretty_print=True) + doc = None + return rootObj + + +def parseString(inString): + from StringIO import StringIO + doc = parsexml_(StringIO(inString)) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'getUser' + rootClass = supermod.GetUserReq + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('<?xml version="1.0" ?>\n') +## rootObj.export(sys.stdout, 0, name_=rootTag, +## namespacedef_='') + return rootObj + + +def parseLiteral(inFilename): + doc = parsexml_(inFilename) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'getUser' + rootClass = supermod.GetUserReq + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('#from attr_groups2_sup import *\n\n') +## sys.stdout.write('import attr_groups2_sup as model_\n\n') +## sys.stdout.write('rootObj = model_.getUser(\n') +## rootObj.exportLiteral(sys.stdout, 0, name_="getUser") +## sys.stdout.write(')\n') + return rootObj + + +USAGE_TEXT = """ +Usage: python ???.py <infilename> +""" + +def usage(): + print USAGE_TEXT + sys.exit(1) + + +def main(): + args = sys.argv[1:] + if len(args) != 1: + usage() + infilename = args[0] + root = parse(infilename) + + +if __name__ == '__main__': + #import pdb; pdb.set_trace() + main() + + diff --git a/tests/attr_groups2_sup.py b/tests/attr_groups2_sup.py new file mode 100644 index 0000000000000000000000000000000000000000..b1d75710a76ca7933cecbf196f86673689cbd90e --- /dev/null +++ b/tests/attr_groups2_sup.py @@ -0,0 +1,772 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# +# Generated by generateDS.py. +# + +import sys +import getopt +import re as re_ +import base64 +from datetime import datetime, tzinfo, timedelta + +etree_ = None +Verbose_import_ = False +( XMLParser_import_none, XMLParser_import_lxml, + XMLParser_import_elementtree + ) = range(3) +XMLParser_import_library = None +try: + # lxml + from lxml import etree as etree_ + XMLParser_import_library = XMLParser_import_lxml + if Verbose_import_: + print("running with lxml.etree") +except ImportError: + try: + # cElementTree from Python 2.5+ + import xml.etree.cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree on Python 2.5+") + except ImportError: + try: + # ElementTree from Python 2.5+ + import xml.etree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree on Python 2.5+") + except ImportError: + try: + # normal cElementTree install + import cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree") + except ImportError: + try: + # normal ElementTree install + import elementtree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree") + except ImportError: + raise ImportError( + "Failed to import ElementTree from any known place") + +def parsexml_(*args, **kwargs): + if (XMLParser_import_library == XMLParser_import_lxml and + 'parser' not in kwargs): + # Use the lxml ElementTree compatible parser so that, e.g., + # we ignore comments. + kwargs['parser'] = etree_.ETCompatXMLParser() + doc = etree_.parse(*args, **kwargs) + return doc + +# +# User methods +# +# Calls to the methods in these classes are generated by generateDS.py. +# You can replace these methods by re-implementing the following class +# in a module named generatedssuper.py. + +try: + from generatedssuper import GeneratedsSuper +except ImportError, exp: + + class GeneratedsSuper(object): + tzoff_pattern = re_.compile(r'(\+|-)((0\d|1[0-3]):[0-5]\d|14:00)$') + class _FixedOffsetTZ(tzinfo): + def __init__(self, offset, name): + self.__offset = timedelta(minutes = offset) + self.__name = name + def utcoffset(self, dt): + return self.__offset + def tzname(self, dt): + return self.__name + def dst(self, dt): + return None + def gds_format_string(self, input_data, input_name=''): + return input_data + def gds_validate_string(self, input_data, node, input_name=''): + return input_data + def gds_format_base64(self, input_data, input_name=''): + return base64.b64encode(input_data) + def gds_validate_base64(self, input_data, node, input_name=''): + return input_data + def gds_format_integer(self, input_data, input_name=''): + return '%d' % input_data + def gds_validate_integer(self, input_data, node, input_name=''): + return input_data + def gds_format_integer_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_integer_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + try: + fvalue = float(value) + except (TypeError, ValueError), exp: + raise_parse_error(node, 'Requires sequence of integers') + return input_data + def gds_format_float(self, input_data, input_name=''): + return '%f' % input_data + def gds_validate_float(self, input_data, node, input_name=''): + return input_data + def gds_format_float_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_float_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + try: + fvalue = float(value) + except (TypeError, ValueError), exp: + raise_parse_error(node, 'Requires sequence of floats') + return input_data + def gds_format_double(self, input_data, input_name=''): + return '%e' % input_data + def gds_validate_double(self, input_data, node, input_name=''): + return input_data + def gds_format_double_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_double_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + try: + fvalue = float(value) + except (TypeError, ValueError), exp: + raise_parse_error(node, 'Requires sequence of doubles') + return input_data + def gds_format_boolean(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_boolean(self, input_data, node, input_name=''): + return input_data + def gds_format_boolean_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_boolean_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + if value not in ('true', '1', 'false', '0', ): + raise_parse_error(node, + 'Requires sequence of booleans ' + '("true", "1", "false", "0")') + return input_data + def gds_validate_datetime(self, input_data, node, input_name=''): + return input_data + def gds_format_datetime(self, input_data, input_name=''): + _svalue = input_data.strftime('%Y-%m-%dT%H:%M:%S') + if input_data.tzinfo is not None: + tzoff = input_data.tzinfo.utcoffset(input_data) + if tzoff is not None: + total_seconds = tzoff.seconds + (86400 * tzoff.days) + if total_seconds == 0: + _svalue += 'Z' + else: + if total_seconds < 0: + _svalue += '-' + total_seconds *= -1 + else: + _svalue += '+' + hours = total_seconds // 3600 + minutes = (total_seconds - (hours * 3600)) // 60 + _svalue += '{0:02d}:{1:02d}'.format(hours, minutes) + return _svalue + def gds_parse_datetime(self, input_data, node, input_name=''): + tz = None + if input_data[-1] == 'Z': + tz = GeneratedsSuper._FixedOffsetTZ(0, 'GMT') + input_data = input_data[:-1] + else: + results = GeneratedsSuper.tzoff_pattern.search(input_data) + if results is not None: + tzoff_parts = results.group(2).split(':') + tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1]) + if results.group(1) == '-': + tzoff *= -1 + tz = GeneratedsSuper._FixedOffsetTZ( + tzoff, results.group(0)) + input_data = input_data[:-6] + return datetime.strptime(input_data, + '%Y-%m-%dT%H:%M:%S').replace(tzinfo = tz) + def gds_validate_date(self, input_data, node, input_name=''): + return input_data + def gds_format_date(self, input_data, input_name=''): + _svalue = input_data.strftime('%Y-%m-%d') + if input_data.tzinfo is not None: + tzoff = input_data.tzinfo.utcoffset(input_data) + if tzoff is not None: + total_seconds = tzoff.seconds + (86400 * tzoff.days) + if total_seconds == 0: + _svalue += 'Z' + else: + if total_seconds < 0: + _svalue += '-' + total_seconds *= -1 + else: + _svalue += '+' + hours = total_seconds // 3600 + minutes = (total_seconds - (hours * 3600)) // 60 + _svalue += '{0:02d}:{1:02d}'.format(hours, minutes) + return _svalue + def gds_parse_date(self, input_data, node, input_name=''): + tz = None + if input_data[-1] == 'Z': + tz = GeneratedsSuper._FixedOffsetTZ(0, 'GMT') + input_data = input_data[:-1] + else: + results = GeneratedsSuper.tzoff_pattern.search(input_data) + if results is not None: + tzoff_parts = results.group(2).split(':') + tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1]) + if results.group(1) == '-': + tzoff *= -1 + tz = GeneratedsSuper._FixedOffsetTZ( + tzoff, results.group(0)) + input_data = input_data[:-6] + return datetime.strptime(input_data, + '%Y-%m-%d').replace(tzinfo = tz) + def gds_str_lower(self, instring): + return instring.lower() + def get_path_(self, node): + path_list = [] + self.get_path_list_(node, path_list) + path_list.reverse() + path = '/'.join(path_list) + return path + Tag_strip_pattern_ = re_.compile(r'\{.*\}') + def get_path_list_(self, node, path_list): + if node is None: + return + tag = GeneratedsSuper.Tag_strip_pattern_.sub('', node.tag) + if tag: + path_list.append(tag) + self.get_path_list_(node.getparent(), path_list) + def get_class_obj_(self, node, default_class=None): + class_obj1 = default_class + if 'xsi' in node.nsmap: + classname = node.get('{%s}type' % node.nsmap['xsi']) + if classname is not None: + names = classname.split(':') + if len(names) == 2: + classname = names[1] + class_obj2 = globals().get(classname) + if class_obj2 is not None: + class_obj1 = class_obj2 + return class_obj1 + def gds_build_any(self, node, type_name=None): + return None + + +# +# If you have installed IPython you can uncomment and use the following. +# IPython is available from http://ipython.scipy.org/. +# + +## from IPython.Shell import IPShellEmbed +## args = '' +## ipshell = IPShellEmbed(args, +## banner = 'Dropping into IPython', +## exit_msg = 'Leaving Interpreter, back to program.') + +# Then use the following line where and when you want to drop into the +# IPython shell: +# ipshell('<some message> -- Entering ipshell.\nHit Ctrl-D to exit') + +# +# Globals +# + +ExternalEncoding = 'ascii' +Tag_pattern_ = re_.compile(r'({.*})?(.*)') +String_cleanup_pat_ = re_.compile(r"[\n\r\s]+") +Namespace_extract_pat_ = re_.compile(r'{(.*)}(.*)') + +# +# Support/utility functions. +# + +def showIndent(outfile, level, pretty_print=True): + if pretty_print: + for idx in range(level): + outfile.write(' ') + +def quote_xml(inStr): + if not inStr: + return '' + s1 = (isinstance(inStr, basestring) and inStr or + '%s' % inStr) + s1 = s1.replace('&', '&') + s1 = s1.replace('<', '<') + s1 = s1.replace('>', '>') + return s1 + +def quote_attrib(inStr): + s1 = (isinstance(inStr, basestring) and inStr or + '%s' % inStr) + s1 = s1.replace('&', '&') + s1 = s1.replace('<', '<') + s1 = s1.replace('>', '>') + if '"' in s1: + if "'" in s1: + s1 = '"%s"' % s1.replace('"', """) + else: + s1 = "'%s'" % s1 + else: + s1 = '"%s"' % s1 + return s1 + +def quote_python(inStr): + s1 = inStr + if s1.find("'") == -1: + if s1.find('\n') == -1: + return "'%s'" % s1 + else: + return "'''%s'''" % s1 + else: + if s1.find('"') != -1: + s1 = s1.replace('"', '\\"') + if s1.find('\n') == -1: + return '"%s"' % s1 + else: + return '"""%s"""' % s1 + +def get_all_text_(node): + if node.text is not None: + text = node.text + else: + text = '' + for child in node: + if child.tail is not None: + text += child.tail + return text + +def find_attr_value_(attr_name, node): + attrs = node.attrib + attr_parts = attr_name.split(':') + value = None + if len(attr_parts) == 1: + value = attrs.get(attr_name) + elif len(attr_parts) == 2: + prefix, name = attr_parts + namespace = node.nsmap.get(prefix) + if namespace is not None: + value = attrs.get('{%s}%s' % (namespace, name, )) + return value + + +class GDSParseError(Exception): + pass + +def raise_parse_error(node, msg): + if XMLParser_import_library == XMLParser_import_lxml: + msg = '%s (element %s/line %d)' % ( + msg, node.tag, node.sourceline, ) + else: + msg = '%s (element %s)' % (msg, node.tag, ) + raise GDSParseError(msg) + + +class MixedContainer: + # Constants for category: + CategoryNone = 0 + CategoryText = 1 + CategorySimple = 2 + CategoryComplex = 3 + # Constants for content_type: + TypeNone = 0 + TypeText = 1 + TypeString = 2 + TypeInteger = 3 + TypeFloat = 4 + TypeDecimal = 5 + TypeDouble = 6 + TypeBoolean = 7 + TypeBase64 = 8 + def __init__(self, category, content_type, name, value): + self.category = category + self.content_type = content_type + self.name = name + self.value = value + def getCategory(self): + return self.category + def getContenttype(self, content_type): + return self.content_type + def getValue(self): + return self.value + def getName(self): + return self.name + def export(self, outfile, level, name, namespace, pretty_print=True): + if self.category == MixedContainer.CategoryText: + # Prevent exporting empty content as empty lines. + if self.value.strip(): + outfile.write(self.value) + elif self.category == MixedContainer.CategorySimple: + self.exportSimple(outfile, level, name) + else: # category == MixedContainer.CategoryComplex + self.value.export(outfile, level, namespace, name, pretty_print) + def exportSimple(self, outfile, level, name): + if self.content_type == MixedContainer.TypeString: + outfile.write('<%s>%s</%s>' % + (self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeInteger or \ + self.content_type == MixedContainer.TypeBoolean: + outfile.write('<%s>%d</%s>' % + (self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeFloat or \ + self.content_type == MixedContainer.TypeDecimal: + outfile.write('<%s>%f</%s>' % + (self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeDouble: + outfile.write('<%s>%g</%s>' % + (self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeBase64: + outfile.write('<%s>%s</%s>' % + (self.name, base64.b64encode(self.value), self.name)) + def exportLiteral(self, outfile, level, name): + if self.category == MixedContainer.CategoryText: + showIndent(outfile, level) + outfile.write('model_.MixedContainer(%d, %d, "%s", "%s"),\n' + % (self.category, self.content_type, self.name, self.value)) + elif self.category == MixedContainer.CategorySimple: + showIndent(outfile, level) + outfile.write('model_.MixedContainer(%d, %d, "%s", "%s"),\n' + % (self.category, self.content_type, self.name, self.value)) + else: # category == MixedContainer.CategoryComplex + showIndent(outfile, level) + outfile.write('model_.MixedContainer(%d, %d, "%s",\n' % \ + (self.category, self.content_type, self.name,)) + self.value.exportLiteral(outfile, level + 1) + showIndent(outfile, level) + outfile.write(')\n') + + +class MemberSpec_(object): + def __init__(self, name='', data_type='', container=0): + self.name = name + self.data_type = data_type + self.container = container + def set_name(self, name): self.name = name + def get_name(self): return self.name + def set_data_type(self, data_type): self.data_type = data_type + def get_data_type_chain(self): return self.data_type + def get_data_type(self): + if isinstance(self.data_type, list): + if len(self.data_type) > 0: + return self.data_type[-1] + else: + return 'xs:string' + else: + return self.data_type + def set_container(self, container): self.container = container + def get_container(self): return self.container + +def _cast(typ, value): + if typ is None or value is None: + return value + return typ(value) + +# +# Data representation classes. +# + +class GetUserReq(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('value04', 'xsd:integer', 0), + MemberSpec_('value05', 'xsd:string', 0), + MemberSpec_('value06', 'xsd:integer', 0), + MemberSpec_('value07', 'xsd:integer', 0), + MemberSpec_('value01', 'xsd:string', 0), + MemberSpec_('value02', 'xsd:integer', 0), + MemberSpec_('value03', 'xsd:string', 0), + MemberSpec_('sequence', 'xsd:unsignedLong', 0), + MemberSpec_('returnedTags', 'xsd:string', 0), + ] + subclass = None + superclass = None + def __init__(self, value04=None, value05=None, value06=None, value07=None, value01=None, value02=None, value03=None, sequence=None, returnedTags=None): + self.value04 = _cast(int, value04) + self.value05 = _cast(None, value05) + self.value06 = _cast(int, value06) + self.value07 = _cast(int, value07) + self.value01 = _cast(None, value01) + self.value02 = _cast(int, value02) + self.value03 = _cast(None, value03) + self.sequence = _cast(int, sequence) + self.returnedTags = returnedTags + def factory(*args_, **kwargs_): + if GetUserReq.subclass: + return GetUserReq.subclass(*args_, **kwargs_) + else: + return GetUserReq(*args_, **kwargs_) + factory = staticmethod(factory) + def get_returnedTags(self): return self.returnedTags + def set_returnedTags(self, returnedTags): self.returnedTags = returnedTags + def get_value04(self): return self.value04 + def set_value04(self, value04): self.value04 = value04 + def get_value05(self): return self.value05 + def set_value05(self, value05): self.value05 = value05 + def get_value06(self): return self.value06 + def set_value06(self, value06): self.value06 = value06 + def get_value07(self): return self.value07 + def set_value07(self, value07): self.value07 = value07 + def get_value01(self): return self.value01 + def set_value01(self, value01): self.value01 = value01 + def get_value02(self): return self.value02 + def set_value02(self, value02): self.value02 = value02 + def get_value03(self): return self.value03 + def set_value03(self, value03): self.value03 = value03 + def get_sequence(self): return self.sequence + def set_sequence(self, sequence): self.sequence = sequence + def export(self, outfile, level, namespace_='', name_='GetUserReq', namespacedef_='', pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = [] + self.exportAttributes(outfile, level, already_processed, namespace_, name_='GetUserReq') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + showIndent(outfile, level, pretty_print) + outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) + else: + outfile.write('/>%s' % (eol_, )) + def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='GetUserReq'): + if self.value04 is not None and 'value04' not in already_processed: + already_processed.append('value04') + outfile.write(' value04="%s"' % self.gds_format_integer(self.value04, input_name='value04')) + if self.value05 is not None and 'value05' not in already_processed: + already_processed.append('value05') + outfile.write(' value05=%s' % (self.gds_format_string(quote_attrib(self.value05).encode(ExternalEncoding), input_name='value05'), )) + if self.value06 is not None and 'value06' not in already_processed: + already_processed.append('value06') + outfile.write(' value06="%s"' % self.gds_format_integer(self.value06, input_name='value06')) + if self.value07 is not None and 'value07' not in already_processed: + already_processed.append('value07') + outfile.write(' value07="%s"' % self.gds_format_integer(self.value07, input_name='value07')) + if self.value01 is not None and 'value01' not in already_processed: + already_processed.append('value01') + outfile.write(' value01=%s' % (self.gds_format_string(quote_attrib(self.value01).encode(ExternalEncoding), input_name='value01'), )) + if self.value02 is not None and 'value02' not in already_processed: + already_processed.append('value02') + outfile.write(' value02="%s"' % self.gds_format_integer(self.value02, input_name='value02')) + if self.value03 is not None and 'value03' not in already_processed: + already_processed.append('value03') + outfile.write(' value03=%s' % (self.gds_format_string(quote_attrib(self.value03).encode(ExternalEncoding), input_name='value03'), )) + if self.sequence is not None and 'sequence' not in already_processed: + already_processed.append('sequence') + outfile.write(' sequence="%s"' % self.gds_format_integer(self.sequence, input_name='sequence')) + def exportChildren(self, outfile, level, namespace_='', name_='GetUserReq', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.returnedTags is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sreturnedTags>%s</%sreturnedTags>%s' % (namespace_, self.gds_format_string(quote_xml(self.returnedTags).encode(ExternalEncoding), input_name='returnedTags'), namespace_, eol_)) + def hasContent_(self): + if ( + self.returnedTags is not None + ): + return True + else: + return False + def exportLiteral(self, outfile, level, name_='GetUserReq'): + level += 1 + self.exportLiteralAttributes(outfile, level, [], name_) + if self.hasContent_(): + self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, already_processed, name_): + if self.value04 is not None and 'value04' not in already_processed: + already_processed.append('value04') + showIndent(outfile, level) + outfile.write('value04 = %d,\n' % (self.value04,)) + if self.value05 is not None and 'value05' not in already_processed: + already_processed.append('value05') + showIndent(outfile, level) + outfile.write('value05 = "%s",\n' % (self.value05,)) + if self.value06 is not None and 'value06' not in already_processed: + already_processed.append('value06') + showIndent(outfile, level) + outfile.write('value06 = %d,\n' % (self.value06,)) + if self.value07 is not None and 'value07' not in already_processed: + already_processed.append('value07') + showIndent(outfile, level) + outfile.write('value07 = %d,\n' % (self.value07,)) + if self.value01 is not None and 'value01' not in already_processed: + already_processed.append('value01') + showIndent(outfile, level) + outfile.write('value01 = "%s",\n' % (self.value01,)) + if self.value02 is not None and 'value02' not in already_processed: + already_processed.append('value02') + showIndent(outfile, level) + outfile.write('value02 = %d,\n' % (self.value02,)) + if self.value03 is not None and 'value03' not in already_processed: + already_processed.append('value03') + showIndent(outfile, level) + outfile.write('value03 = "%s",\n' % (self.value03,)) + if self.sequence is not None and 'sequence' not in already_processed: + already_processed.append('sequence') + showIndent(outfile, level) + outfile.write('sequence = %d,\n' % (self.sequence,)) + def exportLiteralChildren(self, outfile, level, name_): + if self.returnedTags is not None: + showIndent(outfile, level) + outfile.write('returnedTags=%s,\n' % quote_python(self.returnedTags).encode(ExternalEncoding)) + def build(self, node): + self.buildAttributes(node, node.attrib, []) + for child in node: + nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] + self.buildChildren(child, node, nodeName_) + def buildAttributes(self, node, attrs, already_processed): + value = find_attr_value_('value04', node) + if value is not None and 'value04' not in already_processed: + already_processed.append('value04') + try: + self.value04 = int(value) + except ValueError, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + value = find_attr_value_('value05', node) + if value is not None and 'value05' not in already_processed: + already_processed.append('value05') + self.value05 = value + value = find_attr_value_('value06', node) + if value is not None and 'value06' not in already_processed: + already_processed.append('value06') + try: + self.value06 = int(value) + except ValueError, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + value = find_attr_value_('value07', node) + if value is not None and 'value07' not in already_processed: + already_processed.append('value07') + try: + self.value07 = int(value) + except ValueError, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + value = find_attr_value_('value01', node) + if value is not None and 'value01' not in already_processed: + already_processed.append('value01') + self.value01 = value + value = find_attr_value_('value02', node) + if value is not None and 'value02' not in already_processed: + already_processed.append('value02') + try: + self.value02 = int(value) + except ValueError, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + value = find_attr_value_('value03', node) + if value is not None and 'value03' not in already_processed: + already_processed.append('value03') + self.value03 = value + value = find_attr_value_('sequence', node) + if value is not None and 'sequence' not in already_processed: + already_processed.append('sequence') + try: + self.sequence = int(value) + except ValueError, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + if nodeName_ == 'returnedTags': + returnedTags_ = child_.text + returnedTags_ = self.gds_validate_string(returnedTags_, node, 'returnedTags') + self.returnedTags = returnedTags_ +# end class GetUserReq + + +GDSClassesMapping = { + 'getUser': GetUserReq, +} + + +USAGE_TEXT = """ +Usage: python <Parser>.py [ -s ] <in_xml_file> +""" + +def usage(): + print USAGE_TEXT + sys.exit(1) + + +def get_root_tag(node): + tag = Tag_pattern_.match(node.tag).groups()[-1] + rootClass = GDSClassesMapping.get(tag) + if rootClass is None: + rootClass = globals().get(tag) + return tag, rootClass + + +def parse(inFileName): + doc = parsexml_(inFileName) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'getUser' + rootClass = GetUserReq + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('<?xml version="1.0" ?>\n') +## rootObj.export(sys.stdout, 0, name_=rootTag, +## namespacedef_='', +## pretty_print=True) + return rootObj + + +def parseString(inString): + from StringIO import StringIO + doc = parsexml_(StringIO(inString)) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'getUser' + rootClass = GetUserReq + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('<?xml version="1.0" ?>\n') +## rootObj.export(sys.stdout, 0, name_="getUser", +## namespacedef_='') + return rootObj + + +def parseLiteral(inFileName): + doc = parsexml_(inFileName) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'getUser' + rootClass = GetUserReq + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('#from attr_groups2_sup import *\n\n') +## sys.stdout.write('from datetime import datetime as datetime_\n\n') +## sys.stdout.write('import attr_groups2_sup as model_\n\n') +## sys.stdout.write('rootObj = model_.rootTag(\n') +## rootObj.exportLiteral(sys.stdout, 0, name_=rootTag) +## sys.stdout.write(')\n') + return rootObj + + +def main(): + args = sys.argv[1:] + if len(args) == 1: + parse(args[0]) + else: + usage() + + +if __name__ == '__main__': + #import pdb; pdb.set_trace() + main() + + +__all__ = [ + "GetUserReq" + ] diff --git a/tests/recursive_simpletype.xsd b/tests/recursive_simpletype.xsd new file mode 100644 index 0000000000000000000000000000000000000000..4a2319e534356de5b4a8a34a42a97416f0c8dd1d --- /dev/null +++ b/tests/recursive_simpletype.xsd @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<xs:schema + xmlns:xs="http://www.w3.org/2001/XMLSchema" + xmlns:eitc="http://docs.oasis-open.org/ns/energyinterop/201103" + > + + <xs:element name="person" type="PersonType" /> + + <xs:complexType name="PersonType"> + <xs:sequence> + <xs:element ref="personId" minOccurs="1" + maxOccurs="1" /> + <xs:element name="fname" type="xs:string" /> + <xs:element name="lname" type="xs:string" /> + </xs:sequence> + </xs:complexType> + + <xs:element name="personId" type="PersonIdType" /> + + <xs:simpleType name="PersonIdType"> + <xs:restriction base="eitc:IdType"/> + </xs:simpleType> + + <xs:simpleType name="IdType"> + <xs:restriction base="xs:integer"/> + </xs:simpleType> + +</xs:schema> + diff --git a/tests/simpletypes_other.xsd b/tests/simpletypes_other.xsd new file mode 100644 index 0000000000000000000000000000000000000000..95eadb5dcb83bf21233b8c481592a817266be1bb --- /dev/null +++ b/tests/simpletypes_other.xsd @@ -0,0 +1,58 @@ +<?xml version="1.0"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:element name="simpleTypeTests" type="simpleTypeTestsType"> + <xs:annotation><xs:documentation> + Tests for additional simple built-in types. + </xs:documentation></xs:annotation> + </xs:element> + <xs:complexType name="simpleTypeTestsType"> + <xs:sequence> + <xs:element name="simpleTypeTest" maxOccurs="unbounded" type="simpleTypeTestType"/> + </xs:sequence> + </xs:complexType> + + <xs:element name="simpleTypeTest" type="simpleTypeTestType"/> + <xs:complexType mixed="0" name="simpleTypeTest"> + <xs:complexContent> + <xs:sequence> + <xs:element name="datetime1" type="xs:gYear"/> + <xs:element name="datetime2" type="xs:gYearMonth"/> + <xs:element name="datetime3" type="xs:gMonth"/> + <xs:element name="datetime4" type="xs:gMonthDay"/> + <xs:element name="datetime5" type="xs:gDay"/> + + <!-- built-in types and multiple built-in types + --> + <xs:element name="integerVal1" type="xs:integer"/> + <xs:element name="integerVal2" type="xs:integer" + minOccurs="0" maxOccurs="unbounded"/> + <xs:element name="stringVal1" type="xs:string"/> + <xs:element name="stringVal2" type="xs:string" + minOccurs="0" maxOccurs="unbounded"/> + <xs:element name="booleanVal1" type="xs:boolean"/> + <xs:element name="booleanVal2" type="xs:boolean" + minOccurs="0" maxOccurs="unbounded"/> + <xs:element name="decimalVal1" type="xs:decimal"/> + <xs:element name="decimalVal2" type="xs:decimal" + minOccurs="0" maxOccurs="unbounded"/> + <xs:element name="doubleVal1" type="xs:double"/> + <xs:element name="doubleVal2" type="xs:double" + minOccurs="0" maxOccurs="unbounded"/> + <xs:element name="floatVal1" type="xs:float"/> + <xs:element name="floatVal2" type="xs:float" + minOccurs="0" maxOccurs="unbounded"/> + <xs:element name="dateVal1" type="xs:date"/> + <xs:element name="dateVal2" type="xs:date" + minOccurs="0" maxOccurs="unbounded"/> + <xs:element name="dateTimeVal1" type="xs:dateTime"/> + <xs:element name="dateTimeVal2" type="xs:dateTime" + minOccurs="0" maxOccurs="unbounded"/> + + + </xs:sequence> + </xs:complexContent> + </xs:complexType> + +</xs:schema> + diff --git a/tests/simpletypes_other1_sup.py b/tests/simpletypes_other1_sup.py new file mode 100644 index 0000000000000000000000000000000000000000..831ce7bc0f1da8a38069c2cc8a7dc0d3275506a4 --- /dev/null +++ b/tests/simpletypes_other1_sup.py @@ -0,0 +1,1159 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# +# Generated by generateDS.py. +# + +import sys +import getopt +import re as re_ +import base64 +from datetime import datetime, tzinfo, timedelta + +etree_ = None +Verbose_import_ = False +( XMLParser_import_none, XMLParser_import_lxml, + XMLParser_import_elementtree + ) = range(3) +XMLParser_import_library = None +try: + # lxml + from lxml import etree as etree_ + XMLParser_import_library = XMLParser_import_lxml + if Verbose_import_: + print("running with lxml.etree") +except ImportError: + try: + # cElementTree from Python 2.5+ + import xml.etree.cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree on Python 2.5+") + except ImportError: + try: + # ElementTree from Python 2.5+ + import xml.etree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree on Python 2.5+") + except ImportError: + try: + # normal cElementTree install + import cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree") + except ImportError: + try: + # normal ElementTree install + import elementtree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree") + except ImportError: + raise ImportError( + "Failed to import ElementTree from any known place") + +def parsexml_(*args, **kwargs): + if (XMLParser_import_library == XMLParser_import_lxml and + 'parser' not in kwargs): + # Use the lxml ElementTree compatible parser so that, e.g., + # we ignore comments. + kwargs['parser'] = etree_.ETCompatXMLParser() + doc = etree_.parse(*args, **kwargs) + return doc + +# +# User methods +# +# Calls to the methods in these classes are generated by generateDS.py. +# You can replace these methods by re-implementing the following class +# in a module named generatedssuper.py. + +try: + from generatedssuper import GeneratedsSuper +except ImportError, exp: + + class GeneratedsSuper(object): + tzoff_pattern = re_.compile(r'(\+|-)((0\d|1[0-3]):[0-5]\d|14:00)$') + class _FixedOffsetTZ(tzinfo): + def __init__(self, offset, name): + self.__offset = timedelta(minutes = offset) + self.__name = name + def utcoffset(self, dt): + return self.__offset + def tzname(self, dt): + return self.__name + def dst(self, dt): + return None + def gds_format_string(self, input_data, input_name=''): + return input_data + def gds_validate_string(self, input_data, node, input_name=''): + return input_data + def gds_format_base64(self, input_data, input_name=''): + return base64.b64encode(input_data) + def gds_validate_base64(self, input_data, node, input_name=''): + return input_data + def gds_format_integer(self, input_data, input_name=''): + return '%d' % input_data + def gds_validate_integer(self, input_data, node, input_name=''): + return input_data + def gds_format_integer_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_integer_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + try: + fvalue = float(value) + except (TypeError, ValueError), exp: + raise_parse_error(node, 'Requires sequence of integers') + return input_data + def gds_format_float(self, input_data, input_name=''): + return '%f' % input_data + def gds_validate_float(self, input_data, node, input_name=''): + return input_data + def gds_format_float_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_float_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + try: + fvalue = float(value) + except (TypeError, ValueError), exp: + raise_parse_error(node, 'Requires sequence of floats') + return input_data + def gds_format_double(self, input_data, input_name=''): + return '%e' % input_data + def gds_validate_double(self, input_data, node, input_name=''): + return input_data + def gds_format_double_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_double_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + try: + fvalue = float(value) + except (TypeError, ValueError), exp: + raise_parse_error(node, 'Requires sequence of doubles') + return input_data + def gds_format_boolean(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_boolean(self, input_data, node, input_name=''): + return input_data + def gds_format_boolean_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_boolean_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + if value not in ('true', '1', 'false', '0', ): + raise_parse_error(node, + 'Requires sequence of booleans ' + '("true", "1", "false", "0")') + return input_data + def gds_validate_datetime(self, input_data, node, input_name=''): + return input_data + def gds_format_datetime(self, input_data, input_name=''): + _svalue = input_data.strftime('%Y-%m-%dT%H:%M:%S') + if input_data.tzinfo is not None: + tzoff = input_data.tzinfo.utcoffset(input_data) + if tzoff is not None: + total_seconds = tzoff.seconds + (86400 * tzoff.days) + if total_seconds == 0: + _svalue += 'Z' + else: + if total_seconds < 0: + _svalue += '-' + total_seconds *= -1 + else: + _svalue += '+' + hours = total_seconds // 3600 + minutes = (total_seconds - (hours * 3600)) // 60 + _svalue += '{0:02d}:{1:02d}'.format(hours, minutes) + return _svalue + def gds_parse_datetime(self, input_data, node, input_name=''): + tz = None + if input_data[-1] == 'Z': + tz = GeneratedsSuper._FixedOffsetTZ(0, 'GMT') + input_data = input_data[:-1] + else: + results = GeneratedsSuper.tzoff_pattern.search(input_data) + if results is not None: + tzoff_parts = results.group(2).split(':') + tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1]) + if results.group(1) == '-': + tzoff *= -1 + tz = GeneratedsSuper._FixedOffsetTZ( + tzoff, results.group(0)) + input_data = input_data[:-6] + return datetime.strptime(input_data, + '%Y-%m-%dT%H:%M:%S').replace(tzinfo = tz) + def gds_validate_date(self, input_data, node, input_name=''): + return input_data + def gds_format_date(self, input_data, input_name=''): + _svalue = input_data.strftime('%Y-%m-%d') + if input_data.tzinfo is not None: + tzoff = input_data.tzinfo.utcoffset(input_data) + if tzoff is not None: + total_seconds = tzoff.seconds + (86400 * tzoff.days) + if total_seconds == 0: + _svalue += 'Z' + else: + if total_seconds < 0: + _svalue += '-' + total_seconds *= -1 + else: + _svalue += '+' + hours = total_seconds // 3600 + minutes = (total_seconds - (hours * 3600)) // 60 + _svalue += '{0:02d}:{1:02d}'.format(hours, minutes) + return _svalue + def gds_parse_date(self, input_data, node, input_name=''): + tz = None + if input_data[-1] == 'Z': + tz = GeneratedsSuper._FixedOffsetTZ(0, 'GMT') + input_data = input_data[:-1] + else: + results = GeneratedsSuper.tzoff_pattern.search(input_data) + if results is not None: + tzoff_parts = results.group(2).split(':') + tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1]) + if results.group(1) == '-': + tzoff *= -1 + tz = GeneratedsSuper._FixedOffsetTZ( + tzoff, results.group(0)) + input_data = input_data[:-6] + return datetime.strptime(input_data, + '%Y-%m-%d').replace(tzinfo = tz) + def gds_str_lower(self, instring): + return instring.lower() + def get_path_(self, node): + path_list = [] + self.get_path_list_(node, path_list) + path_list.reverse() + path = '/'.join(path_list) + return path + Tag_strip_pattern_ = re_.compile(r'\{.*\}') + def get_path_list_(self, node, path_list): + if node is None: + return + tag = GeneratedsSuper.Tag_strip_pattern_.sub('', node.tag) + if tag: + path_list.append(tag) + self.get_path_list_(node.getparent(), path_list) + def get_class_obj_(self, node, default_class=None): + class_obj1 = default_class + if 'xsi' in node.nsmap: + classname = node.get('{%s}type' % node.nsmap['xsi']) + if classname is not None: + names = classname.split(':') + if len(names) == 2: + classname = names[1] + class_obj2 = globals().get(classname) + if class_obj2 is not None: + class_obj1 = class_obj2 + return class_obj1 + def gds_build_any(self, node, type_name=None): + return None + + +# +# If you have installed IPython you can uncomment and use the following. +# IPython is available from http://ipython.scipy.org/. +# + +## from IPython.Shell import IPShellEmbed +## args = '' +## ipshell = IPShellEmbed(args, +## banner = 'Dropping into IPython', +## exit_msg = 'Leaving Interpreter, back to program.') + +# Then use the following line where and when you want to drop into the +# IPython shell: +# ipshell('<some message> -- Entering ipshell.\nHit Ctrl-D to exit') + +# +# Globals +# + +ExternalEncoding = 'ascii' +Tag_pattern_ = re_.compile(r'({.*})?(.*)') +String_cleanup_pat_ = re_.compile(r"[\n\r\s]+") +Namespace_extract_pat_ = re_.compile(r'{(.*)}(.*)') + +# +# Support/utility functions. +# + +def showIndent(outfile, level, pretty_print=True): + if pretty_print: + for idx in range(level): + outfile.write(' ') + +def quote_xml(inStr): + if not inStr: + return '' + s1 = (isinstance(inStr, basestring) and inStr or + '%s' % inStr) + s1 = s1.replace('&', '&') + s1 = s1.replace('<', '<') + s1 = s1.replace('>', '>') + return s1 + +def quote_attrib(inStr): + s1 = (isinstance(inStr, basestring) and inStr or + '%s' % inStr) + s1 = s1.replace('&', '&') + s1 = s1.replace('<', '<') + s1 = s1.replace('>', '>') + if '"' in s1: + if "'" in s1: + s1 = '"%s"' % s1.replace('"', """) + else: + s1 = "'%s'" % s1 + else: + s1 = '"%s"' % s1 + return s1 + +def quote_python(inStr): + s1 = inStr + if s1.find("'") == -1: + if s1.find('\n') == -1: + return "'%s'" % s1 + else: + return "'''%s'''" % s1 + else: + if s1.find('"') != -1: + s1 = s1.replace('"', '\\"') + if s1.find('\n') == -1: + return '"%s"' % s1 + else: + return '"""%s"""' % s1 + +def get_all_text_(node): + if node.text is not None: + text = node.text + else: + text = '' + for child in node: + if child.tail is not None: + text += child.tail + return text + +def find_attr_value_(attr_name, node): + attrs = node.attrib + attr_parts = attr_name.split(':') + value = None + if len(attr_parts) == 1: + value = attrs.get(attr_name) + elif len(attr_parts) == 2: + prefix, name = attr_parts + namespace = node.nsmap.get(prefix) + if namespace is not None: + value = attrs.get('{%s}%s' % (namespace, name, )) + return value + + +class GDSParseError(Exception): + pass + +def raise_parse_error(node, msg): + if XMLParser_import_library == XMLParser_import_lxml: + msg = '%s (element %s/line %d)' % ( + msg, node.tag, node.sourceline, ) + else: + msg = '%s (element %s)' % (msg, node.tag, ) + raise GDSParseError(msg) + + +class MixedContainer: + # Constants for category: + CategoryNone = 0 + CategoryText = 1 + CategorySimple = 2 + CategoryComplex = 3 + # Constants for content_type: + TypeNone = 0 + TypeText = 1 + TypeString = 2 + TypeInteger = 3 + TypeFloat = 4 + TypeDecimal = 5 + TypeDouble = 6 + TypeBoolean = 7 + TypeBase64 = 8 + def __init__(self, category, content_type, name, value): + self.category = category + self.content_type = content_type + self.name = name + self.value = value + def getCategory(self): + return self.category + def getContenttype(self, content_type): + return self.content_type + def getValue(self): + return self.value + def getName(self): + return self.name + def export(self, outfile, level, name, namespace, pretty_print=True): + if self.category == MixedContainer.CategoryText: + # Prevent exporting empty content as empty lines. + if self.value.strip(): + outfile.write(self.value) + elif self.category == MixedContainer.CategorySimple: + self.exportSimple(outfile, level, name) + else: # category == MixedContainer.CategoryComplex + self.value.export(outfile, level, namespace, name, pretty_print) + def exportSimple(self, outfile, level, name): + if self.content_type == MixedContainer.TypeString: + outfile.write('<%s>%s</%s>' % + (self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeInteger or \ + self.content_type == MixedContainer.TypeBoolean: + outfile.write('<%s>%d</%s>' % + (self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeFloat or \ + self.content_type == MixedContainer.TypeDecimal: + outfile.write('<%s>%f</%s>' % + (self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeDouble: + outfile.write('<%s>%g</%s>' % + (self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeBase64: + outfile.write('<%s>%s</%s>' % + (self.name, base64.b64encode(self.value), self.name)) + def exportLiteral(self, outfile, level, name): + if self.category == MixedContainer.CategoryText: + showIndent(outfile, level) + outfile.write('model_.MixedContainer(%d, %d, "%s", "%s"),\n' + % (self.category, self.content_type, self.name, self.value)) + elif self.category == MixedContainer.CategorySimple: + showIndent(outfile, level) + outfile.write('model_.MixedContainer(%d, %d, "%s", "%s"),\n' + % (self.category, self.content_type, self.name, self.value)) + else: # category == MixedContainer.CategoryComplex + showIndent(outfile, level) + outfile.write('model_.MixedContainer(%d, %d, "%s",\n' % \ + (self.category, self.content_type, self.name,)) + self.value.exportLiteral(outfile, level + 1) + showIndent(outfile, level) + outfile.write(')\n') + + +class MemberSpec_(object): + def __init__(self, name='', data_type='', container=0): + self.name = name + self.data_type = data_type + self.container = container + def set_name(self, name): self.name = name + def get_name(self): return self.name + def set_data_type(self, data_type): self.data_type = data_type + def get_data_type_chain(self): return self.data_type + def get_data_type(self): + if isinstance(self.data_type, list): + if len(self.data_type) > 0: + return self.data_type[-1] + else: + return 'xs:string' + else: + return self.data_type + def set_container(self, container): self.container = container + def get_container(self): return self.container + +def _cast(typ, value): + if typ is None or value is None: + return value + return typ(value) + +# +# Data representation classes. +# + +class simpleTypeTestsType(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('simpleTypeTest', 'simpleTypeTest', 1), + ] + subclass = None + superclass = None + def __init__(self, simpleTypeTest=None): + if simpleTypeTest is None: + self.simpleTypeTest = [] + else: + self.simpleTypeTest = simpleTypeTest + def factory(*args_, **kwargs_): + if simpleTypeTestsType.subclass: + return simpleTypeTestsType.subclass(*args_, **kwargs_) + else: + return simpleTypeTestsType(*args_, **kwargs_) + factory = staticmethod(factory) + def get_simpleTypeTest(self): return self.simpleTypeTest + def set_simpleTypeTest(self, simpleTypeTest): self.simpleTypeTest = simpleTypeTest + def add_simpleTypeTest(self, value): self.simpleTypeTest.append(value) + def insert_simpleTypeTest(self, index, value): self.simpleTypeTest[index] = value + def export(self, outfile, level, namespace_='', name_='simpleTypeTestsType', namespacedef_='', pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = [] + self.exportAttributes(outfile, level, already_processed, namespace_, name_='simpleTypeTestsType') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + showIndent(outfile, level, pretty_print) + outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) + else: + outfile.write('/>%s' % (eol_, )) + def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='simpleTypeTestsType'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='simpleTypeTestsType', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + for simpleTypeTest_ in self.simpleTypeTest: + showIndent(outfile, level, pretty_print) + outfile.write('<%ssimpleTypeTest>%s</%ssimpleTypeTest>%s' % (namespace_, self.gds_format_string(quote_xml(simpleTypeTest_).encode(ExternalEncoding), input_name='simpleTypeTest'), namespace_, eol_)) + def hasContent_(self): + if ( + self.simpleTypeTest + ): + return True + else: + return False + def exportLiteral(self, outfile, level, name_='simpleTypeTestsType'): + level += 1 + self.exportLiteralAttributes(outfile, level, [], name_) + if self.hasContent_(): + self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, already_processed, name_): + pass + def exportLiteralChildren(self, outfile, level, name_): + showIndent(outfile, level) + outfile.write('simpleTypeTest=[\n') + level += 1 + for simpleTypeTest_ in self.simpleTypeTest: + showIndent(outfile, level) + outfile.write('%s,\n' % quote_python(simpleTypeTest_).encode(ExternalEncoding)) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + def build(self, node): + self.buildAttributes(node, node.attrib, []) + for child in node: + nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] + self.buildChildren(child, node, nodeName_) + def buildAttributes(self, node, attrs, already_processed): + pass + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + if nodeName_ == 'simpleTypeTest': + simpleTypeTest_ = child_.text + simpleTypeTest_ = self.gds_validate_string(simpleTypeTest_, node, 'simpleTypeTest') + self.simpleTypeTest.append(simpleTypeTest_) +# end class simpleTypeTestsType + + +class simpleTypeTest(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('datetime1', 'xs:gYear', 0), + MemberSpec_('datetime2', 'xs:gYearMonth', 0), + MemberSpec_('datetime3', 'xs:gMonth', 0), + MemberSpec_('datetime4', 'xs:gMonthDay', 0), + MemberSpec_('datetime5', 'xs:gDay', 0), + MemberSpec_('integerVal1', 'xs:integer', 0), + MemberSpec_('integerVal2', 'xs:integer', 1), + MemberSpec_('stringVal1', 'xs:string', 0), + MemberSpec_('stringVal2', 'xs:string', 1), + MemberSpec_('booleanVal1', 'xs:boolean', 0), + MemberSpec_('booleanVal2', 'xs:boolean', 1), + MemberSpec_('decimalVal1', 'xs:decimal', 0), + MemberSpec_('decimalVal2', 'xs:decimal', 1), + MemberSpec_('doubleVal1', 'xs:double', 0), + MemberSpec_('doubleVal2', 'xs:double', 1), + MemberSpec_('floatVal1', 'xs:float', 0), + MemberSpec_('floatVal2', 'xs:float', 1), + MemberSpec_('dateVal1', 'xs:date', 0), + MemberSpec_('dateVal2', 'xs:date', 1), + MemberSpec_('dateTimeVal1', 'xs:dateTime', 0), + MemberSpec_('dateTimeVal2', 'xs:dateTime', 1), + ] + subclass = None + superclass = None + def __init__(self, datetime1=None, datetime2=None, datetime3=None, datetime4=None, datetime5=None, integerVal1=None, integerVal2=None, stringVal1=None, stringVal2=None, booleanVal1=None, booleanVal2=None, decimalVal1=None, decimalVal2=None, doubleVal1=None, doubleVal2=None, floatVal1=None, floatVal2=None, dateVal1=None, dateVal2=None, dateTimeVal1=None, dateTimeVal2=None): + self.datetime1 = datetime1 + self.datetime2 = datetime2 + self.datetime3 = datetime3 + self.datetime4 = datetime4 + self.datetime5 = datetime5 + self.integerVal1 = integerVal1 + if integerVal2 is None: + self.integerVal2 = [] + else: + self.integerVal2 = integerVal2 + self.stringVal1 = stringVal1 + if stringVal2 is None: + self.stringVal2 = [] + else: + self.stringVal2 = stringVal2 + self.booleanVal1 = booleanVal1 + if booleanVal2 is None: + self.booleanVal2 = [] + else: + self.booleanVal2 = booleanVal2 + self.decimalVal1 = decimalVal1 + if decimalVal2 is None: + self.decimalVal2 = [] + else: + self.decimalVal2 = decimalVal2 + self.doubleVal1 = doubleVal1 + if doubleVal2 is None: + self.doubleVal2 = [] + else: + self.doubleVal2 = doubleVal2 + self.floatVal1 = floatVal1 + if floatVal2 is None: + self.floatVal2 = [] + else: + self.floatVal2 = floatVal2 + self.dateVal1 = dateVal1 + if dateVal2 is None: + self.dateVal2 = [] + else: + self.dateVal2 = dateVal2 + self.dateTimeVal1 = dateTimeVal1 + if dateTimeVal2 is None: + self.dateTimeVal2 = [] + else: + self.dateTimeVal2 = dateTimeVal2 + def factory(*args_, **kwargs_): + if simpleTypeTest.subclass: + return simpleTypeTest.subclass(*args_, **kwargs_) + else: + return simpleTypeTest(*args_, **kwargs_) + factory = staticmethod(factory) + def get_datetime1(self): return self.datetime1 + def set_datetime1(self, datetime1): self.datetime1 = datetime1 + def get_datetime2(self): return self.datetime2 + def set_datetime2(self, datetime2): self.datetime2 = datetime2 + def get_datetime3(self): return self.datetime3 + def set_datetime3(self, datetime3): self.datetime3 = datetime3 + def get_datetime4(self): return self.datetime4 + def set_datetime4(self, datetime4): self.datetime4 = datetime4 + def get_datetime5(self): return self.datetime5 + def set_datetime5(self, datetime5): self.datetime5 = datetime5 + def get_integerVal1(self): return self.integerVal1 + def set_integerVal1(self, integerVal1): self.integerVal1 = integerVal1 + def get_integerVal2(self): return self.integerVal2 + def set_integerVal2(self, integerVal2): self.integerVal2 = integerVal2 + def add_integerVal2(self, value): self.integerVal2.append(value) + def insert_integerVal2(self, index, value): self.integerVal2[index] = value + def get_stringVal1(self): return self.stringVal1 + def set_stringVal1(self, stringVal1): self.stringVal1 = stringVal1 + def get_stringVal2(self): return self.stringVal2 + def set_stringVal2(self, stringVal2): self.stringVal2 = stringVal2 + def add_stringVal2(self, value): self.stringVal2.append(value) + def insert_stringVal2(self, index, value): self.stringVal2[index] = value + def get_booleanVal1(self): return self.booleanVal1 + def set_booleanVal1(self, booleanVal1): self.booleanVal1 = booleanVal1 + def get_booleanVal2(self): return self.booleanVal2 + def set_booleanVal2(self, booleanVal2): self.booleanVal2 = booleanVal2 + def add_booleanVal2(self, value): self.booleanVal2.append(value) + def insert_booleanVal2(self, index, value): self.booleanVal2[index] = value + def get_decimalVal1(self): return self.decimalVal1 + def set_decimalVal1(self, decimalVal1): self.decimalVal1 = decimalVal1 + def get_decimalVal2(self): return self.decimalVal2 + def set_decimalVal2(self, decimalVal2): self.decimalVal2 = decimalVal2 + def add_decimalVal2(self, value): self.decimalVal2.append(value) + def insert_decimalVal2(self, index, value): self.decimalVal2[index] = value + def get_doubleVal1(self): return self.doubleVal1 + def set_doubleVal1(self, doubleVal1): self.doubleVal1 = doubleVal1 + def get_doubleVal2(self): return self.doubleVal2 + def set_doubleVal2(self, doubleVal2): self.doubleVal2 = doubleVal2 + def add_doubleVal2(self, value): self.doubleVal2.append(value) + def insert_doubleVal2(self, index, value): self.doubleVal2[index] = value + def get_floatVal1(self): return self.floatVal1 + def set_floatVal1(self, floatVal1): self.floatVal1 = floatVal1 + def get_floatVal2(self): return self.floatVal2 + def set_floatVal2(self, floatVal2): self.floatVal2 = floatVal2 + def add_floatVal2(self, value): self.floatVal2.append(value) + def insert_floatVal2(self, index, value): self.floatVal2[index] = value + def get_dateVal1(self): return self.dateVal1 + def set_dateVal1(self, dateVal1): self.dateVal1 = dateVal1 + def get_dateVal2(self): return self.dateVal2 + def set_dateVal2(self, dateVal2): self.dateVal2 = dateVal2 + def add_dateVal2(self, value): self.dateVal2.append(value) + def insert_dateVal2(self, index, value): self.dateVal2[index] = value + def get_dateTimeVal1(self): return self.dateTimeVal1 + def set_dateTimeVal1(self, dateTimeVal1): self.dateTimeVal1 = dateTimeVal1 + def get_dateTimeVal2(self): return self.dateTimeVal2 + def set_dateTimeVal2(self, dateTimeVal2): self.dateTimeVal2 = dateTimeVal2 + def add_dateTimeVal2(self, value): self.dateTimeVal2.append(value) + def insert_dateTimeVal2(self, index, value): self.dateTimeVal2[index] = value + def export(self, outfile, level, namespace_='', name_='simpleTypeTest', namespacedef_='', pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = [] + self.exportAttributes(outfile, level, already_processed, namespace_, name_='simpleTypeTest') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + showIndent(outfile, level, pretty_print) + outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) + else: + outfile.write('/>%s' % (eol_, )) + def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='simpleTypeTest'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='simpleTypeTest', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.datetime1 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdatetime1>%s</%sdatetime1>%s' % (namespace_, self.gds_format_string(quote_xml(self.datetime1).encode(ExternalEncoding), input_name='datetime1'), namespace_, eol_)) + if self.datetime2 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdatetime2>%s</%sdatetime2>%s' % (namespace_, self.gds_format_string(quote_xml(self.datetime2).encode(ExternalEncoding), input_name='datetime2'), namespace_, eol_)) + if self.datetime3 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdatetime3>%s</%sdatetime3>%s' % (namespace_, self.gds_format_string(quote_xml(self.datetime3).encode(ExternalEncoding), input_name='datetime3'), namespace_, eol_)) + if self.datetime4 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdatetime4>%s</%sdatetime4>%s' % (namespace_, self.gds_format_string(quote_xml(self.datetime4).encode(ExternalEncoding), input_name='datetime4'), namespace_, eol_)) + if self.datetime5 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdatetime5>%s</%sdatetime5>%s' % (namespace_, self.gds_format_string(quote_xml(self.datetime5).encode(ExternalEncoding), input_name='datetime5'), namespace_, eol_)) + if self.integerVal1 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sintegerVal1>%s</%sintegerVal1>%s' % (namespace_, self.gds_format_integer(self.integerVal1, input_name='integerVal1'), namespace_, eol_)) + for integerVal2_ in self.integerVal2: + showIndent(outfile, level, pretty_print) + outfile.write('<%sintegerVal2>%s</%sintegerVal2>%s' % (namespace_, self.gds_format_integer(integerVal2_, input_name='integerVal2'), namespace_, eol_)) + if self.stringVal1 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sstringVal1>%s</%sstringVal1>%s' % (namespace_, self.gds_format_string(quote_xml(self.stringVal1).encode(ExternalEncoding), input_name='stringVal1'), namespace_, eol_)) + for stringVal2_ in self.stringVal2: + showIndent(outfile, level, pretty_print) + outfile.write('<%sstringVal2>%s</%sstringVal2>%s' % (namespace_, self.gds_format_string(quote_xml(stringVal2_).encode(ExternalEncoding), input_name='stringVal2'), namespace_, eol_)) + if self.booleanVal1 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sbooleanVal1>%s</%sbooleanVal1>%s' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.booleanVal1)), input_name='booleanVal1'), namespace_, eol_)) + for booleanVal2_ in self.booleanVal2: + showIndent(outfile, level, pretty_print) + outfile.write('<%sbooleanVal2>%s</%sbooleanVal2>%s' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(booleanVal2_)), input_name='booleanVal2'), namespace_, eol_)) + if self.decimalVal1 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdecimalVal1>%s</%sdecimalVal1>%s' % (namespace_, self.gds_format_float(self.decimalVal1, input_name='decimalVal1'), namespace_, eol_)) + for decimalVal2_ in self.decimalVal2: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdecimalVal2>%s</%sdecimalVal2>%s' % (namespace_, self.gds_format_float(decimalVal2_, input_name='decimalVal2'), namespace_, eol_)) + if self.doubleVal1 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdoubleVal1>%s</%sdoubleVal1>%s' % (namespace_, self.gds_format_double(self.doubleVal1, input_name='doubleVal1'), namespace_, eol_)) + for doubleVal2_ in self.doubleVal2: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdoubleVal2>%s</%sdoubleVal2>%s' % (namespace_, self.gds_format_double(doubleVal2_, input_name='doubleVal2'), namespace_, eol_)) + if self.floatVal1 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sfloatVal1>%s</%sfloatVal1>%s' % (namespace_, self.gds_format_float(self.floatVal1, input_name='floatVal1'), namespace_, eol_)) + for floatVal2_ in self.floatVal2: + showIndent(outfile, level, pretty_print) + outfile.write('<%sfloatVal2>%s</%sfloatVal2>%s' % (namespace_, self.gds_format_float(floatVal2_, input_name='floatVal2'), namespace_, eol_)) + if self.dateVal1 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdateVal1>%s</%sdateVal1>%s' % (namespace_, self.gds_format_date(self.dateVal1, input_name='dateVal1'), namespace_, eol_)) + for dateVal2_ in self.dateVal2: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdateVal2>%s</%sdateVal2>%s' % (namespace_, self.gds_format_date(dateVal2_, input_name='dateVal2'), namespace_, eol_)) + if self.dateTimeVal1 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdateTimeVal1>%s</%sdateTimeVal1>%s' % (namespace_, self.gds_format_datetime(self.dateTimeVal1, input_name='dateTimeVal1'), namespace_, eol_)) + for dateTimeVal2_ in self.dateTimeVal2: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdateTimeVal2>%s</%sdateTimeVal2>%s' % (namespace_, self.gds_format_datetime(dateTimeVal2_, input_name='dateTimeVal2'), namespace_, eol_)) + def hasContent_(self): + if ( + self.datetime1 is not None or + self.datetime2 is not None or + self.datetime3 is not None or + self.datetime4 is not None or + self.datetime5 is not None or + self.integerVal1 is not None or + self.integerVal2 or + self.stringVal1 is not None or + self.stringVal2 or + self.booleanVal1 is not None or + self.booleanVal2 or + self.decimalVal1 is not None or + self.decimalVal2 or + self.doubleVal1 is not None or + self.doubleVal2 or + self.floatVal1 is not None or + self.floatVal2 or + self.dateVal1 is not None or + self.dateVal2 or + self.dateTimeVal1 is not None or + self.dateTimeVal2 + ): + return True + else: + return False + def exportLiteral(self, outfile, level, name_='simpleTypeTest'): + level += 1 + self.exportLiteralAttributes(outfile, level, [], name_) + if self.hasContent_(): + self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, already_processed, name_): + pass + def exportLiteralChildren(self, outfile, level, name_): + if self.datetime1 is not None: + showIndent(outfile, level) + outfile.write('datetime1=%s,\n' % quote_python(self.datetime1).encode(ExternalEncoding)) + if self.datetime2 is not None: + showIndent(outfile, level) + outfile.write('datetime2=%s,\n' % quote_python(self.datetime2).encode(ExternalEncoding)) + if self.datetime3 is not None: + showIndent(outfile, level) + outfile.write('datetime3=%s,\n' % quote_python(self.datetime3).encode(ExternalEncoding)) + if self.datetime4 is not None: + showIndent(outfile, level) + outfile.write('datetime4=%s,\n' % quote_python(self.datetime4).encode(ExternalEncoding)) + if self.datetime5 is not None: + showIndent(outfile, level) + outfile.write('datetime5=%s,\n' % quote_python(self.datetime5).encode(ExternalEncoding)) + if self.integerVal1 is not None: + showIndent(outfile, level) + outfile.write('integerVal1=%d,\n' % self.integerVal1) + showIndent(outfile, level) + outfile.write('integerVal2=[\n') + level += 1 + for integerVal2_ in self.integerVal2: + showIndent(outfile, level) + outfile.write('%d,\n' % integerVal2_) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + if self.stringVal1 is not None: + showIndent(outfile, level) + outfile.write('stringVal1=%s,\n' % quote_python(self.stringVal1).encode(ExternalEncoding)) + showIndent(outfile, level) + outfile.write('stringVal2=[\n') + level += 1 + for stringVal2_ in self.stringVal2: + showIndent(outfile, level) + outfile.write('%s,\n' % quote_python(stringVal2_).encode(ExternalEncoding)) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + if self.booleanVal1 is not None: + showIndent(outfile, level) + outfile.write('booleanVal1=%s,\n' % self.booleanVal1) + showIndent(outfile, level) + outfile.write('booleanVal2=[\n') + level += 1 + for booleanVal2_ in self.booleanVal2: + showIndent(outfile, level) + outfile.write('%s,\n' % booleanVal2_) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + if self.decimalVal1 is not None: + showIndent(outfile, level) + outfile.write('decimalVal1=%f,\n' % self.decimalVal1) + showIndent(outfile, level) + outfile.write('decimalVal2=[\n') + level += 1 + for decimalVal2_ in self.decimalVal2: + showIndent(outfile, level) + outfile.write('%f,\n' % decimalVal2_) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + if self.doubleVal1 is not None: + showIndent(outfile, level) + outfile.write('doubleVal1=%e,\n' % self.doubleVal1) + showIndent(outfile, level) + outfile.write('doubleVal2=[\n') + level += 1 + for doubleVal2_ in self.doubleVal2: + showIndent(outfile, level) + outfile.write('%e,\n' % doubleVal2_) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + if self.floatVal1 is not None: + showIndent(outfile, level) + outfile.write('floatVal1=%f,\n' % self.floatVal1) + showIndent(outfile, level) + outfile.write('floatVal2=[\n') + level += 1 + for floatVal2_ in self.floatVal2: + showIndent(outfile, level) + outfile.write('%f,\n' % floatVal2_) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + if self.dateVal1 is not None: + showIndent(outfile, level) + outfile.write('dateVal1=datetime_.strptime("%s", "%%Y-%%m-%%d"),\n' % self.gds_format_date(self.dateVal1, input_name='dateVal1')) + showIndent(outfile, level) + outfile.write('dateVal2=[\n') + level += 1 + for dateVal2_ in self.dateVal2: + showIndent(outfile, level) + outfile.write('%s,\n' % self.gds_format_date(dateVal2_, input_name='dateVal2')) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + if self.dateTimeVal1 is not None: + showIndent(outfile, level) + outfile.write('dateTimeVal1=datetime_.strptime("%s", "%%Y-%%m-%%dT%%H:%%M:%%S"),\n' % self.gds_format_datetime(self.dateTimeVal1, input_name='dateTimeVal1')) + showIndent(outfile, level) + outfile.write('dateTimeVal2=[\n') + level += 1 + for dateTimeVal2_ in self.dateTimeVal2: + showIndent(outfile, level) + outfile.write('%s,\n' % self.gds_format_datetime(dateTimeVal2_, input_name='dateTimeVal2')) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + def build(self, node): + self.buildAttributes(node, node.attrib, []) + for child in node: + nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] + self.buildChildren(child, node, nodeName_) + def buildAttributes(self, node, attrs, already_processed): + pass + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + if nodeName_ == 'datetime1': + datetime1_ = child_.text + datetime1_ = self.gds_validate_string(datetime1_, node, 'datetime1') + self.datetime1 = datetime1_ + elif nodeName_ == 'datetime2': + datetime2_ = child_.text + datetime2_ = self.gds_validate_string(datetime2_, node, 'datetime2') + self.datetime2 = datetime2_ + elif nodeName_ == 'datetime3': + datetime3_ = child_.text + datetime3_ = self.gds_validate_string(datetime3_, node, 'datetime3') + self.datetime3 = datetime3_ + elif nodeName_ == 'datetime4': + datetime4_ = child_.text + datetime4_ = self.gds_validate_string(datetime4_, node, 'datetime4') + self.datetime4 = datetime4_ + elif nodeName_ == 'datetime5': + datetime5_ = child_.text + datetime5_ = self.gds_validate_string(datetime5_, node, 'datetime5') + self.datetime5 = datetime5_ + elif nodeName_ == 'integerVal1': + sval_ = child_.text + try: + ival_ = int(sval_) + except (TypeError, ValueError), exp: + raise_parse_error(child_, 'requires integer: %s' % exp) + ival_ = self.gds_validate_integer(ival_, node, 'integerVal1') + self.integerVal1 = ival_ + elif nodeName_ == 'integerVal2': + sval_ = child_.text + try: + ival_ = int(sval_) + except (TypeError, ValueError), exp: + raise_parse_error(child_, 'requires integer: %s' % exp) + ival_ = self.gds_validate_integer(ival_, node, 'integerVal2') + self.integerVal2.append(ival_) + elif nodeName_ == 'stringVal1': + stringVal1_ = child_.text + stringVal1_ = self.gds_validate_string(stringVal1_, node, 'stringVal1') + self.stringVal1 = stringVal1_ + elif nodeName_ == 'stringVal2': + stringVal2_ = child_.text + stringVal2_ = self.gds_validate_string(stringVal2_, node, 'stringVal2') + self.stringVal2.append(stringVal2_) + elif nodeName_ == 'booleanVal1': + sval_ = child_.text + if sval_ in ('true', '1'): + ival_ = True + elif sval_ in ('false', '0'): + ival_ = False + else: + raise_parse_error(child_, 'requires boolean') + ival_ = self.gds_validate_boolean(ival_, node, 'booleanVal1') + self.booleanVal1 = ival_ + elif nodeName_ == 'booleanVal2': + sval_ = child_.text + if sval_ in ('true', '1'): + ival_ = True + elif sval_ in ('false', '0'): + ival_ = False + else: + raise_parse_error(child_, 'requires boolean') + ival_ = self.gds_validate_boolean(ival_, node, 'booleanVal2') + self.booleanVal2.append(ival_) + elif nodeName_ == 'decimalVal1': + sval_ = child_.text + try: + fval_ = float(sval_) + except (TypeError, ValueError), exp: + raise_parse_error(child_, 'requires float or double: %s' % exp) + fval_ = self.gds_validate_float(fval_, node, 'decimalVal1') + self.decimalVal1 = fval_ + elif nodeName_ == 'decimalVal2': + sval_ = child_.text + try: + fval_ = float(sval_) + except (TypeError, ValueError), exp: + 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': + sval_ = child_.text + try: + fval_ = float(sval_) + except (TypeError, ValueError), exp: + raise_parse_error(child_, 'requires float or double: %s' % exp) + fval_ = self.gds_validate_float(fval_, node, 'doubleVal1') + self.doubleVal1 = fval_ + elif nodeName_ == 'doubleVal2': + sval_ = child_.text + try: + fval_ = float(sval_) + except (TypeError, ValueError), exp: + 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': + sval_ = child_.text + try: + fval_ = float(sval_) + except (TypeError, ValueError), exp: + raise_parse_error(child_, 'requires float or double: %s' % exp) + fval_ = self.gds_validate_float(fval_, node, 'floatVal1') + self.floatVal1 = fval_ + elif nodeName_ == 'floatVal2': + sval_ = child_.text + try: + fval_ = float(sval_) + except (TypeError, ValueError), exp: + raise_parse_error(child_, 'requires float or double: %s' % exp) + fval_ = self.gds_validate_float(fval_, node, 'floatVal2') + self.floatVal2.append(fval_) + elif nodeName_ == 'dateVal1': + sval_ = child_.text + dval_ = self.gds_parse_date(sval_, node, 'dateVal1') + self.dateVal1 = dval_ + elif nodeName_ == 'dateVal2': + sval_ = child_.text + dval_ = self.gds_parse_date(sval_, node, 'dateVal2') + self.dateVal2.append(dval_) + elif nodeName_ == 'dateTimeVal1': + sval_ = child_.text + dval_ = self.gds_parse_datetime(sval_, node, 'dateTimeVal1') + self.dateTimeVal1 = dval_ + elif nodeName_ == 'dateTimeVal2': + sval_ = child_.text + dval_ = self.gds_parse_datetime(sval_, node, 'dateTimeVal2') + self.dateTimeVal2.append(dval_) +# end class simpleTypeTest + + +GDSClassesMapping = { + 'simpleTypeTests': simpleTypeTestsType, +} + + +USAGE_TEXT = """ +Usage: python <Parser>.py [ -s ] <in_xml_file> +""" + +def usage(): + print USAGE_TEXT + sys.exit(1) + + +def get_root_tag(node): + tag = Tag_pattern_.match(node.tag).groups()[-1] + rootClass = GDSClassesMapping.get(tag) + if rootClass is None: + rootClass = globals().get(tag) + return tag, rootClass + + +def parse(inFileName): + doc = parsexml_(inFileName) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'simpleTypeTests' + rootClass = simpleTypeTestsType + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('<?xml version="1.0" ?>\n') +## rootObj.export(sys.stdout, 0, name_=rootTag, +## namespacedef_='', +## pretty_print=True) + return rootObj + + +def parseString(inString): + from StringIO import StringIO + doc = parsexml_(StringIO(inString)) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'simpleTypeTests' + rootClass = simpleTypeTestsType + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('<?xml version="1.0" ?>\n') +## rootObj.export(sys.stdout, 0, name_="simpleTypeTests", +## namespacedef_='') + return rootObj + + +def parseLiteral(inFileName): + doc = parsexml_(inFileName) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'simpleTypeTests' + rootClass = simpleTypeTestsType + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('#from simpletypes_other2_sup import *\n\n') +## sys.stdout.write('from datetime import datetime as datetime_\n\n') +## sys.stdout.write('import simpletypes_other2_sup as model_\n\n') +## sys.stdout.write('rootObj = model_.rootTag(\n') +## rootObj.exportLiteral(sys.stdout, 0, name_=rootTag) +## sys.stdout.write(')\n') + return rootObj + + +def main(): + args = sys.argv[1:] + if len(args) == 1: + parse(args[0]) + else: + usage() + + +if __name__ == '__main__': + #import pdb; pdb.set_trace() + main() + + +__all__ = [ + "simpleTypeTest", + "simpleTypeTestsType" + ] diff --git a/tests/simpletypes_other2_sub.py b/tests/simpletypes_other2_sub.py new file mode 100644 index 0000000000000000000000000000000000000000..8c6fb98977535a0d4bf325a70d6fd51c4fbf8ca5 --- /dev/null +++ b/tests/simpletypes_other2_sub.py @@ -0,0 +1,175 @@ +#!/usr/bin/env python + +# +# Generated by generateDS.py. +# + +import sys + +import simpletypes_other2_sup as supermod + +etree_ = None +Verbose_import_ = False +( XMLParser_import_none, XMLParser_import_lxml, + XMLParser_import_elementtree + ) = range(3) +XMLParser_import_library = None +try: + # lxml + from lxml import etree as etree_ + XMLParser_import_library = XMLParser_import_lxml + if Verbose_import_: + print("running with lxml.etree") +except ImportError: + try: + # cElementTree from Python 2.5+ + import xml.etree.cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree on Python 2.5+") + except ImportError: + try: + # ElementTree from Python 2.5+ + import xml.etree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree on Python 2.5+") + except ImportError: + try: + # normal cElementTree install + import cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree") + except ImportError: + try: + # normal ElementTree install + import elementtree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree") + except ImportError: + raise ImportError( + "Failed to import ElementTree from any known place") + +def parsexml_(*args, **kwargs): + if (XMLParser_import_library == XMLParser_import_lxml and + 'parser' not in kwargs): + # Use the lxml ElementTree compatible parser so that, e.g., + # we ignore comments. + kwargs['parser'] = etree_.ETCompatXMLParser() + doc = etree_.parse(*args, **kwargs) + return doc + +# +# Globals +# + +ExternalEncoding = 'ascii' + +# +# Data representation classes +# + +class simpleTypeTestsTypeSub(supermod.simpleTypeTestsType): + def __init__(self, simpleTypeTest=None): + super(simpleTypeTestsTypeSub, self).__init__(simpleTypeTest, ) +supermod.simpleTypeTestsType.subclass = simpleTypeTestsTypeSub +# end class simpleTypeTestsTypeSub + + +class simpleTypeTestSub(supermod.simpleTypeTest): + def __init__(self, datetime1=None, datetime2=None, datetime3=None, datetime4=None, datetime5=None, integerVal1=None, integerVal2=None, stringVal1=None, stringVal2=None, booleanVal1=None, booleanVal2=None, decimalVal1=None, decimalVal2=None, doubleVal1=None, doubleVal2=None, floatVal1=None, floatVal2=None, dateVal1=None, dateVal2=None, dateTimeVal1=None, dateTimeVal2=None): + super(simpleTypeTestSub, self).__init__(datetime1, datetime2, datetime3, datetime4, datetime5, integerVal1, integerVal2, stringVal1, stringVal2, booleanVal1, booleanVal2, decimalVal1, decimalVal2, doubleVal1, doubleVal2, floatVal1, floatVal2, dateVal1, dateVal2, dateTimeVal1, dateTimeVal2, ) +supermod.simpleTypeTest.subclass = simpleTypeTestSub +# end class simpleTypeTestSub + + + +def get_root_tag(node): + tag = supermod.Tag_pattern_.match(node.tag).groups()[-1] + rootClass = None + rootClass = supermod.GDSClassesMapping.get(tag) + if rootClass is None and hasattr(supermod, tag): + rootClass = getattr(supermod, tag) + return tag, rootClass + + +def parse(inFilename): + doc = parsexml_(inFilename) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'simpleTypeTests' + rootClass = supermod.simpleTypeTestsType + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('<?xml version="1.0" ?>\n') +## rootObj.export(sys.stdout, 0, name_=rootTag, +## namespacedef_='', +## pretty_print=True) + doc = None + return rootObj + + +def parseString(inString): + from StringIO import StringIO + doc = parsexml_(StringIO(inString)) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'simpleTypeTests' + rootClass = supermod.simpleTypeTestsType + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('<?xml version="1.0" ?>\n') +## rootObj.export(sys.stdout, 0, name_=rootTag, +## namespacedef_='') + return rootObj + + +def parseLiteral(inFilename): + doc = parsexml_(inFilename) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'simpleTypeTests' + rootClass = supermod.simpleTypeTestsType + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('#from simpletypes_other2_sup import *\n\n') +## sys.stdout.write('import simpletypes_other2_sup as model_\n\n') +## sys.stdout.write('rootObj = model_.simpleTypeTests(\n') +## rootObj.exportLiteral(sys.stdout, 0, name_="simpleTypeTests") +## sys.stdout.write(')\n') + return rootObj + + +USAGE_TEXT = """ +Usage: python ???.py <infilename> +""" + +def usage(): + print USAGE_TEXT + sys.exit(1) + + +def main(): + args = sys.argv[1:] + if len(args) != 1: + usage() + infilename = args[0] + root = parse(infilename) + + +if __name__ == '__main__': + #import pdb; pdb.set_trace() + main() + + diff --git a/tests/simpletypes_other2_sup.py b/tests/simpletypes_other2_sup.py new file mode 100644 index 0000000000000000000000000000000000000000..831ce7bc0f1da8a38069c2cc8a7dc0d3275506a4 --- /dev/null +++ b/tests/simpletypes_other2_sup.py @@ -0,0 +1,1159 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# +# Generated by generateDS.py. +# + +import sys +import getopt +import re as re_ +import base64 +from datetime import datetime, tzinfo, timedelta + +etree_ = None +Verbose_import_ = False +( XMLParser_import_none, XMLParser_import_lxml, + XMLParser_import_elementtree + ) = range(3) +XMLParser_import_library = None +try: + # lxml + from lxml import etree as etree_ + XMLParser_import_library = XMLParser_import_lxml + if Verbose_import_: + print("running with lxml.etree") +except ImportError: + try: + # cElementTree from Python 2.5+ + import xml.etree.cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree on Python 2.5+") + except ImportError: + try: + # ElementTree from Python 2.5+ + import xml.etree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree on Python 2.5+") + except ImportError: + try: + # normal cElementTree install + import cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree") + except ImportError: + try: + # normal ElementTree install + import elementtree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree") + except ImportError: + raise ImportError( + "Failed to import ElementTree from any known place") + +def parsexml_(*args, **kwargs): + if (XMLParser_import_library == XMLParser_import_lxml and + 'parser' not in kwargs): + # Use the lxml ElementTree compatible parser so that, e.g., + # we ignore comments. + kwargs['parser'] = etree_.ETCompatXMLParser() + doc = etree_.parse(*args, **kwargs) + return doc + +# +# User methods +# +# Calls to the methods in these classes are generated by generateDS.py. +# You can replace these methods by re-implementing the following class +# in a module named generatedssuper.py. + +try: + from generatedssuper import GeneratedsSuper +except ImportError, exp: + + class GeneratedsSuper(object): + tzoff_pattern = re_.compile(r'(\+|-)((0\d|1[0-3]):[0-5]\d|14:00)$') + class _FixedOffsetTZ(tzinfo): + def __init__(self, offset, name): + self.__offset = timedelta(minutes = offset) + self.__name = name + def utcoffset(self, dt): + return self.__offset + def tzname(self, dt): + return self.__name + def dst(self, dt): + return None + def gds_format_string(self, input_data, input_name=''): + return input_data + def gds_validate_string(self, input_data, node, input_name=''): + return input_data + def gds_format_base64(self, input_data, input_name=''): + return base64.b64encode(input_data) + def gds_validate_base64(self, input_data, node, input_name=''): + return input_data + def gds_format_integer(self, input_data, input_name=''): + return '%d' % input_data + def gds_validate_integer(self, input_data, node, input_name=''): + return input_data + def gds_format_integer_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_integer_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + try: + fvalue = float(value) + except (TypeError, ValueError), exp: + raise_parse_error(node, 'Requires sequence of integers') + return input_data + def gds_format_float(self, input_data, input_name=''): + return '%f' % input_data + def gds_validate_float(self, input_data, node, input_name=''): + return input_data + def gds_format_float_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_float_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + try: + fvalue = float(value) + except (TypeError, ValueError), exp: + raise_parse_error(node, 'Requires sequence of floats') + return input_data + def gds_format_double(self, input_data, input_name=''): + return '%e' % input_data + def gds_validate_double(self, input_data, node, input_name=''): + return input_data + def gds_format_double_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_double_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + try: + fvalue = float(value) + except (TypeError, ValueError), exp: + raise_parse_error(node, 'Requires sequence of doubles') + return input_data + def gds_format_boolean(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_boolean(self, input_data, node, input_name=''): + return input_data + def gds_format_boolean_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_boolean_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + if value not in ('true', '1', 'false', '0', ): + raise_parse_error(node, + 'Requires sequence of booleans ' + '("true", "1", "false", "0")') + return input_data + def gds_validate_datetime(self, input_data, node, input_name=''): + return input_data + def gds_format_datetime(self, input_data, input_name=''): + _svalue = input_data.strftime('%Y-%m-%dT%H:%M:%S') + if input_data.tzinfo is not None: + tzoff = input_data.tzinfo.utcoffset(input_data) + if tzoff is not None: + total_seconds = tzoff.seconds + (86400 * tzoff.days) + if total_seconds == 0: + _svalue += 'Z' + else: + if total_seconds < 0: + _svalue += '-' + total_seconds *= -1 + else: + _svalue += '+' + hours = total_seconds // 3600 + minutes = (total_seconds - (hours * 3600)) // 60 + _svalue += '{0:02d}:{1:02d}'.format(hours, minutes) + return _svalue + def gds_parse_datetime(self, input_data, node, input_name=''): + tz = None + if input_data[-1] == 'Z': + tz = GeneratedsSuper._FixedOffsetTZ(0, 'GMT') + input_data = input_data[:-1] + else: + results = GeneratedsSuper.tzoff_pattern.search(input_data) + if results is not None: + tzoff_parts = results.group(2).split(':') + tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1]) + if results.group(1) == '-': + tzoff *= -1 + tz = GeneratedsSuper._FixedOffsetTZ( + tzoff, results.group(0)) + input_data = input_data[:-6] + return datetime.strptime(input_data, + '%Y-%m-%dT%H:%M:%S').replace(tzinfo = tz) + def gds_validate_date(self, input_data, node, input_name=''): + return input_data + def gds_format_date(self, input_data, input_name=''): + _svalue = input_data.strftime('%Y-%m-%d') + if input_data.tzinfo is not None: + tzoff = input_data.tzinfo.utcoffset(input_data) + if tzoff is not None: + total_seconds = tzoff.seconds + (86400 * tzoff.days) + if total_seconds == 0: + _svalue += 'Z' + else: + if total_seconds < 0: + _svalue += '-' + total_seconds *= -1 + else: + _svalue += '+' + hours = total_seconds // 3600 + minutes = (total_seconds - (hours * 3600)) // 60 + _svalue += '{0:02d}:{1:02d}'.format(hours, minutes) + return _svalue + def gds_parse_date(self, input_data, node, input_name=''): + tz = None + if input_data[-1] == 'Z': + tz = GeneratedsSuper._FixedOffsetTZ(0, 'GMT') + input_data = input_data[:-1] + else: + results = GeneratedsSuper.tzoff_pattern.search(input_data) + if results is not None: + tzoff_parts = results.group(2).split(':') + tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1]) + if results.group(1) == '-': + tzoff *= -1 + tz = GeneratedsSuper._FixedOffsetTZ( + tzoff, results.group(0)) + input_data = input_data[:-6] + return datetime.strptime(input_data, + '%Y-%m-%d').replace(tzinfo = tz) + def gds_str_lower(self, instring): + return instring.lower() + def get_path_(self, node): + path_list = [] + self.get_path_list_(node, path_list) + path_list.reverse() + path = '/'.join(path_list) + return path + Tag_strip_pattern_ = re_.compile(r'\{.*\}') + def get_path_list_(self, node, path_list): + if node is None: + return + tag = GeneratedsSuper.Tag_strip_pattern_.sub('', node.tag) + if tag: + path_list.append(tag) + self.get_path_list_(node.getparent(), path_list) + def get_class_obj_(self, node, default_class=None): + class_obj1 = default_class + if 'xsi' in node.nsmap: + classname = node.get('{%s}type' % node.nsmap['xsi']) + if classname is not None: + names = classname.split(':') + if len(names) == 2: + classname = names[1] + class_obj2 = globals().get(classname) + if class_obj2 is not None: + class_obj1 = class_obj2 + return class_obj1 + def gds_build_any(self, node, type_name=None): + return None + + +# +# If you have installed IPython you can uncomment and use the following. +# IPython is available from http://ipython.scipy.org/. +# + +## from IPython.Shell import IPShellEmbed +## args = '' +## ipshell = IPShellEmbed(args, +## banner = 'Dropping into IPython', +## exit_msg = 'Leaving Interpreter, back to program.') + +# Then use the following line where and when you want to drop into the +# IPython shell: +# ipshell('<some message> -- Entering ipshell.\nHit Ctrl-D to exit') + +# +# Globals +# + +ExternalEncoding = 'ascii' +Tag_pattern_ = re_.compile(r'({.*})?(.*)') +String_cleanup_pat_ = re_.compile(r"[\n\r\s]+") +Namespace_extract_pat_ = re_.compile(r'{(.*)}(.*)') + +# +# Support/utility functions. +# + +def showIndent(outfile, level, pretty_print=True): + if pretty_print: + for idx in range(level): + outfile.write(' ') + +def quote_xml(inStr): + if not inStr: + return '' + s1 = (isinstance(inStr, basestring) and inStr or + '%s' % inStr) + s1 = s1.replace('&', '&') + s1 = s1.replace('<', '<') + s1 = s1.replace('>', '>') + return s1 + +def quote_attrib(inStr): + s1 = (isinstance(inStr, basestring) and inStr or + '%s' % inStr) + s1 = s1.replace('&', '&') + s1 = s1.replace('<', '<') + s1 = s1.replace('>', '>') + if '"' in s1: + if "'" in s1: + s1 = '"%s"' % s1.replace('"', """) + else: + s1 = "'%s'" % s1 + else: + s1 = '"%s"' % s1 + return s1 + +def quote_python(inStr): + s1 = inStr + if s1.find("'") == -1: + if s1.find('\n') == -1: + return "'%s'" % s1 + else: + return "'''%s'''" % s1 + else: + if s1.find('"') != -1: + s1 = s1.replace('"', '\\"') + if s1.find('\n') == -1: + return '"%s"' % s1 + else: + return '"""%s"""' % s1 + +def get_all_text_(node): + if node.text is not None: + text = node.text + else: + text = '' + for child in node: + if child.tail is not None: + text += child.tail + return text + +def find_attr_value_(attr_name, node): + attrs = node.attrib + attr_parts = attr_name.split(':') + value = None + if len(attr_parts) == 1: + value = attrs.get(attr_name) + elif len(attr_parts) == 2: + prefix, name = attr_parts + namespace = node.nsmap.get(prefix) + if namespace is not None: + value = attrs.get('{%s}%s' % (namespace, name, )) + return value + + +class GDSParseError(Exception): + pass + +def raise_parse_error(node, msg): + if XMLParser_import_library == XMLParser_import_lxml: + msg = '%s (element %s/line %d)' % ( + msg, node.tag, node.sourceline, ) + else: + msg = '%s (element %s)' % (msg, node.tag, ) + raise GDSParseError(msg) + + +class MixedContainer: + # Constants for category: + CategoryNone = 0 + CategoryText = 1 + CategorySimple = 2 + CategoryComplex = 3 + # Constants for content_type: + TypeNone = 0 + TypeText = 1 + TypeString = 2 + TypeInteger = 3 + TypeFloat = 4 + TypeDecimal = 5 + TypeDouble = 6 + TypeBoolean = 7 + TypeBase64 = 8 + def __init__(self, category, content_type, name, value): + self.category = category + self.content_type = content_type + self.name = name + self.value = value + def getCategory(self): + return self.category + def getContenttype(self, content_type): + return self.content_type + def getValue(self): + return self.value + def getName(self): + return self.name + def export(self, outfile, level, name, namespace, pretty_print=True): + if self.category == MixedContainer.CategoryText: + # Prevent exporting empty content as empty lines. + if self.value.strip(): + outfile.write(self.value) + elif self.category == MixedContainer.CategorySimple: + self.exportSimple(outfile, level, name) + else: # category == MixedContainer.CategoryComplex + self.value.export(outfile, level, namespace, name, pretty_print) + def exportSimple(self, outfile, level, name): + if self.content_type == MixedContainer.TypeString: + outfile.write('<%s>%s</%s>' % + (self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeInteger or \ + self.content_type == MixedContainer.TypeBoolean: + outfile.write('<%s>%d</%s>' % + (self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeFloat or \ + self.content_type == MixedContainer.TypeDecimal: + outfile.write('<%s>%f</%s>' % + (self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeDouble: + outfile.write('<%s>%g</%s>' % + (self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeBase64: + outfile.write('<%s>%s</%s>' % + (self.name, base64.b64encode(self.value), self.name)) + def exportLiteral(self, outfile, level, name): + if self.category == MixedContainer.CategoryText: + showIndent(outfile, level) + outfile.write('model_.MixedContainer(%d, %d, "%s", "%s"),\n' + % (self.category, self.content_type, self.name, self.value)) + elif self.category == MixedContainer.CategorySimple: + showIndent(outfile, level) + outfile.write('model_.MixedContainer(%d, %d, "%s", "%s"),\n' + % (self.category, self.content_type, self.name, self.value)) + else: # category == MixedContainer.CategoryComplex + showIndent(outfile, level) + outfile.write('model_.MixedContainer(%d, %d, "%s",\n' % \ + (self.category, self.content_type, self.name,)) + self.value.exportLiteral(outfile, level + 1) + showIndent(outfile, level) + outfile.write(')\n') + + +class MemberSpec_(object): + def __init__(self, name='', data_type='', container=0): + self.name = name + self.data_type = data_type + self.container = container + def set_name(self, name): self.name = name + def get_name(self): return self.name + def set_data_type(self, data_type): self.data_type = data_type + def get_data_type_chain(self): return self.data_type + def get_data_type(self): + if isinstance(self.data_type, list): + if len(self.data_type) > 0: + return self.data_type[-1] + else: + return 'xs:string' + else: + return self.data_type + def set_container(self, container): self.container = container + def get_container(self): return self.container + +def _cast(typ, value): + if typ is None or value is None: + return value + return typ(value) + +# +# Data representation classes. +# + +class simpleTypeTestsType(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('simpleTypeTest', 'simpleTypeTest', 1), + ] + subclass = None + superclass = None + def __init__(self, simpleTypeTest=None): + if simpleTypeTest is None: + self.simpleTypeTest = [] + else: + self.simpleTypeTest = simpleTypeTest + def factory(*args_, **kwargs_): + if simpleTypeTestsType.subclass: + return simpleTypeTestsType.subclass(*args_, **kwargs_) + else: + return simpleTypeTestsType(*args_, **kwargs_) + factory = staticmethod(factory) + def get_simpleTypeTest(self): return self.simpleTypeTest + def set_simpleTypeTest(self, simpleTypeTest): self.simpleTypeTest = simpleTypeTest + def add_simpleTypeTest(self, value): self.simpleTypeTest.append(value) + def insert_simpleTypeTest(self, index, value): self.simpleTypeTest[index] = value + def export(self, outfile, level, namespace_='', name_='simpleTypeTestsType', namespacedef_='', pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = [] + self.exportAttributes(outfile, level, already_processed, namespace_, name_='simpleTypeTestsType') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + showIndent(outfile, level, pretty_print) + outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) + else: + outfile.write('/>%s' % (eol_, )) + def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='simpleTypeTestsType'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='simpleTypeTestsType', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + for simpleTypeTest_ in self.simpleTypeTest: + showIndent(outfile, level, pretty_print) + outfile.write('<%ssimpleTypeTest>%s</%ssimpleTypeTest>%s' % (namespace_, self.gds_format_string(quote_xml(simpleTypeTest_).encode(ExternalEncoding), input_name='simpleTypeTest'), namespace_, eol_)) + def hasContent_(self): + if ( + self.simpleTypeTest + ): + return True + else: + return False + def exportLiteral(self, outfile, level, name_='simpleTypeTestsType'): + level += 1 + self.exportLiteralAttributes(outfile, level, [], name_) + if self.hasContent_(): + self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, already_processed, name_): + pass + def exportLiteralChildren(self, outfile, level, name_): + showIndent(outfile, level) + outfile.write('simpleTypeTest=[\n') + level += 1 + for simpleTypeTest_ in self.simpleTypeTest: + showIndent(outfile, level) + outfile.write('%s,\n' % quote_python(simpleTypeTest_).encode(ExternalEncoding)) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + def build(self, node): + self.buildAttributes(node, node.attrib, []) + for child in node: + nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] + self.buildChildren(child, node, nodeName_) + def buildAttributes(self, node, attrs, already_processed): + pass + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + if nodeName_ == 'simpleTypeTest': + simpleTypeTest_ = child_.text + simpleTypeTest_ = self.gds_validate_string(simpleTypeTest_, node, 'simpleTypeTest') + self.simpleTypeTest.append(simpleTypeTest_) +# end class simpleTypeTestsType + + +class simpleTypeTest(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('datetime1', 'xs:gYear', 0), + MemberSpec_('datetime2', 'xs:gYearMonth', 0), + MemberSpec_('datetime3', 'xs:gMonth', 0), + MemberSpec_('datetime4', 'xs:gMonthDay', 0), + MemberSpec_('datetime5', 'xs:gDay', 0), + MemberSpec_('integerVal1', 'xs:integer', 0), + MemberSpec_('integerVal2', 'xs:integer', 1), + MemberSpec_('stringVal1', 'xs:string', 0), + MemberSpec_('stringVal2', 'xs:string', 1), + MemberSpec_('booleanVal1', 'xs:boolean', 0), + MemberSpec_('booleanVal2', 'xs:boolean', 1), + MemberSpec_('decimalVal1', 'xs:decimal', 0), + MemberSpec_('decimalVal2', 'xs:decimal', 1), + MemberSpec_('doubleVal1', 'xs:double', 0), + MemberSpec_('doubleVal2', 'xs:double', 1), + MemberSpec_('floatVal1', 'xs:float', 0), + MemberSpec_('floatVal2', 'xs:float', 1), + MemberSpec_('dateVal1', 'xs:date', 0), + MemberSpec_('dateVal2', 'xs:date', 1), + MemberSpec_('dateTimeVal1', 'xs:dateTime', 0), + MemberSpec_('dateTimeVal2', 'xs:dateTime', 1), + ] + subclass = None + superclass = None + def __init__(self, datetime1=None, datetime2=None, datetime3=None, datetime4=None, datetime5=None, integerVal1=None, integerVal2=None, stringVal1=None, stringVal2=None, booleanVal1=None, booleanVal2=None, decimalVal1=None, decimalVal2=None, doubleVal1=None, doubleVal2=None, floatVal1=None, floatVal2=None, dateVal1=None, dateVal2=None, dateTimeVal1=None, dateTimeVal2=None): + self.datetime1 = datetime1 + self.datetime2 = datetime2 + self.datetime3 = datetime3 + self.datetime4 = datetime4 + self.datetime5 = datetime5 + self.integerVal1 = integerVal1 + if integerVal2 is None: + self.integerVal2 = [] + else: + self.integerVal2 = integerVal2 + self.stringVal1 = stringVal1 + if stringVal2 is None: + self.stringVal2 = [] + else: + self.stringVal2 = stringVal2 + self.booleanVal1 = booleanVal1 + if booleanVal2 is None: + self.booleanVal2 = [] + else: + self.booleanVal2 = booleanVal2 + self.decimalVal1 = decimalVal1 + if decimalVal2 is None: + self.decimalVal2 = [] + else: + self.decimalVal2 = decimalVal2 + self.doubleVal1 = doubleVal1 + if doubleVal2 is None: + self.doubleVal2 = [] + else: + self.doubleVal2 = doubleVal2 + self.floatVal1 = floatVal1 + if floatVal2 is None: + self.floatVal2 = [] + else: + self.floatVal2 = floatVal2 + self.dateVal1 = dateVal1 + if dateVal2 is None: + self.dateVal2 = [] + else: + self.dateVal2 = dateVal2 + self.dateTimeVal1 = dateTimeVal1 + if dateTimeVal2 is None: + self.dateTimeVal2 = [] + else: + self.dateTimeVal2 = dateTimeVal2 + def factory(*args_, **kwargs_): + if simpleTypeTest.subclass: + return simpleTypeTest.subclass(*args_, **kwargs_) + else: + return simpleTypeTest(*args_, **kwargs_) + factory = staticmethod(factory) + def get_datetime1(self): return self.datetime1 + def set_datetime1(self, datetime1): self.datetime1 = datetime1 + def get_datetime2(self): return self.datetime2 + def set_datetime2(self, datetime2): self.datetime2 = datetime2 + def get_datetime3(self): return self.datetime3 + def set_datetime3(self, datetime3): self.datetime3 = datetime3 + def get_datetime4(self): return self.datetime4 + def set_datetime4(self, datetime4): self.datetime4 = datetime4 + def get_datetime5(self): return self.datetime5 + def set_datetime5(self, datetime5): self.datetime5 = datetime5 + def get_integerVal1(self): return self.integerVal1 + def set_integerVal1(self, integerVal1): self.integerVal1 = integerVal1 + def get_integerVal2(self): return self.integerVal2 + def set_integerVal2(self, integerVal2): self.integerVal2 = integerVal2 + def add_integerVal2(self, value): self.integerVal2.append(value) + def insert_integerVal2(self, index, value): self.integerVal2[index] = value + def get_stringVal1(self): return self.stringVal1 + def set_stringVal1(self, stringVal1): self.stringVal1 = stringVal1 + def get_stringVal2(self): return self.stringVal2 + def set_stringVal2(self, stringVal2): self.stringVal2 = stringVal2 + def add_stringVal2(self, value): self.stringVal2.append(value) + def insert_stringVal2(self, index, value): self.stringVal2[index] = value + def get_booleanVal1(self): return self.booleanVal1 + def set_booleanVal1(self, booleanVal1): self.booleanVal1 = booleanVal1 + def get_booleanVal2(self): return self.booleanVal2 + def set_booleanVal2(self, booleanVal2): self.booleanVal2 = booleanVal2 + def add_booleanVal2(self, value): self.booleanVal2.append(value) + def insert_booleanVal2(self, index, value): self.booleanVal2[index] = value + def get_decimalVal1(self): return self.decimalVal1 + def set_decimalVal1(self, decimalVal1): self.decimalVal1 = decimalVal1 + def get_decimalVal2(self): return self.decimalVal2 + def set_decimalVal2(self, decimalVal2): self.decimalVal2 = decimalVal2 + def add_decimalVal2(self, value): self.decimalVal2.append(value) + def insert_decimalVal2(self, index, value): self.decimalVal2[index] = value + def get_doubleVal1(self): return self.doubleVal1 + def set_doubleVal1(self, doubleVal1): self.doubleVal1 = doubleVal1 + def get_doubleVal2(self): return self.doubleVal2 + def set_doubleVal2(self, doubleVal2): self.doubleVal2 = doubleVal2 + def add_doubleVal2(self, value): self.doubleVal2.append(value) + def insert_doubleVal2(self, index, value): self.doubleVal2[index] = value + def get_floatVal1(self): return self.floatVal1 + def set_floatVal1(self, floatVal1): self.floatVal1 = floatVal1 + def get_floatVal2(self): return self.floatVal2 + def set_floatVal2(self, floatVal2): self.floatVal2 = floatVal2 + def add_floatVal2(self, value): self.floatVal2.append(value) + def insert_floatVal2(self, index, value): self.floatVal2[index] = value + def get_dateVal1(self): return self.dateVal1 + def set_dateVal1(self, dateVal1): self.dateVal1 = dateVal1 + def get_dateVal2(self): return self.dateVal2 + def set_dateVal2(self, dateVal2): self.dateVal2 = dateVal2 + def add_dateVal2(self, value): self.dateVal2.append(value) + def insert_dateVal2(self, index, value): self.dateVal2[index] = value + def get_dateTimeVal1(self): return self.dateTimeVal1 + def set_dateTimeVal1(self, dateTimeVal1): self.dateTimeVal1 = dateTimeVal1 + def get_dateTimeVal2(self): return self.dateTimeVal2 + def set_dateTimeVal2(self, dateTimeVal2): self.dateTimeVal2 = dateTimeVal2 + def add_dateTimeVal2(self, value): self.dateTimeVal2.append(value) + def insert_dateTimeVal2(self, index, value): self.dateTimeVal2[index] = value + def export(self, outfile, level, namespace_='', name_='simpleTypeTest', namespacedef_='', pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = [] + self.exportAttributes(outfile, level, already_processed, namespace_, name_='simpleTypeTest') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) + showIndent(outfile, level, pretty_print) + outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) + else: + outfile.write('/>%s' % (eol_, )) + def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='simpleTypeTest'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='simpleTypeTest', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.datetime1 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdatetime1>%s</%sdatetime1>%s' % (namespace_, self.gds_format_string(quote_xml(self.datetime1).encode(ExternalEncoding), input_name='datetime1'), namespace_, eol_)) + if self.datetime2 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdatetime2>%s</%sdatetime2>%s' % (namespace_, self.gds_format_string(quote_xml(self.datetime2).encode(ExternalEncoding), input_name='datetime2'), namespace_, eol_)) + if self.datetime3 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdatetime3>%s</%sdatetime3>%s' % (namespace_, self.gds_format_string(quote_xml(self.datetime3).encode(ExternalEncoding), input_name='datetime3'), namespace_, eol_)) + if self.datetime4 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdatetime4>%s</%sdatetime4>%s' % (namespace_, self.gds_format_string(quote_xml(self.datetime4).encode(ExternalEncoding), input_name='datetime4'), namespace_, eol_)) + if self.datetime5 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdatetime5>%s</%sdatetime5>%s' % (namespace_, self.gds_format_string(quote_xml(self.datetime5).encode(ExternalEncoding), input_name='datetime5'), namespace_, eol_)) + if self.integerVal1 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sintegerVal1>%s</%sintegerVal1>%s' % (namespace_, self.gds_format_integer(self.integerVal1, input_name='integerVal1'), namespace_, eol_)) + for integerVal2_ in self.integerVal2: + showIndent(outfile, level, pretty_print) + outfile.write('<%sintegerVal2>%s</%sintegerVal2>%s' % (namespace_, self.gds_format_integer(integerVal2_, input_name='integerVal2'), namespace_, eol_)) + if self.stringVal1 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sstringVal1>%s</%sstringVal1>%s' % (namespace_, self.gds_format_string(quote_xml(self.stringVal1).encode(ExternalEncoding), input_name='stringVal1'), namespace_, eol_)) + for stringVal2_ in self.stringVal2: + showIndent(outfile, level, pretty_print) + outfile.write('<%sstringVal2>%s</%sstringVal2>%s' % (namespace_, self.gds_format_string(quote_xml(stringVal2_).encode(ExternalEncoding), input_name='stringVal2'), namespace_, eol_)) + if self.booleanVal1 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sbooleanVal1>%s</%sbooleanVal1>%s' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.booleanVal1)), input_name='booleanVal1'), namespace_, eol_)) + for booleanVal2_ in self.booleanVal2: + showIndent(outfile, level, pretty_print) + outfile.write('<%sbooleanVal2>%s</%sbooleanVal2>%s' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(booleanVal2_)), input_name='booleanVal2'), namespace_, eol_)) + if self.decimalVal1 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdecimalVal1>%s</%sdecimalVal1>%s' % (namespace_, self.gds_format_float(self.decimalVal1, input_name='decimalVal1'), namespace_, eol_)) + for decimalVal2_ in self.decimalVal2: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdecimalVal2>%s</%sdecimalVal2>%s' % (namespace_, self.gds_format_float(decimalVal2_, input_name='decimalVal2'), namespace_, eol_)) + if self.doubleVal1 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdoubleVal1>%s</%sdoubleVal1>%s' % (namespace_, self.gds_format_double(self.doubleVal1, input_name='doubleVal1'), namespace_, eol_)) + for doubleVal2_ in self.doubleVal2: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdoubleVal2>%s</%sdoubleVal2>%s' % (namespace_, self.gds_format_double(doubleVal2_, input_name='doubleVal2'), namespace_, eol_)) + if self.floatVal1 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sfloatVal1>%s</%sfloatVal1>%s' % (namespace_, self.gds_format_float(self.floatVal1, input_name='floatVal1'), namespace_, eol_)) + for floatVal2_ in self.floatVal2: + showIndent(outfile, level, pretty_print) + outfile.write('<%sfloatVal2>%s</%sfloatVal2>%s' % (namespace_, self.gds_format_float(floatVal2_, input_name='floatVal2'), namespace_, eol_)) + if self.dateVal1 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdateVal1>%s</%sdateVal1>%s' % (namespace_, self.gds_format_date(self.dateVal1, input_name='dateVal1'), namespace_, eol_)) + for dateVal2_ in self.dateVal2: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdateVal2>%s</%sdateVal2>%s' % (namespace_, self.gds_format_date(dateVal2_, input_name='dateVal2'), namespace_, eol_)) + if self.dateTimeVal1 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdateTimeVal1>%s</%sdateTimeVal1>%s' % (namespace_, self.gds_format_datetime(self.dateTimeVal1, input_name='dateTimeVal1'), namespace_, eol_)) + for dateTimeVal2_ in self.dateTimeVal2: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdateTimeVal2>%s</%sdateTimeVal2>%s' % (namespace_, self.gds_format_datetime(dateTimeVal2_, input_name='dateTimeVal2'), namespace_, eol_)) + def hasContent_(self): + if ( + self.datetime1 is not None or + self.datetime2 is not None or + self.datetime3 is not None or + self.datetime4 is not None or + self.datetime5 is not None or + self.integerVal1 is not None or + self.integerVal2 or + self.stringVal1 is not None or + self.stringVal2 or + self.booleanVal1 is not None or + self.booleanVal2 or + self.decimalVal1 is not None or + self.decimalVal2 or + self.doubleVal1 is not None or + self.doubleVal2 or + self.floatVal1 is not None or + self.floatVal2 or + self.dateVal1 is not None or + self.dateVal2 or + self.dateTimeVal1 is not None or + self.dateTimeVal2 + ): + return True + else: + return False + def exportLiteral(self, outfile, level, name_='simpleTypeTest'): + level += 1 + self.exportLiteralAttributes(outfile, level, [], name_) + if self.hasContent_(): + self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, already_processed, name_): + pass + def exportLiteralChildren(self, outfile, level, name_): + if self.datetime1 is not None: + showIndent(outfile, level) + outfile.write('datetime1=%s,\n' % quote_python(self.datetime1).encode(ExternalEncoding)) + if self.datetime2 is not None: + showIndent(outfile, level) + outfile.write('datetime2=%s,\n' % quote_python(self.datetime2).encode(ExternalEncoding)) + if self.datetime3 is not None: + showIndent(outfile, level) + outfile.write('datetime3=%s,\n' % quote_python(self.datetime3).encode(ExternalEncoding)) + if self.datetime4 is not None: + showIndent(outfile, level) + outfile.write('datetime4=%s,\n' % quote_python(self.datetime4).encode(ExternalEncoding)) + if self.datetime5 is not None: + showIndent(outfile, level) + outfile.write('datetime5=%s,\n' % quote_python(self.datetime5).encode(ExternalEncoding)) + if self.integerVal1 is not None: + showIndent(outfile, level) + outfile.write('integerVal1=%d,\n' % self.integerVal1) + showIndent(outfile, level) + outfile.write('integerVal2=[\n') + level += 1 + for integerVal2_ in self.integerVal2: + showIndent(outfile, level) + outfile.write('%d,\n' % integerVal2_) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + if self.stringVal1 is not None: + showIndent(outfile, level) + outfile.write('stringVal1=%s,\n' % quote_python(self.stringVal1).encode(ExternalEncoding)) + showIndent(outfile, level) + outfile.write('stringVal2=[\n') + level += 1 + for stringVal2_ in self.stringVal2: + showIndent(outfile, level) + outfile.write('%s,\n' % quote_python(stringVal2_).encode(ExternalEncoding)) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + if self.booleanVal1 is not None: + showIndent(outfile, level) + outfile.write('booleanVal1=%s,\n' % self.booleanVal1) + showIndent(outfile, level) + outfile.write('booleanVal2=[\n') + level += 1 + for booleanVal2_ in self.booleanVal2: + showIndent(outfile, level) + outfile.write('%s,\n' % booleanVal2_) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + if self.decimalVal1 is not None: + showIndent(outfile, level) + outfile.write('decimalVal1=%f,\n' % self.decimalVal1) + showIndent(outfile, level) + outfile.write('decimalVal2=[\n') + level += 1 + for decimalVal2_ in self.decimalVal2: + showIndent(outfile, level) + outfile.write('%f,\n' % decimalVal2_) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + if self.doubleVal1 is not None: + showIndent(outfile, level) + outfile.write('doubleVal1=%e,\n' % self.doubleVal1) + showIndent(outfile, level) + outfile.write('doubleVal2=[\n') + level += 1 + for doubleVal2_ in self.doubleVal2: + showIndent(outfile, level) + outfile.write('%e,\n' % doubleVal2_) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + if self.floatVal1 is not None: + showIndent(outfile, level) + outfile.write('floatVal1=%f,\n' % self.floatVal1) + showIndent(outfile, level) + outfile.write('floatVal2=[\n') + level += 1 + for floatVal2_ in self.floatVal2: + showIndent(outfile, level) + outfile.write('%f,\n' % floatVal2_) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + if self.dateVal1 is not None: + showIndent(outfile, level) + outfile.write('dateVal1=datetime_.strptime("%s", "%%Y-%%m-%%d"),\n' % self.gds_format_date(self.dateVal1, input_name='dateVal1')) + showIndent(outfile, level) + outfile.write('dateVal2=[\n') + level += 1 + for dateVal2_ in self.dateVal2: + showIndent(outfile, level) + outfile.write('%s,\n' % self.gds_format_date(dateVal2_, input_name='dateVal2')) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + if self.dateTimeVal1 is not None: + showIndent(outfile, level) + outfile.write('dateTimeVal1=datetime_.strptime("%s", "%%Y-%%m-%%dT%%H:%%M:%%S"),\n' % self.gds_format_datetime(self.dateTimeVal1, input_name='dateTimeVal1')) + showIndent(outfile, level) + outfile.write('dateTimeVal2=[\n') + level += 1 + for dateTimeVal2_ in self.dateTimeVal2: + showIndent(outfile, level) + outfile.write('%s,\n' % self.gds_format_datetime(dateTimeVal2_, input_name='dateTimeVal2')) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + def build(self, node): + self.buildAttributes(node, node.attrib, []) + for child in node: + nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] + self.buildChildren(child, node, nodeName_) + def buildAttributes(self, node, attrs, already_processed): + pass + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + if nodeName_ == 'datetime1': + datetime1_ = child_.text + datetime1_ = self.gds_validate_string(datetime1_, node, 'datetime1') + self.datetime1 = datetime1_ + elif nodeName_ == 'datetime2': + datetime2_ = child_.text + datetime2_ = self.gds_validate_string(datetime2_, node, 'datetime2') + self.datetime2 = datetime2_ + elif nodeName_ == 'datetime3': + datetime3_ = child_.text + datetime3_ = self.gds_validate_string(datetime3_, node, 'datetime3') + self.datetime3 = datetime3_ + elif nodeName_ == 'datetime4': + datetime4_ = child_.text + datetime4_ = self.gds_validate_string(datetime4_, node, 'datetime4') + self.datetime4 = datetime4_ + elif nodeName_ == 'datetime5': + datetime5_ = child_.text + datetime5_ = self.gds_validate_string(datetime5_, node, 'datetime5') + self.datetime5 = datetime5_ + elif nodeName_ == 'integerVal1': + sval_ = child_.text + try: + ival_ = int(sval_) + except (TypeError, ValueError), exp: + raise_parse_error(child_, 'requires integer: %s' % exp) + ival_ = self.gds_validate_integer(ival_, node, 'integerVal1') + self.integerVal1 = ival_ + elif nodeName_ == 'integerVal2': + sval_ = child_.text + try: + ival_ = int(sval_) + except (TypeError, ValueError), exp: + raise_parse_error(child_, 'requires integer: %s' % exp) + ival_ = self.gds_validate_integer(ival_, node, 'integerVal2') + self.integerVal2.append(ival_) + elif nodeName_ == 'stringVal1': + stringVal1_ = child_.text + stringVal1_ = self.gds_validate_string(stringVal1_, node, 'stringVal1') + self.stringVal1 = stringVal1_ + elif nodeName_ == 'stringVal2': + stringVal2_ = child_.text + stringVal2_ = self.gds_validate_string(stringVal2_, node, 'stringVal2') + self.stringVal2.append(stringVal2_) + elif nodeName_ == 'booleanVal1': + sval_ = child_.text + if sval_ in ('true', '1'): + ival_ = True + elif sval_ in ('false', '0'): + ival_ = False + else: + raise_parse_error(child_, 'requires boolean') + ival_ = self.gds_validate_boolean(ival_, node, 'booleanVal1') + self.booleanVal1 = ival_ + elif nodeName_ == 'booleanVal2': + sval_ = child_.text + if sval_ in ('true', '1'): + ival_ = True + elif sval_ in ('false', '0'): + ival_ = False + else: + raise_parse_error(child_, 'requires boolean') + ival_ = self.gds_validate_boolean(ival_, node, 'booleanVal2') + self.booleanVal2.append(ival_) + elif nodeName_ == 'decimalVal1': + sval_ = child_.text + try: + fval_ = float(sval_) + except (TypeError, ValueError), exp: + raise_parse_error(child_, 'requires float or double: %s' % exp) + fval_ = self.gds_validate_float(fval_, node, 'decimalVal1') + self.decimalVal1 = fval_ + elif nodeName_ == 'decimalVal2': + sval_ = child_.text + try: + fval_ = float(sval_) + except (TypeError, ValueError), exp: + 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': + sval_ = child_.text + try: + fval_ = float(sval_) + except (TypeError, ValueError), exp: + raise_parse_error(child_, 'requires float or double: %s' % exp) + fval_ = self.gds_validate_float(fval_, node, 'doubleVal1') + self.doubleVal1 = fval_ + elif nodeName_ == 'doubleVal2': + sval_ = child_.text + try: + fval_ = float(sval_) + except (TypeError, ValueError), exp: + 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': + sval_ = child_.text + try: + fval_ = float(sval_) + except (TypeError, ValueError), exp: + raise_parse_error(child_, 'requires float or double: %s' % exp) + fval_ = self.gds_validate_float(fval_, node, 'floatVal1') + self.floatVal1 = fval_ + elif nodeName_ == 'floatVal2': + sval_ = child_.text + try: + fval_ = float(sval_) + except (TypeError, ValueError), exp: + raise_parse_error(child_, 'requires float or double: %s' % exp) + fval_ = self.gds_validate_float(fval_, node, 'floatVal2') + self.floatVal2.append(fval_) + elif nodeName_ == 'dateVal1': + sval_ = child_.text + dval_ = self.gds_parse_date(sval_, node, 'dateVal1') + self.dateVal1 = dval_ + elif nodeName_ == 'dateVal2': + sval_ = child_.text + dval_ = self.gds_parse_date(sval_, node, 'dateVal2') + self.dateVal2.append(dval_) + elif nodeName_ == 'dateTimeVal1': + sval_ = child_.text + dval_ = self.gds_parse_datetime(sval_, node, 'dateTimeVal1') + self.dateTimeVal1 = dval_ + elif nodeName_ == 'dateTimeVal2': + sval_ = child_.text + dval_ = self.gds_parse_datetime(sval_, node, 'dateTimeVal2') + self.dateTimeVal2.append(dval_) +# end class simpleTypeTest + + +GDSClassesMapping = { + 'simpleTypeTests': simpleTypeTestsType, +} + + +USAGE_TEXT = """ +Usage: python <Parser>.py [ -s ] <in_xml_file> +""" + +def usage(): + print USAGE_TEXT + sys.exit(1) + + +def get_root_tag(node): + tag = Tag_pattern_.match(node.tag).groups()[-1] + rootClass = GDSClassesMapping.get(tag) + if rootClass is None: + rootClass = globals().get(tag) + return tag, rootClass + + +def parse(inFileName): + doc = parsexml_(inFileName) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'simpleTypeTests' + rootClass = simpleTypeTestsType + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('<?xml version="1.0" ?>\n') +## rootObj.export(sys.stdout, 0, name_=rootTag, +## namespacedef_='', +## pretty_print=True) + return rootObj + + +def parseString(inString): + from StringIO import StringIO + doc = parsexml_(StringIO(inString)) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'simpleTypeTests' + rootClass = simpleTypeTestsType + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('<?xml version="1.0" ?>\n') +## rootObj.export(sys.stdout, 0, name_="simpleTypeTests", +## namespacedef_='') + return rootObj + + +def parseLiteral(inFileName): + doc = parsexml_(inFileName) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'simpleTypeTests' + rootClass = simpleTypeTestsType + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None +## sys.stdout.write('#from simpletypes_other2_sup import *\n\n') +## sys.stdout.write('from datetime import datetime as datetime_\n\n') +## sys.stdout.write('import simpletypes_other2_sup as model_\n\n') +## sys.stdout.write('rootObj = model_.rootTag(\n') +## rootObj.exportLiteral(sys.stdout, 0, name_=rootTag) +## sys.stdout.write(')\n') + return rootObj + + +def main(): + args = sys.argv[1:] + if len(args) == 1: + parse(args[0]) + else: + usage() + + +if __name__ == '__main__': + #import pdb; pdb.set_trace() + main() + + +__all__ = [ + "simpleTypeTest", + "simpleTypeTestsType" + ] diff --git a/tutorial/generateds_tutorial.html b/tutorial/generateds_tutorial.html index a3cf720b9485dd368340b50ecb520b46d9aa3c58..ee6f56ae1725810e64d826684491fb7cd57452cc 100644 --- a/tutorial/generateds_tutorial.html +++ b/tutorial/generateds_tutorial.html @@ -3,7 +3,7 @@ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -<meta name="generator" content="Docutils 0.10: http://docutils.sourceforge.net/" /> +<meta name="generator" content="Docutils 0.11: http://docutils.sourceforge.net/" /> <title>generateDS -- Introduction and Tutorial</title> <meta name="author" content="Dave Kuhlman" /> <style type="text/css"> @@ -216,7 +216,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.8a</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.8b</td> </tr> </tbody> </table> @@ -225,7 +225,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">November 14, 2012</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">January 28, 2013</td> </tr> </tbody> </table> diff --git a/tutorial/generateds_tutorial.txt b/tutorial/generateds_tutorial.txt index 6928e6e7733664973dd9f0a11242b5ab7d56c631..e9dd79d400cf7ae770e2ea54edf6c72f0088e574 100644 --- a/tutorial/generateds_tutorial.txt +++ b/tutorial/generateds_tutorial.txt @@ -11,7 +11,7 @@ generateDS -- Introduction and Tutorial .. version -:revision: 2.8a +:revision: 2.8b .. version diff --git a/tutorial/generateds_tutorial.zip b/tutorial/generateds_tutorial.zip index 9834d60a51bf579049ab1933cb1926e6d296f28c..d8f36eb7e53e33950d93a2113e77edb1b8fae6ea 100644 Binary files a/tutorial/generateds_tutorial.zip and b/tutorial/generateds_tutorial.zip differ