diff --git a/Demos/Outline/README b/Demos/Outline/README deleted file mode 100644 index 735e13681f9d6911c7f2c7b2fae30b1ff11e0e0e..0000000000000000000000000000000000000000 --- a/Demos/Outline/README +++ /dev/null @@ -1,32 +0,0 @@ - -This directory contains a small example of the use of -generateDS.py. It contains the following: - -- outline.xsd -- The XML Schema file used to generate Python data - representation classes. - -- outline.py -- This file was generated by running: - - python generateDS.py -o outline.py outline.xsd - -- outline_extended.py -- This file was produced by generating a - subclass file, then adding methods that show the outline in a - brief format. It was initially generated by running: - - python generateDS.py -s outline_extended.py outline.xsd - - and then was edited to add the extensions. - -- outline.xml -- A sample data file used the test the generated - Python code. Run either of the following: - - python outline.py outline.xml - python outline_extended.py outline.xml - - - -Dave Kuhlman -dkuhlman@rexx.com -http://www.rexx.com/~dkuhlman - - diff --git a/Demos/Outline/README.txt b/Demos/Outline/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..5d871ddb3c073447a9188f5c8771f67a13fca0be --- /dev/null +++ b/Demos/Outline/README.txt @@ -0,0 +1,32 @@ +Outline -- a demo for generateDS.py +===================================== + +This directory contains a small example of the use of `generateDS.py`. +It demonstrates the use of a generated subclass file to add extended +behavior to the code generated by `generateDS.py`. It contains the +following: + +- outline.xsd -- The XML Schema file used to generate Python data + representation classes. + +- outline.py -- This file was generated by using the "-o" command + line option for `generateDS.py`. + + python ../../generateDS.py -o outline.py outline.xsd + +- outline_extended.py -- This file was produced by generating a + subclass file. See use of "-s" and "--super" command line + options, above. Then we add methods that show the outline in a + brief format. The file was originally produced with the following + command, *but* you might want to save the extensions in that file + before regenerating it: + + python ../../generateDS.py -o outline.py -s outline_extended.py --super="outline" outline.xsd + +- outline.xml -- A sample data file used to test the generated + Python code. Run either of the following: + + python outline.py outline.xml + python outline_extended.py outline.xml + +.. vim:ft=rst: diff --git a/Demos/Outline/outline.py b/Demos/Outline/outline.py index 3f874fabd642b77dd644ae0a90b2a025366d8e13..33e658cb50b14313cf9217f1f7e9dc572c311cb8 100644 --- a/Demos/Outline/outline.py +++ b/Demos/Outline/outline.py @@ -1,212 +1,1066 @@ #!/usr/bin/env python +# -*- coding: utf-8 -*- # -# Generated Mon Aug 18 17:09:37 2003 by generateDS.py. +# Generated Thu Jul 19 13:39:44 2018 by generateDS.py version 2.29.17. +# Python 2.7.15 |Anaconda custom (64-bit)| (default, May 1 2018, 23:32:55) [GCC 7.2.0] +# +# Command line options: +# ('-o', 'outline.py') +# ('-s', 'outline_extended.py') +# ('--super', 'outline') +# +# Command line arguments: +# outline.xsd +# +# Command line: +# ../../generateDS.py -o "outline.py" -s "outline_extended.py" --super="outline" outline.xsd +# +# Current working directory (os.getcwd()): +# Outline # import sys -import getopt -from xml.dom import minidom -from xml.dom import Node +import re as re_ +import base64 +import datetime as datetime_ +import warnings as warnings_ +try: + from lxml import etree as etree_ +except ImportError: + from xml.etree import ElementTree as etree_ + + +Validate_simpletypes_ = True +if sys.version_info.major == 2: + BaseStrType_ = basestring +else: + BaseStrType_ = str + + +def parsexml_(infile, parser=None, **kwargs): + if parser is None: + # Use the lxml ElementTree compatible parser so that, e.g., + # we ignore comments. + try: + parser = etree_.ETCompatXMLParser() + except AttributeError: + # fallback to xml.etree + parser = etree_.XMLParser() + doc = etree_.parse(infile, parser=parser, **kwargs) + return doc + +def parsexmlstring_(instring, parser=None, **kwargs): + if parser is None: + # Use the lxml ElementTree compatible parser so that, e.g., + # we ignore comments. + try: + parser = etree_.ETCompatXMLParser() + except AttributeError: + # fallback to xml.etree + parser = etree_.XMLParser() + element = etree_.fromstring(instring, parser=parser, **kwargs) + return element + +# +# Namespace prefix definition table (and other attributes, too) +# +# The module generatedsnamespaces, if it is importable, must contain +# a dictionary named GeneratedsNamespaceDefs. This Python dictionary +# should map element type names (strings) to XML schema namespace prefix +# definitions. The export method for any class for which there is +# a namespace prefix definition, will export that definition in the +# XML representation of that element. See the export method of +# any generated element type class for a example of the use of this +# table. +# A sample table is: +# +# # File: generatedsnamespaces.py +# +# GenerateDSNamespaceDefs = { +# "ElementtypeA": "http://www.xxx.com/namespaceA", +# "ElementtypeB": "http://www.xxx.com/namespaceB", +# } +# + +try: + from generatedsnamespaces import GenerateDSNamespaceDefs as GenerateDSNamespaceDefs_ +except ImportError: + GenerateDSNamespaceDefs_ = {} + +# +# The root super-class for element type classes +# +# 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 as exp: + + class GeneratedsSuper(object): + tzoff_pattern = re_.compile(r'(\+|-)((0\d|1[0-3]):[0-5]\d|14:00)$') + class _FixedOffsetTZ(datetime_.tzinfo): + def __init__(self, offset, name): + self.__offset = datetime_.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=None, input_name=''): + if not input_data: + return '' + else: + 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=None, 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=None, input_name=''): + return input_data + def gds_format_integer_list(self, input_data, input_name=''): + return '%s' % ' '.join(input_data) + def gds_validate_integer_list( + self, input_data, node=None, input_name=''): + values = input_data.split() + for value in values: + try: + int(value) + except (TypeError, ValueError): + raise_parse_error(node, 'Requires sequence of integers') + return values + def gds_format_float(self, input_data, input_name=''): + return ('%.15f' % input_data).rstrip('0') + def gds_validate_float(self, input_data, node=None, input_name=''): + return input_data + def gds_format_float_list(self, input_data, input_name=''): + return '%s' % ' '.join(input_data) + def gds_validate_float_list( + self, input_data, node=None, input_name=''): + values = input_data.split() + for value in values: + try: + float(value) + except (TypeError, ValueError): + raise_parse_error(node, 'Requires sequence of floats') + return values + def gds_format_double(self, input_data, input_name=''): + return '%e' % input_data + def gds_validate_double(self, input_data, node=None, input_name=''): + return input_data + def gds_format_double_list(self, input_data, input_name=''): + return '%s' % ' '.join(input_data) + def gds_validate_double_list( + self, input_data, node=None, input_name=''): + values = input_data.split() + for value in values: + try: + float(value) + except (TypeError, ValueError): + raise_parse_error(node, 'Requires sequence of doubles') + return values + def gds_format_boolean(self, input_data, input_name=''): + return ('%s' % input_data).lower() + def gds_validate_boolean(self, input_data, node=None, input_name=''): + return input_data + def gds_format_boolean_list(self, input_data, input_name=''): + return '%s' % ' '.join(input_data) + def gds_validate_boolean_list( + self, input_data, node=None, 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 values + def gds_validate_datetime(self, input_data, node=None, input_name=''): + return input_data + def gds_format_datetime(self, input_data, input_name=''): + if input_data.microsecond == 0: + _svalue = '%04d-%02d-%02dT%02d:%02d:%02d' % ( + input_data.year, + input_data.month, + input_data.day, + input_data.hour, + input_data.minute, + input_data.second, + ) + else: + _svalue = '%04d-%02d-%02dT%02d:%02d:%02d.%s' % ( + input_data.year, + input_data.month, + input_data.day, + input_data.hour, + input_data.minute, + input_data.second, + ('%f' % (float(input_data.microsecond) / 1000000))[2:], + ) + 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 + @classmethod + def gds_parse_datetime(cls, input_data): + tz = None + if input_data[-1] == 'Z': + tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC') + 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] + time_parts = input_data.split('.') + if len(time_parts) > 1: + micro_seconds = int(float('0.' + time_parts[1]) * 1000000) + input_data = '%s.%s' % (time_parts[0], micro_seconds, ) + dt = datetime_.datetime.strptime( + input_data, '%Y-%m-%dT%H:%M:%S.%f') + else: + dt = datetime_.datetime.strptime( + input_data, '%Y-%m-%dT%H:%M:%S') + dt = dt.replace(tzinfo=tz) + return dt + def gds_validate_date(self, input_data, node=None, input_name=''): + return input_data + def gds_format_date(self, input_data, input_name=''): + _svalue = '%04d-%02d-%02d' % ( + input_data.year, + input_data.month, + input_data.day, + ) + try: + 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) + except AttributeError: + pass + return _svalue + @classmethod + def gds_parse_date(cls, input_data): + tz = None + if input_data[-1] == 'Z': + tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC') + 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] + dt = datetime_.datetime.strptime(input_data, '%Y-%m-%d') + dt = dt.replace(tzinfo=tz) + return dt.date() + def gds_validate_time(self, input_data, node=None, input_name=''): + return input_data + def gds_format_time(self, input_data, input_name=''): + if input_data.microsecond == 0: + _svalue = '%02d:%02d:%02d' % ( + input_data.hour, + input_data.minute, + input_data.second, + ) + else: + _svalue = '%02d:%02d:%02d.%s' % ( + input_data.hour, + input_data.minute, + input_data.second, + ('%f' % (float(input_data.microsecond) / 1000000))[2:], + ) + 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_validate_simple_patterns(self, patterns, target): + # pat is a list of lists of strings/patterns. We should: + # - AND the outer elements + # - OR the inner elements + found1 = True + for patterns1 in patterns: + found2 = False + for patterns2 in patterns1: + if re_.search(patterns2, target) is not None: + found2 = True + break + if not found2: + found1 = False + break + return found1 + @classmethod + def gds_parse_time(cls, input_data): + tz = None + if input_data[-1] == 'Z': + tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC') + 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] + if len(input_data.split('.')) > 1: + dt = datetime_.datetime.strptime(input_data, '%H:%M:%S.%f') + else: + dt = datetime_.datetime.strptime(input_data, '%H:%M:%S') + dt = dt.replace(tzinfo=tz) + return dt.time() + 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 + @classmethod + def gds_reverse_node_mapping(cls, mapping): + return dict(((v, k) for k, v in mapping.iteritems())) + @staticmethod + def gds_encode(instring): + if sys.version_info.major == 2: + if ExternalEncoding: + encoding = ExternalEncoding + else: + encoding = 'utf-8' + return instring.encode(encoding) + else: + return instring + @staticmethod + def convert_unicode(instring): + if isinstance(instring, str): + result = quote_xml(instring) + elif sys.version_info.major == 2 and isinstance(instring, unicode): + result = quote_xml(instring).encode('utf8') + else: + result = GeneratedsSuper.gds_encode(str(instring)) + return result + def __eq__(self, other): + if type(self) != type(other): + return False + return self.__dict__ == other.__dict__ + def __ne__(self, other): + return not self.__eq__(other) + + def getSubclassFromModule_(module, class_): + '''Get the subclass of a class from a specific module.''' + name = class_.__name__ + 'Sub' + if hasattr(module, name): + return getattr(module, name) + else: + return None + # # If you have installed IPython you can uncomment and use the following. -# IPython is available from http://www-hep.colorado.edu/~fperez/ipython. +# IPython is available from http://ipython.scipy.org/. # -#from IPython.Shell import IPythonShellEmbed -#IPShell = IPythonShellEmbed('-nosep', -# banner = 'Entering interpreter. Ctrl-D to exit.', -# exit_msg = 'Leaving Interpreter.') -# Use the following line where and when you want to drop into the +## 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(vars(), '<a msg>') +# ipshell('<some message> -- Entering ipshell.\nHit Ctrl-D to exit') + +# +# Globals +# + +ExternalEncoding = '' +Tag_pattern_ = re_.compile(r'({.*})?(.*)') +String_cleanup_pat_ = re_.compile(r"[\n\r\s]+") +Namespace_extract_pat_ = re_.compile(r'{(.*)}(.*)') +CDATA_pattern_ = re_.compile(r"<!\[CDATA\[.*?\]\]>", re_.DOTALL) + +# Change this to redirect the generated superclass module to use a +# specific subclass module. +CurrentSubclassModule_ = None # # Support/utility functions. # -def showIndent(outfile, level): - for idx in range(level): - outfile.write(' ') + +def showIndent(outfile, level, pretty_print=True): + if pretty_print: + for idx in range(level): + outfile.write(' ') + def quote_xml(inStr): - s1 = inStr + "Escape markup chars, but do not modify CDATA sections." + if not inStr: + return '' + s1 = (isinstance(inStr, BaseStrType_) and inStr or '%s' % inStr) + s2 = '' + pos = 0 + matchobjects = CDATA_pattern_.finditer(s1) + for mo in matchobjects: + s3 = s1[pos:mo.start()] + s2 += quote_xml_aux(s3) + s2 += s1[mo.start():mo.end()] + pos = mo.end() + s3 = s1[pos:] + s2 += quote_xml_aux(s3) + return s2 + + +def quote_xml_aux(inStr): + s1 = inStr.replace('&', '&') + s1 = s1.replace('<', '<') + s1 = s1.replace('>', '>') + return s1 + + +def quote_attrib(inStr): + s1 = (isinstance(inStr, BaseStrType_) 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): + msg = '%s (element %s/line %d)' % (msg, node.tag, node.sourceline, ) + 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=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 to_etree(self, element): + if self.category == MixedContainer.CategoryText: + # Prevent exporting empty content as empty lines. + if self.value.strip(): + if len(element) > 0: + if element[-1].tail is None: + element[-1].tail = self.value + else: + element[-1].tail += self.value + else: + if element.text is None: + element.text = self.value + else: + element.text += self.value + elif self.category == MixedContainer.CategorySimple: + subelement = etree_.SubElement( + element, '%s' % self.name) + subelement.text = self.to_etree_simple() + else: # category == MixedContainer.CategoryComplex + self.value.to_etree(element) + def to_etree_simple(self): + if self.content_type == MixedContainer.TypeString: + text = self.value + elif (self.content_type == MixedContainer.TypeInteger or + self.content_type == MixedContainer.TypeBoolean): + text = '%d' % self.value + elif (self.content_type == MixedContainer.TypeFloat or + self.content_type == MixedContainer.TypeDecimal): + text = '%f' % self.value + elif self.content_type == MixedContainer.TypeDouble: + text = '%g' % self.value + elif self.content_type == MixedContainer.TypeBase64: + text = '%s' % base64.b64encode(self.value) + return text + 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, + optional=0, child_attrs=None, choice=None): + self.name = name + self.data_type = data_type + self.container = container + self.child_attrs = child_attrs + self.choice = choice + self.optional = optional + 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 set_child_attrs(self, child_attrs): self.child_attrs = child_attrs + def get_child_attrs(self): return self.child_attrs + def set_choice(self, choice): self.choice = choice + def get_choice(self): return self.choice + def set_optional(self, optional): self.optional = optional + def get_optional(self): return self.optional + + +def _cast(typ, value): + if typ is None or value is None: + return value + return typ(value) + # # Data representation classes. # -class outline: + +class outline(GeneratedsSuper): subclass = None - def __init__(self, name='', description='', children=None): + superclass = None + def __init__(self, name=None, description=None, child=None): + self.original_tagname_ = None self.name = name self.description = description - if children is None: - self.children = [] + if child is None: + self.child = [] else: - self.children = children - def factory(*args): + self.child = child + def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, outline) + if subclass is not None: + return subclass(*args_, **kwargs_) if outline.subclass: - return apply(outline.subclass, args) + return outline.subclass(*args_, **kwargs_) else: - return apply(outline, args) + return outline(*args_, **kwargs_) factory = staticmethod(factory) - def getName(self): return self.name - def setName(self, name): self.name = name - def getDescription(self): return self.description - def setDescription(self, description): self.description = description - def getChildren(self): return self.children - def addChildren(self, value): self.children.append(value) - def setChildren(self, index, value): self.children[index] = value - def export(self, outfile, level): - showIndent(outfile, level) - outfile.write('<outline>\n') - level += 1 - showIndent(outfile, level) - outfile.write('<name>%s</name>\n' % quote_xml(self.getName())) - showIndent(outfile, level) - outfile.write('<description>%s</description>\n' % quote_xml(self.getDescription())) - for children in self.children: - children.export(outfile, level) - level -= 1 - showIndent(outfile, level) - outfile.write('</outline>\n') - def build(self, node_): - attrs = node_.attributes - for child in node_.childNodes: - if child.nodeType == Node.ELEMENT_NODE and \ - child.nodeName == 'name': - name = '' - for text_ in child.childNodes: - name += text_.nodeValue - self.name = name - elif child.nodeType == Node.ELEMENT_NODE and \ - child.nodeName == 'description': - description = '' - for text_ in child.childNodes: - description += text_.nodeValue - self.description = description - elif child.nodeType == Node.ELEMENT_NODE and \ - child.nodeName == 'node': - obj = node.factory() - obj.build(child) - self.children.append(obj) + def get_name(self): return self.name + def set_name(self, name): self.name = name + def get_description(self): return self.description + def set_description(self, description): self.description = description + def get_child(self): return self.child + def set_child(self, child): self.child = child + def add_child(self, value): self.child.append(value) + def insert_child_at(self, index, value): self.child.insert(index, value) + def replace_child_at(self, index, value): self.child[index] = value + def hasContent_(self): + if ( + self.name is not None or + self.description is not None or + self.child + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='outline', namespacedef_='', pretty_print=True): + imported_ns_def_ = GenerateDSNamespaceDefs_.get('outline') + if imported_ns_def_ is not None: + namespacedef_ = imported_ns_def_ + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = set() + self.exportAttributes(outfile, level, already_processed, namespace_, name_='outline') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='outline', 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_='outline'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='outline', 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('<name>%s</name>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.name), input_name='name')), eol_)) + if self.description is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<description>%s</description>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.description), input_name='description')), eol_)) + for child_ in self.child: + child_.export(outfile, level, namespace_, name_='child', pretty_print=pretty_print) + def build(self, node): + already_processed = set() + self.buildAttributes(node, node.attrib, already_processed) + for child in node: + nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] + self.buildChildren(child, node, nodeName_) + return self + 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': + description_ = child_.text + description_ = self.gds_validate_string(description_, node, 'description') + self.description = description_ + elif nodeName_ == 'child': + obj_ = nodeType.factory() + obj_.build(child_) + self.child.append(obj_) + obj_.original_tagname_ = 'child' # end class outline -class node: +class nodeType(GeneratedsSuper): subclass = None - def __init__(self, label='', text='', children=None, hidden=''): + superclass = None + def __init__(self, hidden=None, label=None, text=None, child=None): + self.original_tagname_ = None + self.hidden = _cast(None, hidden) self.label = label self.text = text - if children is None: - self.children = [] + if child is None: + self.child = [] else: - self.children = children - self.hidden = hidden - def factory(*args): - if node.subclass: - return apply(node.subclass, args) + self.child = child + def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, nodeType) + if subclass is not None: + return subclass(*args_, **kwargs_) + if nodeType.subclass: + return nodeType.subclass(*args_, **kwargs_) else: - return apply(node, args) + return nodeType(*args_, **kwargs_) factory = staticmethod(factory) - def getLabel(self): return self.label - def setLabel(self, label): self.label = label - def getText(self): return self.text - def setText(self, text): self.text = text - def getChildren(self): return self.children - def addChildren(self, value): self.children.append(value) - def setChildren(self, index, value): self.children[index] = value - def getHidden(self): return self.hidden - def setHidden(self, hidden): self.hidden = hidden - def export(self, outfile, level): - showIndent(outfile, level) - if self.hidden: - outfile.write('<node hidden="%s">\n' % (self.hidden, )) - else: - outfile.write('<node>\n') - level += 1 - showIndent(outfile, level) - outfile.write('<label>%s</label>\n' % quote_xml(self.getLabel())) - showIndent(outfile, level) - outfile.write('<text>%s</text>\n' % quote_xml(self.getText())) - for children in self.children: - children.export(outfile, level) - level -= 1 - showIndent(outfile, level) - outfile.write('</node>\n') - def build(self, node_): - attrs = node_.attributes - if attrs.get('hidden'): - self.hidden = attrs.get('hidden').value - for child in node_.childNodes: - if child.nodeType == Node.ELEMENT_NODE and \ - child.nodeName == 'label': - label = '' - for text_ in child.childNodes: - label += text_.nodeValue - self.label = label - elif child.nodeType == Node.ELEMENT_NODE and \ - child.nodeName == 'text': - text = '' - for text_ in child.childNodes: - text += text_.nodeValue - self.text = text - elif child.nodeType == Node.ELEMENT_NODE and \ - child.nodeName == 'node': - obj = node.factory() - obj.build(child) - self.children.append(obj) -# end class node + def get_label(self): return self.label + def set_label(self, label): self.label = label + def get_text(self): return self.text + def set_text(self, text): self.text = text + def get_child(self): return self.child + def set_child(self, child): self.child = child + def add_child(self, value): self.child.append(value) + def insert_child_at(self, index, value): self.child.insert(index, value) + def replace_child_at(self, index, value): self.child[index] = value + def get_hidden(self): return self.hidden + def set_hidden(self, hidden): self.hidden = hidden + def hasContent_(self): + if ( + self.label is not None or + self.text is not None or + self.child + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='nodeType', namespacedef_='', pretty_print=True): + imported_ns_def_ = GenerateDSNamespaceDefs_.get('nodeType') + if imported_ns_def_ is not None: + namespacedef_ = imported_ns_def_ + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = set() + self.exportAttributes(outfile, level, already_processed, namespace_, name_='nodeType') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='nodeType', 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_='nodeType'): + if self.hidden is not None and 'hidden' not in already_processed: + already_processed.add('hidden') + outfile.write(' hidden=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.hidden), input_name='hidden')), )) + def exportChildren(self, outfile, level, namespace_='', name_='nodeType', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.label is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<label>%s</label>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.label), input_name='label')), eol_)) + if self.text is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<text>%s</text>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.text), input_name='text')), eol_)) + for child_ in self.child: + child_.export(outfile, level, namespace_, name_='child', pretty_print=pretty_print) + def build(self, node): + already_processed = set() + self.buildAttributes(node, node.attrib, already_processed) + for child in node: + nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] + self.buildChildren(child, node, nodeName_) + return self + def buildAttributes(self, node, attrs, already_processed): + value = find_attr_value_('hidden', node) + if value is not None and 'hidden' not in already_processed: + already_processed.add('hidden') + self.hidden = value + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + if nodeName_ == 'label': + label_ = child_.text + label_ = self.gds_validate_string(label_, node, 'label') + self.label = label_ + elif nodeName_ == 'text': + text_ = child_.text + text_ = self.gds_validate_string(text_, node, 'text') + self.text = text_ + elif nodeName_ == 'child': + obj_ = nodeType.factory() + obj_.build(child_) + self.child.append(obj_) + obj_.original_tagname_ = 'child' +# end class nodeType + + +GDSClassesMapping = { +} USAGE_TEXT = """ -Usage: python <Parser>.py <in_xml_file> +Usage: python <Parser>.py [ -s ] <in_xml_file> """ + def usage(): - print USAGE_TEXT - sys.exit(-1) + 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 = minidom.parse(inFileName) - rootNode = doc.childNodes[0] - rootObj = outline.factory() +def parse(inFileName, silence=False): + parser = None + doc = parsexml_(inFileName, parser) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'outline' + rootClass = outline + 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" ?>') - rootObj.export(sys.stdout, 0) + if not silence: + sys.stdout.write('<?xml version="1.0" ?>\n') + rootObj.export( + sys.stdout, 0, name_=rootTag, + namespacedef_='', + pretty_print=True) return rootObj -def parseString(inString): - doc = minidom.parseString(inString) - rootNode = doc.childNodes[0] - rootObj = outline.factory() +def parseEtree(inFileName, silence=False): + parser = None + doc = parsexml_(inFileName, parser) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'outline' + rootClass = outline + 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) + mapping = {} + rootElement = rootObj.to_etree(None, name_=rootTag, mapping_=mapping) + reverse_mapping = rootObj.gds_reverse_node_mapping(mapping) + if not silence: + content = etree_.tostring( + rootElement, pretty_print=True, + xml_declaration=True, encoding="utf-8") + sys.stdout.write(content) + sys.stdout.write('\n') + return rootObj, rootElement, mapping, reverse_mapping + + +def parseString(inString, silence=False): + '''Parse a string, create the object tree, and export it. + + Arguments: + - inString -- A string. This XML fragment should not start + with an XML declaration containing an encoding. + - silence -- A boolean. If False, export the object. + Returns -- The root object in the tree. + ''' + parser = None + rootNode= parsexmlstring_(inString, parser) + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'outline' + rootClass = outline + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + if not silence: + sys.stdout.write('<?xml version="1.0" ?>\n') + rootObj.export( + sys.stdout, 0, name_=rootTag, + namespacedef_='') + return rootObj + + +def parseLiteral(inFileName, silence=False): + parser = None + doc = parsexml_(inFileName, parser) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'outline' + rootClass = outline + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None + if not silence: + sys.stdout.write('#from outline import *\n\n') + sys.stdout.write('import outline as model_\n\n') + sys.stdout.write('rootObj = model_.rootClass(\n') + rootObj.exportLiteral(sys.stdout, 0, name_=rootTag) + sys.stdout.write(')\n') return rootObj def main(): args = sys.argv[1:] - if len(args) != 1: + if len(args) == 1: + parse(args[0]) + else: usage() - parse(args[0]) if __name__ == '__main__': + #import pdb; pdb.set_trace() main() - #import pdb - #pdb.run('main()') + +__all__ = [ + "nodeType", + "outline" +] diff --git a/Demos/Outline/outline.xsd b/Demos/Outline/outline.xsd index 029adea88218a88df6db4439c0010629d839df46..e46077467ddbf45c26306297a1a9e1d73fc1984d 100644 --- a/Demos/Outline/outline.xsd +++ b/Demos/Outline/outline.xsd @@ -6,17 +6,17 @@ <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="description" type="xs:string"/> - <xs:element name="child" maxOccurs="unbounded" type="node"/> + <xs:element name="child" maxOccurs="unbounded" type="nodeType"/> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="node"> + <xs:element name="nodeType"> <xs:complexType> <xs:sequence> <xs:element name="label" type="xs:string"/> <xs:element name="text" type="xs:string"/> - <xs:element name="child" type="node" maxOccurs="unbounded"/> + <xs:element name="child" type="nodeType" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="hidden" type="xs:string" /> </xs:complexType> diff --git a/Demos/Outline/outline_extended.py b/Demos/Outline/outline_extended.py index c06b218020d70299280c3eeec6743c7637d68041..698c103b9242f866d3603641e0dd71333c2f2f7a 100644 --- a/Demos/Outline/outline_extended.py +++ b/Demos/Outline/outline_extended.py @@ -1,14 +1,43 @@ #!/usr/bin/env python # -# Generated Mon Aug 18 17:12:21 2003 by generateDS.py. +# Generated Thu Jul 19 13:39:44 2018 by generateDS.py version 2.29.17. +# Python 2.7.15 |Anaconda custom (64-bit)| (default, May 1 2018, 23:32:55) [GCC 7.2.0] +# +# Command line options: +# ('-o', 'outline.py') +# ('-s', 'outline_extended.py') +# ('--super', 'outline') +# +# Command line arguments: +# outline.xsd +# +# Command line: +# ../../generateDS.py -o "outline.py" -s "outline_extended.py" --super="outline" outline.xsd +# +# Current working directory (os.getcwd()): +# Outline # import sys -from xml.dom import minidom +from lxml import etree as etree_ import outline as supermod +def parsexml_(infile, parser=None, **kwargs): + if parser is None: + # Use the lxml ElementTree compatible parser so that, e.g., + # we ignore comments. + parser = etree_.ETCompatXMLParser() + doc = etree_.parse(infile, parser=parser, **kwargs) + return doc + +# +# Globals +# + +ExternalEncoding = '' + # # Support/utility functions. # @@ -18,59 +47,147 @@ def showIndent(outfile, level): outfile.write(' ') +# +# Data representation classes +# + + class outlineSub(supermod.outline): - def __init__(self, name='', description='', children=None): - supermod.outline.__init__(self, name, description, children) + def __init__(self, name=None, description=None, child=None): + super(outlineSub, self).__init__(name, description, child, ) def show(self, outfile, level): outfile.write('==========================================\n') outfile.write('Outline name: %s\n' % self.name) outfile.write('Outline description: %s\n' % self.description) outfile.write('==========================================\n') - for child in self.children: + for child in self.child: child.show(outfile, level) outfile.write('==========================================\n') supermod.outline.subclass = outlineSub # end class outlineSub -class nodeSub(supermod.node): - def __init__(self, label='', text='', children=None, hidden=''): - supermod.node.__init__(self, label, text, children, hidden) +class nodeTypeSub(supermod.nodeType): + def __init__(self, hidden=None, label=None, text=None, child=None): + super(nodeTypeSub, self).__init__(hidden, label, text, child, ) def show(self, outfile, level): if self.hidden == 't': return showIndent(outfile, level) outfile.write('%s. %s\n' % (self.label, self.text)) - for child in self.children: + for child in self.child: child.show(outfile, level + 1) -supermod.node.subclass = nodeSub -# end class nodeSub - +supermod.nodeType.subclass = nodeTypeSub +# end class nodeTypeSub + + +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, silence=False): + parser = None + doc = parsexml_(inFilename, parser) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'outline' + rootClass = supermod.outline + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None + if not silence: + sys.stdout.write('<?xml version="1.0" ?>\n') + rootObj.export( + sys.stdout, 0, name_=rootTag, + namespacedef_='', + pretty_print=True) + return rootObj -def parse(inFilename): - doc = minidom.parse(inFilename) - rootNode = doc.childNodes[0] - rootObj = supermod.outline.factory() +def parseEtree(inFilename, silence=False): + parser = None + doc = parsexml_(inFilename, parser) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'outline' + rootClass = supermod.outline + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None + mapping = {} + rootElement = rootObj.to_etree(None, name_=rootTag, mapping_=mapping) + reverse_mapping = rootObj.gds_reverse_node_mapping(mapping) + if not silence: + content = etree_.tostring( + rootElement, pretty_print=True, + xml_declaration=True, encoding="utf-8") + sys.stdout.write(content) + sys.stdout.write('\n') + return rootObj, rootElement, mapping, reverse_mapping + + +def parseString(inString, silence=False): + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO + parser = None + doc = parsexml_(StringIO(inString), parser) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'outline' + rootClass = supermod.outline + rootObj = rootClass.factory() rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None + if not silence: + sys.stdout.write('<?xml version="1.0" ?>\n') + rootObj.export( + sys.stdout, 0, name_=rootTag, + namespacedef_='') return rootObj -def parseString(inString): - doc = minidom.parseString(inString) - rootNode = doc.childNodes[0] - rootObj = supermod.outline.factory() +def parseLiteral(inFilename, silence=False): + parser = None + doc = parsexml_(inFilename, parser) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'outline' + rootClass = supermod.outline + rootObj = rootClass.factory() rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None + if not silence: + sys.stdout.write('#from outline import *\n\n') + sys.stdout.write('import outline as model_\n\n') + sys.stdout.write('rootObj = model_.rootClass(\n') + rootObj.exportLiteral(sys.stdout, 0, name_=rootTag) + sys.stdout.write(')\n') return rootObj USAGE_TEXT = """ -Usage: python outline_extended.py <infilename> +Usage: python ???.py <infilename> """ + def usage(): - print USAGE_TEXT - sys.exit(-1) + print(USAGE_TEXT) + sys.exit(1) def main(): @@ -79,13 +196,9 @@ def main(): usage() infilename = args[0] root = parse(infilename) - sys.stdout.write('<?xml version="1.0" ?>\n') root.show(sys.stdout, 0) if __name__ == '__main__': + #import pdb; pdb.set_trace() main() - #import pdb - #pdb.run('main()') - - diff --git a/Demos/People/README b/Demos/People/README deleted file mode 100644 index 6e63a91c9d3b840b3db90c17303705ade633aea2..0000000000000000000000000000000000000000 --- a/Demos/People/README +++ /dev/null @@ -1,49 +0,0 @@ -This directory contains a simple example of the use of -generateDS.py. The following files are provided: - -- people_7.xsd -- This is the XML Schema file used to generate - peoplesup.py and peoplesub.py - -- peoplesup.py and peoplesub.py -- Generated from people.xsd. - peoplesup.py contains the superclasses; peoplesub.py contains - the generated subclasses. They were generated by running the - following: - - $ generateDS.py --session=a7.session - - Or: - - $ ../../generateDS.py -f -m \ - --namespacedef='xmlns:pl="http://kuhlman.com/people.xsd"' \ - --super=peoplesup -o peoplesup.py -s peoplesub.py \ - --member-specs=dict \ - people_7.xsd - - Or, if you want validator bodies: - - $ ../../generateDS.py -f -m \ - --validator-bodies=Validators \ - --namespacedef='xmlns:pl="http://kuhlman.com/people.xsd"' \ - --super=peoplesup -o peoplesup.py -s peoplesub.py \ - --member-specs=dict \ - people_7.xsd - - Notice that because the validator bodies sub-directory - Validators contains a file named percent.py, you should see that - the method validate_percent in class person in the generated - file peoplesup.py as been filled in with a body. - -- people_7.xml -- A data file used to test peoplesup.py and - peoplesub.py. Run the following to test it: - - $ python peoplesup.py people_7.xml - - Or, - - $ python peoplesub.py people_7.xml - - Note that you might need to edit the subclass file - (peoplesub.py), changing the import supermod statement, and run - that modified file. This modification is possibly not needed if - you used the --super= flag. - diff --git a/Demos/People/README.txt b/Demos/People/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..bbbb4cc47041c2c6af6e4ba05a996952cc9b210d --- /dev/null +++ b/Demos/People/README.txt @@ -0,0 +1,32 @@ +====================== +A generateDS.py demo +====================== + +Running the example +===================== + +This directory contains a simple example of the use of +generateDS.py. + +On Linux, you can run a test with the shell script +`run-full-test.sh` as follows: + + $ ./run-full-test.sh test + +The above shell script will use `people.xsd` to produce `testsup.py` +(with the "-o" command line option) and `testsub.py` (with the "-s" +command line option). It then runs the generated subclass +(`testsub.py`) file to parse and export `people.xml`. + + +Generating validator bodies +============================= + +You can generate code containing validator bodies by running +`run-full-test-validators.sh`. After running that shell script, the +code in `Validators/FlowType.py` will have been copying into the +method `validate_FlowType`. (`Validators/percent.py` is not used in +this example.) + + +.. vim:ft=rst: diff --git a/Demos/People/a1.session b/Demos/People/a1.session deleted file mode 100644 index cfdfbc88fe34abdd163f76a940a87fcfa7c5fe77..0000000000000000000000000000000000000000 --- a/Demos/People/a1.session +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" ?> -<session> - <input_schema>people.xsd</input_schema> - <output_superclass>peoplesup.py</output_superclass> - <output_subclass>peoplesub.py</output_subclass> - <force>true</force> - <prefix></prefix> - <namespace_prefix></namespace_prefix> - <empty_namespace_prefix>false</empty_namespace_prefix> - <behavior_filename></behavior_filename> - <properties>true</properties> - <subclass_suffix></subclass_suffix> - <root_element></root_element> - <superclass_module>peoplesup</superclass_module> - <auto_super>true</auto_super> - <old_getters_setters>false</old_getters_setters> - <validator_bodies></validator_bodies> - <user_methods></user_methods> - <no_dates>false</no_dates> - <no_versions>false</no_versions> - <no_process_includes>false</no_process_includes> - <silence>false</silence> - <namespace_defs>xmlns:pl="http://kuhlman.com/people.xsd"</namespace_defs> - <external_encoding></external_encoding> - <member_specs>dict</member_specs> -</session> diff --git a/Demos/People/people_catalog.xml b/Demos/People/people_catalog.xml new file mode 100644 index 0000000000000000000000000000000000000000..7a835105d12c92171c19e2af82d93fb19375c929 --- /dev/null +++ b/Demos/People/people_catalog.xml @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<!DOCTYPE catalog + PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" + "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"> + +<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" + prefer="public"> + + <public publicId="http://www.generateds.com/people-part1" + uri="schemas/people-part1.xsd"/> + +</catalog> diff --git a/Demos/People/peoplesub.py b/Demos/People/peoplesub.py index 4e93ce6d63a3e307e57e2d984518fa89d231d063..43606b42cea047ef8171bda4df9b12a9183df382 100644 --- a/Demos/People/peoplesub.py +++ b/Demos/People/peoplesub.py @@ -1,171 +1,151 @@ #!/usr/bin/env python # -# Generated Tue Feb 1 14:34:02 2011 by generateDS.py version 2.5a. +# Generated Thu Jul 19 14:09:57 2018 by generateDS.py version 2.29.17. +# Python 2.7.15 |Anaconda custom (64-bit)| (default, May 1 2018, 23:32:55) [GCC 7.2.0] +# +# Command line options: +# ('-f', '') +# ('-m', '') +# ('--namespacedef', 'xmlns:pl="http://kuhlman.com/people.xsd"') +# ('--super', 'peoplesup') +# ('-o', 'peoplesup.py') +# ('-s', 'peoplesub.py') +# ('--member-specs', 'dict') +# ('-m', '') +# ('--export', 'write etree literal') +# ('-c', 'people_catalog.xml') +# +# Command line arguments: +# people.xsd +# +# Command line: +# ../../generateDS.py -f -m --namespacedef="xmlns:pl="http://kuhlman.com/people.xsd"" --super="peoplesup" -o "peoplesup.py" -s "peoplesub.py" --member-specs="dict" -m --export="write etree literal" -c "people_catalog.xml" people.xsd +# +# Current working directory (os.getcwd()): +# People # import sys +from lxml import etree as etree_ import peoplesup 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): +def parsexml_(infile, parser=None, **kwargs): + if parser is None: # Use the lxml ElementTree compatible parser so that, e.g., # we ignore comments. - kwargs['parser'] = etree_.ETCompatXMLParser() - doc = etree_.parse(*args, **kwargs) + parser = etree_.ETCompatXMLParser() + doc = etree_.parse(infile, parser=parser, **kwargs) return doc # # Globals # -ExternalEncoding = 'ascii' +ExternalEncoding = '' # # Data representation classes # -class peopleSub(supermod.people): + +class peopleTypeSub(supermod.peopleType): def __init__(self, comments=None, person=None, specialperson=None, programmer=None, python_programmer=None, java_programmer=None): - super(peopleSub, self).__init__(comments, person, specialperson, programmer, python_programmer, java_programmer, ) -supermod.people.subclass = peopleSub -# end class peopleSub + super(peopleTypeSub, self).__init__(comments, person, specialperson, programmer, python_programmer, java_programmer, ) +supermod.peopleType.subclass = peopleTypeSub +# end class peopleTypeSub -class commentsSub(supermod.comments): +class commentsTypeSub(supermod.commentsType): def __init__(self, emp=None, bold=None, valueOf_=None, mixedclass_=None, content_=None): - super(commentsSub, self).__init__(emp, bold, valueOf_, mixedclass_, content_, ) -supermod.comments.subclass = commentsSub -# end class commentsSub + super(commentsTypeSub, self).__init__(emp, bold, valueOf_, mixedclass_, content_, ) +supermod.commentsType.subclass = commentsTypeSub +# end class commentsTypeSub -class personSub(supermod.person): - def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None): - super(personSub, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, ) -supermod.person.subclass = personSub -# end class personSub +class personTypeSub(supermod.personType): + def __init__(self, value=None, id=None, ratio=None, fruit=None, vegetable=None, name=None, interest=None, category=None, hot_agent=None, agent=None, promoter=None, description=None, range_=None, with_=None, extensiontype_=None): + super(personTypeSub, self).__init__(value, id, ratio, fruit, vegetable, name, interest, category, hot_agent, agent, promoter, description, range_, with_, extensiontype_, ) +supermod.personType.subclass = personTypeSub +# end class personTypeSub class specialpersonSub(supermod.specialperson): - def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None): - super(specialpersonSub, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, ) + def __init__(self, value=None, id=None, ratio=None, fruit=None, vegetable=None, name=None, interest=None, category=None, hot_agent=None, agent=None, promoter=None, description=None, range_=None, with_=None): + super(specialpersonSub, self).__init__(value, id, ratio, fruit, vegetable, name, interest, category, hot_agent, agent, promoter, description, range_, with_, ) supermod.specialperson.subclass = specialpersonSub # end class specialpersonSub -class programmerSub(supermod.programmer): - def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, language=None, area=None, attrnegint=None, attrposint=None, attrnonnegint=None, attrnonposint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None): - super(programmerSub, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, language, area, attrnegint, attrposint, attrnonnegint, attrnonposint, email, elposint, elnonposint, elnegint, elnonnegint, eldate, eltoken, elshort, ellong, elparam, elarraytypes, ) -supermod.programmer.subclass = programmerSub -# end class programmerSub +class programmerTypeSub(supermod.programmerType): + def __init__(self, value=None, id=None, ratio=None, fruit=None, vegetable=None, name=None, interest=None, category=None, hot_agent=None, agent=None, promoter=None, description=None, range_=None, with_=None, language=None, area=None, attrposint=None, attrnonposint=None, attrnegint=None, attrnonnegint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eldatetime=None, eldatetime1=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, extensiontype_=None): + super(programmerTypeSub, self).__init__(value, id, ratio, fruit, vegetable, name, interest, category, hot_agent, agent, promoter, description, range_, with_, language, area, attrposint, attrnonposint, attrnegint, attrnonnegint, email, elposint, elnonposint, elnegint, elnonnegint, eldate, eldatetime, eldatetime1, eltoken, elshort, ellong, elparam, elarraytypes, extensiontype_, ) +supermod.programmerType.subclass = programmerTypeSub +# end class programmerTypeSub -class paramSub(supermod.param): - def __init__(self, semantic=None, name=None, flow=None, sid=None, type_=None, id=None, valueOf_=None): - super(paramSub, self).__init__(semantic, name, flow, sid, type_, id, valueOf_, ) -supermod.param.subclass = paramSub -# end class paramSub +class paramTypeSub(supermod.paramType): + def __init__(self, id=None, name=None, sid=None, flow=None, semantic=None, type_=None, valueOf_=None): + super(paramTypeSub, self).__init__(id, name, sid, flow, semantic, type_, valueOf_, ) +supermod.paramType.subclass = paramTypeSub +# end class paramTypeSub -class python_programmerSub(supermod.python_programmer): - def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, language=None, area=None, attrnegint=None, attrposint=None, attrnonnegint=None, attrnonposint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, nick_name=None, favorite_editor=None): - super(python_programmerSub, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, language, area, attrnegint, attrposint, attrnonnegint, attrnonposint, email, elposint, elnonposint, elnegint, elnonnegint, eldate, eltoken, elshort, ellong, elparam, elarraytypes, nick_name, favorite_editor, ) -supermod.python_programmer.subclass = python_programmerSub -# end class python_programmerSub +class python_programmerTypeSub(supermod.python_programmerType): + def __init__(self, value=None, id=None, ratio=None, fruit=None, vegetable=None, name=None, interest=None, category=None, hot_agent=None, agent=None, promoter=None, description=None, range_=None, with_=None, language=None, area=None, attrposint=None, attrnonposint=None, attrnegint=None, attrnonnegint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eldatetime=None, eldatetime1=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, nick_name=None, drcs_attr=None, gui_developer=None, favorite_editor=None, flowvalue=None, drcs=None): + super(python_programmerTypeSub, self).__init__(value, id, ratio, fruit, vegetable, name, interest, category, hot_agent, agent, promoter, description, range_, with_, language, area, attrposint, attrnonposint, attrnegint, attrnonnegint, email, elposint, elnonposint, elnegint, elnonnegint, eldate, eldatetime, eldatetime1, eltoken, elshort, ellong, elparam, elarraytypes, nick_name, drcs_attr, gui_developer, favorite_editor, flowvalue, drcs, ) +supermod.python_programmerType.subclass = python_programmerTypeSub +# end class python_programmerTypeSub -class java_programmerSub(supermod.java_programmer): - def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, language=None, area=None, attrnegint=None, attrposint=None, attrnonnegint=None, attrnonposint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, status=None, nick_name=None, favorite_editor=None): - super(java_programmerSub, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, language, area, attrnegint, attrposint, attrnonnegint, attrnonposint, email, elposint, elnonposint, elnegint, elnonnegint, eldate, eltoken, elshort, ellong, elparam, elarraytypes, status, nick_name, favorite_editor, ) -supermod.java_programmer.subclass = java_programmerSub -# end class java_programmerSub +class java_programmerTypeSub(supermod.java_programmerType): + def __init__(self, value=None, id=None, ratio=None, fruit=None, vegetable=None, name=None, interest=None, category=None, hot_agent=None, agent=None, promoter=None, description=None, range_=None, with_=None, language=None, area=None, attrposint=None, attrnonposint=None, attrnegint=None, attrnonnegint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eldatetime=None, eldatetime1=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, nick_name=None, status=None, favorite_editor=None, datetime1=None, datetime2=None, datetime3=None, datetime4=None, datetime5=None): + super(java_programmerTypeSub, self).__init__(value, id, ratio, fruit, vegetable, name, interest, category, hot_agent, agent, promoter, description, range_, with_, language, area, attrposint, attrnonposint, attrnegint, attrnonnegint, email, elposint, elnonposint, elnegint, elnonnegint, eldate, eldatetime, eldatetime1, eltoken, elshort, ellong, elparam, elarraytypes, nick_name, status, favorite_editor, datetime1, datetime2, datetime3, datetime4, datetime5, ) +supermod.java_programmerType.subclass = java_programmerTypeSub +# end class java_programmerTypeSub -class agentSub(supermod.agent): - def __init__(self, firstname=None, lastname=None, priority=None, info=None, vehicle=None): - super(agentSub, self).__init__(firstname, lastname, priority, info, vehicle, ) -supermod.agent.subclass = agentSub -# end class agentSub +class agentTypeSub(supermod.agentType): + def __init__(self, firstname=None, lastname=None, priority=None, info=None, vehicle=None, extensiontype_=None): + super(agentTypeSub, self).__init__(firstname, lastname, priority, info, vehicle, extensiontype_, ) +supermod.agentType.subclass = agentTypeSub +# end class agentTypeSub -class special_agentSub(supermod.special_agent): - def __init__(self, firstname=None, lastname=None, priority=None, info=None): - super(special_agentSub, self).__init__(firstname, lastname, priority, info, ) -supermod.special_agent.subclass = special_agentSub -# end class special_agentSub +class special_agentTypeSub(supermod.special_agentType): + def __init__(self, firstname=None, lastname=None, priority=None, info=None, vehicle=None): + super(special_agentTypeSub, self).__init__(firstname, lastname, priority, info, vehicle, ) +supermod.special_agentType.subclass = special_agentTypeSub +# end class special_agentTypeSub -class boosterSub(supermod.booster): - def __init__(self, member_id=None, firstname=None, lastname=None, other_name=None, classxx=None, other_value=None, type_=None, client_handler=None): - super(boosterSub, self).__init__(member_id, firstname, lastname, other_name, classxx, other_value, type_, client_handler, ) -supermod.booster.subclass = boosterSub -# end class boosterSub +class weird_agentTypeSub(supermod.weird_agentType): + def __init__(self, firstname=None, lastname=None, priority=None, info=None, vehicle=None): + super(weird_agentTypeSub, self).__init__(firstname, lastname, priority, info, vehicle, ) +supermod.weird_agentType.subclass = weird_agentTypeSub +# end class weird_agentTypeSub -class client_handlerSub(supermod.client_handler): - def __init__(self, fullname=None, refid=None): - super(client_handlerSub, self).__init__(fullname, refid, ) -supermod.client_handler.subclass = client_handlerSub -# end class client_handlerSub +class boosterTypeSub(supermod.boosterType): + def __init__(self, member_id=None, firstname=None, lastname=None, other_name=None, class_=None, other_value=None, type_=None, client_handler=None): + super(boosterTypeSub, self).__init__(member_id, firstname, lastname, other_name, class_, other_value, type_, client_handler, ) +supermod.boosterType.subclass = boosterTypeSub +# end class boosterTypeSub -class infoSub(supermod.info): - def __init__(self, rating=None, type_=None, name=None, valueOf_=None): - super(infoSub, self).__init__(rating, type_, name, valueOf_, ) -supermod.info.subclass = infoSub -# end class infoSub +class infoTypeSub(supermod.infoType): + def __init__(self, name=None, type_=None, rating=None): + super(infoTypeSub, self).__init__(name, type_, rating, ) +supermod.infoType.subclass = infoTypeSub +# end class infoTypeSub -class vehicleSub(supermod.vehicle): - def __init__(self, wheelcount=None): - super(vehicleSub, self).__init__(wheelcount, ) -supermod.vehicle.subclass = vehicleSub -# end class vehicleSub +class vehicleTypeSub(supermod.vehicleType): + def __init__(self, wheelcount=None, extensiontype_=None): + super(vehicleTypeSub, self).__init__(wheelcount, extensiontype_, ) +supermod.vehicleType.subclass = vehicleTypeSub +# end class vehicleTypeSub class automobileSub(supermod.automobile): @@ -175,6 +155,13 @@ supermod.automobile.subclass = automobileSub # end class automobileSub +class hot_agentSub(supermod.hot_agent): + def __init__(self, firstname='empty\\name', lastname='no \'last\' name', priority=None, startDate=None): + super(hot_agentSub, self).__init__(firstname, lastname, priority, startDate, ) +supermod.hot_agent.subclass = hot_agentSub +# end class hot_agentSub + + class airplaneSub(supermod.airplane): def __init__(self, wheelcount=None, pilotname=None): super(airplaneSub, self).__init__(wheelcount, pilotname, ) @@ -182,67 +169,109 @@ supermod.airplane.subclass = airplaneSub # end class airplaneSub +class client_handlerTypeSub(supermod.client_handlerType): + def __init__(self, fullname=None, refid=None): + super(client_handlerTypeSub, self).__init__(fullname, refid, ) +supermod.client_handlerType.subclass = client_handlerTypeSub +# end class client_handlerTypeSub + def get_root_tag(node): tag = supermod.Tag_pattern_.match(node.tag).groups()[-1] rootClass = None - if hasattr(supermod, tag): + 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) +def parse(inFilename, silence=False): + parser = None + doc = parsexml_(inFilename, parser) rootNode = doc.getroot() rootTag, rootClass = get_root_tag(rootNode) if rootClass is None: - rootTag = 'people' - rootClass = supermod.people + rootTag = 'peopleType' + rootClass = supermod.peopleType 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_='xmlns:pl="http://kuhlman.com/people.xsd"') - doc = None + if not silence: + sys.stdout.write('<?xml version="1.0" ?>\n') + rootObj.export( + sys.stdout, 0, name_=rootTag, + namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"', + pretty_print=True) return rootObj -def parseString(inString): - from StringIO import StringIO - doc = parsexml_(StringIO(inString)) +def parseEtree(inFilename, silence=False): + parser = None + doc = parsexml_(inFilename, parser) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'peopleType' + rootClass = supermod.peopleType + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + doc = None + mapping = {} + rootElement = rootObj.to_etree(None, name_=rootTag, mapping_=mapping) + reverse_mapping = rootObj.gds_reverse_node_mapping(mapping) + if not silence: + content = etree_.tostring( + rootElement, pretty_print=True, + xml_declaration=True, encoding="utf-8") + sys.stdout.write(content) + sys.stdout.write('\n') + return rootObj, rootElement, mapping, reverse_mapping + + +def parseString(inString, silence=False): + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO + parser = None + doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() rootTag, rootClass = get_root_tag(rootNode) if rootClass is None: - rootTag = 'people' - rootClass = supermod.people + rootTag = 'peopleType' + rootClass = supermod.peopleType 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_='xmlns:pl="http://kuhlman.com/people.xsd"') + if not silence: + sys.stdout.write('<?xml version="1.0" ?>\n') + rootObj.export( + sys.stdout, 0, name_=rootTag, + namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"') return rootObj -def parseLiteral(inFilename): - doc = parsexml_(inFilename) +def parseLiteral(inFilename, silence=False): + parser = None + doc = parsexml_(inFilename, parser) rootNode = doc.getroot() rootTag, rootClass = get_root_tag(rootNode) if rootClass is None: - rootTag = 'people' - rootClass = supermod.people + rootTag = 'peopleType' + rootClass = supermod.peopleType rootObj = rootClass.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None - sys.stdout.write('#from peoplesup import *\n\n') - sys.stdout.write('import peoplesup as model_\n\n') - sys.stdout.write('rootObj = model_.people(\n') - rootObj.exportLiteral(sys.stdout, 0, name_="people") - sys.stdout.write(')\n') + if not silence: + sys.stdout.write('#from peoplesup import *\n\n') + sys.stdout.write('import peoplesup as model_\n\n') + sys.stdout.write('rootObj = model_.rootClass(\n') + rootObj.exportLiteral(sys.stdout, 0, name_=rootTag) + sys.stdout.write(')\n') return rootObj @@ -250,8 +279,9 @@ USAGE_TEXT = """ Usage: python ???.py <infilename> """ + def usage(): - print USAGE_TEXT + print(USAGE_TEXT) sys.exit(1) @@ -260,11 +290,9 @@ def main(): if len(args) != 1: usage() infilename = args[0] - root = parse(infilename) + parse(infilename) if __name__ == '__main__': #import pdb; pdb.set_trace() main() - - diff --git a/Demos/People/peoplesup.py b/Demos/People/peoplesup.py index c3323581e97275b0242b99d5b2bb8f17ebe39c94..231b84c36b41df04952e5af6f9d608909dfb004a 100644 --- a/Demos/People/peoplesup.py +++ b/Demos/People/peoplesup.py @@ -1,68 +1,102 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- +# -*- coding: utf-8 -*- # -# Generated Tue Feb 1 14:34:02 2011 by generateDS.py version 2.5a. +# Generated Thu Jul 19 14:09:57 2018 by generateDS.py version 2.29.17. +# Python 2.7.15 |Anaconda custom (64-bit)| (default, May 1 2018, 23:32:55) [GCC 7.2.0] +# +# Command line options: +# ('-f', '') +# ('-m', '') +# ('--namespacedef', 'xmlns:pl="http://kuhlman.com/people.xsd"') +# ('--super', 'peoplesup') +# ('-o', 'peoplesup.py') +# ('-s', 'peoplesub.py') +# ('--member-specs', 'dict') +# ('-m', '') +# ('--export', 'write etree literal') +# ('-c', 'people_catalog.xml') +# +# Command line arguments: +# people.xsd +# +# Command line: +# ../../generateDS.py -f -m --namespacedef="xmlns:pl="http://kuhlman.com/people.xsd"" --super="peoplesup" -o "peoplesup.py" -s "peoplesub.py" --member-specs="dict" -m --export="write etree literal" -c "people_catalog.xml" people.xsd +# +# Current working directory (os.getcwd()): +# People # import sys -import getopt import re as re_ - -etree_ = None -Verbose_import_ = False -( XMLParser_import_none, XMLParser_import_lxml, - XMLParser_import_elementtree - ) = range(3) -XMLParser_import_library = None +import base64 +import datetime as datetime_ +import warnings as warnings_ 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): + from xml.etree import ElementTree as etree_ + + +Validate_simpletypes_ = True +if sys.version_info.major == 2: + BaseStrType_ = basestring +else: + BaseStrType_ = str + + +def parsexml_(infile, parser=None, **kwargs): + if parser is None: # Use the lxml ElementTree compatible parser so that, e.g., # we ignore comments. - kwargs['parser'] = etree_.ETCompatXMLParser() - doc = etree_.parse(*args, **kwargs) + try: + parser = etree_.ETCompatXMLParser() + except AttributeError: + # fallback to xml.etree + parser = etree_.XMLParser() + doc = etree_.parse(infile, parser=parser, **kwargs) return doc +def parsexmlstring_(instring, parser=None, **kwargs): + if parser is None: + # Use the lxml ElementTree compatible parser so that, e.g., + # we ignore comments. + try: + parser = etree_.ETCompatXMLParser() + except AttributeError: + # fallback to xml.etree + parser = etree_.XMLParser() + element = etree_.fromstring(instring, parser=parser, **kwargs) + return element + +# +# Namespace prefix definition table (and other attributes, too) +# +# The module generatedsnamespaces, if it is importable, must contain +# a dictionary named GeneratedsNamespaceDefs. This Python dictionary +# should map element type names (strings) to XML schema namespace prefix +# definitions. The export method for any class for which there is +# a namespace prefix definition, will export that definition in the +# XML representation of that element. See the export method of +# any generated element type class for a example of the use of this +# table. +# A sample table is: +# +# # File: generatedsnamespaces.py +# +# GenerateDSNamespaceDefs = { +# "ElementtypeA": "http://www.xxx.com/namespaceA", +# "ElementtypeB": "http://www.xxx.com/namespaceB", +# } +# + +try: + from generatedsnamespaces import GenerateDSNamespaceDefs as GenerateDSNamespaceDefs_ +except ImportError: + GenerateDSNamespaceDefs_ = {} + # -# User methods +# The root super-class for element type classes # # Calls to the methods in these classes are generated by generateDS.py. # You can replace these methods by re-implementing the following class @@ -70,23 +104,340 @@ def parsexml_(*args, **kwargs): try: from generatedssuper import GeneratedsSuper -except ImportError, exp: - +except ImportError as exp: + class GeneratedsSuper(object): + tzoff_pattern = re_.compile(r'(\+|-)((0\d|1[0-3]):[0-5]\d|14:00)$') + class _FixedOffsetTZ(datetime_.tzinfo): + def __init__(self, offset, name): + self.__offset = datetime_.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=None, input_name=''): + if not input_data: + return '' + else: + 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=None, 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=None, input_name=''): + return input_data + def gds_format_integer_list(self, input_data, input_name=''): + return '%s' % ' '.join(input_data) + def gds_validate_integer_list( + self, input_data, node=None, input_name=''): + values = input_data.split() + for value in values: + try: + int(value) + except (TypeError, ValueError): + raise_parse_error(node, 'Requires sequence of integers') + return values def gds_format_float(self, input_data, input_name=''): - return '%f' % input_data + return ('%.15f' % input_data).rstrip('0') + def gds_validate_float(self, input_data, node=None, input_name=''): + return input_data + def gds_format_float_list(self, input_data, input_name=''): + return '%s' % ' '.join(input_data) + def gds_validate_float_list( + self, input_data, node=None, input_name=''): + values = input_data.split() + for value in values: + try: + float(value) + except (TypeError, ValueError): + raise_parse_error(node, 'Requires sequence of floats') + return values def gds_format_double(self, input_data, input_name=''): return '%e' % input_data + def gds_validate_double(self, input_data, node=None, input_name=''): + return input_data + def gds_format_double_list(self, input_data, input_name=''): + return '%s' % ' '.join(input_data) + def gds_validate_double_list( + self, input_data, node=None, input_name=''): + values = input_data.split() + for value in values: + try: + float(value) + except (TypeError, ValueError): + raise_parse_error(node, 'Requires sequence of doubles') + return values def gds_format_boolean(self, input_data, input_name=''): - return '%s' % input_data + return ('%s' % input_data).lower() + def gds_validate_boolean(self, input_data, node=None, input_name=''): + return input_data + def gds_format_boolean_list(self, input_data, input_name=''): + return '%s' % ' '.join(input_data) + def gds_validate_boolean_list( + self, input_data, node=None, 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 values + def gds_validate_datetime(self, input_data, node=None, input_name=''): + return input_data + def gds_format_datetime(self, input_data, input_name=''): + if input_data.microsecond == 0: + _svalue = '%04d-%02d-%02dT%02d:%02d:%02d' % ( + input_data.year, + input_data.month, + input_data.day, + input_data.hour, + input_data.minute, + input_data.second, + ) + else: + _svalue = '%04d-%02d-%02dT%02d:%02d:%02d.%s' % ( + input_data.year, + input_data.month, + input_data.day, + input_data.hour, + input_data.minute, + input_data.second, + ('%f' % (float(input_data.microsecond) / 1000000))[2:], + ) + 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 + @classmethod + def gds_parse_datetime(cls, input_data): + tz = None + if input_data[-1] == 'Z': + tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC') + 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] + time_parts = input_data.split('.') + if len(time_parts) > 1: + micro_seconds = int(float('0.' + time_parts[1]) * 1000000) + input_data = '%s.%s' % (time_parts[0], micro_seconds, ) + dt = datetime_.datetime.strptime( + input_data, '%Y-%m-%dT%H:%M:%S.%f') + else: + dt = datetime_.datetime.strptime( + input_data, '%Y-%m-%dT%H:%M:%S') + dt = dt.replace(tzinfo=tz) + return dt + def gds_validate_date(self, input_data, node=None, input_name=''): + return input_data + def gds_format_date(self, input_data, input_name=''): + _svalue = '%04d-%02d-%02d' % ( + input_data.year, + input_data.month, + input_data.day, + ) + try: + 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) + except AttributeError: + pass + return _svalue + @classmethod + def gds_parse_date(cls, input_data): + tz = None + if input_data[-1] == 'Z': + tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC') + 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] + dt = datetime_.datetime.strptime(input_data, '%Y-%m-%d') + dt = dt.replace(tzinfo=tz) + return dt.date() + def gds_validate_time(self, input_data, node=None, input_name=''): + return input_data + def gds_format_time(self, input_data, input_name=''): + if input_data.microsecond == 0: + _svalue = '%02d:%02d:%02d' % ( + input_data.hour, + input_data.minute, + input_data.second, + ) + else: + _svalue = '%02d:%02d:%02d.%s' % ( + input_data.hour, + input_data.minute, + input_data.second, + ('%f' % (float(input_data.microsecond) / 1000000))[2:], + ) + 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_validate_simple_patterns(self, patterns, target): + # pat is a list of lists of strings/patterns. We should: + # - AND the outer elements + # - OR the inner elements + found1 = True + for patterns1 in patterns: + found2 = False + for patterns2 in patterns1: + if re_.search(patterns2, target) is not None: + found2 = True + break + if not found2: + found1 = False + break + return found1 + @classmethod + def gds_parse_time(cls, input_data): + tz = None + if input_data[-1] == 'Z': + tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC') + 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] + if len(input_data.split('.')) > 1: + dt = datetime_.datetime.strptime(input_data, '%H:%M:%S.%f') + else: + dt = datetime_.datetime.strptime(input_data, '%H:%M:%S') + dt = dt.replace(tzinfo=tz) + return dt.time() 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 + @classmethod + def gds_reverse_node_mapping(cls, mapping): + return dict(((v, k) for k, v in mapping.iteritems())) + @staticmethod + def gds_encode(instring): + if sys.version_info.major == 2: + if ExternalEncoding: + encoding = ExternalEncoding + else: + encoding = 'utf-8' + return instring.encode(encoding) + else: + return instring + @staticmethod + def convert_unicode(instring): + if isinstance(instring, str): + result = quote_xml(instring) + elif sys.version_info.major == 2 and isinstance(instring, unicode): + result = quote_xml(instring).encode('utf8') + else: + result = GeneratedsSuper.gds_encode(str(instring)) + return result + def __eq__(self, other): + if type(self) != type(other): + return False + return self.__dict__ == other.__dict__ + def __ne__(self, other): + return not self.__eq__(other) + + def getSubclassFromModule_(module, class_): + '''Get the subclass of a class from a specific module.''' + name = class_.__name__ + 'Sub' + if hasattr(module, name): + return getattr(module, name) + else: + return None + # # If you have installed IPython you can uncomment and use the following. @@ -107,31 +458,54 @@ except ImportError, exp: # Globals # -ExternalEncoding = 'ascii' +ExternalEncoding = '' Tag_pattern_ = re_.compile(r'({.*})?(.*)') -STRING_CLEANUP_PAT = re_.compile(r"[\n\r\s]+") +String_cleanup_pat_ = re_.compile(r"[\n\r\s]+") +Namespace_extract_pat_ = re_.compile(r'{(.*)}(.*)') +CDATA_pattern_ = re_.compile(r"<!\[CDATA\[.*?\]\]>", re_.DOTALL) + +# Change this to redirect the generated superclass module to use a +# specific subclass module. +CurrentSubclassModule_ = None # # Support/utility functions. # -def showIndent(outfile, level): - for idx in range(level): - outfile.write(' ') + +def showIndent(outfile, level, pretty_print=True): + if pretty_print: + for idx in range(level): + outfile.write(' ') + def quote_xml(inStr): + "Escape markup chars, but do not modify CDATA sections." if not inStr: return '' - s1 = (isinstance(inStr, basestring) and inStr or - '%s' % inStr) - s1 = s1.replace('&', '&') + s1 = (isinstance(inStr, BaseStrType_) and inStr or '%s' % inStr) + s2 = '' + pos = 0 + matchobjects = CDATA_pattern_.finditer(s1) + for mo in matchobjects: + s3 = s1[pos:mo.start()] + s2 += quote_xml_aux(s3) + s2 += s1[mo.start():mo.end()] + pos = mo.end() + s3 = s1[pos:] + s2 += quote_xml_aux(s3) + return s2 + + +def quote_xml_aux(inStr): + s1 = inStr.replace('&', '&') s1 = s1.replace('<', '<') s1 = s1.replace('>', '>') return s1 + def quote_attrib(inStr): - s1 = (isinstance(inStr, basestring) and inStr or - '%s' % inStr) + s1 = (isinstance(inStr, BaseStrType_) and inStr or '%s' % inStr) s1 = s1.replace('&', '&') s1 = s1.replace('<', '<') s1 = s1.replace('>', '>') @@ -144,6 +518,7 @@ def quote_attrib(inStr): s1 = '"%s"' % s1 return s1 + def quote_python(inStr): s1 = inStr if s1.find("'") == -1: @@ -171,14 +546,26 @@ def get_all_text_(node): 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, ) + msg = '%s (element %s/line %d)' % (msg, node.tag, node.sourceline, ) raise GDSParseError(msg) @@ -197,6 +584,7 @@ class MixedContainer: TypeDecimal = 5 TypeDouble = 6 TypeBoolean = 7 + TypeBase64 = 8 def __init__(self, category, content_type, name, value): self.category = category self.content_type = content_type @@ -210,49 +598,104 @@ class MixedContainer: return self.value def getName(self): return self.name - def export(self, outfile, level, name, namespace): + 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(): + 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) + self.value.export( + outfile, level, namespace, name, + pretty_print=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)) + 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)) + 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)) + 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)) + 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 to_etree(self, element): + if self.category == MixedContainer.CategoryText: + # Prevent exporting empty content as empty lines. + if self.value.strip(): + if len(element) > 0: + if element[-1].tail is None: + element[-1].tail = self.value + else: + element[-1].tail += self.value + else: + if element.text is None: + element.text = self.value + else: + element.text += self.value + elif self.category == MixedContainer.CategorySimple: + subelement = etree_.SubElement( + element, '%s' % self.name) + subelement.text = self.to_etree_simple() + else: # category == MixedContainer.CategoryComplex + self.value.to_etree(element) + def to_etree_simple(self): + if self.content_type == MixedContainer.TypeString: + text = self.value + elif (self.content_type == MixedContainer.TypeInteger or + self.content_type == MixedContainer.TypeBoolean): + text = '%d' % self.value + elif (self.content_type == MixedContainer.TypeFloat or + self.content_type == MixedContainer.TypeDecimal): + text = '%f' % self.value + elif self.content_type == MixedContainer.TypeDouble: + text = '%g' % self.value + elif self.content_type == MixedContainer.TypeBase64: + text = '%s' % base64.b64encode(self.value) + return text 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)) + 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)) + 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,)) + 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): + def __init__(self, name='', data_type='', container=0, + optional=0, child_attrs=None, choice=None): self.name = name self.data_type = data_type self.container = container + self.child_attrs = child_attrs + self.choice = choice + self.optional = optional 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 @@ -267,6 +710,13 @@ class MemberSpec_(object): return self.data_type def set_container(self, container): self.container = container def get_container(self): return self.container + def set_child_attrs(self, child_attrs): self.child_attrs = child_attrs + def get_child_attrs(self): return self.child_attrs + def set_choice(self, choice): self.choice = choice + def get_choice(self): return self.choice + def set_optional(self, optional): self.optional = optional + def get_optional(self): return self.optional + def _cast(typ, value): if typ is None or value is None: @@ -277,19 +727,27 @@ def _cast(typ, value): # Data representation classes. # -class people(GeneratedsSuper): - """A list of people.""" + +class ArrayTypes(object): + float_='float' + int='int' + Name='Name' + token='token' + + +class peopleType(GeneratedsSuper): member_data_items_ = { - 'comments': MemberSpec_('comments', 'comments', 1), - 'person': MemberSpec_('person', 'person', 1), - 'specialperson': MemberSpec_('specialperson', 'specialperson', 1), - 'programmer': MemberSpec_('programmer', 'programmer', 1), - 'python_programmer': MemberSpec_('python_programmer', 'python-programmer', 1), - 'java_programmer': MemberSpec_('java_programmer', 'java-programmer', 1), - } + 'comments': MemberSpec_('comments', 'commentsType', 1, 0, {u'maxOccurs': u'unbounded', u'type': u'commentsType', u'name': u'comments'}, None), + 'person': MemberSpec_('person', 'personType', 1, 0, {u'maxOccurs': u'unbounded', u'type': u'personType', u'name': u'person'}, None), + 'specialperson': MemberSpec_('specialperson', 'specialperson', 1, 0, {u'maxOccurs': u'unbounded', u'type': u'specialperson', u'name': u'specialperson'}, None), + 'programmer': MemberSpec_('programmer', 'programmerType', 1, 0, {u'maxOccurs': u'unbounded', u'type': u'programmerType', u'name': u'programmer'}, None), + 'python_programmer': MemberSpec_('python_programmer', 'python-programmerType', 1, 0, {u'maxOccurs': u'unbounded', u'type': u'python-programmerType', u'name': u'python-programmer'}, None), + 'java_programmer': MemberSpec_('java_programmer', 'java-programmerType', 1, 0, {u'maxOccurs': u'unbounded', u'type': u'java-programmerType', u'name': u'java-programmer'}, None), + } subclass = None superclass = None def __init__(self, comments=None, person=None, specialperson=None, programmer=None, python_programmer=None, java_programmer=None): + self.original_tagname_ = None if comments is None: self.comments = [] else: @@ -315,67 +773,52 @@ class people(GeneratedsSuper): else: self.java_programmer = java_programmer def factory(*args_, **kwargs_): - if people.subclass: - return people.subclass(*args_, **kwargs_) + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, peopleType) + if subclass is not None: + return subclass(*args_, **kwargs_) + if peopleType.subclass: + return peopleType.subclass(*args_, **kwargs_) else: - return people(*args_, **kwargs_) + return peopleType(*args_, **kwargs_) factory = staticmethod(factory) def get_comments(self): return self.comments def set_comments(self, comments): self.comments = comments def add_comments(self, value): self.comments.append(value) - def insert_comments(self, index, value): self.comments[index] = value + def insert_comments_at(self, index, value): self.comments.insert(index, value) + def replace_comments_at(self, index, value): self.comments[index] = value commentsProp = property(get_comments, set_comments) def get_person(self): return self.person def set_person(self, person): self.person = person def add_person(self, value): self.person.append(value) - def insert_person(self, index, value): self.person[index] = value + def insert_person_at(self, index, value): self.person.insert(index, value) + def replace_person_at(self, index, value): self.person[index] = value personProp = property(get_person, set_person) def get_specialperson(self): return self.specialperson def set_specialperson(self, specialperson): self.specialperson = specialperson def add_specialperson(self, value): self.specialperson.append(value) - def insert_specialperson(self, index, value): self.specialperson[index] = value + def insert_specialperson_at(self, index, value): self.specialperson.insert(index, value) + def replace_specialperson_at(self, index, value): self.specialperson[index] = value specialpersonProp = property(get_specialperson, set_specialperson) def get_programmer(self): return self.programmer def set_programmer(self, programmer): self.programmer = programmer def add_programmer(self, value): self.programmer.append(value) - def insert_programmer(self, index, value): self.programmer[index] = value + def insert_programmer_at(self, index, value): self.programmer.insert(index, value) + def replace_programmer_at(self, index, value): self.programmer[index] = value programmerProp = property(get_programmer, set_programmer) def get_python_programmer(self): return self.python_programmer def set_python_programmer(self, python_programmer): self.python_programmer = python_programmer def add_python_programmer(self, value): self.python_programmer.append(value) - def insert_python_programmer(self, index, value): self.python_programmer[index] = value + def insert_python_programmer_at(self, index, value): self.python_programmer.insert(index, value) + def replace_python_programmer_at(self, index, value): self.python_programmer[index] = value python_programmerProp = property(get_python_programmer, set_python_programmer) def get_java_programmer(self): return self.java_programmer def set_java_programmer(self, java_programmer): self.java_programmer = java_programmer def add_java_programmer(self, value): self.java_programmer.append(value) - def insert_java_programmer(self, index, value): self.java_programmer[index] = value + def insert_java_programmer_at(self, index, value): self.java_programmer.insert(index, value) + def replace_java_programmer_at(self, index, value): self.java_programmer[index] = value java_programmerProp = property(get_java_programmer, set_java_programmer) - def export(self, outfile, level, namespace_='', name_='people', namespacedef_=''): - showIndent(outfile, level) - outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) - self.exportAttributes(outfile, level, [], namespace_, name_='people') - if self.hasContent_(): - outfile.write('>\n') - self.exportChildren(outfile, level + 1, namespace_, name_) - showIndent(outfile, level) - outfile.write('</%s%s>\n' % (namespace_, name_)) - else: - outfile.write('/>\n') - def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='people'): - pass - def exportChildren(self, outfile, level, namespace_='', name_='people'): - for comments_ in self.comments: - comments_.export(outfile, level, namespace_, name_='comments') - for person_ in self.person: - person_.export(outfile, level, namespace_, name_='person') - for specialperson_ in self.specialperson: - specialperson_.export(outfile, level, namespace_, name_='specialperson') - for programmer_ in self.programmer: - programmer_.export(outfile, level, namespace_, name_='programmer') - for python_programmer_ in self.python_programmer: - python_programmer_.export(outfile, level, namespace_, name_='python-programmer') - for java_programmer_ in self.java_programmer: - java_programmer_.export(outfile, level, namespace_, name_='java-programmer') def hasContent_(self): if ( self.comments or @@ -384,13 +827,74 @@ class people(GeneratedsSuper): self.programmer or self.python_programmer or self.java_programmer - ): + ): return True else: return False - def exportLiteral(self, outfile, level, name_='people'): + def export(self, outfile, level, namespace_='', name_='peopleType', namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"', pretty_print=True): + imported_ns_def_ = GenerateDSNamespaceDefs_.get('peopleType') + if imported_ns_def_ is not None: + namespacedef_ = imported_ns_def_ + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = set() + self.exportAttributes(outfile, level, already_processed, namespace_, name_='peopleType') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='peopleType', 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_='peopleType'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='peopleType', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + for comments_ in self.comments: + comments_.export(outfile, level, namespace_, name_='comments', pretty_print=pretty_print) + for person_ in self.person: + person_.export(outfile, level, namespace_, name_='person', pretty_print=pretty_print) + for specialperson_ in self.specialperson: + specialperson_.export(outfile, level, namespace_, name_='specialperson', pretty_print=pretty_print) + for programmer_ in self.programmer: + programmer_.export(outfile, level, namespace_, name_='programmer', pretty_print=pretty_print) + for python_programmer_ in self.python_programmer: + python_programmer_.export(outfile, level, namespace_, name_='python-programmer', pretty_print=pretty_print) + for java_programmer_ in self.java_programmer: + java_programmer_.export(outfile, level, namespace_, name_='java-programmer', pretty_print=pretty_print) + def to_etree(self, parent_element=None, name_='peopleType', mapping_=None): + if parent_element is None: + element = etree_.Element('{}' + name_) + else: + element = etree_.SubElement(parent_element, '{}' + name_) + for comments_ in self.comments: + comments_.to_etree(element, name_='comments', mapping_=mapping_) + for person_ in self.person: + person_.to_etree(element, name_='person', mapping_=mapping_) + for specialperson_ in self.specialperson: + specialperson_.to_etree(element, name_='specialperson', mapping_=mapping_) + for programmer_ in self.programmer: + programmer_.to_etree(element, name_='programmer', mapping_=mapping_) + for python_programmer_ in self.python_programmer: + python_programmer_.to_etree(element, name_='python-programmer', mapping_=mapping_) + for java_programmer_ in self.java_programmer: + java_programmer_.to_etree(element, name_='java-programmer', mapping_=mapping_) + if mapping_ is not None: + mapping_[self] = element + return element + def exportLiteral(self, outfile, level, name_='peopleType'): level += 1 - self.exportLiteralAttributes(outfile, level, [], name_) + already_processed = set() + self.exportLiteralAttributes(outfile, level, already_processed, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, already_processed, name_): @@ -401,8 +905,8 @@ class people(GeneratedsSuper): level += 1 for comments_ in self.comments: showIndent(outfile, level) - outfile.write('model_.comments(\n') - comments_.exportLiteral(outfile, level) + outfile.write('model_.commentsType(\n') + comments_.exportLiteral(outfile, level, name_='commentsType') showIndent(outfile, level) outfile.write('),\n') level -= 1 @@ -413,8 +917,8 @@ class people(GeneratedsSuper): level += 1 for person_ in self.person: showIndent(outfile, level) - outfile.write('model_.person(\n') - person_.exportLiteral(outfile, level) + outfile.write('model_.personType(\n') + person_.exportLiteral(outfile, level, name_='personType') showIndent(outfile, level) outfile.write('),\n') level -= 1 @@ -437,8 +941,8 @@ class people(GeneratedsSuper): level += 1 for programmer_ in self.programmer: showIndent(outfile, level) - outfile.write('model_.programmer(\n') - programmer_.exportLiteral(outfile, level) + outfile.write('model_.programmerType(\n') + programmer_.exportLiteral(outfile, level, name_='programmerType') showIndent(outfile, level) outfile.write('),\n') level -= 1 @@ -449,8 +953,8 @@ class people(GeneratedsSuper): level += 1 for python_programmer_ in self.python_programmer: showIndent(outfile, level) - outfile.write('model_.python_programmer(\n') - python_programmer_.exportLiteral(outfile, level, name_='python-programmer') + outfile.write('model_.python_programmerType(\n') + python_programmer_.exportLiteral(outfile, level, name_='python-programmerType') showIndent(outfile, level) outfile.write('),\n') level -= 1 @@ -461,57 +965,68 @@ class people(GeneratedsSuper): level += 1 for java_programmer_ in self.java_programmer: showIndent(outfile, level) - outfile.write('model_.java_programmer(\n') - java_programmer_.exportLiteral(outfile, level, name_='java-programmer') + outfile.write('model_.java_programmerType(\n') + java_programmer_.exportLiteral(outfile, level, name_='java-programmerType') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node): - self.buildAttributes(node, node.attrib, []) + already_processed = set() + self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] - self.buildChildren(child, nodeName_) + self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): pass - def buildChildren(self, child_, nodeName_, from_subclass=False): - if nodeName_ == 'comments': - obj_ = comments.factory() + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + if nodeName_ == 'comments': + obj_ = commentsType.factory() obj_.build(child_) self.comments.append(obj_) - elif nodeName_ == 'person': - obj_ = person.factory() + obj_.original_tagname_ = 'comments' + elif nodeName_ == 'person': + class_obj_ = self.get_class_obj_(child_, personType) + obj_ = class_obj_.factory() obj_.build(child_) self.person.append(obj_) - elif nodeName_ == 'specialperson': + obj_.original_tagname_ = 'person' + elif nodeName_ == 'specialperson': obj_ = specialperson.factory() obj_.build(child_) self.specialperson.append(obj_) - elif nodeName_ == 'programmer': - obj_ = programmer.factory() + obj_.original_tagname_ = 'specialperson' + elif nodeName_ == 'programmer': + class_obj_ = self.get_class_obj_(child_, programmerType) + obj_ = class_obj_.factory() obj_.build(child_) self.programmer.append(obj_) - elif nodeName_ == 'python-programmer': - obj_ = python_programmer.factory() + obj_.original_tagname_ = 'programmer' + elif nodeName_ == 'python-programmer': + obj_ = python_programmerType.factory() obj_.build(child_) self.python_programmer.append(obj_) - elif nodeName_ == 'java-programmer': - obj_ = java_programmer.factory() + obj_.original_tagname_ = 'python-programmer' + elif nodeName_ == 'java-programmer': + obj_ = java_programmerType.factory() obj_.build(child_) self.java_programmer.append(obj_) -# end class people + obj_.original_tagname_ = 'java-programmer' +# end class peopleType -class comments(GeneratedsSuper): +class commentsType(GeneratedsSuper): member_data_items_ = { - 'emp': MemberSpec_('emp', 'xs:string', 1), - 'bold': MemberSpec_('bold', 'xs:string', 1), + 'emp': MemberSpec_('emp', 'xs:string', 1, 0, {u'maxOccurs': u'unbounded', u'type': u'xs:string', u'name': u'emp'}, None), + 'bold': MemberSpec_('bold', 'xs:string', 1, 0, {u'maxOccurs': u'unbounded', u'type': u'xs:string', u'name': u'bold'}, None), 'valueOf_': MemberSpec_('valueOf_', [], 0), - } + } subclass = None superclass = None def __init__(self, emp=None, bold=None, valueOf_=None, mixedclass_=None, content_=None): + self.original_tagname_ = None if emp is None: self.emp = [] else: @@ -531,51 +1046,90 @@ class comments(GeneratedsSuper): self.content_ = content_ self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): - if comments.subclass: - return comments.subclass(*args_, **kwargs_) + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, commentsType) + if subclass is not None: + return subclass(*args_, **kwargs_) + if commentsType.subclass: + return commentsType.subclass(*args_, **kwargs_) else: - return comments(*args_, **kwargs_) + return commentsType(*args_, **kwargs_) factory = staticmethod(factory) def get_emp(self): return self.emp def set_emp(self, emp): self.emp = emp def add_emp(self, value): self.emp.append(value) - def insert_emp(self, index, value): self.emp[index] = value + def insert_emp_at(self, index, value): self.emp.insert(index, value) + def replace_emp_at(self, index, value): self.emp[index] = value empProp = property(get_emp, set_emp) def get_bold(self): return self.bold def set_bold(self, bold): self.bold = bold def add_bold(self, value): self.bold.append(value) - def insert_bold(self, index, value): self.bold[index] = value + def insert_bold_at(self, index, value): self.bold.insert(index, value) + def replace_bold_at(self, index, value): self.bold[index] = value boldProp = property(get_bold, set_bold) def get_valueOf_(self): return self.valueOf_ def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_ - def export(self, outfile, level, namespace_='', name_='comments', namespacedef_=''): - showIndent(outfile, level) - outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) - self.exportAttributes(outfile, level, [], namespace_, name_='comments') - if self.hasContent_(): - outfile.write('>\n') - self.exportChildren(outfile, level + 1, namespace_, name_) - showIndent(outfile, level) - outfile.write('</%s%s>\n' % (namespace_, name_)) - else: - outfile.write('/>\n') - def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='comments'): - pass - def exportChildren(self, outfile, level, namespace_='', name_='comments'): - for item_ in self.content_: - item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.emp or self.bold or - self.valueOf_ - ): + (1 if type(self.valueOf_) in [int,float] else self.valueOf_) + ): return True else: return False - def exportLiteral(self, outfile, level, name_='comments'): + def export(self, outfile, level, namespace_='', name_='commentsType', namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"', pretty_print=True): + imported_ns_def_ = GenerateDSNamespaceDefs_.get('commentsType') + if imported_ns_def_ is not None: + namespacedef_ = imported_ns_def_ + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = set() + self.exportAttributes(outfile, level, already_processed, namespace_, name_='commentsType') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='commentsType', 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_='commentsType'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='commentsType', fromsubclass_=False, pretty_print=True): + if not fromsubclass_: + for item_ in self.content_: + item_.export(outfile, level, item_.name, namespace_, pretty_print=pretty_print) + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + for emp_ in self.emp: + showIndent(outfile, level, pretty_print) + outfile.write('<emp>%s</emp>%s' % (self.gds_encode(self.gds_format_string(quote_xml(emp_), input_name='emp')), eol_)) + for bold_ in self.bold: + showIndent(outfile, level, pretty_print) + outfile.write('<bold>%s</bold>%s' % (self.gds_encode(self.gds_format_string(quote_xml(bold_), input_name='bold')), eol_)) + def to_etree(self, parent_element=None, name_='commentsType', mapping_=None): + if parent_element is None: + element = etree_.Element('{}' + name_) + else: + element = etree_.SubElement(parent_element, '{}' + name_) + for item_ in self.content_: + item_.to_etree(element) + if mapping_ is not None: + mapping_[self] = element + return element + def exportLiteral(self, outfile, level, name_='commentsType'): level += 1 - self.exportLiteralAttributes(outfile, level, [], name_) + already_processed = set() + self.exportLiteralAttributes(outfile, level, already_processed, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) showIndent(outfile, level) @@ -597,7 +1151,8 @@ class comments(GeneratedsSuper): outfile.write('],\n') pass def build(self, node): - self.buildAttributes(node, node.attrib, []) + already_processed = set() + self.buildAttributes(node, node.attrib, already_processed) self.valueOf_ = get_all_text_(node) if node.text is not None: obj_ = self.mixedclass_(MixedContainer.CategoryText, @@ -605,10 +1160,11 @@ class comments(GeneratedsSuper): self.content_.append(obj_) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] - self.buildChildren(child, nodeName_) + self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): pass - def buildChildren(self, child_, nodeName_, from_subclass=False): + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): if nodeName_ == 'emp' and child_.text is not None: valuestr_ = child_.text obj_ = self.mixedclass_(MixedContainer.CategorySimple, @@ -619,44 +1175,46 @@ class comments(GeneratedsSuper): obj_ = self.mixedclass_(MixedContainer.CategorySimple, MixedContainer.TypeString, 'bold', valuestr_) self.content_.append(obj_) - if not from_subclass and child_.tail is not None: + if not fromsubclass_ and child_.tail is not None: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.tail) self.content_.append(obj_) -# end class comments +# end class commentsType -class person(GeneratedsSuper): - """A generic person. This is the base for a number of different kinds - of people. They are each an extension of this base type of - person.""" +class personType(GeneratedsSuper): member_data_items_ = { - 'vegetable': MemberSpec_('vegetable', 'xs:string', 0), - 'fruit': MemberSpec_('fruit', 'xs:string', 0), - 'ratio': MemberSpec_('ratio', 'xs:float', 0), - 'id': MemberSpec_('id', 'xs:integer', 0), - 'value': MemberSpec_('value', 'xs:string', 0), - 'name': MemberSpec_('name', 'xs:string', 0), - 'interest': MemberSpec_('interest', 'xs:string', 1), - 'category': MemberSpec_('category', 'xs:integer', 0), - 'agent': MemberSpec_('agent', 'agent', 1), - 'promoter': MemberSpec_('promoter', 'booster', 1), - 'description': MemberSpec_('description', 'xs:string', 0), - } + 'value': MemberSpec_('value', 'xs:string', 0, 1, {'use': 'optional'}), + 'id': MemberSpec_('id', 'xs:integer', 0, 1, {'use': 'optional'}), + 'ratio': MemberSpec_('ratio', 'xs:float', 0, 1, {'use': 'optional'}), + 'fruit': MemberSpec_('fruit', 'xs:string', 0, 1, {'use': 'optional'}), + 'vegetable': MemberSpec_('vegetable', 'xs:string', 0, 1, {'use': 'optional'}), + 'name': MemberSpec_('name', 'xs:string', 0, 0, {u'type': u'xs:string', u'name': u'name'}, None), + 'interest': MemberSpec_('interest', 'xs:string', 1, 0, {u'maxOccurs': u'unbounded', u'type': u'xs:string', u'name': u'interest'}, None), + 'category': MemberSpec_('category', 'xs:integer', 0, 1, {u'type': u'xs:integer', u'name': u'category', u'minOccurs': u'0'}, None), + 'hot_agent': MemberSpec_('hot_agent', 'hot.agent', 0, 0, {u'type': u'hot.agent', u'name': u'hot.agent'}, None), + 'agent': MemberSpec_('agent', 'agentType', 1, 0, {u'maxOccurs': u'unbounded', u'type': u'agentType', u'name': u'agent'}, None), + 'promoter': MemberSpec_('promoter', 'boosterType', 1, 0, {u'maxOccurs': u'unbounded', u'type': u'boosterType', u'name': u'promoter'}, None), + 'description': MemberSpec_('description', 'xs:string', 0, 0, {u'type': u'xs:string', u'name': u'description'}, None), + 'range_': MemberSpec_('range_', ['RangeType', 'xs:integer'], 0, 0, {u'type': u'xs:integer', u'name': u'range'}, None), + 'with_': MemberSpec_('with_', 'boosterType', 0, 0, {u'type': u'boosterType', u'name': u'with'}, None), + } subclass = None superclass = None - def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None): - self.vegetable = _cast(None, vegetable) - self.fruit = _cast(None, fruit) - self.ratio = _cast(float, ratio) - self.id = _cast(int, id) + def __init__(self, value=None, id=None, ratio=None, fruit=None, vegetable=None, name=None, interest=None, category=None, hot_agent=None, agent=None, promoter=None, description=None, range_=None, with_=None, extensiontype_=None): + self.original_tagname_ = None self.value = _cast(None, value) + self.id = _cast(int, id) + self.ratio = _cast(float, ratio) + self.fruit = _cast(None, fruit) + self.vegetable = _cast(None, vegetable) self.name = name if interest is None: self.interest = [] else: self.interest = interest self.category = category + self.hot_agent = hot_agent if agent is None: self.agent = [] else: @@ -666,11 +1224,20 @@ class person(GeneratedsSuper): else: self.promoter = promoter self.description = description + self.range_ = range_ + self.validate_RangeType(self.range_) + self.with_ = with_ + self.extensiontype_ = extensiontype_ def factory(*args_, **kwargs_): - if person.subclass: - return person.subclass(*args_, **kwargs_) + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, personType) + if subclass is not None: + return subclass(*args_, **kwargs_) + if personType.subclass: + return personType.subclass(*args_, **kwargs_) else: - return person(*args_, **kwargs_) + return personType(*args_, **kwargs_) factory = staticmethod(factory) def get_name(self): return self.name def set_name(self, name): self.name = name @@ -678,144 +1245,241 @@ class person(GeneratedsSuper): def get_interest(self): return self.interest def set_interest(self, interest): self.interest = interest def add_interest(self, value): self.interest.append(value) - def insert_interest(self, index, value): self.interest[index] = value + def insert_interest_at(self, index, value): self.interest.insert(index, value) + def replace_interest_at(self, index, value): self.interest[index] = value interestProp = property(get_interest, set_interest) def get_category(self): return self.category def set_category(self, category): self.category = category categoryProp = property(get_category, set_category) + def get_hot_agent(self): return self.hot_agent + def set_hot_agent(self, hot_agent): self.hot_agent = hot_agent + hot_agentProp = property(get_hot_agent, set_hot_agent) def get_agent(self): return self.agent def set_agent(self, agent): self.agent = agent def add_agent(self, value): self.agent.append(value) - def insert_agent(self, index, value): self.agent[index] = value + def insert_agent_at(self, index, value): self.agent.insert(index, value) + def replace_agent_at(self, index, value): self.agent[index] = value agentProp = property(get_agent, set_agent) def get_promoter(self): return self.promoter def set_promoter(self, promoter): self.promoter = promoter def add_promoter(self, value): self.promoter.append(value) - def insert_promoter(self, index, value): self.promoter[index] = value + def insert_promoter_at(self, index, value): self.promoter.insert(index, value) + def replace_promoter_at(self, index, value): self.promoter[index] = value promoterProp = property(get_promoter, set_promoter) def get_description(self): return self.description def set_description(self, description): self.description = description descriptionProp = property(get_description, set_description) - def get_vegetable(self): return self.vegetable - def set_vegetable(self, vegetable): self.vegetable = vegetable - vegetableProp = property(get_vegetable, set_vegetable) - def get_fruit(self): return self.fruit - def set_fruit(self, fruit): self.fruit = fruit - fruitProp = property(get_fruit, set_fruit) - def get_ratio(self): return self.ratio - def set_ratio(self, ratio): self.ratio = ratio - ratioProp = property(get_ratio, set_ratio) - def get_id(self): return self.id - def set_id(self, id): self.id = id - idProp = property(get_id, set_id) + def get_range(self): return self.range_ + def set_range(self, range_): self.range_ = range_ + rangeProp = property(get_range, set_range) + def get_with(self): return self.with_ + def set_with(self, with_): self.with_ = with_ + withProp = property(get_with, set_with) def get_value(self): return self.value def set_value(self, value): self.value = value valueProp = property(get_value, set_value) - def export(self, outfile, level, namespace_='', name_='person', namespacedef_=''): - showIndent(outfile, level) + def get_id(self): return self.id + def set_id(self, id): self.id = id + idProp = property(get_id, set_id) + def get_ratio(self): return self.ratio + def set_ratio(self, ratio): self.ratio = ratio + ratioProp = property(get_ratio, set_ratio) + def get_fruit(self): return self.fruit + def set_fruit(self, fruit): self.fruit = fruit + fruitProp = property(get_fruit, set_fruit) + def get_vegetable(self): return self.vegetable + def set_vegetable(self, vegetable): self.vegetable = vegetable + vegetableProp = property(get_vegetable, set_vegetable) + def get_extensiontype_(self): return self.extensiontype_ + def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_ + def validate_RangeType(self, value): + # Validate type RangeType, a restriction on xs:integer. + if value is not None and Validate_simpletypes_: + pass + def hasContent_(self): + if ( + self.name is not None or + self.interest or + self.category is not None or + self.hot_agent is not None or + self.agent or + self.promoter or + self.description is not None or + self.range_ is not None or + self.with_ is not None + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='personType', namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"', pretty_print=True): + imported_ns_def_ = GenerateDSNamespaceDefs_.get('personType') + if imported_ns_def_ is not None: + namespacedef_ = imported_ns_def_ + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ + showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) - self.exportAttributes(outfile, level, [], namespace_, name_='person') + already_processed = set() + self.exportAttributes(outfile, level, already_processed, namespace_, name_='personType') if self.hasContent_(): - outfile.write('>\n') - self.exportChildren(outfile, level + 1, namespace_, name_) - showIndent(outfile, level) - outfile.write('</%s%s>\n' % (namespace_, name_)) + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='personType', pretty_print=pretty_print) + showIndent(outfile, level, pretty_print) + outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: - outfile.write('/>\n') - def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='person'): - if self.vegetable is not None and 'vegetable' not in already_processed: - already_processed.append('vegetable') - outfile.write(' vegetable=%s' % (self.gds_format_string(quote_attrib(self.vegetable).encode(ExternalEncoding), input_name='vegetable'), )) - if self.fruit is not None and 'fruit' not in already_processed: - already_processed.append('fruit') - outfile.write(' fruit=%s' % (self.gds_format_string(quote_attrib(self.fruit).encode(ExternalEncoding), input_name='fruit'), )) - if self.ratio is not None and 'ratio' not in already_processed: - already_processed.append('ratio') - outfile.write(' ratio="%s"' % self.gds_format_float(self.ratio, input_name='ratio')) + outfile.write('/>%s' % (eol_, )) + def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='personType'): + if self.value is not None and 'value' not in already_processed: + already_processed.add('value') + outfile.write(' value=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.value), input_name='value')), )) if self.id is not None and 'id' not in already_processed: - already_processed.append('id') + already_processed.add('id') outfile.write(' id="%s"' % self.gds_format_integer(self.id, input_name='id')) - if self.value is not None and 'value' not in already_processed: - already_processed.append('value') - outfile.write(' value=%s' % (self.gds_format_string(quote_attrib(self.value).encode(ExternalEncoding), input_name='value'), )) - def exportChildren(self, outfile, level, namespace_='', name_='person'): + if self.ratio is not None and 'ratio' not in already_processed: + already_processed.add('ratio') + outfile.write(' ratio="%s"' % self.gds_format_float(self.ratio, input_name='ratio')) + if self.fruit is not None and 'fruit' not in already_processed: + already_processed.add('fruit') + outfile.write(' fruit=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.fruit), input_name='fruit')), )) + if self.vegetable is not None and 'vegetable' not in already_processed: + already_processed.add('vegetable') + outfile.write(' vegetable=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.vegetable), input_name='vegetable')), )) + if self.extensiontype_ is not None and 'xsi:type' not in already_processed: + already_processed.add('xsi:type') + outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"') + outfile.write(' xsi:type="%s"' % self.extensiontype_) + def exportChildren(self, outfile, level, namespace_='', name_='personType', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' if self.name is not None: - showIndent(outfile, level) - outfile.write('<%sname>%s</%sname>\n' % (namespace_, self.gds_format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) + showIndent(outfile, level, pretty_print) + outfile.write('<name>%s</name>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.name), input_name='name')), eol_)) for interest_ in self.interest: - showIndent(outfile, level) - outfile.write('<%sinterest>%s</%sinterest>\n' % (namespace_, self.gds_format_string(quote_xml(interest_).encode(ExternalEncoding), input_name='interest'), namespace_)) + showIndent(outfile, level, pretty_print) + outfile.write('<interest>%s</interest>%s' % (self.gds_encode(self.gds_format_string(quote_xml(interest_), input_name='interest')), eol_)) if self.category is not None: - showIndent(outfile, level) - outfile.write('<%scategory>%s</%scategory>\n' % (namespace_, self.gds_format_integer(self.category, input_name='category'), namespace_)) + showIndent(outfile, level, pretty_print) + outfile.write('<category>%s</category>%s' % (self.gds_format_integer(self.category, input_name='category'), eol_)) + if self.hot_agent is not None: + self.hot_agent.export(outfile, level, namespace_, name_='hot.agent', pretty_print=pretty_print) for agent_ in self.agent: - agent_.export(outfile, level, namespace_, name_='agent') + agent_.export(outfile, level, namespace_, name_='agent', pretty_print=pretty_print) for promoter_ in self.promoter: - promoter_.export(outfile, level, namespace_, name_='promoter') + promoter_.export(outfile, level, namespace_, name_='promoter', pretty_print=pretty_print) if self.description is not None: - showIndent(outfile, level) - outfile.write('<%sdescription>%s</%sdescription>\n' % (namespace_, self.gds_format_string(quote_xml(self.description).encode(ExternalEncoding), input_name='description'), namespace_)) - def hasContent_(self): - if ( - self.name is not None or - self.interest or - self.category is not None or - self.agent or - self.promoter or - self.description is not None - ): - return True + showIndent(outfile, level, pretty_print) + outfile.write('<description>%s</description>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.description), input_name='description')), eol_)) + if self.range_ is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<range>%s</range>%s' % (self.gds_format_integer(self.range_, input_name='range'), eol_)) + if self.with_ is not None: + self.with_.export(outfile, level, namespace_, name_='with', pretty_print=pretty_print) + def to_etree(self, parent_element=None, name_='personType', mapping_=None): + if parent_element is None: + element = etree_.Element('{}' + name_) else: - return False - def exportLiteral(self, outfile, level, name_='person'): + element = etree_.SubElement(parent_element, '{}' + name_) + if self.extensiontype_ is not None: + element.set('{http://www.w3.org/2001/XMLSchema-instance}type', self.extensiontype_) + if self.value is not None: + element.set('value', self.gds_format_string(self.value)) + if self.id is not None: + element.set('id', self.gds_format_integer(self.id)) + if self.ratio is not None: + element.set('ratio', self.gds_format_float(self.ratio)) + if self.fruit is not None: + element.set('fruit', self.gds_format_string(self.fruit)) + if self.vegetable is not None: + element.set('vegetable', self.gds_format_string(self.vegetable)) + if self.name is not None: + name_ = self.name + etree_.SubElement(element, '{}name').text = self.gds_format_string(name_) + for interest_ in self.interest: + etree_.SubElement(element, '{}interest').text = self.gds_format_string(interest_) + if self.category is not None: + category_ = self.category + etree_.SubElement(element, '{}category').text = self.gds_format_integer(category_) + if self.hot_agent is not None: + hot_agent_ = self.hot_agent + hot_agent_.to_etree(element, name_='hot.agent', mapping_=mapping_) + for agent_ in self.agent: + agent_.to_etree(element, name_='agent', mapping_=mapping_) + for promoter_ in self.promoter: + promoter_.to_etree(element, name_='promoter', mapping_=mapping_) + if self.description is not None: + description_ = self.description + etree_.SubElement(element, '{}description').text = self.gds_format_string(description_) + if self.range_ is not None: + range__ = self.range_ + etree_.SubElement(element, '{}range').text = self.gds_format_integer(range__) + if self.with_ is not None: + with__ = self.with_ + with__.to_etree(element, name_='with', mapping_=mapping_) + if mapping_ is not None: + mapping_[self] = element + return element + def exportLiteral(self, outfile, level, name_='personType'): level += 1 - self.exportLiteralAttributes(outfile, level, [], name_) + already_processed = set() + self.exportLiteralAttributes(outfile, level, already_processed, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.vegetable is not None and 'vegetable' not in already_processed: - already_processed.append('vegetable') + if self.value is not None and 'value' not in already_processed: + already_processed.add('value') showIndent(outfile, level) - outfile.write('vegetable = "%s",\n' % (self.vegetable,)) - if self.fruit is not None and 'fruit' not in already_processed: - already_processed.append('fruit') + outfile.write('value="%s",\n' % (self.value,)) + if self.id is not None and 'id' not in already_processed: + already_processed.add('id') showIndent(outfile, level) - outfile.write('fruit = "%s",\n' % (self.fruit,)) + outfile.write('id=%d,\n' % (self.id,)) if self.ratio is not None and 'ratio' not in already_processed: - already_processed.append('ratio') + already_processed.add('ratio') showIndent(outfile, level) - outfile.write('ratio = %f,\n' % (self.ratio,)) - if self.id is not None and 'id' not in already_processed: - already_processed.append('id') + outfile.write('ratio=%f,\n' % (self.ratio,)) + if self.fruit is not None and 'fruit' not in already_processed: + already_processed.add('fruit') showIndent(outfile, level) - outfile.write('id = %d,\n' % (self.id,)) - if self.value is not None and 'value' not in already_processed: - already_processed.append('value') + outfile.write('fruit="%s",\n' % (self.fruit,)) + if self.vegetable is not None and 'vegetable' not in already_processed: + already_processed.add('vegetable') showIndent(outfile, level) - outfile.write('value = "%s",\n' % (self.value,)) + outfile.write('vegetable="%s",\n' % (self.vegetable,)) 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)) + outfile.write('name=%s,\n' % self.gds_encode(quote_python(self.name))) showIndent(outfile, level) outfile.write('interest=[\n') level += 1 for interest_ in self.interest: showIndent(outfile, level) - outfile.write('%s,\n' % quote_python(interest_).encode(ExternalEncoding)) + outfile.write('%s,\n' % self.gds_encode(quote_python(interest_))) level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.category is not None: showIndent(outfile, level) outfile.write('category=%d,\n' % self.category) + if self.hot_agent is not None: + showIndent(outfile, level) + outfile.write('hot_agent=model_.hot_agent(\n') + self.hot_agent.exportLiteral(outfile, level, name_='hot_agent') + showIndent(outfile, level) + outfile.write('),\n') showIndent(outfile, level) outfile.write('agent=[\n') level += 1 for agent_ in self.agent: showIndent(outfile, level) - outfile.write('model_.agent(\n') - agent_.exportLiteral(outfile, level) + outfile.write('model_.agentType(\n') + agent_.exportLiteral(outfile, level, name_='agentType') showIndent(outfile, level) outfile.write('),\n') level -= 1 @@ -826,8 +1490,8 @@ class person(GeneratedsSuper): level += 1 for promoter_ in self.promoter: showIndent(outfile, level) - outfile.write('model_.booster(\n') - promoter_.exportLiteral(outfile, level, name_='booster') + outfile.write('model_.boosterType(\n') + promoter_.exportLiteral(outfile, level, name_='boosterType') showIndent(outfile, level) outfile.write('),\n') level -= 1 @@ -835,108 +1499,169 @@ class person(GeneratedsSuper): outfile.write('],\n') if self.description is not None: showIndent(outfile, level) - outfile.write('description=%s,\n' % quote_python(self.description).encode(ExternalEncoding)) + outfile.write('description=%s,\n' % self.gds_encode(quote_python(self.description))) + if self.range_ is not None: + showIndent(outfile, level) + outfile.write('range_=%d,\n' % self.range_) + if self.with_ is not None: + showIndent(outfile, level) + outfile.write('with_=model_.boosterType(\n') + self.with_.exportLiteral(outfile, level, name_='with') + showIndent(outfile, level) + outfile.write('),\n') def build(self, node): - self.buildAttributes(node, node.attrib, []) + already_processed = set() + self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] - self.buildChildren(child, nodeName_) + self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = attrs.get('vegetable') - if value is not None and 'vegetable' not in already_processed: - already_processed.append('vegetable') - self.vegetable = value - value = attrs.get('fruit') - if value is not None and 'fruit' not in already_processed: - already_processed.append('fruit') - self.fruit = value - value = attrs.get('ratio') - if value is not None and 'ratio' not in already_processed: - already_processed.append('ratio') - try: - self.ratio = float(value) - except ValueError, exp: - raise ValueError('Bad float/double attribute (ratio): %s' % exp) - value = attrs.get('id') + value = find_attr_value_('value', node) + if value is not None and 'value' not in already_processed: + already_processed.add('value') + self.value = value + value = find_attr_value_('id', node) if value is not None and 'id' not in already_processed: - already_processed.append('id') + already_processed.add('id') try: self.id = int(value) - except ValueError, exp: + except ValueError as exp: raise_parse_error(node, 'Bad integer attribute: %s' % exp) - value = attrs.get('value') - if value is not None and 'value' not in already_processed: - already_processed.append('value') - self.value = value - def buildChildren(self, child_, nodeName_, from_subclass=False): + value = find_attr_value_('ratio', node) + if value is not None and 'ratio' not in already_processed: + already_processed.add('ratio') + try: + self.ratio = float(value) + except ValueError as exp: + raise ValueError('Bad float/double attribute (ratio): %s' % exp) + value = find_attr_value_('fruit', node) + if value is not None and 'fruit' not in already_processed: + already_processed.add('fruit') + self.fruit = value + value = find_attr_value_('vegetable', node) + if value is not None and 'vegetable' not in already_processed: + already_processed.add('vegetable') + self.vegetable = value + value = find_attr_value_('xsi:type', node) + if value is not None and 'xsi:type' not in already_processed: + already_processed.add('xsi:type') + self.extensiontype_ = value + 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_ == 'interest': interest_ = child_.text + interest_ = self.gds_validate_string(interest_, node, 'interest') self.interest.append(interest_) elif nodeName_ == 'category': sval_ = child_.text try: ival_ = int(sval_) - except (TypeError, ValueError), exp: + except (TypeError, ValueError) as exp: raise_parse_error(child_, 'requires integer: %s' % exp) + ival_ = self.gds_validate_integer(ival_, node, 'category') self.category = ival_ - elif nodeName_ == 'agent': - obj_ = agent.factory() + elif nodeName_ == 'hot.agent': + obj_ = hot_agent.factory() + obj_.build(child_) + self.hot_agent = obj_ + obj_.original_tagname_ = 'hot.agent' + elif nodeName_ == 'agent': + class_obj_ = self.get_class_obj_(child_, agentType) + obj_ = class_obj_.factory() obj_.build(child_) self.agent.append(obj_) - elif nodeName_ == 'promoter': - obj_ = booster.factory() + obj_.original_tagname_ = 'agent' + elif nodeName_ == 'promoter': + obj_ = boosterType.factory() obj_.build(child_) self.promoter.append(obj_) + obj_.original_tagname_ = 'promoter' elif nodeName_ == 'description': description_ = child_.text + description_ = self.gds_validate_string(description_, node, 'description') self.description = description_ -# end class person + elif nodeName_ == 'range': + sval_ = child_.text + try: + ival_ = int(sval_) + except (TypeError, ValueError) as exp: + raise_parse_error(child_, 'requires integer: %s' % exp) + ival_ = self.gds_validate_integer(ival_, node, 'range') + self.range_ = ival_ + # validate type RangeType + self.validate_RangeType(self.range_) + elif nodeName_ == 'with': + obj_ = boosterType.factory() + obj_.build(child_) + self.with_ = obj_ + obj_.original_tagname_ = 'with' +# end class personType -class specialperson(person): +class specialperson(personType): member_data_items_ = { - } + } subclass = None - superclass = person - def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None): - super(specialperson, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, ) - pass + superclass = personType + def __init__(self, value=None, id=None, ratio=None, fruit=None, vegetable=None, name=None, interest=None, category=None, hot_agent=None, agent=None, promoter=None, description=None, range_=None, with_=None): + self.original_tagname_ = None + super(specialperson, self).__init__(value, id, ratio, fruit, vegetable, name, interest, category, hot_agent, agent, promoter, description, range_, with_, ) def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, specialperson) + if subclass is not None: + return subclass(*args_, **kwargs_) if specialperson.subclass: return specialperson.subclass(*args_, **kwargs_) else: return specialperson(*args_, **kwargs_) factory = staticmethod(factory) - def export(self, outfile, level, namespace_='', name_='specialperson', namespacedef_=''): - showIndent(outfile, level) - outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) - self.exportAttributes(outfile, level, [], namespace_, name_='specialperson') - outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"') - outfile.write(' xsi:type="specialperson"') - if self.hasContent_(): - outfile.write('>\n') - self.exportChildren(outfile, level + 1, namespace_, name_) - showIndent(outfile, level) - outfile.write('</%s%s>\n' % (namespace_, name_)) - else: - outfile.write('/>\n') - def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='specialperson'): - super(specialperson, self).exportAttributes(outfile, level, already_processed, namespace_, name_='specialperson') - def exportChildren(self, outfile, level, namespace_='', name_='specialperson'): - super(specialperson, self).exportChildren(outfile, level, namespace_, name_) def hasContent_(self): if ( super(specialperson, self).hasContent_() - ): + ): return True else: return False + def export(self, outfile, level, namespace_='', name_='specialperson', namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"', pretty_print=True): + imported_ns_def_ = GenerateDSNamespaceDefs_.get('specialperson') + if imported_ns_def_ is not None: + namespacedef_ = imported_ns_def_ + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = set() + self.exportAttributes(outfile, level, already_processed, namespace_, name_='specialperson') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='specialperson', 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_='specialperson'): + super(specialperson, self).exportAttributes(outfile, level, already_processed, namespace_, name_='specialperson') + def exportChildren(self, outfile, level, namespace_='', name_='specialperson', fromsubclass_=False, pretty_print=True): + super(specialperson, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) + def to_etree(self, parent_element=None, name_='specialperson', mapping_=None): + element = super(specialperson, self).to_etree(parent_element, name_, mapping_) + if mapping_ is not None: + mapping_[self] = element + return element def exportLiteral(self, outfile, level, name_='specialperson'): level += 1 - self.exportLiteralAttributes(outfile, level, [], name_) + already_processed = set() + self.exportLiteralAttributes(outfile, level, already_processed, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, already_processed, name_): @@ -944,66 +1669,90 @@ class specialperson(person): def exportLiteralChildren(self, outfile, level, name_): super(specialperson, self).exportLiteralChildren(outfile, level, name_) def build(self, node): - self.buildAttributes(node, node.attrib, []) + already_processed = set() + self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] - self.buildChildren(child, nodeName_) + self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): super(specialperson, self).buildAttributes(node, attrs, already_processed) - def buildChildren(self, child_, nodeName_, from_subclass=False): - super(specialperson, self).buildChildren(child_, nodeName_, True) + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + super(specialperson, self).buildChildren(child_, node, nodeName_, True) pass # end class specialperson -class programmer(person): - """A programmer type of person. Programmers are very special but also a - little shy.""" +class programmerType(personType): member_data_items_ = { - 'language': MemberSpec_('language', 'xs:string', 0), - 'area': MemberSpec_('area', 'xs:string', 0), - 'attrnegint': MemberSpec_('attrnegint', 'xs:negativeInteger', 0), - 'attrposint': MemberSpec_('attrposint', 'xs:positiveInteger', 0), - 'attrnonnegint': MemberSpec_('attrnonnegint', 'xs:nonNegativeInteger', 0), - 'attrnonposint': MemberSpec_('attrnonposint', 'xs:nonPositiveInteger', 0), - 'email': MemberSpec_('email', 'xs:string', 0), - 'elposint': MemberSpec_('elposint', 'xs:positiveInteger', 0), - 'elnonposint': MemberSpec_('elnonposint', 'xs:nonPositiveInteger', 0), - 'elnegint': MemberSpec_('elnegint', 'xs:negativeInteger', 0), - 'elnonnegint': MemberSpec_('elnonnegint', 'xs:nonNegativeInteger', 0), - 'eldate': MemberSpec_('eldate', 'xs:date', 0), - 'eltoken': MemberSpec_('eltoken', 'xs:token', 0), - 'elshort': MemberSpec_('elshort', 'xs:short', 0), - 'ellong': MemberSpec_('ellong', 'xs:long', 0), - 'elparam': MemberSpec_('elparam', 'param', 0), - 'elarraytypes': MemberSpec_('elarraytypes', ['ArrayTypes', 'xs:NMTOKEN'], 0), - } + 'language': MemberSpec_('language', 'xs:string', 0, 1, {'use': 'optional'}), + 'area': MemberSpec_('area', 'xs:string', 0, 1, {'use': 'optional'}), + 'attrposint': MemberSpec_('attrposint', 'xs:positiveInteger', 0, 1, {'use': 'optional'}), + 'attrnonposint': MemberSpec_('attrnonposint', 'xs:nonPositiveInteger', 0, 1, {'use': 'optional'}), + 'attrnegint': MemberSpec_('attrnegint', 'xs:negativeInteger', 0, 1, {'use': 'optional'}), + 'attrnonnegint': MemberSpec_('attrnonnegint', 'xs:nonNegativeInteger', 0, 1, {'use': 'optional'}), + 'email': MemberSpec_('email', 'xs:string', 0, 0, {u'type': u'xs:string', u'name': u'email'}, None), + 'elposint': MemberSpec_('elposint', 'xs:positiveInteger', 0, 0, {u'type': u'xs:positiveInteger', u'name': u'elposint'}, None), + 'elnonposint': MemberSpec_('elnonposint', 'xs:nonPositiveInteger', 0, 0, {u'type': u'xs:nonPositiveInteger', u'name': u'elnonposint'}, None), + 'elnegint': MemberSpec_('elnegint', 'xs:negativeInteger', 0, 0, {u'type': u'xs:negativeInteger', u'name': u'elnegint'}, None), + 'elnonnegint': MemberSpec_('elnonnegint', 'xs:nonNegativeInteger', 0, 0, {u'type': u'xs:nonNegativeInteger', u'name': u'elnonnegint'}, None), + 'eldate': MemberSpec_('eldate', 'xs:date', 0, 0, {u'type': u'xs:date', u'name': u'eldate'}, None), + 'eldatetime': MemberSpec_('eldatetime', 'xs:dateTime', 0, 0, {u'type': u'xs:dateTime', u'name': u'eldatetime'}, None), + 'eldatetime1': MemberSpec_('eldatetime1', 'xs:dateTime', 0, 0, {u'type': u'xs:dateTime', u'name': u'eldatetime1'}, None), + 'eltoken': MemberSpec_('eltoken', 'xs:token', 0, 0, {u'type': u'xs:token', u'name': u'eltoken'}, None), + 'elshort': MemberSpec_('elshort', 'xs:short', 0, 0, {u'type': u'xs:short', u'name': u'elshort'}, None), + 'ellong': MemberSpec_('ellong', 'xs:long', 0, 0, {u'type': u'xs:long', u'name': u'ellong'}, None), + 'elparam': MemberSpec_('elparam', 'paramType', 0, 0, {u'type': u'paramType', u'name': u'elparam'}, None), + 'elarraytypes': MemberSpec_('elarraytypes', ['ArrayTypes', 'xs:NMTOKEN'], 0, 0, {u'type': u'xs:NMTOKEN', u'name': u'elarraytypes'}, None), + } subclass = None - superclass = person - def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, language=None, area=None, attrnegint=None, attrposint=None, attrnonnegint=None, attrnonposint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None): - super(programmer, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, ) + superclass = personType + def __init__(self, value=None, id=None, ratio=None, fruit=None, vegetable=None, name=None, interest=None, category=None, hot_agent=None, agent=None, promoter=None, description=None, range_=None, with_=None, language=None, area=None, attrposint=None, attrnonposint=None, attrnegint=None, attrnonnegint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eldatetime=None, eldatetime1=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, extensiontype_=None): + self.original_tagname_ = None + super(programmerType, self).__init__(value, id, ratio, fruit, vegetable, name, interest, category, hot_agent, agent, promoter, description, range_, with_, extensiontype_, ) self.language = _cast(None, language) self.area = _cast(None, area) - self.attrnegint = _cast(int, attrnegint) self.attrposint = _cast(int, attrposint) - self.attrnonnegint = _cast(int, attrnonnegint) self.attrnonposint = _cast(int, attrnonposint) + self.attrnegint = _cast(int, attrnegint) + self.attrnonnegint = _cast(int, attrnonnegint) self.email = email self.elposint = elposint self.elnonposint = elnonposint self.elnegint = elnegint self.elnonnegint = elnonnegint - self.eldate = eldate - self.eltoken = eltoken + if isinstance(eldate, BaseStrType_): + initvalue_ = datetime_.datetime.strptime(eldate, '%Y-%m-%d').date() + else: + initvalue_ = eldate + self.eldate = initvalue_ + if isinstance(eldatetime, BaseStrType_): + initvalue_ = datetime_.datetime.strptime(eldatetime, '%Y-%m-%dT%H:%M:%S') + else: + initvalue_ = eldatetime + self.eldatetime = initvalue_ + if isinstance(eldatetime1, BaseStrType_): + initvalue_ = datetime_.datetime.strptime(eldatetime1, '%Y-%m-%dT%H:%M:%S') + else: + initvalue_ = eldatetime1 + self.eldatetime1 = initvalue_ + self.eltoken = eltoken self.elshort = elshort self.ellong = ellong self.elparam = elparam self.elarraytypes = elarraytypes + self.validate_ArrayTypes(self.elarraytypes) + self.extensiontype_ = extensiontype_ def factory(*args_, **kwargs_): - if programmer.subclass: - return programmer.subclass(*args_, **kwargs_) + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, programmerType) + if subclass is not None: + return subclass(*args_, **kwargs_) + if programmerType.subclass: + return programmerType.subclass(*args_, **kwargs_) else: - return programmer(*args_, **kwargs_) + return programmerType(*args_, **kwargs_) factory = staticmethod(factory) def get_email(self): return self.email def set_email(self, email): self.email = email @@ -1023,6 +1772,12 @@ class programmer(person): def get_eldate(self): return self.eldate def set_eldate(self, eldate): self.eldate = eldate eldateProp = property(get_eldate, set_eldate) + def get_eldatetime(self): return self.eldatetime + def set_eldatetime(self, eldatetime): self.eldatetime = eldatetime + eldatetimeProp = property(get_eldatetime, set_eldatetime) + def get_eldatetime1(self): return self.eldatetime1 + def set_eldatetime1(self, eldatetime1): self.eldatetime1 = eldatetime1 + eldatetime1Prop = property(get_eldatetime1, set_eldatetime1) def get_eltoken(self): return self.eltoken def set_eltoken(self, eltoken): self.eltoken = eltoken eltokenProp = property(get_eltoken, set_eltoken) @@ -1044,139 +1799,236 @@ class programmer(person): def get_area(self): return self.area def set_area(self, area): self.area = area areaProp = property(get_area, set_area) - def get_attrnegint(self): return self.attrnegint - def set_attrnegint(self, attrnegint): self.attrnegint = attrnegint - attrnegintProp = property(get_attrnegint, set_attrnegint) def get_attrposint(self): return self.attrposint def set_attrposint(self, attrposint): self.attrposint = attrposint attrposintProp = property(get_attrposint, set_attrposint) - def get_attrnonnegint(self): return self.attrnonnegint - def set_attrnonnegint(self, attrnonnegint): self.attrnonnegint = attrnonnegint - attrnonnegintProp = property(get_attrnonnegint, set_attrnonnegint) def get_attrnonposint(self): return self.attrnonposint def set_attrnonposint(self, attrnonposint): self.attrnonposint = attrnonposint attrnonposintProp = property(get_attrnonposint, set_attrnonposint) - def export(self, outfile, level, namespace_='', name_='programmer', namespacedef_=''): - showIndent(outfile, level) + def get_attrnegint(self): return self.attrnegint + def set_attrnegint(self, attrnegint): self.attrnegint = attrnegint + attrnegintProp = property(get_attrnegint, set_attrnegint) + def get_attrnonnegint(self): return self.attrnonnegint + def set_attrnonnegint(self, attrnonnegint): self.attrnonnegint = attrnonnegint + attrnonnegintProp = property(get_attrnonnegint, set_attrnonnegint) + def get_extensiontype_(self): return self.extensiontype_ + def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_ + def validate_ArrayTypes(self, value): + # Validate type ArrayTypes, a restriction on xs:NMTOKEN. + if value is not None and Validate_simpletypes_: + value = str(value) + enumerations = ['float', 'int', 'Name', 'token'] + enumeration_respectee = False + for enum in enumerations: + if value == enum: + enumeration_respectee = True + break + if not enumeration_respectee: + warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on ArrayTypes' % {"value" : value.encode("utf-8")} ) + def hasContent_(self): + if ( + self.email is not None or + self.elposint is not None or + self.elnonposint is not None or + self.elnegint is not None or + self.elnonnegint is not None or + self.eldate is not None or + self.eldatetime is not None or + self.eldatetime1 is not None or + self.eltoken is not None or + self.elshort is not None or + self.ellong is not None or + self.elparam is not None or + self.elarraytypes is not None or + super(programmerType, self).hasContent_() + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='programmerType', namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"', pretty_print=True): + imported_ns_def_ = GenerateDSNamespaceDefs_.get('programmerType') + if imported_ns_def_ is not None: + namespacedef_ = imported_ns_def_ + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ + showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) - self.exportAttributes(outfile, level, [], namespace_, name_='programmer') - outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"') - outfile.write(' xsi:type="programmer"') + already_processed = set() + self.exportAttributes(outfile, level, already_processed, namespace_, name_='programmerType') if self.hasContent_(): - outfile.write('>\n') - self.exportChildren(outfile, level + 1, namespace_, name_) - showIndent(outfile, level) - outfile.write('</%s%s>\n' % (namespace_, name_)) + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='programmerType', pretty_print=pretty_print) + showIndent(outfile, level, pretty_print) + outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: - outfile.write('/>\n') - def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='programmer'): - super(programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='programmer') + outfile.write('/>%s' % (eol_, )) + def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='programmerType'): + super(programmerType, self).exportAttributes(outfile, level, already_processed, namespace_, name_='programmerType') if self.language is not None and 'language' not in already_processed: - already_processed.append('language') - outfile.write(' language=%s' % (self.gds_format_string(quote_attrib(self.language).encode(ExternalEncoding), input_name='language'), )) + already_processed.add('language') + outfile.write(' language=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.language), input_name='language')), )) if self.area is not None and 'area' not in already_processed: - already_processed.append('area') - outfile.write(' area=%s' % (self.gds_format_string(quote_attrib(self.area).encode(ExternalEncoding), input_name='area'), )) - if self.attrnegint is not None and 'attrnegint' not in already_processed: - already_processed.append('attrnegint') - outfile.write(' attrnegint="%s"' % self.gds_format_integer(self.attrnegint, input_name='attrnegint')) + already_processed.add('area') + outfile.write(' area=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.area), input_name='area')), )) if self.attrposint is not None and 'attrposint' not in already_processed: - already_processed.append('attrposint') + already_processed.add('attrposint') outfile.write(' attrposint="%s"' % self.gds_format_integer(self.attrposint, input_name='attrposint')) - if self.attrnonnegint is not None and 'attrnonnegint' not in already_processed: - already_processed.append('attrnonnegint') - outfile.write(' attrnonnegint="%s"' % self.gds_format_integer(self.attrnonnegint, input_name='attrnonnegint')) if self.attrnonposint is not None and 'attrnonposint' not in already_processed: - already_processed.append('attrnonposint') + already_processed.add('attrnonposint') outfile.write(' attrnonposint="%s"' % self.gds_format_integer(self.attrnonposint, input_name='attrnonposint')) - def exportChildren(self, outfile, level, namespace_='', name_='programmer'): - super(programmer, self).exportChildren(outfile, level, namespace_, name_) + if self.attrnegint is not None and 'attrnegint' not in already_processed: + already_processed.add('attrnegint') + outfile.write(' attrnegint="%s"' % self.gds_format_integer(self.attrnegint, input_name='attrnegint')) + if self.attrnonnegint is not None and 'attrnonnegint' not in already_processed: + already_processed.add('attrnonnegint') + outfile.write(' attrnonnegint="%s"' % self.gds_format_integer(self.attrnonnegint, input_name='attrnonnegint')) + if self.extensiontype_ is not None and 'xsi:type' not in already_processed: + already_processed.add('xsi:type') + outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"') + outfile.write(' xsi:type="%s"' % self.extensiontype_) + def exportChildren(self, outfile, level, namespace_='', name_='programmerType', fromsubclass_=False, pretty_print=True): + super(programmerType, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) + if pretty_print: + eol_ = '\n' + else: + eol_ = '' if self.email is not None: - showIndent(outfile, level) - outfile.write('<%semail>%s</%semail>\n' % (namespace_, self.gds_format_string(quote_xml(self.email).encode(ExternalEncoding), input_name='email'), namespace_)) + showIndent(outfile, level, pretty_print) + outfile.write('<email>%s</email>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.email), input_name='email')), eol_)) if self.elposint is not None: - showIndent(outfile, level) - outfile.write('<%selposint>%s</%selposint>\n' % (namespace_, self.gds_format_integer(self.elposint, input_name='elposint'), namespace_)) + showIndent(outfile, level, pretty_print) + outfile.write('<elposint>%s</elposint>%s' % (self.gds_format_integer(self.elposint, input_name='elposint'), eol_)) if self.elnonposint is not None: - showIndent(outfile, level) - outfile.write('<%selnonposint>%s</%selnonposint>\n' % (namespace_, self.gds_format_integer(self.elnonposint, input_name='elnonposint'), namespace_)) + showIndent(outfile, level, pretty_print) + outfile.write('<elnonposint>%s</elnonposint>%s' % (self.gds_format_integer(self.elnonposint, input_name='elnonposint'), eol_)) if self.elnegint is not None: - showIndent(outfile, level) - outfile.write('<%selnegint>%s</%selnegint>\n' % (namespace_, self.gds_format_integer(self.elnegint, input_name='elnegint'), namespace_)) + showIndent(outfile, level, pretty_print) + outfile.write('<elnegint>%s</elnegint>%s' % (self.gds_format_integer(self.elnegint, input_name='elnegint'), eol_)) if self.elnonnegint is not None: - showIndent(outfile, level) - outfile.write('<%selnonnegint>%s</%selnonnegint>\n' % (namespace_, self.gds_format_integer(self.elnonnegint, input_name='elnonnegint'), namespace_)) + showIndent(outfile, level, pretty_print) + outfile.write('<elnonnegint>%s</elnonnegint>%s' % (self.gds_format_integer(self.elnonnegint, input_name='elnonnegint'), eol_)) if self.eldate is not None: - showIndent(outfile, level) - outfile.write('<%seldate>%s</%seldate>\n' % (namespace_, self.gds_format_string(quote_xml(self.eldate).encode(ExternalEncoding), input_name='eldate'), namespace_)) + showIndent(outfile, level, pretty_print) + outfile.write('<eldate>%s</eldate>%s' % (self.gds_format_date(self.eldate, input_name='eldate'), eol_)) + if self.eldatetime is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<eldatetime>%s</eldatetime>%s' % (self.gds_format_datetime(self.eldatetime, input_name='eldatetime'), eol_)) + if self.eldatetime1 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<eldatetime1>%s</eldatetime1>%s' % (self.gds_format_datetime(self.eldatetime1, input_name='eldatetime1'), eol_)) if self.eltoken is not None: - showIndent(outfile, level) - outfile.write('<%seltoken>%s</%seltoken>\n' % (namespace_, self.gds_format_string(quote_xml(self.eltoken).encode(ExternalEncoding), input_name='eltoken'), namespace_)) + showIndent(outfile, level, pretty_print) + outfile.write('<eltoken>%s</eltoken>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.eltoken), input_name='eltoken')), eol_)) if self.elshort is not None: - showIndent(outfile, level) - outfile.write('<%selshort>%s</%selshort>\n' % (namespace_, self.gds_format_integer(self.elshort, input_name='elshort'), namespace_)) + showIndent(outfile, level, pretty_print) + outfile.write('<elshort>%s</elshort>%s' % (self.gds_format_integer(self.elshort, input_name='elshort'), eol_)) if self.ellong is not None: - showIndent(outfile, level) - outfile.write('<%sellong>%s</%sellong>\n' % (namespace_, self.gds_format_integer(self.ellong, input_name='ellong'), namespace_)) - if self.elparam: - self.elparam.export(outfile, level, namespace_, name_='elparam', ) + showIndent(outfile, level, pretty_print) + outfile.write('<ellong>%s</ellong>%s' % (self.gds_format_integer(self.ellong, input_name='ellong'), eol_)) + if self.elparam is not None: + self.elparam.export(outfile, level, namespace_, name_='elparam', pretty_print=pretty_print) if self.elarraytypes is not None: - showIndent(outfile, level) - outfile.write('<%selarraytypes>%s</%selarraytypes>\n' % (namespace_, self.gds_format_string(quote_xml(self.elarraytypes).encode(ExternalEncoding), input_name='elarraytypes'), namespace_)) - def hasContent_(self): - if ( - self.email is not None or - self.elposint is not None or - self.elnonposint is not None or - self.elnegint is not None or - self.elnonnegint is not None or - self.eldate is not None or - self.eltoken is not None or - self.elshort is not None or - self.ellong is not None or - self.elparam is not None or - self.elarraytypes is not None or - super(programmer, self).hasContent_() - ): - return True - else: - return False - def exportLiteral(self, outfile, level, name_='programmer'): + showIndent(outfile, level, pretty_print) + outfile.write('<elarraytypes>%s</elarraytypes>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.elarraytypes), input_name='elarraytypes')), eol_)) + def to_etree(self, parent_element=None, name_='programmerType', mapping_=None): + element = super(programmerType, self).to_etree(parent_element, name_, mapping_) + if self.extensiontype_ is not None: + element.set('{http://www.w3.org/2001/XMLSchema-instance}type', self.extensiontype_) + if self.language is not None: + element.set('language', self.gds_format_string(self.language)) + if self.area is not None: + element.set('area', self.gds_format_string(self.area)) + if self.attrposint is not None: + element.set('attrposint', self.gds_format_integer(self.attrposint)) + if self.attrnonposint is not None: + element.set('attrnonposint', self.gds_format_integer(self.attrnonposint)) + if self.attrnegint is not None: + element.set('attrnegint', self.gds_format_integer(self.attrnegint)) + if self.attrnonnegint is not None: + element.set('attrnonnegint', self.gds_format_integer(self.attrnonnegint)) + if self.email is not None: + email_ = self.email + etree_.SubElement(element, '{}email').text = self.gds_format_string(email_) + if self.elposint is not None: + elposint_ = self.elposint + etree_.SubElement(element, '{}elposint').text = self.gds_format_integer(elposint_) + if self.elnonposint is not None: + elnonposint_ = self.elnonposint + etree_.SubElement(element, '{}elnonposint').text = self.gds_format_integer(elnonposint_) + if self.elnegint is not None: + elnegint_ = self.elnegint + etree_.SubElement(element, '{}elnegint').text = self.gds_format_integer(elnegint_) + if self.elnonnegint is not None: + elnonnegint_ = self.elnonnegint + etree_.SubElement(element, '{}elnonnegint').text = self.gds_format_integer(elnonnegint_) + if self.eldate is not None: + eldate_ = self.eldate + etree_.SubElement(element, '{}eldate').text = self.gds_format_date(eldate_) + if self.eldatetime is not None: + eldatetime_ = self.eldatetime + etree_.SubElement(element, '{}eldatetime').text = self.gds_format_datetime(eldatetime_) + if self.eldatetime1 is not None: + eldatetime1_ = self.eldatetime1 + etree_.SubElement(element, '{}eldatetime1').text = self.gds_format_datetime(eldatetime1_) + if self.eltoken is not None: + eltoken_ = self.eltoken + etree_.SubElement(element, '{}eltoken').text = self.gds_format_string(eltoken_) + if self.elshort is not None: + elshort_ = self.elshort + etree_.SubElement(element, '{}elshort').text = self.gds_format_integer(elshort_) + if self.ellong is not None: + ellong_ = self.ellong + etree_.SubElement(element, '{}ellong').text = self.gds_format_integer(ellong_) + if self.elparam is not None: + elparam_ = self.elparam + elparam_.to_etree(element, name_='elparam', mapping_=mapping_) + if self.elarraytypes is not None: + elarraytypes_ = self.elarraytypes + etree_.SubElement(element, '{}elarraytypes').text = self.gds_format_string(elarraytypes_) + if mapping_ is not None: + mapping_[self] = element + return element + def exportLiteral(self, outfile, level, name_='programmerType'): level += 1 - self.exportLiteralAttributes(outfile, level, [], name_) + already_processed = set() + self.exportLiteralAttributes(outfile, level, already_processed, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, already_processed, name_): if self.language is not None and 'language' not in already_processed: - already_processed.append('language') + already_processed.add('language') showIndent(outfile, level) - outfile.write('language = "%s",\n' % (self.language,)) + outfile.write('language="%s",\n' % (self.language,)) if self.area is not None and 'area' not in already_processed: - already_processed.append('area') - showIndent(outfile, level) - outfile.write('area = "%s",\n' % (self.area,)) - if self.attrnegint is not None and 'attrnegint' not in already_processed: - already_processed.append('attrnegint') + already_processed.add('area') showIndent(outfile, level) - outfile.write('attrnegint = %d,\n' % (self.attrnegint,)) + outfile.write('area="%s",\n' % (self.area,)) if self.attrposint is not None and 'attrposint' not in already_processed: - already_processed.append('attrposint') + already_processed.add('attrposint') showIndent(outfile, level) - outfile.write('attrposint = %d,\n' % (self.attrposint,)) - if self.attrnonnegint is not None and 'attrnonnegint' not in already_processed: - already_processed.append('attrnonnegint') - showIndent(outfile, level) - outfile.write('attrnonnegint = %d,\n' % (self.attrnonnegint,)) + outfile.write('attrposint=%d,\n' % (self.attrposint,)) if self.attrnonposint is not None and 'attrnonposint' not in already_processed: - already_processed.append('attrnonposint') + already_processed.add('attrnonposint') + showIndent(outfile, level) + outfile.write('attrnonposint=%d,\n' % (self.attrnonposint,)) + if self.attrnegint is not None and 'attrnegint' not in already_processed: + already_processed.add('attrnegint') showIndent(outfile, level) - outfile.write('attrnonposint = %d,\n' % (self.attrnonposint,)) - super(programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_) + outfile.write('attrnegint=%d,\n' % (self.attrnegint,)) + if self.attrnonnegint is not None and 'attrnonnegint' not in already_processed: + already_processed.add('attrnonnegint') + showIndent(outfile, level) + outfile.write('attrnonnegint=%d,\n' % (self.attrnonnegint,)) + super(programmerType, self).exportLiteralAttributes(outfile, level, already_processed, name_) def exportLiteralChildren(self, outfile, level, name_): - super(programmer, self).exportLiteralChildren(outfile, level, name_) + super(programmerType, self).exportLiteralChildren(outfile, level, name_) if self.email is not None: showIndent(outfile, level) - outfile.write('email=%s,\n' % quote_python(self.email).encode(ExternalEncoding)) + outfile.write('email=%s,\n' % self.gds_encode(quote_python(self.email))) if self.elposint is not None: showIndent(outfile, level) outfile.write('elposint=%d,\n' % self.elposint) @@ -1191,10 +2043,16 @@ class programmer(person): outfile.write('elnonnegint=%d,\n' % self.elnonnegint) if self.eldate is not None: showIndent(outfile, level) - outfile.write('eldate=%s,\n' % quote_python(self.eldate).encode(ExternalEncoding)) + outfile.write('eldate=model_.GeneratedsSuper.gds_parse_date("%s"),\n' % self.gds_format_date(self.eldate, input_name='eldate')) + if self.eldatetime is not None: + showIndent(outfile, level) + outfile.write('eldatetime=model_.GeneratedsSuper.gds_parse_datetime("%s"),\n' % self.gds_format_datetime(self.eldatetime, input_name='eldatetime')) + if self.eldatetime1 is not None: + showIndent(outfile, level) + outfile.write('eldatetime1=model_.GeneratedsSuper.gds_parse_datetime("%s"),\n' % self.gds_format_datetime(self.eldatetime1, input_name='eldatetime1')) if self.eltoken is not None: showIndent(outfile, level) - outfile.write('eltoken=%s,\n' % quote_python(self.eltoken).encode(ExternalEncoding)) + outfile.write('eltoken=%s,\n' % self.gds_encode(quote_python(self.eltoken))) if self.elshort is not None: showIndent(outfile, level) outfile.write('elshort=%d,\n' % self.elshort) @@ -1203,509 +2061,828 @@ class programmer(person): outfile.write('ellong=%d,\n' % self.ellong) if self.elparam is not None: showIndent(outfile, level) - outfile.write('elparam=model_.param(\n') + outfile.write('elparam=model_.paramType(\n') self.elparam.exportLiteral(outfile, level, name_='elparam') showIndent(outfile, level) outfile.write('),\n') if self.elarraytypes is not None: showIndent(outfile, level) - outfile.write('elarraytypes=%s,\n' % quote_python(self.elarraytypes).encode(ExternalEncoding)) + outfile.write('elarraytypes=%s,\n' % self.gds_encode(quote_python(self.elarraytypes))) def build(self, node): - self.buildAttributes(node, node.attrib, []) + already_processed = set() + self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] - self.buildChildren(child, nodeName_) + self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = attrs.get('language') + value = find_attr_value_('language', node) if value is not None and 'language' not in already_processed: - already_processed.append('language') + already_processed.add('language') self.language = value - value = attrs.get('area') + value = find_attr_value_('area', node) if value is not None and 'area' not in already_processed: - already_processed.append('area') + already_processed.add('area') self.area = value - value = attrs.get('attrnegint') - if value is not None and 'attrnegint' not in already_processed: - already_processed.append('attrnegint') - try: - self.attrnegint = int(value) - except ValueError, exp: - raise_parse_error(node, 'Bad integer attribute: %s' % exp) - if self.attrnegint >= 0: - raise_parse_error(node, 'Invalid NegativeInteger') - value = attrs.get('attrposint') + value = find_attr_value_('attrposint', node) if value is not None and 'attrposint' not in already_processed: - already_processed.append('attrposint') + already_processed.add('attrposint') try: self.attrposint = int(value) - except ValueError, exp: + except ValueError as exp: raise_parse_error(node, 'Bad integer attribute: %s' % exp) if self.attrposint <= 0: raise_parse_error(node, 'Invalid PositiveInteger') - value = attrs.get('attrnonnegint') - if value is not None and 'attrnonnegint' not in already_processed: - already_processed.append('attrnonnegint') - try: - self.attrnonnegint = int(value) - except ValueError, exp: - raise_parse_error(node, 'Bad integer attribute: %s' % exp) - if self.attrnonnegint < 0: - raise_parse_error(node, 'Invalid NonNegativeInteger') - value = attrs.get('attrnonposint') + value = find_attr_value_('attrnonposint', node) if value is not None and 'attrnonposint' not in already_processed: - already_processed.append('attrnonposint') + already_processed.add('attrnonposint') try: self.attrnonposint = int(value) - except ValueError, exp: + except ValueError as exp: raise_parse_error(node, 'Bad integer attribute: %s' % exp) if self.attrnonposint > 0: raise_parse_error(node, 'Invalid NonPositiveInteger') - super(programmer, self).buildAttributes(node, attrs, already_processed) - def buildChildren(self, child_, nodeName_, from_subclass=False): + value = find_attr_value_('attrnegint', node) + if value is not None and 'attrnegint' not in already_processed: + already_processed.add('attrnegint') + try: + self.attrnegint = int(value) + except ValueError as exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + if self.attrnegint >= 0: + raise_parse_error(node, 'Invalid NegativeInteger') + value = find_attr_value_('attrnonnegint', node) + if value is not None and 'attrnonnegint' not in already_processed: + already_processed.add('attrnonnegint') + try: + self.attrnonnegint = int(value) + except ValueError as exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + if self.attrnonnegint < 0: + raise_parse_error(node, 'Invalid NonNegativeInteger') + value = find_attr_value_('xsi:type', node) + if value is not None and 'xsi:type' not in already_processed: + already_processed.add('xsi:type') + self.extensiontype_ = value + super(programmerType, self).buildAttributes(node, attrs, already_processed) + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): if nodeName_ == 'email': email_ = child_.text + email_ = self.gds_validate_string(email_, node, 'email') self.email = email_ elif nodeName_ == 'elposint': sval_ = child_.text try: ival_ = int(sval_) - except (TypeError, ValueError), exp: + except (TypeError, ValueError) as exp: raise_parse_error(child_, 'requires integer: %s' % exp) if ival_ <= 0: raise_parse_error(child_, 'requires positiveInteger') + ival_ = self.gds_validate_integer(ival_, node, 'elposint') self.elposint = ival_ elif nodeName_ == 'elnonposint': sval_ = child_.text try: ival_ = int(sval_) - except (TypeError, ValueError), exp: + except (TypeError, ValueError) as exp: raise_parse_error(child_, 'requires integer: %s' % exp) if ival_ > 0: raise_parse_error(child_, 'requires nonPositiveInteger') + ival_ = self.gds_validate_integer(ival_, node, 'elnonposint') self.elnonposint = ival_ elif nodeName_ == 'elnegint': sval_ = child_.text try: ival_ = int(sval_) - except (TypeError, ValueError), exp: + except (TypeError, ValueError) as exp: raise_parse_error(child_, 'requires integer: %s' % exp) if ival_ >= 0: raise_parse_error(child_, 'requires negativeInteger') + ival_ = self.gds_validate_integer(ival_, node, 'elnegint') self.elnegint = ival_ elif nodeName_ == 'elnonnegint': sval_ = child_.text try: ival_ = int(sval_) - except (TypeError, ValueError), exp: + except (TypeError, ValueError) as exp: raise_parse_error(child_, 'requires integer: %s' % exp) if ival_ < 0: raise_parse_error(child_, 'requires nonNegativeInteger') + ival_ = self.gds_validate_integer(ival_, node, 'elnonnegint') self.elnonnegint = ival_ elif nodeName_ == 'eldate': - eldate_ = child_.text - self.eldate = eldate_ + sval_ = child_.text + dval_ = self.gds_parse_date(sval_) + self.eldate = dval_ + elif nodeName_ == 'eldatetime': + sval_ = child_.text + dval_ = self.gds_parse_datetime(sval_) + self.eldatetime = dval_ + elif nodeName_ == 'eldatetime1': + sval_ = child_.text + dval_ = self.gds_parse_datetime(sval_) + self.eldatetime1 = dval_ elif nodeName_ == 'eltoken': eltoken_ = child_.text - eltoken_ = re_.sub(STRING_CLEANUP_PAT, " ", eltoken_).strip() + if eltoken_: + eltoken_ = re_.sub(String_cleanup_pat_, " ", eltoken_).strip() + else: + eltoken_ = "" + eltoken_ = self.gds_validate_string(eltoken_, node, 'eltoken') self.eltoken = eltoken_ elif nodeName_ == 'elshort': sval_ = child_.text try: ival_ = int(sval_) - except (TypeError, ValueError), exp: + except (TypeError, ValueError) as exp: raise_parse_error(child_, 'requires integer: %s' % exp) + ival_ = self.gds_validate_integer(ival_, node, 'elshort') self.elshort = ival_ elif nodeName_ == 'ellong': sval_ = child_.text try: ival_ = int(sval_) - except (TypeError, ValueError), exp: + except (TypeError, ValueError) as exp: raise_parse_error(child_, 'requires integer: %s' % exp) + ival_ = self.gds_validate_integer(ival_, node, 'ellong') self.ellong = ival_ - elif nodeName_ == 'elparam': - obj_ = param.factory() + elif nodeName_ == 'elparam': + obj_ = paramType.factory() obj_.build(child_) - self.set_elparam(obj_) + self.elparam = obj_ + obj_.original_tagname_ = 'elparam' elif nodeName_ == 'elarraytypes': elarraytypes_ = child_.text + elarraytypes_ = self.gds_validate_string(elarraytypes_, node, 'elarraytypes') self.elarraytypes = elarraytypes_ - super(programmer, self).buildChildren(child_, nodeName_, True) -# end class programmer + # validate type ArrayTypes + self.validate_ArrayTypes(self.elarraytypes) + super(programmerType, self).buildChildren(child_, node, nodeName_, True) +# end class programmerType -class param(GeneratedsSuper): - """Finding flow attribute unneccesary in practice. A unnamed parameter - is unbound/skipped.""" +class paramType(GeneratedsSuper): member_data_items_ = { - 'semantic': MemberSpec_('semantic', 'xs:token', 0), - 'name': MemberSpec_('name', 'xs:NCName', 0), - 'flow': MemberSpec_('flow', 'FlowType', 0), - 'sid': MemberSpec_('sid', 'xs:NCName', 0), - 'type': MemberSpec_('type', 'xs:NMTOKEN', 0), - 'id': MemberSpec_('id', 'xs:string', 0), + 'id': MemberSpec_('id', 'xs:string', 0, 1, {'use': 'optional'}), + 'name': MemberSpec_('name', 'xs:NCName', 0, 1, {'use': 'optional'}), + 'sid': MemberSpec_('sid', 'xs:NCName', 0, 1, {'use': 'optional'}), + 'flow': MemberSpec_('flow', 'FlowType', 0, 1, {'use': 'optional'}), + 'semantic': MemberSpec_('semantic', 'xs:token', 0, 1, {'use': 'optional'}), + 'type_': MemberSpec_('type_', 'xs:NMTOKEN', 0, 0, {'use': u'required'}), 'valueOf_': MemberSpec_('valueOf_', 'xs:string', 0), - } + } subclass = None superclass = None - def __init__(self, semantic=None, name=None, flow=None, sid=None, type_=None, id=None, valueOf_=None): - self.semantic = _cast(None, semantic) + def __init__(self, id=None, name=None, sid=None, flow=None, semantic=None, type_=None, valueOf_=None): + self.original_tagname_ = None + self.id = _cast(None, id) self.name = _cast(None, name) - self.flow = _cast(None, flow) self.sid = _cast(None, sid) + self.flow = _cast(int, flow) + self.semantic = _cast(None, semantic) self.type_ = _cast(None, type_) - self.id = _cast(None, id) self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): - if param.subclass: - return param.subclass(*args_, **kwargs_) + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, paramType) + if subclass is not None: + return subclass(*args_, **kwargs_) + if paramType.subclass: + return paramType.subclass(*args_, **kwargs_) else: - return param(*args_, **kwargs_) + return paramType(*args_, **kwargs_) factory = staticmethod(factory) - def get_semantic(self): return self.semantic - def set_semantic(self, semantic): self.semantic = semantic - semanticProp = property(get_semantic, set_semantic) + def get_id(self): return self.id + def set_id(self, id): self.id = id + idProp = property(get_id, set_id) def get_name(self): return self.name def set_name(self, name): self.name = name nameProp = property(get_name, set_name) - def get_flow(self): return self.flow - def set_flow(self, flow): self.flow = flow - flowProp = property(get_flow, set_flow) - def validate_FlowType(self, value): - # Validate type FlowType, a restriction on xs:integer. - pass def get_sid(self): return self.sid def set_sid(self, sid): self.sid = sid sidProp = property(get_sid, set_sid) + def get_flow(self): return self.flow + def set_flow(self, flow): self.flow = flow + flowProp = property(get_flow, set_flow) + def get_semantic(self): return self.semantic + def set_semantic(self, semantic): self.semantic = semantic + semanticProp = property(get_semantic, set_semantic) def get_type(self): return self.type_ def set_type(self, type_): self.type_ = type_ typeProp = property(get_type, set_type) - def get_id(self): return self.id - def set_id(self, id): self.id = id - idProp = property(get_id, set_id) def get_valueOf_(self): return self.valueOf_ def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_ - def export(self, outfile, level, namespace_='', name_='param', namespacedef_=''): - showIndent(outfile, level) + def validate_FlowType(self, value): + # Validate type FlowType, a restriction on xs:integer. + if value is not None and Validate_simpletypes_: + pass + def hasContent_(self): + if ( + (1 if type(self.valueOf_) in [int,float] else self.valueOf_) + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='paramType', namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"', pretty_print=True): + imported_ns_def_ = GenerateDSNamespaceDefs_.get('paramType') + if imported_ns_def_ is not None: + namespacedef_ = imported_ns_def_ + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ + showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) - self.exportAttributes(outfile, level, [], namespace_, name_='param') + already_processed = set() + self.exportAttributes(outfile, level, already_processed, namespace_, name_='paramType') if self.hasContent_(): outfile.write('>') - outfile.write(self.valueOf_) - self.exportChildren(outfile, level + 1, namespace_, name_) - outfile.write('</%s%s>\n' % (namespace_, name_)) + outfile.write(self.convert_unicode(self.valueOf_)) + self.exportChildren(outfile, level + 1, namespace_='', name_='paramType', pretty_print=pretty_print) + outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: - outfile.write('/>\n') - def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='param'): - if self.semantic is not None and 'semantic' not in already_processed: - already_processed.append('semantic') - outfile.write(' semantic=%s' % (self.gds_format_string(quote_attrib(self.semantic).encode(ExternalEncoding), input_name='semantic'), )) + outfile.write('/>%s' % (eol_, )) + def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='paramType'): + if self.id is not None and 'id' not in already_processed: + already_processed.add('id') + outfile.write(' id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.id), input_name='id')), )) if self.name is not None and 'name' not in already_processed: - already_processed.append('name') + already_processed.add('name') outfile.write(' name=%s' % (quote_attrib(self.name), )) - if self.flow is not None and 'flow' not in already_processed: - already_processed.append('flow') - outfile.write(' flow=%s' % (quote_attrib(self.flow), )) if self.sid is not None and 'sid' not in already_processed: - already_processed.append('sid') + already_processed.add('sid') outfile.write(' sid=%s' % (quote_attrib(self.sid), )) - outfile.write(' type=%s' % (self.gds_format_string(quote_attrib(self.type_).encode(ExternalEncoding), input_name='type'), )) - if self.id is not None and 'id' not in already_processed: - already_processed.append('id') - outfile.write(' id=%s' % (self.gds_format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) - def exportChildren(self, outfile, level, namespace_='', name_='param'): + if self.flow is not None and 'flow' not in already_processed: + already_processed.add('flow') + outfile.write(' flow=%s' % (quote_attrib(self.flow), )) + if self.semantic is not None and 'semantic' not in already_processed: + already_processed.add('semantic') + outfile.write(' semantic=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.semantic), input_name='semantic')), )) + if self.type_ is not None and 'type_' not in already_processed: + already_processed.add('type_') + outfile.write(' type=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.type_), input_name='type')), )) + def exportChildren(self, outfile, level, namespace_='', name_='paramType', fromsubclass_=False, pretty_print=True): pass - def hasContent_(self): - if ( - self.valueOf_ - ): - return True + def to_etree(self, parent_element=None, name_='paramType', mapping_=None): + if parent_element is None: + element = etree_.Element('{}' + name_) else: - return False - def exportLiteral(self, outfile, level, name_='param'): + element = etree_.SubElement(parent_element, '{}' + name_) + if self.id is not None: + element.set('id', self.gds_format_string(self.id)) + if self.name is not None: + element.set('name', self.name) + if self.sid is not None: + element.set('sid', self.sid) + if self.flow is not None: + element.set('flow', self.flow) + if self.semantic is not None: + element.set('semantic', self.gds_format_string(self.semantic)) + if self.type_ is not None: + element.set('type', self.gds_format_string(self.type_)) + if self.hasContent_(): + element.text = self.gds_format_string(self.get_valueOf_()) + if mapping_ is not None: + mapping_[self] = element + return element + def exportLiteral(self, outfile, level, name_='paramType'): level += 1 - self.exportLiteralAttributes(outfile, level, [], name_) + already_processed = set() + self.exportLiteralAttributes(outfile, level, already_processed, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) showIndent(outfile, level) outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,)) def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.semantic is not None and 'semantic' not in already_processed: - already_processed.append('semantic') + if self.id is not None and 'id' not in already_processed: + already_processed.add('id') showIndent(outfile, level) - outfile.write('semantic = "%s",\n' % (self.semantic,)) + outfile.write('id="%s",\n' % (self.id,)) if self.name is not None and 'name' not in already_processed: - already_processed.append('name') + already_processed.add('name') + showIndent(outfile, level) + outfile.write('name="%s",\n' % (self.name,)) + if self.sid is not None and 'sid' not in already_processed: + already_processed.add('sid') showIndent(outfile, level) - outfile.write('name = "%s",\n' % (self.name,)) + outfile.write('sid="%s",\n' % (self.sid,)) if self.flow is not None and 'flow' not in already_processed: - already_processed.append('flow') + already_processed.add('flow') showIndent(outfile, level) - outfile.write('flow = %d,\n' % (self.flow,)) - if self.sid is not None and 'sid' not in already_processed: - already_processed.append('sid') + outfile.write('flow=%d,\n' % (self.flow,)) + if self.semantic is not None and 'semantic' not in already_processed: + already_processed.add('semantic') showIndent(outfile, level) - outfile.write('sid = "%s",\n' % (self.sid,)) + outfile.write('semantic="%s",\n' % (self.semantic,)) if self.type_ is not None and 'type_' not in already_processed: - already_processed.append('type_') - showIndent(outfile, level) - outfile.write('type_ = "%s",\n' % (self.type_,)) - if self.id is not None and 'id' not in already_processed: - already_processed.append('id') + already_processed.add('type_') showIndent(outfile, level) - outfile.write('id = "%s",\n' % (self.id,)) + outfile.write('type_="%s",\n' % (self.type_,)) def exportLiteralChildren(self, outfile, level, name_): pass def build(self, node): - self.buildAttributes(node, node.attrib, []) + already_processed = set() + self.buildAttributes(node, node.attrib, already_processed) self.valueOf_ = get_all_text_(node) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] - self.buildChildren(child, nodeName_) + self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = attrs.get('semantic') - if value is not None and 'semantic' not in already_processed: - already_processed.append('semantic') - self.semantic = value - self.semantic = ' '.join(self.semantic.split()) - value = attrs.get('name') + value = find_attr_value_('id', node) + if value is not None and 'id' not in already_processed: + already_processed.add('id') + self.id = value + value = find_attr_value_('name', node) if value is not None and 'name' not in already_processed: - already_processed.append('name') + already_processed.add('name') self.name = value - value = attrs.get('flow') + value = find_attr_value_('sid', node) + if value is not None and 'sid' not in already_processed: + already_processed.add('sid') + self.sid = value + value = find_attr_value_('flow', node) if value is not None and 'flow' not in already_processed: - already_processed.append('flow') + already_processed.add('flow') try: self.flow = int(value) - except ValueError, exp: + except ValueError as exp: raise_parse_error(node, 'Bad integer attribute: %s' % exp) self.validate_FlowType(self.flow) # validate type FlowType - value = attrs.get('sid') - if value is not None and 'sid' not in already_processed: - already_processed.append('sid') - self.sid = value - value = attrs.get('type') + value = find_attr_value_('semantic', node) + if value is not None and 'semantic' not in already_processed: + already_processed.add('semantic') + self.semantic = value + self.semantic = ' '.join(self.semantic.split()) + value = find_attr_value_('type', node) if value is not None and 'type' not in already_processed: - already_processed.append('type') + already_processed.add('type') self.type_ = value - value = attrs.get('id') - if value is not None and 'id' not in already_processed: - already_processed.append('id') - self.id = value - def buildChildren(self, child_, nodeName_, from_subclass=False): + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): pass -# end class param +# end class paramType -class python_programmer(programmer): - """A Python programmer type of person. Programmers are very special and - Python programmers are especially wonderful kinds of people.""" +class python_programmerType(programmerType): member_data_items_ = { - 'nick-name': MemberSpec_('nick-name', 'xs:string', 0), - 'favorite_editor': MemberSpec_('favorite_editor', 'xs:string', 0), - } + 'nick-name': MemberSpec_('nick-name', 'xs:string', 0, 1, {'use': 'optional'}), + 'drcs_attr': MemberSpec_('drcs_attr', 'xs:string', 0, 1, {'use': 'optional'}), + 'gui_developer': MemberSpec_('gui_developer', 'xs:boolean', 0, 1, {'use': 'optional'}), + 'favorite_editor': MemberSpec_('favorite_editor', 'xs:string', 0, 0, {u'type': u'xs:string', u'name': u'favorite-editor'}, None), + 'flowvalue': MemberSpec_('flowvalue', ['FlowType', 'xs:integer'], 0, 0, {u'type': u'xs:integer', u'name': u'flowvalue'}, None), + 'drcs': MemberSpec_('drcs', 'xs:string', 0, 0, {u'type': u'xs:string', u'name': u'drcs'}, None), + } subclass = None - superclass = programmer - def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, language=None, area=None, attrnegint=None, attrposint=None, attrnonnegint=None, attrnonposint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, nick_name=None, favorite_editor=None): - super(python_programmer, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, language, area, attrnegint, attrposint, attrnonnegint, attrnonposint, email, elposint, elnonposint, elnegint, elnonnegint, eldate, eltoken, elshort, ellong, elparam, elarraytypes, ) + superclass = programmerType + def __init__(self, value=None, id=None, ratio=None, fruit=None, vegetable=None, name=None, interest=None, category=None, hot_agent=None, agent=None, promoter=None, description=None, range_=None, with_=None, language=None, area=None, attrposint=None, attrnonposint=None, attrnegint=None, attrnonnegint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eldatetime=None, eldatetime1=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, nick_name=None, drcs_attr=None, gui_developer=None, favorite_editor=None, flowvalue=None, drcs=None): + self.original_tagname_ = None + super(python_programmerType, self).__init__(value, id, ratio, fruit, vegetable, name, interest, category, hot_agent, agent, promoter, description, range_, with_, language, area, attrposint, attrnonposint, attrnegint, attrnonnegint, email, elposint, elnonposint, elnegint, elnonnegint, eldate, eldatetime, eldatetime1, eltoken, elshort, ellong, elparam, elarraytypes, ) self.nick_name = _cast(None, nick_name) + self.drcs_attr = _cast(None, drcs_attr) + self.gui_developer = _cast(bool, gui_developer) self.favorite_editor = favorite_editor + self.flowvalue = flowvalue + self.validate_FlowType(self.flowvalue) + self.drcs = drcs def factory(*args_, **kwargs_): - if python_programmer.subclass: - return python_programmer.subclass(*args_, **kwargs_) + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, python_programmerType) + if subclass is not None: + return subclass(*args_, **kwargs_) + if python_programmerType.subclass: + return python_programmerType.subclass(*args_, **kwargs_) else: - return python_programmer(*args_, **kwargs_) + return python_programmerType(*args_, **kwargs_) factory = staticmethod(factory) def get_favorite_editor(self): return self.favorite_editor def set_favorite_editor(self, favorite_editor): self.favorite_editor = favorite_editor favorite_editorProp = property(get_favorite_editor, set_favorite_editor) + def get_flowvalue(self): return self.flowvalue + def set_flowvalue(self, flowvalue): self.flowvalue = flowvalue + flowvalueProp = property(get_flowvalue, set_flowvalue) + def get_drcs(self): return self.drcs + def set_drcs(self, drcs): self.drcs = drcs + drcsProp = property(get_drcs, set_drcs) def get_nick_name(self): return self.nick_name def set_nick_name(self, nick_name): self.nick_name = nick_name nick_nameProp = property(get_nick_name, set_nick_name) - def export(self, outfile, level, namespace_='', name_='python-programmer', namespacedef_=''): - showIndent(outfile, level) - outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) - self.exportAttributes(outfile, level, [], namespace_, name_='python-programmer') - outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"') - outfile.write(' xsi:type="python-programmer"') - if self.hasContent_(): - outfile.write('>\n') - self.exportChildren(outfile, level + 1, namespace_, name_) - showIndent(outfile, level) - outfile.write('</%s%s>\n' % (namespace_, name_)) - else: - outfile.write('/>\n') - def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='python-programmer'): - super(python_programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='python-programmer') - if self.nick_name is not None and 'nick_name' not in already_processed: - already_processed.append('nick_name') - outfile.write(' nick-name=%s' % (self.gds_format_string(quote_attrib(self.nick_name).encode(ExternalEncoding), input_name='nick-name'), )) - def exportChildren(self, outfile, level, namespace_='', name_='python-programmer'): - super(python_programmer, self).exportChildren(outfile, level, namespace_, name_) - if self.favorite_editor is not None: - showIndent(outfile, level) - outfile.write('<%sfavorite-editor>%s</%sfavorite-editor>\n' % (namespace_, self.gds_format_string(quote_xml(self.favorite_editor).encode(ExternalEncoding), input_name='favorite-editor'), namespace_)) + def get_drcs_attr(self): return self.drcs_attr + def set_drcs_attr(self, drcs_attr): self.drcs_attr = drcs_attr + drcs_attrProp = property(get_drcs_attr, set_drcs_attr) + def get_gui_developer(self): return self.gui_developer + def set_gui_developer(self, gui_developer): self.gui_developer = gui_developer + gui_developerProp = property(get_gui_developer, set_gui_developer) + def validate_FlowType(self, value): + # Validate type FlowType, a restriction on xs:integer. + if value is not None and Validate_simpletypes_: + pass def hasContent_(self): if ( self.favorite_editor is not None or - super(python_programmer, self).hasContent_() - ): + self.flowvalue is not None or + self.drcs is not None or + super(python_programmerType, self).hasContent_() + ): return True else: return False - def exportLiteral(self, outfile, level, name_='python-programmer'): + def export(self, outfile, level, namespace_='', name_='python-programmerType', namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"', pretty_print=True): + imported_ns_def_ = GenerateDSNamespaceDefs_.get('python-programmerType') + if imported_ns_def_ is not None: + namespacedef_ = imported_ns_def_ + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = set() + self.exportAttributes(outfile, level, already_processed, namespace_, name_='python-programmerType') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='python-programmerType', 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_='python-programmerType'): + super(python_programmerType, self).exportAttributes(outfile, level, already_processed, namespace_, name_='python-programmerType') + if self.nick_name is not None and 'nick_name' not in already_processed: + already_processed.add('nick_name') + outfile.write(' nick-name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.nick_name), input_name='nick-name')), )) + if self.drcs_attr is not None and 'drcs_attr' not in already_processed: + already_processed.add('drcs_attr') + outfile.write(' drcs=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.drcs_attr), input_name='drcs_attr')), )) + if self.gui_developer is not None and 'gui_developer' not in already_processed: + already_processed.add('gui_developer') + outfile.write(' gui_developer="%s"' % self.gds_format_boolean(self.gui_developer, input_name='gui_developer')) + def exportChildren(self, outfile, level, namespace_='', name_='python-programmerType', fromsubclass_=False, pretty_print=True): + super(python_programmerType, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.favorite_editor is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<favorite-editor>%s</favorite-editor>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.favorite_editor), input_name='favorite-editor')), eol_)) + if self.flowvalue is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<flowvalue>%s</flowvalue>%s' % (self.gds_format_integer(self.flowvalue, input_name='flowvalue'), eol_)) + if self.drcs is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<drcs>%s</drcs>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.drcs), input_name='drcs')), eol_)) + def to_etree(self, parent_element=None, name_='python-programmerType', mapping_=None): + element = super(python_programmerType, self).to_etree(parent_element, name_, mapping_) + if self.nick_name is not None: + element.set('nick-name', self.gds_format_string(self.nick_name)) + if self.drcs_attr is not None: + element.set('drcs_attr', self.gds_format_string(self.drcs_attr)) + if self.gui_developer is not None: + element.set('gui_developer', self.gds_format_boolean(self.gui_developer)) + if self.favorite_editor is not None: + favorite_editor_ = self.favorite_editor + etree_.SubElement(element, '{}favorite-editor').text = self.gds_format_string(favorite_editor_) + if self.flowvalue is not None: + flowvalue_ = self.flowvalue + etree_.SubElement(element, '{}flowvalue').text = self.gds_format_integer(flowvalue_) + if self.drcs is not None: + drcs_ = self.drcs + etree_.SubElement(element, '{}drcs').text = self.gds_format_string(drcs_) + if mapping_ is not None: + mapping_[self] = element + return element + def exportLiteral(self, outfile, level, name_='python-programmerType'): level += 1 - self.exportLiteralAttributes(outfile, level, [], name_) + already_processed = set() + self.exportLiteralAttributes(outfile, level, already_processed, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, already_processed, name_): if self.nick_name is not None and 'nick_name' not in already_processed: - already_processed.append('nick_name') + already_processed.add('nick_name') + showIndent(outfile, level) + outfile.write('nick_name="%s",\n' % (self.nick_name,)) + if self.drcs_attr is not None and 'drcs_attr' not in already_processed: + already_processed.add('drcs_attr') showIndent(outfile, level) - outfile.write('nick_name = "%s",\n' % (self.nick_name,)) - super(python_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_) + outfile.write('drcs_attr="%s",\n' % (self.drcs_attr,)) + if self.gui_developer is not None and 'gui_developer' not in already_processed: + already_processed.add('gui_developer') + showIndent(outfile, level) + outfile.write('gui_developer=%s,\n' % (self.gui_developer,)) + super(python_programmerType, self).exportLiteralAttributes(outfile, level, already_processed, name_) def exportLiteralChildren(self, outfile, level, name_): - super(python_programmer, self).exportLiteralChildren(outfile, level, name_) + super(python_programmerType, self).exportLiteralChildren(outfile, level, name_) if self.favorite_editor is not None: showIndent(outfile, level) - outfile.write('favorite_editor=%s,\n' % quote_python(self.favorite_editor).encode(ExternalEncoding)) + outfile.write('favorite_editor=%s,\n' % self.gds_encode(quote_python(self.favorite_editor))) + if self.flowvalue is not None: + showIndent(outfile, level) + outfile.write('flowvalue=%d,\n' % self.flowvalue) + if self.drcs is not None: + showIndent(outfile, level) + outfile.write('drcs=%s,\n' % self.gds_encode(quote_python(self.drcs))) def build(self, node): - self.buildAttributes(node, node.attrib, []) + already_processed = set() + self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] - self.buildChildren(child, nodeName_) + self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = attrs.get('nick-name') + value = find_attr_value_('nick-name', node) if value is not None and 'nick-name' not in already_processed: - already_processed.append('nick-name') + already_processed.add('nick-name') self.nick_name = value - super(python_programmer, self).buildAttributes(node, attrs, already_processed) - def buildChildren(self, child_, nodeName_, from_subclass=False): + value = find_attr_value_('drcs', node) + if value is not None and 'drcs_attr' not in already_processed: + already_processed.add('drcs_attr') + self.drcs_attr = value + value = find_attr_value_('gui_developer', node) + if value is not None and 'gui_developer' not in already_processed: + already_processed.add('gui_developer') + if value in ('true', '1'): + self.gui_developer = True + elif value in ('false', '0'): + self.gui_developer = False + else: + raise_parse_error(node, 'Bad boolean attribute') + super(python_programmerType, self).buildAttributes(node, attrs, already_processed) + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): if nodeName_ == 'favorite-editor': favorite_editor_ = child_.text + favorite_editor_ = self.gds_validate_string(favorite_editor_, node, 'favorite_editor') self.favorite_editor = favorite_editor_ - super(python_programmer, self).buildChildren(child_, nodeName_, True) -# end class python_programmer + elif nodeName_ == 'flowvalue': + sval_ = child_.text + try: + ival_ = int(sval_) + except (TypeError, ValueError) as exp: + raise_parse_error(child_, 'requires integer: %s' % exp) + ival_ = self.gds_validate_integer(ival_, node, 'flowvalue') + self.flowvalue = ival_ + # validate type FlowType + self.validate_FlowType(self.flowvalue) + elif nodeName_ == 'drcs': + drcs_ = child_.text + drcs_ = self.gds_validate_string(drcs_, node, 'drcs') + self.drcs = drcs_ + super(python_programmerType, self).buildChildren(child_, node, nodeName_, True) +# end class python_programmerType -class java_programmer(programmer): - """A Java programmer type of person. Programmers are very special and - Java programmers are nice also, but not as especially wonderful - as Python programmers, of course.""" +class java_programmerType(programmerType): member_data_items_ = { - 'status': MemberSpec_('status', 'xs:string', 0), - 'nick-name': MemberSpec_('nick-name', 'xs:string', 0), - 'favorite_editor': MemberSpec_('favorite_editor', 'xs:string', 0), - } + 'nick-name': MemberSpec_('nick-name', 'xs:string', 0, 1, {'use': 'optional'}), + 'status': MemberSpec_('status', 'xs:string', 0, 1, {'use': 'optional'}), + 'favorite_editor': MemberSpec_('favorite_editor', 'xs:string', 0, 0, {u'type': u'xs:string', u'name': u'favorite-editor'}, None), + 'datetime1': MemberSpec_('datetime1', 'xs:gYear', 0, 0, {u'type': u'xs:gYear', u'name': u'datetime1'}, None), + 'datetime2': MemberSpec_('datetime2', 'xs:gYearMonth', 0, 0, {u'type': u'xs:gYearMonth', u'name': u'datetime2'}, None), + 'datetime3': MemberSpec_('datetime3', 'xs:gMonth', 0, 0, {u'type': u'xs:gMonth', u'name': u'datetime3'}, None), + 'datetime4': MemberSpec_('datetime4', 'xs:gMonthDay', 0, 0, {u'type': u'xs:gMonthDay', u'name': u'datetime4'}, None), + 'datetime5': MemberSpec_('datetime5', 'xs:gDay', 0, 0, {u'type': u'xs:gDay', u'name': u'datetime5'}, None), + } subclass = None - superclass = programmer - def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, language=None, area=None, attrnegint=None, attrposint=None, attrnonnegint=None, attrnonposint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, status=None, nick_name=None, favorite_editor=None): - super(java_programmer, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, language, area, attrnegint, attrposint, attrnonnegint, attrnonposint, email, elposint, elnonposint, elnegint, elnonnegint, eldate, eltoken, elshort, ellong, elparam, elarraytypes, ) - self.status = _cast(None, status) + superclass = programmerType + def __init__(self, value=None, id=None, ratio=None, fruit=None, vegetable=None, name=None, interest=None, category=None, hot_agent=None, agent=None, promoter=None, description=None, range_=None, with_=None, language=None, area=None, attrposint=None, attrnonposint=None, attrnegint=None, attrnonnegint=None, email=None, elposint=None, elnonposint=None, elnegint=None, elnonnegint=None, eldate=None, eldatetime=None, eldatetime1=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, nick_name=None, status=None, favorite_editor=None, datetime1=None, datetime2=None, datetime3=None, datetime4=None, datetime5=None): + self.original_tagname_ = None + super(java_programmerType, self).__init__(value, id, ratio, fruit, vegetable, name, interest, category, hot_agent, agent, promoter, description, range_, with_, language, area, attrposint, attrnonposint, attrnegint, attrnonnegint, email, elposint, elnonposint, elnegint, elnonnegint, eldate, eldatetime, eldatetime1, eltoken, elshort, ellong, elparam, elarraytypes, ) self.nick_name = _cast(None, nick_name) + self.status = _cast(None, status) self.favorite_editor = favorite_editor + self.datetime1 = datetime1 + self.datetime2 = datetime2 + self.datetime3 = datetime3 + self.datetime4 = datetime4 + self.datetime5 = datetime5 def factory(*args_, **kwargs_): - if java_programmer.subclass: - return java_programmer.subclass(*args_, **kwargs_) + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, java_programmerType) + if subclass is not None: + return subclass(*args_, **kwargs_) + if java_programmerType.subclass: + return java_programmerType.subclass(*args_, **kwargs_) else: - return java_programmer(*args_, **kwargs_) + return java_programmerType(*args_, **kwargs_) factory = staticmethod(factory) def get_favorite_editor(self): return self.favorite_editor def set_favorite_editor(self, favorite_editor): self.favorite_editor = favorite_editor favorite_editorProp = property(get_favorite_editor, set_favorite_editor) - def get_status(self): return self.status - def set_status(self, status): self.status = status - statusProp = property(get_status, set_status) + def get_datetime1(self): return self.datetime1 + def set_datetime1(self, datetime1): self.datetime1 = datetime1 + datetime1Prop = property(get_datetime1, set_datetime1) + def get_datetime2(self): return self.datetime2 + def set_datetime2(self, datetime2): self.datetime2 = datetime2 + datetime2Prop = property(get_datetime2, set_datetime2) + def get_datetime3(self): return self.datetime3 + def set_datetime3(self, datetime3): self.datetime3 = datetime3 + datetime3Prop = property(get_datetime3, set_datetime3) + def get_datetime4(self): return self.datetime4 + def set_datetime4(self, datetime4): self.datetime4 = datetime4 + datetime4Prop = property(get_datetime4, set_datetime4) + def get_datetime5(self): return self.datetime5 + def set_datetime5(self, datetime5): self.datetime5 = datetime5 + datetime5Prop = property(get_datetime5, set_datetime5) def get_nick_name(self): return self.nick_name def set_nick_name(self, nick_name): self.nick_name = nick_name nick_nameProp = property(get_nick_name, set_nick_name) - def export(self, outfile, level, namespace_='', name_='java-programmer', namespacedef_=''): - showIndent(outfile, level) - outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) - self.exportAttributes(outfile, level, [], namespace_, name_='java-programmer') - outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"') - outfile.write(' xsi:type="java-programmer"') - if self.hasContent_(): - outfile.write('>\n') - self.exportChildren(outfile, level + 1, namespace_, name_) - showIndent(outfile, level) - outfile.write('</%s%s>\n' % (namespace_, name_)) - else: - outfile.write('/>\n') - def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='java-programmer'): - super(java_programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='java-programmer') - if self.status is not None and 'status' not in already_processed: - already_processed.append('status') - outfile.write(' status=%s' % (self.gds_format_string(quote_attrib(self.status).encode(ExternalEncoding), input_name='status'), )) - if self.nick_name is not None and 'nick_name' not in already_processed: - already_processed.append('nick_name') - outfile.write(' nick-name=%s' % (self.gds_format_string(quote_attrib(self.nick_name).encode(ExternalEncoding), input_name='nick-name'), )) - def exportChildren(self, outfile, level, namespace_='', name_='java-programmer'): - super(java_programmer, self).exportChildren(outfile, level, namespace_, name_) - if self.favorite_editor is not None: - showIndent(outfile, level) - outfile.write('<%sfavorite-editor>%s</%sfavorite-editor>\n' % (namespace_, self.gds_format_string(quote_xml(self.favorite_editor).encode(ExternalEncoding), input_name='favorite-editor'), namespace_)) + def get_status(self): return self.status + def set_status(self, status): self.status = status + statusProp = property(get_status, set_status) def hasContent_(self): if ( self.favorite_editor is not None or - super(java_programmer, self).hasContent_() - ): + 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 + super(java_programmerType, self).hasContent_() + ): return True else: return False - def exportLiteral(self, outfile, level, name_='java-programmer'): + def export(self, outfile, level, namespace_='', name_='java-programmerType', namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"', pretty_print=True): + imported_ns_def_ = GenerateDSNamespaceDefs_.get('java-programmerType') + if imported_ns_def_ is not None: + namespacedef_ = imported_ns_def_ + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = set() + self.exportAttributes(outfile, level, already_processed, namespace_, name_='java-programmerType') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='java-programmerType', 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_='java-programmerType'): + super(java_programmerType, self).exportAttributes(outfile, level, already_processed, namespace_, name_='java-programmerType') + if self.nick_name is not None and 'nick_name' not in already_processed: + already_processed.add('nick_name') + outfile.write(' nick-name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.nick_name), input_name='nick-name')), )) + if self.status is not None and 'status' not in already_processed: + already_processed.add('status') + outfile.write(' status=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.status), input_name='status')), )) + def exportChildren(self, outfile, level, namespace_='', name_='java-programmerType', fromsubclass_=False, pretty_print=True): + super(java_programmerType, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.favorite_editor is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<favorite-editor>%s</favorite-editor>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.favorite_editor), input_name='favorite-editor')), eol_)) + if self.datetime1 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<datetime1>%s</datetime1>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.datetime1), input_name='datetime1')), eol_)) + if self.datetime2 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<datetime2>%s</datetime2>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.datetime2), input_name='datetime2')), eol_)) + if self.datetime3 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<datetime3>%s</datetime3>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.datetime3), input_name='datetime3')), eol_)) + if self.datetime4 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<datetime4>%s</datetime4>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.datetime4), input_name='datetime4')), eol_)) + if self.datetime5 is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<datetime5>%s</datetime5>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.datetime5), input_name='datetime5')), eol_)) + def to_etree(self, parent_element=None, name_='java-programmerType', mapping_=None): + element = super(java_programmerType, self).to_etree(parent_element, name_, mapping_) + if self.nick_name is not None: + element.set('nick-name', self.gds_format_string(self.nick_name)) + if self.status is not None: + element.set('status', self.gds_format_string(self.status)) + if self.favorite_editor is not None: + favorite_editor_ = self.favorite_editor + etree_.SubElement(element, '{}favorite-editor').text = self.gds_format_string(favorite_editor_) + if self.datetime1 is not None: + datetime1_ = self.datetime1 + etree_.SubElement(element, '{}datetime1').text = self.gds_format_string(datetime1_) + if self.datetime2 is not None: + datetime2_ = self.datetime2 + etree_.SubElement(element, '{}datetime2').text = self.gds_format_string(datetime2_) + if self.datetime3 is not None: + datetime3_ = self.datetime3 + etree_.SubElement(element, '{}datetime3').text = self.gds_format_string(datetime3_) + if self.datetime4 is not None: + datetime4_ = self.datetime4 + etree_.SubElement(element, '{}datetime4').text = self.gds_format_string(datetime4_) + if self.datetime5 is not None: + datetime5_ = self.datetime5 + etree_.SubElement(element, '{}datetime5').text = self.gds_format_string(datetime5_) + if mapping_ is not None: + mapping_[self] = element + return element + def exportLiteral(self, outfile, level, name_='java-programmerType'): level += 1 - self.exportLiteralAttributes(outfile, level, [], name_) + already_processed = set() + self.exportLiteralAttributes(outfile, level, already_processed, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.status is not None and 'status' not in already_processed: - already_processed.append('status') - showIndent(outfile, level) - outfile.write('status = "%s",\n' % (self.status,)) if self.nick_name is not None and 'nick_name' not in already_processed: - already_processed.append('nick_name') + already_processed.add('nick_name') + showIndent(outfile, level) + outfile.write('nick_name="%s",\n' % (self.nick_name,)) + if self.status is not None and 'status' not in already_processed: + already_processed.add('status') showIndent(outfile, level) - outfile.write('nick_name = "%s",\n' % (self.nick_name,)) - super(java_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_) + outfile.write('status="%s",\n' % (self.status,)) + super(java_programmerType, self).exportLiteralAttributes(outfile, level, already_processed, name_) def exportLiteralChildren(self, outfile, level, name_): - super(java_programmer, self).exportLiteralChildren(outfile, level, name_) + super(java_programmerType, self).exportLiteralChildren(outfile, level, name_) if self.favorite_editor is not None: showIndent(outfile, level) - outfile.write('favorite_editor=%s,\n' % quote_python(self.favorite_editor).encode(ExternalEncoding)) + outfile.write('favorite_editor=%s,\n' % self.gds_encode(quote_python(self.favorite_editor))) + if self.datetime1 is not None: + showIndent(outfile, level) + outfile.write('datetime1=%s,\n' % self.gds_encode(quote_python(self.datetime1))) + if self.datetime2 is not None: + showIndent(outfile, level) + outfile.write('datetime2=%s,\n' % self.gds_encode(quote_python(self.datetime2))) + if self.datetime3 is not None: + showIndent(outfile, level) + outfile.write('datetime3=%s,\n' % self.gds_encode(quote_python(self.datetime3))) + if self.datetime4 is not None: + showIndent(outfile, level) + outfile.write('datetime4=%s,\n' % self.gds_encode(quote_python(self.datetime4))) + if self.datetime5 is not None: + showIndent(outfile, level) + outfile.write('datetime5=%s,\n' % self.gds_encode(quote_python(self.datetime5))) def build(self, node): - self.buildAttributes(node, node.attrib, []) + already_processed = set() + self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] - self.buildChildren(child, nodeName_) + self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = attrs.get('status') - if value is not None and 'status' not in already_processed: - already_processed.append('status') - self.status = value - value = attrs.get('nick-name') + value = find_attr_value_('nick-name', node) if value is not None and 'nick-name' not in already_processed: - already_processed.append('nick-name') + already_processed.add('nick-name') self.nick_name = value - super(java_programmer, self).buildAttributes(node, attrs, already_processed) - def buildChildren(self, child_, nodeName_, from_subclass=False): - if nodeName_ == 'favorite-editor': + value = find_attr_value_('status', node) + if value is not None and 'status' not in already_processed: + already_processed.add('status') + self.status = value + super(java_programmerType, self).buildAttributes(node, attrs, already_processed) + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + if nodeName_ == 'favorite-editor': favorite_editor_ = child_.text + favorite_editor_ = self.gds_validate_string(favorite_editor_, node, 'favorite_editor') self.favorite_editor = favorite_editor_ - super(java_programmer, self).buildChildren(child_, nodeName_, True) -# end class java_programmer + elif 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_ + super(java_programmerType, self).buildChildren(child_, node, nodeName_, True) +# end class java_programmerType -class agent(GeneratedsSuper): +class agentType(GeneratedsSuper): member_data_items_ = { - 'firstname': MemberSpec_('firstname', 'xs:string', 0), - 'lastname': MemberSpec_('lastname', 'xs:string', 0), - 'priority': MemberSpec_('priority', 'xs:float', 0), - 'info': MemberSpec_('info', 'info', 0), - 'vehicle': MemberSpec_('vehicle', 'vehicle', 1), - } + 'firstname': MemberSpec_('firstname', 'xs:string', 0, 0, {u'type': u'xs:string', u'name': u'firstname'}, None), + 'lastname': MemberSpec_('lastname', 'xs:string', 0, 0, {u'type': u'xs:string', u'name': u'lastname'}, None), + 'priority': MemberSpec_('priority', 'xs:float', 0, 1, {u'type': u'xs:float', u'name': u'priority', u'minOccurs': u'0'}, None), + 'info': MemberSpec_('info', 'infoType', 0, 0, {u'type': u'infoType', u'name': u'info'}, None), + 'vehicle': MemberSpec_('vehicle', 'vehicleType', 1, 1, {u'maxOccurs': u'unbounded', 'type': u'vehicle', u'ref': u'vehicle', 'name': u'vehicle', u'minOccurs': u'0'}, None), + } subclass = None superclass = None - def __init__(self, firstname=None, lastname=None, priority=None, info=None, vehicle=None): + def __init__(self, firstname=None, lastname=None, priority=None, info=None, vehicle=None, extensiontype_=None): + self.original_tagname_ = None self.firstname = firstname self.lastname = lastname self.priority = priority @@ -1714,11 +2891,17 @@ class agent(GeneratedsSuper): self.vehicle = [] else: self.vehicle = vehicle + self.extensiontype_ = extensiontype_ def factory(*args_, **kwargs_): - if agent.subclass: - return agent.subclass(*args_, **kwargs_) + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, agentType) + if subclass is not None: + return subclass(*args_, **kwargs_) + if agentType.subclass: + return agentType.subclass(*args_, **kwargs_) else: - return agent(*args_, **kwargs_) + return agentType(*args_, **kwargs_) factory = staticmethod(factory) def get_firstname(self): return self.firstname def set_firstname(self, firstname): self.firstname = firstname @@ -1735,35 +2918,11 @@ class agent(GeneratedsSuper): def get_vehicle(self): return self.vehicle def set_vehicle(self, vehicle): self.vehicle = vehicle def add_vehicle(self, value): self.vehicle.append(value) - def insert_vehicle(self, index, value): self.vehicle[index] = value + def insert_vehicle_at(self, index, value): self.vehicle.insert(index, value) + def replace_vehicle_at(self, index, value): self.vehicle[index] = value vehicleProp = property(get_vehicle, set_vehicle) - def export(self, outfile, level, namespace_='', name_='agent', namespacedef_=''): - showIndent(outfile, level) - outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) - self.exportAttributes(outfile, level, [], namespace_, name_='agent') - if self.hasContent_(): - outfile.write('>\n') - self.exportChildren(outfile, level + 1, namespace_, name_) - showIndent(outfile, level) - outfile.write('</%s%s>\n' % (namespace_, name_)) - else: - outfile.write('/>\n') - def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='agent'): - pass - def exportChildren(self, outfile, level, namespace_='', name_='agent'): - if self.firstname is not None: - showIndent(outfile, level) - outfile.write('<%sfirstname>%s</%sfirstname>\n' % (namespace_, self.gds_format_string(quote_xml(self.firstname).encode(ExternalEncoding), input_name='firstname'), namespace_)) - if self.lastname is not None: - showIndent(outfile, level) - outfile.write('<%slastname>%s</%slastname>\n' % (namespace_, self.gds_format_string(quote_xml(self.lastname).encode(ExternalEncoding), input_name='lastname'), namespace_)) - if self.priority is not None: - showIndent(outfile, level) - outfile.write('<%spriority>%s</%spriority>\n' % (namespace_, self.gds_format_float(self.priority, input_name='priority'), namespace_)) - if self.info: - self.info.export(outfile, level, namespace_, name_='info', ) - for vehicle_ in self.get_vehicle(): - vehicle_.export(outfile, level, namespace_, name_='vehicle') + def get_extensiontype_(self): return self.extensiontype_ + def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_ def hasContent_(self): if ( self.firstname is not None or @@ -1771,13 +2930,83 @@ class agent(GeneratedsSuper): self.priority is not None or self.info is not None or self.vehicle - ): + ): return True else: return False - def exportLiteral(self, outfile, level, name_='agent'): + def export(self, outfile, level, namespace_='', name_='agentType', namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"', pretty_print=True): + imported_ns_def_ = GenerateDSNamespaceDefs_.get('agentType') + if imported_ns_def_ is not None: + namespacedef_ = imported_ns_def_ + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = set() + self.exportAttributes(outfile, level, already_processed, namespace_, name_='agentType') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='agentType', 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_='agentType'): + if self.extensiontype_ is not None and 'xsi:type' not in already_processed: + already_processed.add('xsi:type') + outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"') + outfile.write(' xsi:type="%s"' % self.extensiontype_) + pass + def exportChildren(self, outfile, level, namespace_='', name_='agentType', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.firstname is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<firstname>%s</firstname>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.firstname), input_name='firstname')), eol_)) + if self.lastname is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<lastname>%s</lastname>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.lastname), input_name='lastname')), eol_)) + if self.priority is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<priority>%s</priority>%s' % (self.gds_format_float(self.priority, input_name='priority'), eol_)) + if self.info is not None: + self.info.export(outfile, level, namespace_, name_='info', pretty_print=pretty_print) + for vehicle_ in self.vehicle: + vehicle_.export(outfile, level, namespace_, name_='vehicle', pretty_print=pretty_print) + def to_etree(self, parent_element=None, name_='agentType', mapping_=None): + if parent_element is None: + element = etree_.Element('{}' + name_) + else: + element = etree_.SubElement(parent_element, '{}' + name_) + if self.extensiontype_ is not None: + element.set('{http://www.w3.org/2001/XMLSchema-instance}type', self.extensiontype_) + if self.firstname is not None: + firstname_ = self.firstname + etree_.SubElement(element, '{}firstname').text = self.gds_format_string(firstname_) + if self.lastname is not None: + lastname_ = self.lastname + etree_.SubElement(element, '{}lastname').text = self.gds_format_string(lastname_) + if self.priority is not None: + priority_ = self.priority + etree_.SubElement(element, '{}priority').text = self.gds_format_float(priority_) + if self.info is not None: + info_ = self.info + info_.to_etree(element, name_='info', mapping_=mapping_) + for vehicle_ in self.vehicle: + vehicle_.to_etree(element, name_='vehicle', mapping_=mapping_) + if mapping_ is not None: + mapping_[self] = element + return element + def exportLiteral(self, outfile, level, name_='agentType'): level += 1 - self.exportLiteralAttributes(outfile, level, [], name_) + already_processed = set() + self.exportLiteralAttributes(outfile, level, already_processed, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, already_processed, name_): @@ -1785,17 +3014,17 @@ class agent(GeneratedsSuper): def exportLiteralChildren(self, outfile, level, name_): if self.firstname is not None: showIndent(outfile, level) - outfile.write('firstname=%s,\n' % quote_python(self.firstname).encode(ExternalEncoding)) + outfile.write('firstname=%s,\n' % self.gds_encode(quote_python(self.firstname))) if self.lastname is not None: showIndent(outfile, level) - outfile.write('lastname=%s,\n' % quote_python(self.lastname).encode(ExternalEncoding)) + outfile.write('lastname=%s,\n' % self.gds_encode(quote_python(self.lastname))) if self.priority is not None: showIndent(outfile, level) outfile.write('priority=%f,\n' % self.priority) if self.info is not None: showIndent(outfile, level) - outfile.write('info=model_.info(\n') - self.info.exportLiteral(outfile, level) + outfile.write('info=model_.infoType(\n') + self.info.exportLiteral(outfile, level, name_='info') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) @@ -1811,32 +3040,42 @@ class agent(GeneratedsSuper): showIndent(outfile, level) outfile.write('],\n') def build(self, node): - self.buildAttributes(node, node.attrib, []) + already_processed = set() + self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] - self.buildChildren(child, nodeName_) + self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - pass - def buildChildren(self, child_, nodeName_, from_subclass=False): + value = find_attr_value_('xsi:type', node) + if value is not None and 'xsi:type' not in already_processed: + already_processed.add('xsi:type') + self.extensiontype_ = value + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): if nodeName_ == 'firstname': firstname_ = child_.text + firstname_ = self.gds_validate_string(firstname_, node, 'firstname') self.firstname = firstname_ elif nodeName_ == 'lastname': lastname_ = child_.text + lastname_ = self.gds_validate_string(lastname_, node, 'lastname') self.lastname = lastname_ elif nodeName_ == 'priority': sval_ = child_.text try: fval_ = float(sval_) - except (TypeError, ValueError), exp: + except (TypeError, ValueError) as exp: raise_parse_error(child_, 'requires float or double: %s' % exp) + fval_ = self.gds_validate_float(fval_, node, 'priority') self.priority = fval_ - elif nodeName_ == 'info': - obj_ = info.factory() + elif nodeName_ == 'info': + obj_ = infoType.factory() obj_.build(child_) - self.set_info(obj_) - elif nodeName_ == 'vehicle': - type_name_ = child_.attrib.get('{http://www.w3.org/2001/XMLSchema-instance}type') + self.info = obj_ + obj_.original_tagname_ = 'info' + elif nodeName_ == 'vehicle': + type_name_ = child_.attrib.get( + '{http://www.w3.org/2001/XMLSchema-instance}type') if type_name_ is None: type_name_ = child_.attrib.get('type') if type_name_ is not None: @@ -1852,30 +3091,38 @@ class agent(GeneratedsSuper): raise NotImplementedError( 'Class not implemented for <vehicle> element') self.vehicle.append(obj_) -# end class agent + obj_.original_tagname_ = 'vehicle' +# end class agentType -class special_agent(GeneratedsSuper): +class special_agentType(agentType): """This is a good kind of agent for testing the generation of Python bindings for an XML schema.""" member_data_items_ = { - 'firstname': MemberSpec_('firstname', 'xs:string', 0), - 'lastname': MemberSpec_('lastname', 'xs:string', 0), - 'priority': MemberSpec_('priority', 'xs:float', 0), - 'info': MemberSpec_('info', 'info', 0), - } + 'firstname': MemberSpec_('firstname', 'xs:string', 0, 0, {u'type': u'xs:string', u'name': u'firstname'}, None), + 'lastname': MemberSpec_('lastname', 'xs:string', 0, 0, {u'type': u'xs:string', u'name': u'lastname'}, None), + 'priority': MemberSpec_('priority', 'xs:float', 0, 0, {u'type': u'xs:float', u'name': u'priority'}, None), + 'info': MemberSpec_('info', 'infoType', 0, 0, {u'type': u'infoType', u'name': u'info'}, None), + } subclass = None - superclass = None - def __init__(self, firstname=None, lastname=None, priority=None, info=None): + superclass = agentType + def __init__(self, firstname=None, lastname=None, priority=None, info=None, vehicle=None): + self.original_tagname_ = None + super(special_agentType, self).__init__(firstname, lastname, priority, info, vehicle, ) self.firstname = firstname self.lastname = lastname self.priority = priority self.info = info def factory(*args_, **kwargs_): - if special_agent.subclass: - return special_agent.subclass(*args_, **kwargs_) + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, special_agentType) + if subclass is not None: + return subclass(*args_, **kwargs_) + if special_agentType.subclass: + return special_agentType.subclass(*args_, **kwargs_) else: - return special_agent(*args_, **kwargs_) + return special_agentType(*args_, **kwargs_) factory = staticmethod(factory) def get_firstname(self): return self.firstname def set_firstname(self, firstname): self.firstname = firstname @@ -1889,111 +3136,323 @@ class special_agent(GeneratedsSuper): def get_info(self): return self.info def set_info(self, info): self.info = info infoProp = property(get_info, set_info) - def export(self, outfile, level, namespace_='', name_='special-agent', namespacedef_=''): - showIndent(outfile, level) + def hasContent_(self): + if ( + self.firstname is not None or + self.lastname is not None or + self.priority is not None or + self.info is not None or + super(special_agentType, self).hasContent_() + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='special-agentType', namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"', pretty_print=True): + imported_ns_def_ = GenerateDSNamespaceDefs_.get('special-agentType') + if imported_ns_def_ is not None: + namespacedef_ = imported_ns_def_ + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ + showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) - self.exportAttributes(outfile, level, [], namespace_, name_='special-agent') + already_processed = set() + self.exportAttributes(outfile, level, already_processed, namespace_, name_='special-agentType') if self.hasContent_(): - outfile.write('>\n') - self.exportChildren(outfile, level + 1, namespace_, name_) - showIndent(outfile, level) - outfile.write('</%s%s>\n' % (namespace_, name_)) + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='special-agentType', pretty_print=pretty_print) + showIndent(outfile, level, pretty_print) + outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: - outfile.write('/>\n') - def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='special-agent'): - pass - def exportChildren(self, outfile, level, namespace_='', name_='special-agent'): + outfile.write('/>%s' % (eol_, )) + def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='special-agentType'): + super(special_agentType, self).exportAttributes(outfile, level, already_processed, namespace_, name_='special-agentType') + def exportChildren(self, outfile, level, namespace_='', name_='special-agentType', fromsubclass_=False, pretty_print=True): + super(special_agentType, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.firstname is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<firstname>%s</firstname>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.firstname), input_name='firstname')), eol_)) + if self.lastname is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<lastname>%s</lastname>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.lastname), input_name='lastname')), eol_)) + if self.priority is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<priority>%s</priority>%s' % (self.gds_format_float(self.priority, input_name='priority'), eol_)) + if self.info is not None: + self.info.export(outfile, level, namespace_, name_='info', pretty_print=pretty_print) + def to_etree(self, parent_element=None, name_='special-agentType', mapping_=None): + element = super(special_agentType, self).to_etree(parent_element, name_, mapping_) + if self.firstname is not None: + firstname_ = self.firstname + etree_.SubElement(element, '{}firstname').text = self.gds_format_string(firstname_) + if self.lastname is not None: + lastname_ = self.lastname + etree_.SubElement(element, '{}lastname').text = self.gds_format_string(lastname_) + if self.priority is not None: + priority_ = self.priority + etree_.SubElement(element, '{}priority').text = self.gds_format_float(priority_) + if self.info is not None: + info_ = self.info + info_.to_etree(element, name_='info', mapping_=mapping_) + if mapping_ is not None: + mapping_[self] = element + return element + def exportLiteral(self, outfile, level, name_='special-agentType'): + level += 1 + already_processed = set() + self.exportLiteralAttributes(outfile, level, already_processed, name_) + if self.hasContent_(): + self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, already_processed, name_): + super(special_agentType, self).exportLiteralAttributes(outfile, level, already_processed, name_) + def exportLiteralChildren(self, outfile, level, name_): + super(special_agentType, self).exportLiteralChildren(outfile, level, name_) if self.firstname is not None: showIndent(outfile, level) - outfile.write('<%sfirstname>%s</%sfirstname>\n' % (namespace_, self.gds_format_string(quote_xml(self.firstname).encode(ExternalEncoding), input_name='firstname'), namespace_)) + outfile.write('firstname=%s,\n' % self.gds_encode(quote_python(self.firstname))) if self.lastname is not None: showIndent(outfile, level) - outfile.write('<%slastname>%s</%slastname>\n' % (namespace_, self.gds_format_string(quote_xml(self.lastname).encode(ExternalEncoding), input_name='lastname'), namespace_)) + outfile.write('lastname=%s,\n' % self.gds_encode(quote_python(self.lastname))) if self.priority is not None: showIndent(outfile, level) - outfile.write('<%spriority>%s</%spriority>\n' % (namespace_, self.gds_format_float(self.priority, input_name='priority'), namespace_)) - if self.info: - self.info.export(outfile, level, namespace_, name_='info', ) + outfile.write('priority=%f,\n' % self.priority) + if self.info is not None: + showIndent(outfile, level) + outfile.write('info=model_.infoType(\n') + self.info.exportLiteral(outfile, level, name_='info') + showIndent(outfile, level) + outfile.write('),\n') + def build(self, node): + already_processed = set() + self.buildAttributes(node, node.attrib, already_processed) + for child in node: + nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] + self.buildChildren(child, node, nodeName_) + return self + def buildAttributes(self, node, attrs, already_processed): + super(special_agentType, self).buildAttributes(node, attrs, already_processed) + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + if nodeName_ == 'firstname': + firstname_ = child_.text + firstname_ = self.gds_validate_string(firstname_, node, 'firstname') + self.firstname = firstname_ + elif nodeName_ == 'lastname': + lastname_ = child_.text + lastname_ = self.gds_validate_string(lastname_, node, 'lastname') + self.lastname = lastname_ + elif nodeName_ == 'priority': + sval_ = child_.text + try: + fval_ = float(sval_) + except (TypeError, ValueError) as exp: + raise_parse_error(child_, 'requires float or double: %s' % exp) + fval_ = self.gds_validate_float(fval_, node, 'priority') + self.priority = fval_ + elif nodeName_ == 'info': + obj_ = infoType.factory() + obj_.build(child_) + self.info = obj_ + obj_.original_tagname_ = 'info' + super(special_agentType, self).buildChildren(child_, node, nodeName_, True) +# end class special_agentType + + +class weird_agentType(agentType): + """This is a good kind of agent for testing the generation of Python + bindings for an XML schema.""" + member_data_items_ = { + 'firstname': MemberSpec_('firstname', 'xs:string', 0, 0, {u'type': u'xs:string', u'name': u'firstname'}, None), + 'lastname': MemberSpec_('lastname', 'xs:string', 0, 0, {u'type': u'xs:string', u'name': u'lastname'}, None), + 'priority': MemberSpec_('priority', 'xs:float', 0, 0, {u'type': u'xs:float', u'name': u'priority'}, None), + 'info': MemberSpec_('info', 'infoType', 0, 0, {u'type': u'infoType', u'name': u'info'}, None), + } + subclass = None + superclass = agentType + def __init__(self, firstname=None, lastname=None, priority=None, info=None, vehicle=None): + self.original_tagname_ = None + super(weird_agentType, self).__init__(firstname, lastname, priority, info, vehicle, ) + self.firstname = firstname + self.lastname = lastname + self.priority = priority + self.info = info + def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, weird_agentType) + if subclass is not None: + return subclass(*args_, **kwargs_) + if weird_agentType.subclass: + return weird_agentType.subclass(*args_, **kwargs_) + else: + return weird_agentType(*args_, **kwargs_) + factory = staticmethod(factory) + def get_firstname(self): return self.firstname + def set_firstname(self, firstname): self.firstname = firstname + firstnameProp = property(get_firstname, set_firstname) + def get_lastname(self): return self.lastname + def set_lastname(self, lastname): self.lastname = lastname + lastnameProp = property(get_lastname, set_lastname) + def get_priority(self): return self.priority + def set_priority(self, priority): self.priority = priority + priorityProp = property(get_priority, set_priority) + def get_info(self): return self.info + def set_info(self, info): self.info = info + infoProp = property(get_info, set_info) def hasContent_(self): if ( self.firstname is not None or self.lastname is not None or self.priority is not None or - self.info is not None - ): + self.info is not None or + super(weird_agentType, self).hasContent_() + ): return True else: return False - def exportLiteral(self, outfile, level, name_='special-agent'): + def export(self, outfile, level, namespace_='', name_='weird-agentType', namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"', pretty_print=True): + imported_ns_def_ = GenerateDSNamespaceDefs_.get('weird-agentType') + if imported_ns_def_ is not None: + namespacedef_ = imported_ns_def_ + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = set() + self.exportAttributes(outfile, level, already_processed, namespace_, name_='weird-agentType') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='weird-agentType', 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_='weird-agentType'): + super(weird_agentType, self).exportAttributes(outfile, level, already_processed, namespace_, name_='weird-agentType') + def exportChildren(self, outfile, level, namespace_='', name_='weird-agentType', fromsubclass_=False, pretty_print=True): + super(weird_agentType, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.firstname is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<firstname>%s</firstname>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.firstname), input_name='firstname')), eol_)) + if self.lastname is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<lastname>%s</lastname>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.lastname), input_name='lastname')), eol_)) + if self.priority is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<priority>%s</priority>%s' % (self.gds_format_float(self.priority, input_name='priority'), eol_)) + if self.info is not None: + self.info.export(outfile, level, namespace_, name_='info', pretty_print=pretty_print) + def to_etree(self, parent_element=None, name_='weird-agentType', mapping_=None): + element = super(weird_agentType, self).to_etree(parent_element, name_, mapping_) + if self.firstname is not None: + firstname_ = self.firstname + etree_.SubElement(element, '{}firstname').text = self.gds_format_string(firstname_) + if self.lastname is not None: + lastname_ = self.lastname + etree_.SubElement(element, '{}lastname').text = self.gds_format_string(lastname_) + if self.priority is not None: + priority_ = self.priority + etree_.SubElement(element, '{}priority').text = self.gds_format_float(priority_) + if self.info is not None: + info_ = self.info + info_.to_etree(element, name_='info', mapping_=mapping_) + if mapping_ is not None: + mapping_[self] = element + return element + def exportLiteral(self, outfile, level, name_='weird-agentType'): level += 1 - self.exportLiteralAttributes(outfile, level, [], name_) + already_processed = set() + self.exportLiteralAttributes(outfile, level, already_processed, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, already_processed, name_): - pass + super(weird_agentType, self).exportLiteralAttributes(outfile, level, already_processed, name_) def exportLiteralChildren(self, outfile, level, name_): + super(weird_agentType, self).exportLiteralChildren(outfile, level, name_) if self.firstname is not None: showIndent(outfile, level) - outfile.write('firstname=%s,\n' % quote_python(self.firstname).encode(ExternalEncoding)) + outfile.write('firstname=%s,\n' % self.gds_encode(quote_python(self.firstname))) if self.lastname is not None: showIndent(outfile, level) - outfile.write('lastname=%s,\n' % quote_python(self.lastname).encode(ExternalEncoding)) + outfile.write('lastname=%s,\n' % self.gds_encode(quote_python(self.lastname))) if self.priority is not None: showIndent(outfile, level) outfile.write('priority=%f,\n' % self.priority) if self.info is not None: showIndent(outfile, level) - outfile.write('info=model_.info(\n') - self.info.exportLiteral(outfile, level) + outfile.write('info=model_.infoType(\n') + self.info.exportLiteral(outfile, level, name_='info') showIndent(outfile, level) outfile.write('),\n') def build(self, node): - self.buildAttributes(node, node.attrib, []) + already_processed = set() + self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] - self.buildChildren(child, nodeName_) + self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - pass - def buildChildren(self, child_, nodeName_, from_subclass=False): + super(weird_agentType, self).buildAttributes(node, attrs, already_processed) + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): if nodeName_ == 'firstname': firstname_ = child_.text + firstname_ = self.gds_validate_string(firstname_, node, 'firstname') self.firstname = firstname_ elif nodeName_ == 'lastname': lastname_ = child_.text + lastname_ = self.gds_validate_string(lastname_, node, 'lastname') self.lastname = lastname_ elif nodeName_ == 'priority': sval_ = child_.text try: fval_ = float(sval_) - except (TypeError, ValueError), exp: + except (TypeError, ValueError) as exp: raise_parse_error(child_, 'requires float or double: %s' % exp) + fval_ = self.gds_validate_float(fval_, node, 'priority') self.priority = fval_ - elif nodeName_ == 'info': - obj_ = info.factory() + elif nodeName_ == 'info': + obj_ = infoType.factory() obj_.build(child_) - self.set_info(obj_) -# end class special_agent + self.info = obj_ + obj_.original_tagname_ = 'info' + super(weird_agentType, self).buildChildren(child_, node, nodeName_, True) +# end class weird_agentType -class booster(GeneratedsSuper): +class boosterType(GeneratedsSuper): member_data_items_ = { - 'member-id': MemberSpec_('member-id', 'xs:string', 0), - 'firstname': MemberSpec_('firstname', 'xs:string', 0), - 'lastname': MemberSpec_('lastname', 'xs:string', 0), - 'other_name': MemberSpec_('other_name', 'xs:float', 0), - 'classxx': MemberSpec_('classxx', 'xs:float', 0), - 'other_value': MemberSpec_('other_value', 'xs:float', 1), - 'type_': MemberSpec_('type_', 'xs:float', 1), - 'client_handler': MemberSpec_('client_handler', 'client-handler', 1), - } + 'member-id': MemberSpec_('member-id', 'xs:string', 0, 1, {'use': 'optional'}), + 'firstname': MemberSpec_('firstname', 'xs:string', 0, 0, {u'type': u'xs:string', u'name': u'firstname'}, None), + 'lastname': MemberSpec_('lastname', 'xs:string', 0, 0, {u'type': u'xs:string', u'name': u'lastname'}, None), + 'other_name': MemberSpec_('other_name', 'xs:float', 0, 0, {u'type': u'xs:float', u'name': u'other-name'}, None), + 'class_': MemberSpec_('class_', 'xs:float', 0, 0, {u'type': u'xs:float', u'name': u'class'}, None), + 'other_value': MemberSpec_('other_value', 'xs:float', 1, 0, {u'maxOccurs': u'unbounded', u'type': u'xs:float', u'name': u'other-value'}, None), + 'type_': MemberSpec_('type_', 'xs:float', 1, 0, {u'maxOccurs': u'unbounded', u'type': u'xs:float', u'name': u'type'}, None), + 'client_handler': MemberSpec_('client_handler', 'client-handlerType', 1, 0, {u'maxOccurs': u'unbounded', u'type': u'client-handlerType', u'name': u'client-handler'}, None), + } subclass = None superclass = None - def __init__(self, member_id=None, firstname=None, lastname=None, other_name=None, classxx=None, other_value=None, type_=None, client_handler=None): + def __init__(self, member_id=None, firstname=None, lastname=None, other_name=None, class_=None, other_value=None, type_=None, client_handler=None): + self.original_tagname_ = None self.member_id = _cast(None, member_id) self.firstname = firstname self.lastname = lastname self.other_name = other_name - self.classxx = classxx + self.class_ = class_ if other_value is None: self.other_value = [] else: @@ -2007,10 +3466,15 @@ class booster(GeneratedsSuper): else: self.client_handler = client_handler def factory(*args_, **kwargs_): - if booster.subclass: - return booster.subclass(*args_, **kwargs_) + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, boosterType) + if subclass is not None: + return subclass(*args_, **kwargs_) + if boosterType.subclass: + return boosterType.subclass(*args_, **kwargs_) else: - return booster(*args_, **kwargs_) + return boosterType(*args_, **kwargs_) factory = staticmethod(factory) def get_firstname(self): return self.firstname def set_firstname(self, firstname): self.firstname = firstname @@ -2021,99 +3485,145 @@ class booster(GeneratedsSuper): def get_other_name(self): return self.other_name def set_other_name(self, other_name): self.other_name = other_name other_nameProp = property(get_other_name, set_other_name) - def get_class(self): return self.classxx - def set_class(self, classxx): self.classxx = classxx + def get_class(self): return self.class_ + def set_class(self, class_): self.class_ = class_ classProp = property(get_class, set_class) def get_other_value(self): return self.other_value def set_other_value(self, other_value): self.other_value = other_value def add_other_value(self, value): self.other_value.append(value) - def insert_other_value(self, index, value): self.other_value[index] = value + def insert_other_value_at(self, index, value): self.other_value.insert(index, value) + def replace_other_value_at(self, index, value): self.other_value[index] = value other_valueProp = property(get_other_value, set_other_value) def get_type(self): return self.type_ def set_type(self, type_): self.type_ = type_ def add_type(self, value): self.type_.append(value) - def insert_type(self, index, value): self.type_[index] = value + def insert_type_at(self, index, value): self.type_.insert(index, value) + def replace_type_at(self, index, value): self.type_[index] = value typeProp = property(get_type, set_type) def get_client_handler(self): return self.client_handler def set_client_handler(self, client_handler): self.client_handler = client_handler def add_client_handler(self, value): self.client_handler.append(value) - def insert_client_handler(self, index, value): self.client_handler[index] = value + def insert_client_handler_at(self, index, value): self.client_handler.insert(index, value) + def replace_client_handler_at(self, index, value): self.client_handler[index] = value client_handlerProp = property(get_client_handler, set_client_handler) def get_member_id(self): return self.member_id def set_member_id(self, member_id): self.member_id = member_id member_idProp = property(get_member_id, set_member_id) - def export(self, outfile, level, namespace_='', name_='booster', namespacedef_=''): - showIndent(outfile, level) - outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) - self.exportAttributes(outfile, level, [], namespace_, name_='booster') - if self.hasContent_(): - outfile.write('>\n') - self.exportChildren(outfile, level + 1, namespace_, name_) - showIndent(outfile, level) - outfile.write('</%s%s>\n' % (namespace_, name_)) - else: - outfile.write('/>\n') - def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='booster'): - if self.member_id is not None and 'member_id' not in already_processed: - already_processed.append('member_id') - outfile.write(' member-id=%s' % (self.gds_format_string(quote_attrib(self.member_id).encode(ExternalEncoding), input_name='member-id'), )) - def exportChildren(self, outfile, level, namespace_='', name_='booster'): - if self.firstname is not None: - showIndent(outfile, level) - outfile.write('<%sfirstname>%s</%sfirstname>\n' % (namespace_, self.gds_format_string(quote_xml(self.firstname).encode(ExternalEncoding), input_name='firstname'), namespace_)) - if self.lastname is not None: - showIndent(outfile, level) - outfile.write('<%slastname>%s</%slastname>\n' % (namespace_, self.gds_format_string(quote_xml(self.lastname).encode(ExternalEncoding), input_name='lastname'), namespace_)) - if self.other_name is not None: - showIndent(outfile, level) - outfile.write('<%sother-name>%s</%sother-name>\n' % (namespace_, self.gds_format_float(self.other_name, input_name='other-name'), namespace_)) - if self.classxx is not None: - showIndent(outfile, level) - outfile.write('<%sclass>%s</%sclass>\n' % (namespace_, self.gds_format_float(self.classxx, input_name='class'), namespace_)) - for other_value_ in self.other_value: - showIndent(outfile, level) - outfile.write('<%sother-value>%s</%sother-value>\n' % (namespace_, self.gds_format_float(other_value_, input_name='other-value'), namespace_)) - for type_ in self.type_: - showIndent(outfile, level) - outfile.write('<%stype>%s</%stype>\n' % (namespace_, self.gds_format_float(type_, input_name='type'), namespace_)) - for client_handler_ in self.client_handler: - client_handler_.export(outfile, level, namespace_, name_='client-handler') def hasContent_(self): if ( self.firstname is not None or self.lastname is not None or self.other_name is not None or - self.classxx is not None or + self.class_ is not None or self.other_value or self.type_ or self.client_handler - ): + ): return True else: return False - def exportLiteral(self, outfile, level, name_='booster'): + def export(self, outfile, level, namespace_='', name_='boosterType', namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"', pretty_print=True): + imported_ns_def_ = GenerateDSNamespaceDefs_.get('boosterType') + if imported_ns_def_ is not None: + namespacedef_ = imported_ns_def_ + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = set() + self.exportAttributes(outfile, level, already_processed, namespace_, name_='boosterType') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='boosterType', 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_='boosterType'): + if self.member_id is not None and 'member_id' not in already_processed: + already_processed.add('member_id') + outfile.write(' member-id=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.member_id), input_name='member-id')), )) + def exportChildren(self, outfile, level, namespace_='', name_='boosterType', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.firstname is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<firstname>%s</firstname>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.firstname), input_name='firstname')), eol_)) + if self.lastname is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<lastname>%s</lastname>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.lastname), input_name='lastname')), eol_)) + if self.other_name is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<other-name>%s</other-name>%s' % (self.gds_format_float(self.other_name, input_name='other-name'), eol_)) + if self.class_ is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<class>%s</class>%s' % (self.gds_format_float(self.class_, input_name='class'), eol_)) + for other_value_ in self.other_value: + showIndent(outfile, level, pretty_print) + outfile.write('<other-value>%s</other-value>%s' % (self.gds_format_float(other_value_, input_name='other-value'), eol_)) + for type_ in self.type_: + showIndent(outfile, level, pretty_print) + outfile.write('<type>%s</type>%s' % (self.gds_format_float(type_, input_name='type'), eol_)) + for client_handler_ in self.client_handler: + client_handler_.export(outfile, level, namespace_, name_='client-handler', pretty_print=pretty_print) + def to_etree(self, parent_element=None, name_='boosterType', mapping_=None): + if parent_element is None: + element = etree_.Element('{}' + name_) + else: + element = etree_.SubElement(parent_element, '{}' + name_) + if self.member_id is not None: + element.set('member-id', self.gds_format_string(self.member_id)) + if self.firstname is not None: + firstname_ = self.firstname + etree_.SubElement(element, '{}firstname').text = self.gds_format_string(firstname_) + if self.lastname is not None: + lastname_ = self.lastname + etree_.SubElement(element, '{}lastname').text = self.gds_format_string(lastname_) + if self.other_name is not None: + other_name_ = self.other_name + etree_.SubElement(element, '{}other-name').text = self.gds_format_float(other_name_) + if self.class_ is not None: + class__ = self.class_ + etree_.SubElement(element, '{}class').text = self.gds_format_float(class__) + for other_value_ in self.other_value: + etree_.SubElement(element, '{}other-value').text = self.gds_format_float(other_value_) + for type__ in self.type_: + etree_.SubElement(element, '{}type').text = self.gds_format_float(type__) + for client_handler_ in self.client_handler: + client_handler_.to_etree(element, name_='client-handler', mapping_=mapping_) + if mapping_ is not None: + mapping_[self] = element + return element + def exportLiteral(self, outfile, level, name_='boosterType'): level += 1 - self.exportLiteralAttributes(outfile, level, [], name_) + already_processed = set() + self.exportLiteralAttributes(outfile, level, already_processed, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, already_processed, name_): if self.member_id is not None and 'member_id' not in already_processed: - already_processed.append('member_id') + already_processed.add('member_id') showIndent(outfile, level) - outfile.write('member_id = "%s",\n' % (self.member_id,)) + outfile.write('member_id="%s",\n' % (self.member_id,)) def exportLiteralChildren(self, outfile, level, name_): if self.firstname is not None: showIndent(outfile, level) - outfile.write('firstname=%s,\n' % quote_python(self.firstname).encode(ExternalEncoding)) + outfile.write('firstname=%s,\n' % self.gds_encode(quote_python(self.firstname))) if self.lastname is not None: showIndent(outfile, level) - outfile.write('lastname=%s,\n' % quote_python(self.lastname).encode(ExternalEncoding)) + outfile.write('lastname=%s,\n' % self.gds_encode(quote_python(self.lastname))) if self.other_name is not None: showIndent(outfile, level) outfile.write('other_name=%f,\n' % self.other_name) - if self.classxx is not None: + if self.class_ is not None: showIndent(outfile, level) - outfile.write('classxx=%f,\n' % self.classxx) + outfile.write('class_=%f,\n' % self.class_) showIndent(outfile, level) outfile.write('other_value=[\n') level += 1 @@ -2137,307 +3647,297 @@ class booster(GeneratedsSuper): level += 1 for client_handler_ in self.client_handler: showIndent(outfile, level) - outfile.write('model_.client_handler(\n') - client_handler_.exportLiteral(outfile, level, name_='client-handler') + outfile.write('model_.client_handlerType(\n') + client_handler_.exportLiteral(outfile, level, name_='client-handlerType') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node): - self.buildAttributes(node, node.attrib, []) + already_processed = set() + self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] - self.buildChildren(child, nodeName_) + self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = attrs.get('member-id') + value = find_attr_value_('member-id', node) if value is not None and 'member-id' not in already_processed: - already_processed.append('member-id') + already_processed.add('member-id') self.member_id = value - def buildChildren(self, child_, nodeName_, from_subclass=False): + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): if nodeName_ == 'firstname': firstname_ = child_.text + firstname_ = self.gds_validate_string(firstname_, node, 'firstname') self.firstname = firstname_ elif nodeName_ == 'lastname': lastname_ = child_.text + lastname_ = self.gds_validate_string(lastname_, node, 'lastname') self.lastname = lastname_ elif nodeName_ == 'other-name': sval_ = child_.text try: fval_ = float(sval_) - except (TypeError, ValueError), exp: + except (TypeError, ValueError) as exp: raise_parse_error(child_, 'requires float or double: %s' % exp) + fval_ = self.gds_validate_float(fval_, node, 'other_name') self.other_name = fval_ elif nodeName_ == 'class': sval_ = child_.text try: fval_ = float(sval_) - except (TypeError, ValueError), exp: + except (TypeError, ValueError) as exp: raise_parse_error(child_, 'requires float or double: %s' % exp) - self.classxx = fval_ + fval_ = self.gds_validate_float(fval_, node, 'class') + self.class_ = fval_ elif nodeName_ == 'other-value': sval_ = child_.text try: fval_ = float(sval_) - except (TypeError, ValueError), exp: + except (TypeError, ValueError) as exp: raise_parse_error(child_, 'requires float or double: %s' % exp) + fval_ = self.gds_validate_float(fval_, node, 'other_value') self.other_value.append(fval_) elif nodeName_ == 'type': sval_ = child_.text try: fval_ = float(sval_) - except (TypeError, ValueError), exp: + except (TypeError, ValueError) as exp: raise_parse_error(child_, 'requires float or double: %s' % exp) + fval_ = self.gds_validate_float(fval_, node, 'type') self.type_.append(fval_) - elif nodeName_ == 'client-handler': - obj_ = client_handler.factory() + elif nodeName_ == 'client-handler': + obj_ = client_handlerType.factory() obj_.build(child_) self.client_handler.append(obj_) -# end class booster + obj_.original_tagname_ = 'client-handler' +# end class boosterType -class client_handler(GeneratedsSuper): +class infoType(GeneratedsSuper): member_data_items_ = { - 'fullname': MemberSpec_('fullname', 'xs:string', 0), - 'refid': MemberSpec_('refid', 'xs:integer', 0), - } + 'name': MemberSpec_('name', 'xs:string', 0, 1, {'use': 'optional'}), + 'type_': MemberSpec_('type_', 'xs:integer', 0, 1, {'use': 'optional'}), + 'rating': MemberSpec_('rating', 'xs:float', 0, 1, {'use': 'optional'}), + } subclass = None superclass = None - def __init__(self, fullname=None, refid=None): - self.fullname = fullname - self.refid = refid + def __init__(self, name=None, type_=None, rating=None): + self.original_tagname_ = None + self.name = _cast(None, name) + self.type_ = _cast(int, type_) + self.rating = _cast(float, rating) def factory(*args_, **kwargs_): - if client_handler.subclass: - return client_handler.subclass(*args_, **kwargs_) + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, infoType) + if subclass is not None: + return subclass(*args_, **kwargs_) + if infoType.subclass: + return infoType.subclass(*args_, **kwargs_) else: - return client_handler(*args_, **kwargs_) + return infoType(*args_, **kwargs_) factory = staticmethod(factory) - def get_fullname(self): return self.fullname - def set_fullname(self, fullname): self.fullname = fullname - fullnameProp = property(get_fullname, set_fullname) - def get_refid(self): return self.refid - def set_refid(self, refid): self.refid = refid - refidProp = property(get_refid, set_refid) - def export(self, outfile, level, namespace_='', name_='client-handler', namespacedef_=''): - showIndent(outfile, level) - outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) - self.exportAttributes(outfile, level, [], namespace_, name_='client-handler') - if self.hasContent_(): - outfile.write('>\n') - self.exportChildren(outfile, level + 1, namespace_, name_) - showIndent(outfile, level) - outfile.write('</%s%s>\n' % (namespace_, name_)) - else: - outfile.write('/>\n') - def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='client-handler'): - pass - def exportChildren(self, outfile, level, namespace_='', name_='client-handler'): - if self.fullname is not None: - showIndent(outfile, level) - outfile.write('<%sfullname>%s</%sfullname>\n' % (namespace_, self.gds_format_string(quote_xml(self.fullname).encode(ExternalEncoding), input_name='fullname'), namespace_)) - if self.refid is not None: - showIndent(outfile, level) - outfile.write('<%srefid>%s</%srefid>\n' % (namespace_, self.gds_format_integer(self.refid, input_name='refid'), namespace_)) + def get_name(self): return self.name + def set_name(self, name): self.name = name + nameProp = property(get_name, set_name) + def get_type(self): return self.type_ + def set_type(self, type_): self.type_ = type_ + typeProp = property(get_type, set_type) + def get_rating(self): return self.rating + def set_rating(self, rating): self.rating = rating + ratingProp = property(get_rating, set_rating) def hasContent_(self): if ( - self.fullname is not None or - self.refid is not None - ): + + ): return True else: return False - def exportLiteral(self, outfile, level, name_='client-handler'): - 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.fullname is not None: - showIndent(outfile, level) - outfile.write('fullname=%s,\n' % quote_python(self.fullname).encode(ExternalEncoding)) - if self.refid is not None: - showIndent(outfile, level) - outfile.write('refid=%d,\n' % self.refid) - def build(self, node): - self.buildAttributes(node, node.attrib, []) - for child in node: - nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] - self.buildChildren(child, nodeName_) - def buildAttributes(self, node, attrs, already_processed): - pass - def buildChildren(self, child_, nodeName_, from_subclass=False): - if nodeName_ == 'fullname': - fullname_ = child_.text - self.fullname = fullname_ - elif nodeName_ == 'refid': - sval_ = child_.text - try: - ival_ = int(sval_) - except (TypeError, ValueError), exp: - raise_parse_error(child_, 'requires integer: %s' % exp) - self.refid = ival_ -# end class client_handler - - -class info(GeneratedsSuper): - member_data_items_ = { - 'rating': MemberSpec_('rating', 'xs:float', 0), - 'type': MemberSpec_('type', 'xs:integer', 0), - 'name': MemberSpec_('name', 'xs:string', 0), - 'valueOf_': MemberSpec_('valueOf_', [], 0), - } - subclass = None - superclass = None - def __init__(self, rating=None, type_=None, name=None, valueOf_=None): - self.rating = _cast(float, rating) - self.type_ = _cast(int, type_) - self.name = _cast(None, name) - self.valueOf_ = valueOf_ - def factory(*args_, **kwargs_): - if info.subclass: - return info.subclass(*args_, **kwargs_) + def export(self, outfile, level, namespace_='', name_='infoType', namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"', pretty_print=True): + imported_ns_def_ = GenerateDSNamespaceDefs_.get('infoType') + if imported_ns_def_ is not None: + namespacedef_ = imported_ns_def_ + if pretty_print: + eol_ = '\n' else: - return info(*args_, **kwargs_) - factory = staticmethod(factory) - def get_rating(self): return self.rating - def set_rating(self, rating): self.rating = rating - ratingProp = property(get_rating, set_rating) - def get_type(self): return self.type_ - def set_type(self, type_): self.type_ = type_ - typeProp = property(get_type, set_type) - def get_name(self): return self.name - def set_name(self, name): self.name = name - nameProp = property(get_name, set_name) - def get_valueOf_(self): return self.valueOf_ - def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_ - def export(self, outfile, level, namespace_='', name_='info', namespacedef_=''): - showIndent(outfile, level) + eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ + showIndent(outfile, level, pretty_print) outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) - self.exportAttributes(outfile, level, [], namespace_, name_='info') + already_processed = set() + self.exportAttributes(outfile, level, already_processed, namespace_, name_='infoType') if self.hasContent_(): - outfile.write('>') - outfile.write(self.valueOf_) - self.exportChildren(outfile, level + 1, namespace_, name_) - outfile.write('</%s%s>\n' % (namespace_, name_)) + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='infoType', pretty_print=pretty_print) + outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) else: - outfile.write('/>\n') - def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='info'): - if self.rating is not None and 'rating' not in already_processed: - already_processed.append('rating') - outfile.write(' rating="%s"' % self.gds_format_float(self.rating, input_name='rating')) + outfile.write('/>%s' % (eol_, )) + def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='infoType'): + if self.name is not None and 'name' not in already_processed: + already_processed.add('name') + outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), )) if self.type_ is not None and 'type_' not in already_processed: - already_processed.append('type_') + already_processed.add('type_') outfile.write(' type="%s"' % self.gds_format_integer(self.type_, input_name='type')) - if self.name is not None and 'name' not in already_processed: - already_processed.append('name') - outfile.write(' name=%s' % (self.gds_format_string(quote_attrib(self.name).encode(ExternalEncoding), input_name='name'), )) - def exportChildren(self, outfile, level, namespace_='', name_='info'): + if self.rating is not None and 'rating' not in already_processed: + already_processed.add('rating') + outfile.write(' rating="%s"' % self.gds_format_float(self.rating, input_name='rating')) + def exportChildren(self, outfile, level, namespace_='', name_='infoType', fromsubclass_=False, pretty_print=True): pass - def hasContent_(self): - if ( - self.valueOf_ - ): - return True + def to_etree(self, parent_element=None, name_='infoType', mapping_=None): + if parent_element is None: + element = etree_.Element('{}' + name_) else: - return False - def exportLiteral(self, outfile, level, name_='info'): + element = etree_.SubElement(parent_element, '{}' + name_) + if self.name is not None: + element.set('name', self.gds_format_string(self.name)) + if self.type_ is not None: + element.set('type', self.gds_format_integer(self.type_)) + if self.rating is not None: + element.set('rating', self.gds_format_float(self.rating)) + if mapping_ is not None: + mapping_[self] = element + return element + def exportLiteral(self, outfile, level, name_='infoType'): level += 1 - self.exportLiteralAttributes(outfile, level, [], name_) + already_processed = set() + self.exportLiteralAttributes(outfile, level, already_processed, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) - showIndent(outfile, level) - outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,)) def exportLiteralAttributes(self, outfile, level, already_processed, name_): - if self.rating is not None and 'rating' not in already_processed: - already_processed.append('rating') + if self.name is not None and 'name' not in already_processed: + already_processed.add('name') showIndent(outfile, level) - outfile.write('rating = %f,\n' % (self.rating,)) + outfile.write('name="%s",\n' % (self.name,)) if self.type_ is not None and 'type_' not in already_processed: - already_processed.append('type_') + already_processed.add('type_') showIndent(outfile, level) - outfile.write('type_ = %d,\n' % (self.type_,)) - if self.name is not None and 'name' not in already_processed: - already_processed.append('name') + outfile.write('type_=%d,\n' % (self.type_,)) + if self.rating is not None and 'rating' not in already_processed: + already_processed.add('rating') showIndent(outfile, level) - outfile.write('name = "%s",\n' % (self.name,)) + outfile.write('rating=%f,\n' % (self.rating,)) def exportLiteralChildren(self, outfile, level, name_): pass def build(self, node): - self.buildAttributes(node, node.attrib, []) - self.valueOf_ = get_all_text_(node) + already_processed = set() + self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] - self.buildChildren(child, nodeName_) + self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - value = attrs.get('rating') - if value is not None and 'rating' not in already_processed: - already_processed.append('rating') - try: - self.rating = float(value) - except ValueError, exp: - raise ValueError('Bad float/double attribute (rating): %s' % exp) - value = attrs.get('type') + value = find_attr_value_('name', node) + if value is not None and 'name' not in already_processed: + already_processed.add('name') + self.name = value + value = find_attr_value_('type', node) if value is not None and 'type' not in already_processed: - already_processed.append('type') + already_processed.add('type') try: self.type_ = int(value) - except ValueError, exp: + except ValueError as exp: raise_parse_error(node, 'Bad integer attribute: %s' % exp) - value = attrs.get('name') - if value is not None and 'name' not in already_processed: - already_processed.append('name') - self.name = value - def buildChildren(self, child_, nodeName_, from_subclass=False): + value = find_attr_value_('rating', node) + if value is not None and 'rating' not in already_processed: + already_processed.add('rating') + try: + self.rating = float(value) + except ValueError as exp: + raise ValueError('Bad float/double attribute (rating): %s' % exp) + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): pass -# end class info +# end class infoType -class vehicle(GeneratedsSuper): +class vehicleType(GeneratedsSuper): member_data_items_ = { - 'wheelcount': MemberSpec_('wheelcount', 'xs:integer', 0), - } + 'wheelcount': MemberSpec_('wheelcount', 'xs:integer', 0, 0, {u'type': u'xs:integer', u'name': u'wheelcount'}, None), + } subclass = None superclass = None - def __init__(self, wheelcount=None): + def __init__(self, wheelcount=None, extensiontype_=None): + self.original_tagname_ = None self.wheelcount = wheelcount + self.extensiontype_ = extensiontype_ def factory(*args_, **kwargs_): - if vehicle.subclass: - return vehicle.subclass(*args_, **kwargs_) + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, vehicleType) + if subclass is not None: + return subclass(*args_, **kwargs_) + if vehicleType.subclass: + return vehicleType.subclass(*args_, **kwargs_) else: - return vehicle(*args_, **kwargs_) + return vehicleType(*args_, **kwargs_) factory = staticmethod(factory) def get_wheelcount(self): return self.wheelcount def set_wheelcount(self, wheelcount): self.wheelcount = wheelcount wheelcountProp = property(get_wheelcount, set_wheelcount) - def export(self, outfile, level, namespace_='', name_='vehicle', namespacedef_=''): - showIndent(outfile, level) - outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) - self.exportAttributes(outfile, level, [], namespace_, name_='vehicle') - if self.hasContent_(): - outfile.write('>\n') - self.exportChildren(outfile, level + 1, namespace_, name_) - showIndent(outfile, level) - outfile.write('</%s%s>\n' % (namespace_, name_)) - else: - outfile.write('/>\n') - def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='vehicle'): - pass - def exportChildren(self, outfile, level, namespace_='', name_='vehicle'): - if self.wheelcount is not None: - showIndent(outfile, level) - outfile.write('<%swheelcount>%s</%swheelcount>\n' % (namespace_, self.gds_format_integer(self.wheelcount, input_name='wheelcount'), namespace_)) + def get_extensiontype_(self): return self.extensiontype_ + def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_ def hasContent_(self): if ( self.wheelcount is not None - ): + ): return True else: return False - def exportLiteral(self, outfile, level, name_='vehicle'): + def export(self, outfile, level, namespace_='', name_='vehicleType', namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"', pretty_print=True): + imported_ns_def_ = GenerateDSNamespaceDefs_.get('vehicleType') + if imported_ns_def_ is not None: + namespacedef_ = imported_ns_def_ + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = set() + self.exportAttributes(outfile, level, already_processed, namespace_, name_='vehicleType') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='vehicleType', 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_='vehicleType'): + if self.extensiontype_ is not None and 'xsi:type' not in already_processed: + already_processed.add('xsi:type') + outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"') + outfile.write(' xsi:type="%s"' % self.extensiontype_) + pass + def exportChildren(self, outfile, level, namespace_='', name_='vehicleType', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.wheelcount is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<wheelcount>%s</wheelcount>%s' % (self.gds_format_integer(self.wheelcount, input_name='wheelcount'), eol_)) + def to_etree(self, parent_element=None, name_='vehicleType', mapping_=None): + if parent_element is None: + element = etree_.Element('{}' + name_) + else: + element = etree_.SubElement(parent_element, '{}' + name_) + if self.extensiontype_ is not None: + element.set('{http://www.w3.org/2001/XMLSchema-instance}type', self.extensiontype_) + if self.wheelcount is not None: + wheelcount_ = self.wheelcount + etree_.SubElement(element, '{}wheelcount').text = self.gds_format_integer(wheelcount_) + if mapping_ is not None: + mapping_[self] = element + return element + def exportLiteral(self, outfile, level, name_='vehicleType'): level += 1 - self.exportLiteralAttributes(outfile, level, [], name_) + already_processed = set() + self.exportLiteralAttributes(outfile, level, already_processed, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, already_processed, name_): @@ -2447,33 +3947,45 @@ class vehicle(GeneratedsSuper): showIndent(outfile, level) outfile.write('wheelcount=%d,\n' % self.wheelcount) def build(self, node): - self.buildAttributes(node, node.attrib, []) + already_processed = set() + self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] - self.buildChildren(child, nodeName_) + self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): - pass - def buildChildren(self, child_, nodeName_, from_subclass=False): + value = find_attr_value_('xsi:type', node) + if value is not None and 'xsi:type' not in already_processed: + already_processed.add('xsi:type') + self.extensiontype_ = value + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): if nodeName_ == 'wheelcount': sval_ = child_.text try: ival_ = int(sval_) - except (TypeError, ValueError), exp: + except (TypeError, ValueError) as exp: raise_parse_error(child_, 'requires integer: %s' % exp) + ival_ = self.gds_validate_integer(ival_, node, 'wheelcount') self.wheelcount = ival_ -# end class vehicle +# end class vehicleType -class automobile(vehicle): +class automobile(vehicleType): member_data_items_ = { - 'drivername': MemberSpec_('drivername', 'xs:string', 0), - } + 'drivername': MemberSpec_('drivername', 'xs:string', 0, 0, {u'type': u'xs:string', u'name': u'drivername'}, None), + } subclass = None - superclass = vehicle + superclass = vehicleType def __init__(self, wheelcount=None, drivername=None): + self.original_tagname_ = None super(automobile, self).__init__(wheelcount, ) self.drivername = drivername def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, automobile) + if subclass is not None: + return subclass(*args_, **kwargs_) if automobile.subclass: return automobile.subclass(*args_, **kwargs_) else: @@ -2482,37 +3994,58 @@ class automobile(vehicle): def get_drivername(self): return self.drivername def set_drivername(self, drivername): self.drivername = drivername drivernameProp = property(get_drivername, set_drivername) - def export(self, outfile, level, namespace_='', name_='automobile', namespacedef_=''): - showIndent(outfile, level) - outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) - self.exportAttributes(outfile, level, [], namespace_, name_='automobile') - outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"') - outfile.write(' xsi:type="automobile"') - if self.hasContent_(): - outfile.write('>\n') - self.exportChildren(outfile, level + 1, namespace_, name_) - showIndent(outfile, level) - outfile.write('</%s%s>\n' % (namespace_, name_)) - else: - outfile.write('/>\n') - def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='automobile'): - super(automobile, self).exportAttributes(outfile, level, already_processed, namespace_, name_='automobile') - def exportChildren(self, outfile, level, namespace_='', name_='automobile'): - super(automobile, self).exportChildren(outfile, level, namespace_, name_) - if self.drivername is not None: - showIndent(outfile, level) - outfile.write('<%sdrivername>%s</%sdrivername>\n' % (namespace_, self.gds_format_string(quote_xml(self.drivername).encode(ExternalEncoding), input_name='drivername'), namespace_)) def hasContent_(self): if ( self.drivername is not None or super(automobile, self).hasContent_() - ): + ): return True else: return False + def export(self, outfile, level, namespace_='', name_='automobile', namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"', pretty_print=True): + imported_ns_def_ = GenerateDSNamespaceDefs_.get('automobile') + if imported_ns_def_ is not None: + namespacedef_ = imported_ns_def_ + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = set() + self.exportAttributes(outfile, level, already_processed, namespace_, name_='automobile') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='automobile', 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_='automobile'): + super(automobile, self).exportAttributes(outfile, level, already_processed, namespace_, name_='automobile') + def exportChildren(self, outfile, level, namespace_='', name_='automobile', fromsubclass_=False, pretty_print=True): + super(automobile, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.drivername is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<drivername>%s</drivername>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.drivername), input_name='drivername')), eol_)) + def to_etree(self, parent_element=None, name_='automobile', mapping_=None): + element = super(automobile, self).to_etree(parent_element, name_, mapping_) + if self.drivername is not None: + drivername_ = self.drivername + etree_.SubElement(element, '{}drivername').text = self.gds_format_string(drivername_) + if mapping_ is not None: + mapping_[self] = element + return element def exportLiteral(self, outfile, level, name_='automobile'): level += 1 - self.exportLiteralAttributes(outfile, level, [], name_) + already_processed = set() + self.exportLiteralAttributes(outfile, level, already_processed, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, already_processed, name_): @@ -2521,32 +4054,246 @@ class automobile(vehicle): super(automobile, self).exportLiteralChildren(outfile, level, name_) if self.drivername is not None: showIndent(outfile, level) - outfile.write('drivername=%s,\n' % quote_python(self.drivername).encode(ExternalEncoding)) + outfile.write('drivername=%s,\n' % self.gds_encode(quote_python(self.drivername))) def build(self, node): - self.buildAttributes(node, node.attrib, []) + already_processed = set() + self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] - self.buildChildren(child, nodeName_) + self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): super(automobile, self).buildAttributes(node, attrs, already_processed) - def buildChildren(self, child_, nodeName_, from_subclass=False): + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): if nodeName_ == 'drivername': drivername_ = child_.text + drivername_ = self.gds_validate_string(drivername_, node, 'drivername') self.drivername = drivername_ - super(automobile, self).buildChildren(child_, nodeName_, True) + super(automobile, self).buildChildren(child_, node, nodeName_, True) # end class automobile -class airplane(vehicle): +class hot_agent(GeneratedsSuper): + member_data_items_ = { + 'firstname': MemberSpec_('firstname', 'xs:string', 0, 0, {u'default': u'empty\\name', u'type': u'xs:string', u'name': u'firstname'}, None), + 'lastname': MemberSpec_('lastname', 'xs:string', 0, 0, {u'default': u"no 'last' name", u'type': u'xs:string', u'name': u'lastname'}, None), + 'priority': MemberSpec_('priority', 'xs:float', 0, 0, {u'type': u'xs:float', u'name': u'priority'}, None), + 'startDate': MemberSpec_('startDate', 'xs:date', 0, 0, {u'type': u'xs:date', u'name': u'startDate'}, None), + } + subclass = None + superclass = None + def __init__(self, firstname='empty\\name', lastname='no \'last\' name', priority=None, startDate=None): + self.original_tagname_ = None + self.firstname = firstname + self.lastname = lastname + self.priority = priority + if isinstance(startDate, BaseStrType_): + initvalue_ = datetime_.datetime.strptime(startDate, '%Y-%m-%d').date() + else: + initvalue_ = startDate + self.startDate = initvalue_ + self.anyAttributes_ = {} + def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, hot_agent) + if subclass is not None: + return subclass(*args_, **kwargs_) + if hot_agent.subclass: + return hot_agent.subclass(*args_, **kwargs_) + else: + return hot_agent(*args_, **kwargs_) + factory = staticmethod(factory) + def get_firstname(self): return self.firstname + def set_firstname(self, firstname): self.firstname = firstname + firstnameProp = property(get_firstname, set_firstname) + def get_lastname(self): return self.lastname + def set_lastname(self, lastname): self.lastname = lastname + lastnameProp = property(get_lastname, set_lastname) + def get_priority(self): return self.priority + def set_priority(self, priority): self.priority = priority + priorityProp = property(get_priority, set_priority) + def get_startDate(self): return self.startDate + def set_startDate(self, startDate): self.startDate = startDate + startDateProp = property(get_startDate, set_startDate) + def get_anyAttributes_(self): return self.anyAttributes_ + def set_anyAttributes_(self, anyAttributes_): self.anyAttributes_ = anyAttributes_ + def hasContent_(self): + if ( + self.firstname != "empty\name" or + self.lastname != "no 'last' name" or + self.priority is not None or + self.startDate is not None + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='hot.agent', namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"', pretty_print=True): + imported_ns_def_ = GenerateDSNamespaceDefs_.get('hot.agent') + if imported_ns_def_ is not None: + namespacedef_ = imported_ns_def_ + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = set() + self.exportAttributes(outfile, level, already_processed, namespace_, name_='hot.agent') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='hot.agent', 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_='hot.agent'): + unique_counter = 0 + for name, value in self.anyAttributes_.items(): + xsinamespaceprefix = 'xsi' + xsinamespace1 = 'http://www.w3.org/2001/XMLSchema-instance' + xsinamespace2 = '{%s}' % (xsinamespace1, ) + if name.startswith(xsinamespace2): + name1 = name[len(xsinamespace2):] + name2 = '%s:%s' % (xsinamespaceprefix, name1, ) + if name2 not in already_processed: + already_processed.add(name2) + outfile.write(' %s=%s' % (name2, quote_attrib(value), )) + else: + mo = re_.match(Namespace_extract_pat_, name) + if mo is not None: + namespace, name = mo.group(1, 2) + if name not in already_processed: + already_processed.add(name) + if namespace == 'http://www.w3.org/XML/1998/namespace': + outfile.write(' %s=%s' % ( + name, quote_attrib(value), )) + else: + unique_counter += 1 + outfile.write(' xmlns:%d="%s"' % ( + unique_counter, namespace, )) + outfile.write(' %d:%s=%s' % ( + unique_counter, name, quote_attrib(value), )) + else: + if name not in already_processed: + already_processed.add(name) + outfile.write(' %s=%s' % ( + name, quote_attrib(value), )) + pass + def exportChildren(self, outfile, level, namespace_='', name_='hot.agent', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.firstname is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<firstname>%s</firstname>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.firstname), input_name='firstname')), eol_)) + if self.lastname is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<lastname>%s</lastname>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.lastname), input_name='lastname')), eol_)) + if self.priority is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<priority>%s</priority>%s' % (self.gds_format_float(self.priority, input_name='priority'), eol_)) + if self.startDate is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<startDate>%s</startDate>%s' % (self.gds_format_date(self.startDate, input_name='startDate'), eol_)) + def to_etree(self, parent_element=None, name_='hot.agent', mapping_=None): + if parent_element is None: + element = etree_.Element('{}' + name_) + else: + element = etree_.SubElement(parent_element, '{}' + name_) + if self.firstname is not None: + firstname_ = self.firstname + etree_.SubElement(element, '{}firstname').text = self.gds_format_string(firstname_) + if self.lastname is not None: + lastname_ = self.lastname + etree_.SubElement(element, '{}lastname').text = self.gds_format_string(lastname_) + if self.priority is not None: + priority_ = self.priority + etree_.SubElement(element, '{}priority').text = self.gds_format_float(priority_) + if self.startDate is not None: + startDate_ = self.startDate + etree_.SubElement(element, '{}startDate').text = self.gds_format_date(startDate_) + if mapping_ is not None: + mapping_[self] = element + return element + def exportLiteral(self, outfile, level, name_='hot.agent'): + level += 1 + already_processed = set() + self.exportLiteralAttributes(outfile, level, already_processed, name_) + if self.hasContent_(): + self.exportLiteralChildren(outfile, level, name_) + def exportLiteralAttributes(self, outfile, level, already_processed, name_): + for name, value in self.anyAttributes_.items(): + showIndent(outfile, level) + outfile.write('%s="%s",\n' % (name, value,)) + def exportLiteralChildren(self, outfile, level, name_): + if self.firstname is not None: + showIndent(outfile, level) + outfile.write('firstname=%s,\n' % self.gds_encode(quote_python(self.firstname))) + if self.lastname is not None: + showIndent(outfile, level) + outfile.write('lastname=%s,\n' % self.gds_encode(quote_python(self.lastname))) + if self.priority is not None: + showIndent(outfile, level) + outfile.write('priority=%f,\n' % self.priority) + if self.startDate is not None: + showIndent(outfile, level) + outfile.write('startDate=model_.GeneratedsSuper.gds_parse_date("%s"),\n' % self.gds_format_date(self.startDate, input_name='startDate')) + def build(self, node): + already_processed = set() + self.buildAttributes(node, node.attrib, already_processed) + for child in node: + nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] + self.buildChildren(child, node, nodeName_) + return self + def buildAttributes(self, node, attrs, already_processed): + self.anyAttributes_ = {} + for name, value in attrs.items(): + if name not in already_processed: + self.anyAttributes_[name] = value + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + if nodeName_ == 'firstname': + firstname_ = child_.text + firstname_ = self.gds_validate_string(firstname_, node, 'firstname') + self.firstname = firstname_ + elif nodeName_ == 'lastname': + lastname_ = child_.text + lastname_ = self.gds_validate_string(lastname_, node, 'lastname') + self.lastname = lastname_ + elif nodeName_ == 'priority': + sval_ = child_.text + try: + fval_ = float(sval_) + except (TypeError, ValueError) as exp: + raise_parse_error(child_, 'requires float or double: %s' % exp) + fval_ = self.gds_validate_float(fval_, node, 'priority') + self.priority = fval_ + elif nodeName_ == 'startDate': + sval_ = child_.text + dval_ = self.gds_parse_date(sval_) + self.startDate = dval_ +# end class hot_agent + + +class airplane(vehicleType): member_data_items_ = { - 'pilotname': MemberSpec_('pilotname', 'xs:string', 0), - } + 'pilotname': MemberSpec_('pilotname', 'xs:string', 0, 0, {u'type': u'xs:string', u'name': u'pilotname'}, None), + } subclass = None - superclass = vehicle + superclass = vehicleType def __init__(self, wheelcount=None, pilotname=None): + self.original_tagname_ = None super(airplane, self).__init__(wheelcount, ) self.pilotname = pilotname def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, airplane) + if subclass is not None: + return subclass(*args_, **kwargs_) if airplane.subclass: return airplane.subclass(*args_, **kwargs_) else: @@ -2555,37 +4302,58 @@ class airplane(vehicle): def get_pilotname(self): return self.pilotname def set_pilotname(self, pilotname): self.pilotname = pilotname pilotnameProp = property(get_pilotname, set_pilotname) - def export(self, outfile, level, namespace_='', name_='airplane', namespacedef_=''): - showIndent(outfile, level) - outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) - self.exportAttributes(outfile, level, [], namespace_, name_='airplane') - outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"') - outfile.write(' xsi:type="airplane"') - if self.hasContent_(): - outfile.write('>\n') - self.exportChildren(outfile, level + 1, namespace_, name_) - showIndent(outfile, level) - outfile.write('</%s%s>\n' % (namespace_, name_)) - else: - outfile.write('/>\n') - def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='airplane'): - super(airplane, self).exportAttributes(outfile, level, already_processed, namespace_, name_='airplane') - def exportChildren(self, outfile, level, namespace_='', name_='airplane'): - super(airplane, self).exportChildren(outfile, level, namespace_, name_) - if self.pilotname is not None: - showIndent(outfile, level) - outfile.write('<%spilotname>%s</%spilotname>\n' % (namespace_, self.gds_format_string(quote_xml(self.pilotname).encode(ExternalEncoding), input_name='pilotname'), namespace_)) def hasContent_(self): if ( self.pilotname is not None or super(airplane, self).hasContent_() - ): + ): return True else: return False + def export(self, outfile, level, namespace_='', name_='airplane', namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"', pretty_print=True): + imported_ns_def_ = GenerateDSNamespaceDefs_.get('airplane') + if imported_ns_def_ is not None: + namespacedef_ = imported_ns_def_ + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = set() + self.exportAttributes(outfile, level, already_processed, namespace_, name_='airplane') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='airplane', 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_='airplane'): + super(airplane, self).exportAttributes(outfile, level, already_processed, namespace_, name_='airplane') + def exportChildren(self, outfile, level, namespace_='', name_='airplane', fromsubclass_=False, pretty_print=True): + super(airplane, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print) + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.pilotname is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<pilotname>%s</pilotname>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.pilotname), input_name='pilotname')), eol_)) + def to_etree(self, parent_element=None, name_='airplane', mapping_=None): + element = super(airplane, self).to_etree(parent_element, name_, mapping_) + if self.pilotname is not None: + pilotname_ = self.pilotname + etree_.SubElement(element, '{}pilotname').text = self.gds_format_string(pilotname_) + if mapping_ is not None: + mapping_[self] = element + return element def exportLiteral(self, outfile, level, name_='airplane'): level += 1 - self.exportLiteralAttributes(outfile, level, [], name_) + already_processed = set() + self.exportLiteralAttributes(outfile, level, already_processed, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, already_processed, name_): @@ -2594,88 +4362,273 @@ class airplane(vehicle): super(airplane, self).exportLiteralChildren(outfile, level, name_) if self.pilotname is not None: showIndent(outfile, level) - outfile.write('pilotname=%s,\n' % quote_python(self.pilotname).encode(ExternalEncoding)) + outfile.write('pilotname=%s,\n' % self.gds_encode(quote_python(self.pilotname))) def build(self, node): - self.buildAttributes(node, node.attrib, []) + already_processed = set() + self.buildAttributes(node, node.attrib, already_processed) for child in node: nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] - self.buildChildren(child, nodeName_) + self.buildChildren(child, node, nodeName_) + return self def buildAttributes(self, node, attrs, already_processed): super(airplane, self).buildAttributes(node, attrs, already_processed) - def buildChildren(self, child_, nodeName_, from_subclass=False): + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): if nodeName_ == 'pilotname': pilotname_ = child_.text + pilotname_ = self.gds_validate_string(pilotname_, node, 'pilotname') self.pilotname = pilotname_ - super(airplane, self).buildChildren(child_, nodeName_, True) + super(airplane, self).buildChildren(child_, node, nodeName_, True) # end class airplane +class client_handlerType(GeneratedsSuper): + member_data_items_ = { + 'fullname': MemberSpec_('fullname', 'xs:string', 0, 0, {u'type': u'xs:string', u'name': u'fullname'}, None), + 'refid': MemberSpec_('refid', 'xs:integer', 0, 0, {u'type': u'xs:integer', u'name': u'refid'}, None), + } + subclass = None + superclass = None + def __init__(self, fullname=None, refid=None): + self.original_tagname_ = None + self.fullname = fullname + self.refid = refid + def factory(*args_, **kwargs_): + if CurrentSubclassModule_ is not None: + subclass = getSubclassFromModule_( + CurrentSubclassModule_, client_handlerType) + if subclass is not None: + return subclass(*args_, **kwargs_) + if client_handlerType.subclass: + return client_handlerType.subclass(*args_, **kwargs_) + else: + return client_handlerType(*args_, **kwargs_) + factory = staticmethod(factory) + def get_fullname(self): return self.fullname + def set_fullname(self, fullname): self.fullname = fullname + fullnameProp = property(get_fullname, set_fullname) + def get_refid(self): return self.refid + def set_refid(self, refid): self.refid = refid + refidProp = property(get_refid, set_refid) + def hasContent_(self): + if ( + self.fullname is not None or + self.refid is not None + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='client-handlerType', namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"', pretty_print=True): + imported_ns_def_ = GenerateDSNamespaceDefs_.get('client-handlerType') + if imported_ns_def_ is not None: + namespacedef_ = imported_ns_def_ + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.original_tagname_ is not None: + name_ = self.original_tagname_ + showIndent(outfile, level, pretty_print) + outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) + already_processed = set() + self.exportAttributes(outfile, level, already_processed, namespace_, name_='client-handlerType') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='client-handlerType', 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_='client-handlerType'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='client-handlerType', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.fullname is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<fullname>%s</fullname>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.fullname), input_name='fullname')), eol_)) + if self.refid is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<refid>%s</refid>%s' % (self.gds_format_integer(self.refid, input_name='refid'), eol_)) + def to_etree(self, parent_element=None, name_='client-handlerType', mapping_=None): + if parent_element is None: + element = etree_.Element('{}' + name_) + else: + element = etree_.SubElement(parent_element, '{}' + name_) + if self.fullname is not None: + fullname_ = self.fullname + etree_.SubElement(element, '{}fullname').text = self.gds_format_string(fullname_) + if self.refid is not None: + refid_ = self.refid + etree_.SubElement(element, '{}refid').text = self.gds_format_integer(refid_) + if mapping_ is not None: + mapping_[self] = element + return element + def exportLiteral(self, outfile, level, name_='client-handlerType'): + level += 1 + already_processed = set() + self.exportLiteralAttributes(outfile, level, already_processed, 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.fullname is not None: + showIndent(outfile, level) + outfile.write('fullname=%s,\n' % self.gds_encode(quote_python(self.fullname))) + if self.refid is not None: + showIndent(outfile, level) + outfile.write('refid=%d,\n' % self.refid) + def build(self, node): + already_processed = set() + self.buildAttributes(node, node.attrib, already_processed) + for child in node: + nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] + self.buildChildren(child, node, nodeName_) + return self + def buildAttributes(self, node, attrs, already_processed): + pass + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + if nodeName_ == 'fullname': + fullname_ = child_.text + fullname_ = self.gds_validate_string(fullname_, node, 'fullname') + self.fullname = fullname_ + elif nodeName_ == 'refid': + sval_ = child_.text + try: + ival_ = int(sval_) + except (TypeError, ValueError) as exp: + raise_parse_error(child_, 'requires integer: %s' % exp) + ival_ = self.gds_validate_integer(ival_, node, 'refid') + self.refid = ival_ +# end class client_handlerType + + +GDSClassesMapping = { + 'agent': agentType, + 'booster': boosterType, + 'comments': commentsType, + 'info': infoType, + 'java-programmer': java_programmerType, + 'param': paramType, + 'people': peopleType, + 'person': personType, + 'programmer': programmerType, + 'python-programmer': python_programmerType, + 'special-agent': special_agentType, + 'vehicle': vehicleType, + 'weird-agent': weird_agentType, +} + + USAGE_TEXT = """ Usage: python <Parser>.py [ -s ] <in_xml_file> """ + def usage(): - print USAGE_TEXT + print(USAGE_TEXT) sys.exit(1) def get_root_tag(node): tag = Tag_pattern_.match(node.tag).groups()[-1] - rootClass = globals().get(tag) + rootClass = GDSClassesMapping.get(tag) + if rootClass is None: + rootClass = globals().get(tag) return tag, rootClass -def parse(inFileName): - doc = parsexml_(inFileName) +def parse(inFileName, silence=False): + parser = None + doc = parsexml_(inFileName, parser) rootNode = doc.getroot() rootTag, rootClass = get_root_tag(rootNode) if rootClass is None: - rootTag = 'people' - rootClass = people + rootTag = 'peopleType' + rootClass = peopleType 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_='xmlns:pl="http://kuhlman.com/people.xsd"') + if not silence: + sys.stdout.write('<?xml version="1.0" ?>\n') + rootObj.export( + sys.stdout, 0, name_=rootTag, + namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"', + pretty_print=True) return rootObj -def parseString(inString): - from StringIO import StringIO - doc = parsexml_(StringIO(inString)) +def parseEtree(inFileName, silence=False): + parser = None + doc = parsexml_(inFileName, parser) rootNode = doc.getroot() rootTag, rootClass = get_root_tag(rootNode) if rootClass is None: - rootTag = 'people' - rootClass = people + rootTag = 'peopleType' + rootClass = peopleType 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_="people", - namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"') + mapping = {} + rootElement = rootObj.to_etree(None, name_=rootTag, mapping_=mapping) + reverse_mapping = rootObj.gds_reverse_node_mapping(mapping) + if not silence: + content = etree_.tostring( + rootElement, pretty_print=True, + xml_declaration=True, encoding="utf-8") + sys.stdout.write(content) + sys.stdout.write('\n') + return rootObj, rootElement, mapping, reverse_mapping + + +def parseString(inString, silence=False): + '''Parse a string, create the object tree, and export it. + + Arguments: + - inString -- A string. This XML fragment should not start + with an XML declaration containing an encoding. + - silence -- A boolean. If False, export the object. + Returns -- The root object in the tree. + ''' + parser = None + rootNode= parsexmlstring_(inString, parser) + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'peopleType' + rootClass = peopleType + rootObj = rootClass.factory() + rootObj.build(rootNode) + # Enable Python to collect the space used by the DOM. + if not silence: + sys.stdout.write('<?xml version="1.0" ?>\n') + rootObj.export( + sys.stdout, 0, name_=rootTag, + namespacedef_='xmlns:pl="http://kuhlman.com/people.xsd"') return rootObj -def parseLiteral(inFileName): - doc = parsexml_(inFileName) +def parseLiteral(inFileName, silence=False): + parser = None + doc = parsexml_(inFileName, parser) rootNode = doc.getroot() rootTag, rootClass = get_root_tag(rootNode) if rootClass is None: - rootTag = 'people' - rootClass = people + rootTag = 'peopleType' + rootClass = peopleType rootObj = rootClass.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None - sys.stdout.write('#from peoplesup import *\n\n') - sys.stdout.write('import peoplesup as model_\n\n') - sys.stdout.write('rootObj = model_.rootTag(\n') - rootObj.exportLiteral(sys.stdout, 0, name_=rootTag) - sys.stdout.write(')\n') + if not silence: + sys.stdout.write('#from peoplesup import *\n\n') + sys.stdout.write('import peoplesup as model_\n\n') + sys.stdout.write('rootObj = model_.rootClass(\n') + rootObj.exportLiteral(sys.stdout, 0, name_=rootTag) + sys.stdout.write(')\n') return rootObj @@ -2693,20 +4646,22 @@ if __name__ == '__main__': __all__ = [ - "agent", + "agentType", "airplane", "automobile", - "booster", - "client_handler", - "comments", - "info", - "java_programmer", - "param", - "people", - "person", - "programmer", - "python_programmer", - "special_agent", + "boosterType", + "client_handlerType", + "commentsType", + "hot_agent", + "infoType", + "java_programmerType", + "paramType", + "peopleType", + "personType", + "programmerType", + "python_programmerType", + "special_agentType", "specialperson", - "vehicle" - ] + "vehicleType", + "weird_agentType" +] diff --git a/Demos/People/run-full-test-validators.sh b/Demos/People/run-full-test-validators.sh new file mode 100755 index 0000000000000000000000000000000000000000..9f7f5bd451dab2af3b25d58a2acdbbf13efe4cce --- /dev/null +++ b/Demos/People/run-full-test-validators.sh @@ -0,0 +1,21 @@ +#!/bin/sh -x + +if [ $# -ne 1 ]; then + echo + echo Usage: run-ful-test-validators.sh out_file_name_stem + echo + exit 0 +fi + +python ../../generateDS.py -f -m \ + --validator-bodies=Validators \ + --use-old-simpletype-validators \ + --namespacedef='xmlns:pl="http://kuhlman.com/people.xsd"' \ + --super=$1sup -o $1sup.py -s $1sub.py \ + --member-specs=dict \ + -m \ + --export="write etree literal" \ + -c people_catalog.xml \ + people.xsd + +python $1sub.py people.xml 2> $1_warnings.txt | tee $1.xml diff --git a/Demos/People/run_test b/Demos/People/run-full-test.sh similarity index 51% rename from Demos/People/run_test rename to Demos/People/run-full-test.sh index 86ada738ffefdc27097a1fcc6b1853a62a1608b8..cc8124a037b47d6bb897d7d4a9138a8b7a8abe2d 100755 --- a/Demos/People/run_test +++ b/Demos/People/run-full-test.sh @@ -2,16 +2,18 @@ if [ $# -ne 1 ]; then echo - echo Usage: run_full_test out_file_name_stem + echo Usage: run-ful-test.sh out_file_name_stem echo exit 0 fi -../../generateDS.py -f -m \ +python ../../generateDS.py -f -m \ --namespacedef='xmlns:pl="http://kuhlman.com/people.xsd"' \ --super=$1sup -o $1sup.py -s $1sub.py \ --member-specs=dict \ -m \ + --export="write etree literal" \ + -c people_catalog.xml \ people.xsd -python $1sub.py people.xml | tee $1.xml +python $1sub.py people.xml 2> $1_warnings.txt | tee $1.xml diff --git a/Demos/People/schemas/people-part1.xsd b/Demos/People/schemas/people-part1.xsd new file mode 100644 index 0000000000000000000000000000000000000000..bf4a6eacaf6193d70cafb5791c9a3e4d2284c7bd --- /dev/null +++ b/Demos/People/schemas/people-part1.xsd @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + <xs:complexType name="airplane"> + <xs:complexContent> + <xs:extension base="vehicleType" > + <xs:sequence> + <xs:element name="pilotname" type="xs:string" /> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> +</xs:schema> diff --git a/Demos/Xmlbehavior/README b/Demos/Xmlbehavior/README.txt similarity index 93% rename from Demos/Xmlbehavior/README rename to Demos/Xmlbehavior/README.txt index 36a4a5082d7d0f1dd4deee363b33698c61530b9c..5e9e11f2feeed5c78a1caf6e40bebc96b6584be7 100644 --- a/Demos/Xmlbehavior/README +++ b/Demos/Xmlbehavior/README.txt @@ -1,6 +1,11 @@ +============ XMLBehaviors ============ +*Under repair* + +*Notice:* The example in this directory is currently not working. + This sub-directory contains a simple example of the use of the XMLBehavior capability of generateDS.py. @@ -41,3 +46,4 @@ Files of interest in the directory/example are: instance documents. It was used by generateDS.py to generate xmlbehavior.py and xmlbehavior_sub.py. +.. vim:ft=rst: diff --git a/Demos/Xmlbehavior/run-test.sh b/Demos/Xmlbehavior/run-test.sh new file mode 100755 index 0000000000000000000000000000000000000000..c49c175687bed3eb4117889774c0c209ed755e50 --- /dev/null +++ b/Demos/Xmlbehavior/run-test.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +if [ $# -ne 1 ]; then + echo + echo Usage: run-test.sh out_file_name_stem + echo + exit 0 +fi + +python ../../generateDS.py \ + -f \ + -o $1sup.py \ + -s $1sub.py \ + --super="$1sup" \ + -b xmlbehavior_po.xml \ + po.xsd diff --git a/Demos/Xmlbehavior/xmlbehavior.py b/Demos/Xmlbehavior/xmlbehavior.py index f29c6782d80bf17ed2a351820b15d8bf98979197..f3a88451e37eeddf4a5f35d739474a8df378440f 100644 --- a/Demos/Xmlbehavior/xmlbehavior.py +++ b/Demos/Xmlbehavior/xmlbehavior.py @@ -4,6 +4,7 @@ # Generated Wed Jun 30 10:34:05 2004 by generateDS.py. # +from __future__ import print_function import sys import getopt from xml.dom import minidom @@ -562,7 +563,7 @@ class SaxXml_behaviorHandler(handler.ContentHandler): self.locator = locator def showError(self, msg): - print '*** (showError):', msg + print('*** (showError):', msg) sys.exit(-1) def startElement(self, name, attrs): @@ -736,7 +737,7 @@ Options: """ def usage(): - print USAGE_TEXT + print(USAGE_TEXT) sys.exit(-1) diff --git a/Demos/Xmlbehavior/xmlbehavior_sub.py b/Demos/Xmlbehavior/xmlbehavior_sub.py index 739cf5cef651b80c94ad5e1718bdff7484c54f14..86ea66ec6361d3c91467eb0c7d65fa5c723e5527 100644 --- a/Demos/Xmlbehavior/xmlbehavior_sub.py +++ b/Demos/Xmlbehavior/xmlbehavior_sub.py @@ -4,6 +4,7 @@ # Generated Tue Jun 29 16:14:16 2004 by generateDS.py. # +from __future__ import print_function import sys from xml.dom import minidom from xml.sax import handler, make_parser @@ -150,7 +151,7 @@ Usage: python ???.py <infilename> """ def usage(): - print USAGE_TEXT + print(USAGE_TEXT) sys.exit(-1) diff --git a/README.rst b/README.rst index 93dcbfece409ce17f233710572dc57a034b383b3..e63529e4fa89556187dc347060f21a3fc7a32694 100644 --- a/README.rst +++ b/README.rst @@ -141,6 +141,11 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Change history -------------- +Version 2.29.18 (07/19/2018) + +- Fixes to the example code underneath `Demos/`. Thanks to Witold + Jarzynka for reporting this. + Version 2.29.17 (07/11/2018) - Merged pull request that generates enum classes for each simpleType. @@ -149,7 +154,6 @@ Version 2.29.17 (07/11/2018) ForeignKey declarations. (2) Added relative import (dot) to generated admin.py. - Version 2.29.16 (06/21/2018) - Added dependencies to ``setup.py``. Thanks to Laszlo for this diff --git a/generateDS.py b/generateDS.py index df4185276966e0e4d62eaaa093874c873264678c..d0549916e63060f2fa1b03edf11d8bc2250a64cf 100755 --- a/generateDS.py +++ b/generateDS.py @@ -225,7 +225,7 @@ _log = logging.getLogger(__name__) # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## -VERSION = '2.29.17' +VERSION = '2.29.18' ##VERSION## BaseStrTypes = six.string_types diff --git a/generateDS.txt b/generateDS.txt index 25433971682411ba239015f6dd89539936f8aeb6..ca608772ee1049c235cecf211b0134c61ab76d5d 100644 --- a/generateDS.txt +++ b/generateDS.txt @@ -12,7 +12,7 @@ generateDS -- Generate Data Structures from XML Schema .. version -:revision: 2.29.17 +:revision: 2.29.18 .. version diff --git a/generateds_gui_notes.txt b/generateds_gui_notes.txt index d7144ebbe785838c0d83a5e281ab7d70ac64f3b6..8eb6a5bbe4ab71beb96cda1839d3ff6da5f340d4 100644 --- a/generateds_gui_notes.txt +++ b/generateds_gui_notes.txt @@ -12,7 +12,7 @@ GenerateDS GUI Notes .. version -:revision: 2.29.17 +:revision: 2.29.18 .. version diff --git a/gui/generateds_gui.py b/gui/generateds_gui.py index e835a64952aa9fbb99fe7f142cb45c8e043d46ba..03b8d9e27113f2a45f175342eeb3838c6921f348 100644 --- a/gui/generateds_gui.py +++ b/gui/generateds_gui.py @@ -41,7 +41,7 @@ from libgenerateDS.gui import generateds_gui_session # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## -VERSION = '2.29.17' +VERSION = '2.29.18' ##VERSION## diff --git a/librarytemplate_howto.txt b/librarytemplate_howto.txt index ce71a030aca1edc4aa467a598a872700b18672ea..deb8be97eda4522f353e0b8919e0ce4883e6e68b 100644 --- a/librarytemplate_howto.txt +++ b/librarytemplate_howto.txt @@ -8,7 +8,7 @@ How to package a generateDS.py generated library .. version -:revision: 2.29.17 +:revision: 2.29.18 .. version diff --git a/process_includes.py b/process_includes.py index b41168b51f7c75b2dc558949c5ec26bb64a8d918..6bbf3f9aa27d96738a8c7172b661493ffa5c6fa5 100755 --- a/process_includes.py +++ b/process_includes.py @@ -40,7 +40,7 @@ except ImportError: # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## -VERSION = '2.29.17' +VERSION = '2.29.18' ##VERSION## CatalogDict = {} diff --git a/setup.py b/setup.py index cc0d760651f836a4fde0b37540a4ecea78d62721..ee9a65afd50356ecdb6ce77c91b7e742fd296c85 100644 --- a/setup.py +++ b/setup.py @@ -8,7 +8,7 @@ setup( # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## - version="2.29.17", + version="2.29.18", ##VERSION## author="Dave Kuhlman", author_email="dkuhlman@davekuhlman.org", diff --git a/tutorial/generateds_tutorial.txt b/tutorial/generateds_tutorial.txt index 2501e5bc652b6344b7286449c0d062e64e6fe0cb..29795adc3cc304002e6e44f3545985982621327b 100644 --- a/tutorial/generateds_tutorial.txt +++ b/tutorial/generateds_tutorial.txt @@ -11,7 +11,7 @@ generateDS -- Introduction and Tutorial .. version -:revision: 2.29.17 +:revision: 2.29.18 .. version