From 9fdb6a2735ebe083e899e83bd119135261357e57 Mon Sep 17 00:00:00 2001 From: dkuhlman <none@none> Date: Tue, 9 Sep 2014 13:06:49 -0700 Subject: [PATCH] New version -- version 2.13a --- README | 6 +- generateDS.html | 10 +- generateDS.py | 8 +- generateDS.txt | 4 +- gui/generateds_gui.py | 2 +- librarytemplate_howto.html | 8 +- librarytemplate_howto.txt | 2 +- process_includes.py | 2 +- setup.py | 2 +- tests/prefix_classname.xml | 118 ++ tests/prefix_classname.xsd | 203 ++ tests/prefix_classname1_out.xml | 91 + tests/prefix_classname1_sub.py | 292 +++ tests/prefix_classname1_sup.py | 2897 +++++++++++++++++++++++++++++ tests/prefix_classname2_out.xml | 91 + tests/prefix_classname2_sub.py | 292 +++ tests/prefix_classname2_sup.py | 2897 +++++++++++++++++++++++++++++ tests/test.py | 25 + tutorial/generateds_tutorial.html | 8 +- tutorial/generateds_tutorial.txt | 2 +- tutorial/generateds_tutorial.zip | Bin 48759 -> 48761 bytes updateversion.py | 143 ++ 22 files changed, 7078 insertions(+), 25 deletions(-) create mode 100644 tests/prefix_classname.xml create mode 100644 tests/prefix_classname.xsd create mode 100644 tests/prefix_classname1_out.xml create mode 100644 tests/prefix_classname1_sub.py create mode 100644 tests/prefix_classname1_sup.py create mode 100644 tests/prefix_classname2_out.xml create mode 100644 tests/prefix_classname2_sub.py create mode 100644 tests/prefix_classname2_sup.py create mode 100755 updateversion.py diff --git a/README b/README index 8ab152e..5cdd6eb 100644 --- a/README +++ b/README @@ -141,10 +141,14 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Change history -------------- -Version 2.12g (09/03/2014) +Version 2.13a (09/09/2014) - Minor fix to function generateToEtreeChildren. Must generate call to get_valueOf only when defined (i.e. when element is simpleContent or isMixed). +- Fix to generation of class name prefixes added with the "-p" + command line option. This fix was added by Christian Ascheberg. + Thank you Christian. +- Added unit test for class name prefixes command line option. Version 2.12f (08/12/2014) - Fix for substitutionGroup conflict with keyword name mapping. diff --git a/generateDS.html b/generateDS.html index 15ff8bd..4ed9fd4 100644 --- a/generateDS.html +++ b/generateDS.html @@ -3,7 +3,7 @@ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -<meta name="generator" content="Docutils 0.12: http://docutils.sourceforge.net/" /> +<meta name="generator" content="Docutils 0.13: http://docutils.sourceforge.net/" /> <title>generateDS -- Generate Data Structures from XML Schema</title> <meta name="author" content="Dave Kuhlman" /> <style type="text/css"> @@ -205,7 +205,7 @@ ul.auto-toc { <tr><th class="docinfo-name">Author:</th> <td>Dave Kuhlman</td></tr> <tr><th class="docinfo-name">Contact:</th> -<td><a class="first last reference external" href="mailto:dkuhlman@pacbell.net">dkuhlman@pacbell.net</a></td></tr> +<td><a class="first last reference external" href="mailto:dkuhlman@davekuhlman.org">dkuhlman@davekuhlman.org</a></td></tr> <tr><th class="docinfo-name">Address:</th> <td><pre class="address"> <a class="first last reference external" href="http://www.davekuhlman.org">http://www.davekuhlman.org</a> @@ -220,7 +220,7 @@ They are used by updateversion.py. --> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.12e</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.13a</td> </tr> </tbody> </table> @@ -229,7 +229,7 @@ They are used by updateversion.py. --> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">date:</th><td class="field-body">May 30, 2014</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">September 09, 2014</td> </tr> </tbody> </table> @@ -2886,7 +2886,7 @@ following among others:</p> <div class="footer"> <hr class="footer" /> <a class="reference external" href="generateDS.txt">View document source</a>. -Generated on: 2014-05-30 18:59 UTC. +Generated on: 2014-09-09 20:05 UTC. Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source. </div> diff --git a/generateDS.py b/generateDS.py index 0bb303d..7c32e5d 100755 --- a/generateDS.py +++ b/generateDS.py @@ -179,7 +179,7 @@ logging.disable(logging.INFO) # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## -VERSION = '2.12g' +VERSION = '2.13a' ##VERSION## GenerateProperties = 0 @@ -4281,7 +4281,7 @@ def generateClasses(wrt, prefix, element, delayed, nameSpacesDef=''): generateExportLiteralFn(wrt, prefix, element) generateBuildFn(wrt, prefix, element, delayed) generateUserMethods(wrt, element) - wrt('# end class %s\n' % name) + wrt('# end class %s%s\n' % (prefix, name, )) wrt('\n\n') # end generateClasses @@ -5957,7 +5957,7 @@ def parseAndGenerate( # can do a reasonably safe "from parser import *" if outfileName: exportableClassList = [ - '"%s"' % name + '"%s%s"' % (prefix, name, ) for name in AlreadyGenerated] exportableClassList.sort() exportableClassNames = ',\n '.join(exportableClassList) @@ -6031,7 +6031,7 @@ def parseAndGenerate( # to isolate important classes from internal ones. This way one # can do a reasonably safe "from parser import *" exportableClassList = [ - '"%s"' % name + '"%s%s"' % (prefix, name, ) for name in AlreadyGenerated] exportableClassList.sort() exportableClassNames = ',\n '.join(exportableClassList) diff --git a/generateDS.txt b/generateDS.txt index e831964..0cfa919 100644 --- a/generateDS.txt +++ b/generateDS.txt @@ -3,7 +3,7 @@ generateDS -- Generate Data Structures from XML Schema ====================================================== :author: Dave Kuhlman -:contact: dkuhlman@pacbell.net +:contact: dkuhlman@davekuhlman.org :address: http://www.davekuhlman.org @@ -12,7 +12,7 @@ generateDS -- Generate Data Structures from XML Schema .. version -:revision: 2.12g +:revision: 2.13a .. version diff --git a/gui/generateds_gui.py b/gui/generateds_gui.py index 60aef40..8622d68 100755 --- a/gui/generateds_gui.py +++ b/gui/generateds_gui.py @@ -31,7 +31,7 @@ from libgenerateDS.gui import generateds_gui_session # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## -VERSION = '2.12g' +VERSION = '2.13a' ##VERSION## diff --git a/librarytemplate_howto.html b/librarytemplate_howto.html index 1a2df9d..db0373e 100644 --- a/librarytemplate_howto.html +++ b/librarytemplate_howto.html @@ -3,7 +3,7 @@ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -<meta name="generator" content="Docutils 0.12: http://docutils.sourceforge.net/" /> +<meta name="generator" content="Docutils 0.13: http://docutils.sourceforge.net/" /> <title>How to package a generateDS.py generated library</title> <meta name="author" content="Dave Kuhlman" /> <style type="text/css"> @@ -217,7 +217,7 @@ ul.auto-toc { <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.12e</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.13a</td> </tr> </tbody> </table> @@ -226,7 +226,7 @@ ul.auto-toc { <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">date:</th><td class="field-body">May 23, 2014</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">September 09, 2014</td> </tr> </tbody> </table> @@ -380,7 +380,7 @@ this command for your needs. For example, you may need to use <div class="footer"> <hr class="footer" /> <a class="reference external" href="librarytemplate_howto.txt">View document source</a>. -Generated on: 2014-05-23 16:00 UTC. +Generated on: 2014-09-09 19:14 UTC. Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source. </div> diff --git a/librarytemplate_howto.txt b/librarytemplate_howto.txt index 32f3bf1..51928ab 100644 --- a/librarytemplate_howto.txt +++ b/librarytemplate_howto.txt @@ -8,7 +8,7 @@ How to package a generateDS.py generated library .. version -:revision: 2.12g +:revision: 2.13a .. version diff --git a/process_includes.py b/process_includes.py index 6bb5347..31ba6af 100755 --- a/process_includes.py +++ b/process_includes.py @@ -30,7 +30,7 @@ from lxml import etree # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## -VERSION = '2.12g' +VERSION = '2.13a' ##VERSION## CatalogDict = {} diff --git a/setup.py b/setup.py index 515df70..0bdcc97 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ setup(name="generateDS", # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## - version="2.12g", + version="2.13a", ##VERSION## author="Dave Kuhlman", author_email="dkuhlman@davekuhlman.org", diff --git a/tests/prefix_classname.xml b/tests/prefix_classname.xml new file mode 100644 index 0000000..322414c --- /dev/null +++ b/tests/prefix_classname.xml @@ -0,0 +1,118 @@ +<?xml version="1.0"?> +<people> + + <comments>1. This is a <emp>foolish</emp> comment. It is <emp>really</emp> important.</comments> + <comments>2. This is a <emp>silly</emp> comment. It is <emp>very</emp> significant.</comments> + + + <person id="1" value="abcd" ratio="3.2" extraattr="aaa"> + <name>Alberta</name> + <interest>gardening</interest> + <interest>reading</interest> + <category>5</category> + <hot /> + <hot.agent oneattr="bbb" twoattr="ccc"> + <firstname>Paula</firstname> + <lastname>Peterson</lastname> + <priority>4.3</priority> + </hot.agent> + </person> + + <person id="2"> + <name>Bernardo</name> + <interest>programming</interest> + <category>0</category> + <agent> + <firstname>Darren</firstname> + <lastname>Diddly</lastname> + <priority>4.5</priority> + <info name="Albert Abasinian" type="321" rating="5.33"> + Albert is a test for attributes + character content + + *no* element content. + </info> + </agent> + </person> + + <programmer id="2" language="python" area="xml"> + <name>Charles Carlson</name> + <interest>programming</interest> + <category>2233</category> + <description>A very happy programmer</description> + <email>charles@happyprogrammers.com</email> + <agent> + <firstname>Ernest</firstname> + <lastname>Echo</lastname> + <priority>3.8</priority> + <info name="George Gregory" type="321" rating="5.33" /> + </agent> + <elposint>14</elposint> + <elnegint>-12</elnegint> + <elnonnegint>4</elnonnegint> + <elnonposint>0</elnonposint> + <eldate>2005-04-26</eldate> + <eldatetime>2005-04-26T10:11:12</eldatetime> + <eltoken>aa bb cc + dd</eltoken> + <elshort>123</elshort> + <ellong>13241234123412341234</ellong> + <elparam id="id001" name="Davy" semantic="a big semantic"/> + </programmer> + + <person id="3"> + <name>Charlie</name> + <interest>people</interest> + <interest>cats</interest> + <interest>dogs</interest> + <category>8</category> + <promoter> + <firstname>David</firstname> + <lastname>Donaldson</lastname> + <client> + <fullname>Arnold Applebee</fullname> + <refid>10001</refid> + </client> + </promoter> + <promoter> + <firstname>Edward</firstname> + <lastname>Eddleberry</lastname> + <client> + <fullname>Arnold Applebee</fullname> + <refid>10001</refid> + </client> + </promoter> + </person> + + <person id="4" /> + + <python-programmer vegetable="tomato" fruit="peach" language="python" area="xml" nick-name="davy" id="232" ratio="8.7" value="abcd"> + <favorite-editor>jed</favorite-editor> + <name>Darrel Dawson</name> + <interest>hang gliding</interest> + <category>3344</category> + <description>An object-orientated programmer</description> + <email>darrel@happyprogrammers.com</email> + <agent> + <firstname>Harvey</firstname> + <lastname>Hippolite</lastname> + <priority>5.2</priority> + <info name="Harvey Hippolite" type="543" rating="6.55" /> + </agent> + </python-programmer> + + <java-programmer vegetable="tomato" fruit="peach" language="python" area="xml" nick-name="davy" id="232" ratio="8.7" value="abcd"> + <favorite-editor>jed</favorite-editor> + <name>Darrel Dawson</name> + <interest>hang gliding</interest> + <category>3344</category> + <description>An object-orientated programmer</description> + <email>darrel@happyprogrammers.com</email> + <agent> + <firstname>Harvey</firstname> + <lastname>Hippolite</lastname> + <priority>5.2</priority> + <info name="Harvey Hippolite" type="543" rating="6.55" /> + </agent> + </java-programmer> + +</people> + diff --git a/tests/prefix_classname.xsd b/tests/prefix_classname.xsd new file mode 100644 index 0000000..a852025 --- /dev/null +++ b/tests/prefix_classname.xsd @@ -0,0 +1,203 @@ +<?xml version="1.0"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:element name="people"> + <xs:complexType> + <xs:sequence> + <xs:element name="comments" type="comments" maxOccurs="unbounded"/> + <xs:element name="person" maxOccurs="unbounded" type="person"/> + <xs:element name="programmer" maxOccurs="unbounded" type="programmer"/> + <xs:element name="python-programmer" maxOccurs="unbounded" type="python-programmer"/> + <xs:element name="java-programmer" maxOccurs="unbounded" type="java-programmer"/> + </xs:sequence> + </xs:complexType> + </xs:element> + + <xs:element name="comments"> + <xs:complexType mixed="true"> + <xs:sequence> + <!-- + <xs:element name="emp" type="xs:string" /> + --> + <xs:element name="emp" type="xs:string" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + + <xs:element name="person"> + <xs:complexType mixed="0"> + <xs:sequence> + <xs:element name="name" type="xs:string"/> + <xs:element name="interest" type="xs:string" maxOccurs="unbounded" /> + <xs:element name="category" type="xs:integer"/> + <xs:element name="agent" type="agent" maxOccurs="unbounded" /> + <xs:element name="promoter" type="booster" maxOccurs="unbounded" /> + <xs:element name="description" type="xs:string"/> + </xs:sequence> + <xs:attribute name="value" type="xs:ID" /> + <xs:attribute name="id" type="xs:integer" /> + <xs:attribute name="ratio" type="xs:float" /> + <xs:attributeGroup ref="favorites" /> + </xs:complexType> + </xs:element> + + <!-- + <xs:element name="description-a" type="xs:string" substitutionGroup="description" /> + --> + + <xs:element name="programmer"> + <xs:complexType mixed="0"> + <xs:complexContent> + <xs:extension base="person"> + <xs:sequence> + <!-- + <xs:element name="description" type="xs:string"/> + --> + <xs:element name="email" type="xs:string"/> + <xs:element name="elposint" type="xs:positiveInteger"/> + <xs:element name="elnonposint" type="xs:nonPositiveInteger"/> + <xs:element name="elnegint" type="xs:negativeInteger"/> + <xs:element name="elnonnegint" type="xs:nonNegativeInteger"/> + <xs:element name="eldate" type="xs:date"/> + <xs:element name="eldatetime" type="xs:dateTime"/> + <xs:element name="eltoken" type="xs:token"/> + <xs:element name="elshort" type="xs:short"/> + <xs:element name="ellong" type="xs:long"/> + <xs:element name="elparam" type="param"/> + <xs:element name="elarraytypes" type="ArrayTypes"/> + + </xs:sequence> + <xs:attribute name="language" type="xs:string" /> + <xs:attribute name="area"/> + <xs:attribute name="attrposint" type="xs:positiveInteger"/> + <xs:attribute name="attrnonposint" type="xs:nonPositiveInteger"/> + <xs:attribute name="attrnegint" type="xs:negativeInteger"/> + <xs:attribute name="attrnonnegint" type="xs:nonNegativeInteger"/> + </xs:extension> + </xs:complexContent> + </xs:complexType> + </xs:element> + + + <xs:element name="param"> + <xs:annotation> + <xs:documentation>Finding flow attribute unneccesary in practice. A unnamed parameter is unbound/skipped.</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:attribute name="id" type="xs:ID" /> + <xs:attribute name="name" type="xs:NCName" /> + <xs:attribute name="sid" type="xs:NCName" /> + <xs:attribute name="flow" type="FlowType" /> + <xs:attribute name="semantic" type="xs:token" /> + <xs:attribute name="type" type="xs:NMTOKEN" use="required" /> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + + + <xs:simpleType name="ArrayTypes"> + <xs:restriction base="xs:NMTOKEN"> + <xs:enumeration value="float" /> + <xs:enumeration value="int" /> + <xs:enumeration value="Name" /> + <xs:enumeration value="token" /> + </xs:restriction> + </xs:simpleType> + + + + <xs:element name="python-programmer"> + <xs:complexType mixed="0"> + <xs:complexContent> + <xs:extension base="programmer"> + <xs:sequence> + <xs:element name="favorite-editor" type="xs:string"/> + </xs:sequence> + <xs:attribute name="nick-name"/> + </xs:extension> + </xs:complexContent> + </xs:complexType> + </xs:element> + + <xs:element name="java-programmer"> + <xs:complexType mixed="0"> + <xs:complexContent> + <xs:extension base="programmer"> + <xs:sequence> + <xs:element name="favorite-editor" type="xs:string"/> + </xs:sequence> + <xs:attribute name="nick-name"/> + <xs:attribute name="status"/> + </xs:extension> + </xs:complexContent> + </xs:complexType> + </xs:element> + + <xs:element name="agent"> + <xs:complexType> + <xs:sequence> + <xs:element name="firstname" type="xs:string"/> + <xs:element name="lastname" type="xs:string"/> + <xs:element name="priority" type="xs:float"/> + <xs:element name="info" type="info"/> + </xs:sequence> + </xs:complexType> + </xs:element> + + <xs:element name="special-agent" substitutionGroup="agent"> + <xs:complexType> + <xs:sequence> + <xs:element name="firstname" type="xs:string"/> + <xs:element name="lastname" type="xs:string"/> + <xs:element name="priority" type="xs:float"/> + <xs:element name="info" type="info"/> + </xs:sequence> + </xs:complexType> + </xs:element> + + <xs:element name="booster"> + <xs:complexType> + <xs:sequence> + <xs:element name="firstname" type="xs:string"/> + <xs:element name="lastname" type="xs:string"/> + <xs:element name="other-name" type="xs:float"/> + <xs:element name="class" type="xs:float"/> + <xs:element name="other-value" type="xs:float" maxOccurs="unbounded" /> + <xs:element name="type" type="xs:float" maxOccurs="unbounded" /> + <xs:element name="client-handler" maxOccurs="unbounded"> + <xs:complexType> + <xs:sequence> + <xs:element name="fullname" type="xs:string"/> + <xs:element name="refid" type="xs:integer"/> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> + + <!-- Test for element with attributes but no children. + Should use valueOf. + --> + <xs:element name="info"> + <xs:complexType> + <xs:sequence> + </xs:sequence> + <xs:attribute name="name" type="xs:string" /> + <xs:attribute name="type" type="xs:integer" /> + <xs:attribute name="rating" type="xs:float" /> + </xs:complexType> + </xs:element> + + + <xs:attributeGroup name="favorites"> + <xs:attribute name="fruit" /> + <xs:attribute name="vegetable" /> + </xs:attributeGroup> + + +</xs:schema> + diff --git a/tests/prefix_classname1_out.xml b/tests/prefix_classname1_out.xml new file mode 100644 index 0000000..c2e2e7e --- /dev/null +++ b/tests/prefix_classname1_out.xml @@ -0,0 +1,91 @@ +<?xml version="1.0" ?> +<people> + <comments> +1. This is a <emp>foolish</emp> comment. It is <emp>really</emp> important. </comments> + <comments> +2. This is a <emp>silly</emp> comment. It is <emp>very</emp> significant. </comments> + <person ratio="3.2" id="1" value="abcd"> + <name>Alberta</name> + <interest>gardening</interest> + <interest>reading</interest> + <category>5</category> + </person> + <person id="2"> + <name>Bernardo</name> + <interest>programming</interest> + <category>0</category> + <agent> + <firstname>Darren</firstname> + <lastname>Diddly</lastname> + <priority>4.5</priority> + <info rating="5.33" type="321" name="Albert Abasinian"/> + </agent> + </person> + <person id="3"> + <name>Charlie</name> + <interest>people</interest> + <interest>cats</interest> + <interest>dogs</interest> + <category>8</category> + <promoter> + <firstname>David</firstname> + <lastname>Donaldson</lastname> + </promoter> + <promoter> + <firstname>Edward</firstname> + <lastname>Eddleberry</lastname> + </promoter> + </person> + <person id="4"/> + <programmer id="2" language="python" area="xml"> + <name>Charles Carlson</name> + <interest>programming</interest> + <category>2233</category> + <agent> + <firstname>Ernest</firstname> + <lastname>Echo</lastname> + <priority>3.8</priority> + <info rating="5.33" type="321" name="George Gregory"/> + </agent> + <description>A very happy programmer</description> + <email>charles@happyprogrammers.com</email> + <elposint>14</elposint> + <elnonposint>0</elnonposint> + <elnegint>-12</elnegint> + <elnonnegint>4</elnonnegint> + <eldate>2005-04-26</eldate> + <eldatetime>2005-04-26T10:11:12</eldatetime> + <eltoken>aa bb cc dd</eltoken> + <elshort>123</elshort> + <ellong>13241234123412341234</ellong> + <elparam semantic="a big semantic" name="Davy" id="id001"/> + </programmer> + <python-programmer vegetable="tomato" fruit="peach" ratio="8.699999999999999" id="232" value="abcd" language="python" area="xml" nick-name="davy"> + <name>Darrel Dawson</name> + <interest>hang gliding</interest> + <category>3344</category> + <agent> + <firstname>Harvey</firstname> + <lastname>Hippolite</lastname> + <priority>5.2</priority> + <info rating="6.55" type="543" name="Harvey Hippolite"/> + </agent> + <description>An object-orientated programmer</description> + <email>darrel@happyprogrammers.com</email> + <favorite-editor>jed</favorite-editor> + </python-programmer> + <java-programmer vegetable="tomato" fruit="peach" ratio="8.699999999999999" id="232" value="abcd" language="python" area="xml" nick-name="davy"> + <name>Darrel Dawson</name> + <interest>hang gliding</interest> + <category>3344</category> + <agent> + <firstname>Harvey</firstname> + <lastname>Hippolite</lastname> + <priority>5.2</priority> + <info rating="6.55" type="543" name="Harvey Hippolite"/> + </agent> + <description>An object-orientated programmer</description> + <email>darrel@happyprogrammers.com</email> + <favorite-editor>jed</favorite-editor> + </java-programmer> +</people> diff --git a/tests/prefix_classname1_sub.py b/tests/prefix_classname1_sub.py new file mode 100644 index 0000000..a196947 --- /dev/null +++ b/tests/prefix_classname1_sub.py @@ -0,0 +1,292 @@ +#!/usr/bin/env python + +# +# Generated by generateDS.py. +# +# Command line options: +# ('--no-dates', '') +# ('--no-versions', '') +# ('-p', 'tomato_') +# ('--member-specs', 'list') +# ('-f', '') +# ('-o', 'tests/prefix_classname2_sup.py') +# ('-s', 'tests/prefix_classname2_sub.py') +# ('--super', 'prefix_classname2_sup') +# +# Command line arguments: +# tests/prefix_classname.xsd +# +# Command line: +# generateDS.py --no-dates --no-versions -p "tomato_" --member-specs="list" -f -o "tests/prefix_classname2_sup.py" -s "tests/prefix_classname2_sub.py" --super="prefix_classname2_sup" tests/prefix_classname.xsd +# +# Current working directory (os.getcwd()): +# generateds +# + +import sys + +import prefix_classname2_sup as supermod + +etree_ = None +Verbose_import_ = False +( + XMLParser_import_none, XMLParser_import_lxml, + XMLParser_import_elementtree +) = range(3) +XMLParser_import_library = None +try: + # lxml + from lxml import etree as etree_ + XMLParser_import_library = XMLParser_import_lxml + if Verbose_import_: + print("running with lxml.etree") +except ImportError: + try: + # cElementTree from Python 2.5+ + import xml.etree.cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree on Python 2.5+") + except ImportError: + try: + # ElementTree from Python 2.5+ + import xml.etree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree on Python 2.5+") + except ImportError: + try: + # normal cElementTree install + import cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree") + except ImportError: + try: + # normal ElementTree install + import elementtree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree") + except ImportError: + raise ImportError( + "Failed to import ElementTree from any known place") + + +def parsexml_(*args, **kwargs): + if (XMLParser_import_library == XMLParser_import_lxml and + 'parser' not in kwargs): + # Use the lxml ElementTree compatible parser so that, e.g., + # we ignore comments. + kwargs['parser'] = etree_.ETCompatXMLParser() + doc = etree_.parse(*args, **kwargs) + return doc + +# +# Globals +# + +ExternalEncoding = 'ascii' + +# +# Data representation classes +# + + +class tomato_peopleSub(supermod.tomato_people): + def __init__(self, comments=None, person=None, programmer=None, python_programmer=None, java_programmer=None): + super(tomato_peopleSub, self).__init__(comments, person, programmer, python_programmer, java_programmer, ) +supermod.tomato_people.subclass = tomato_peopleSub +# end class tomato_peopleSub + + +class tomato_commentsSub(supermod.tomato_comments): + def __init__(self, emp=None, valueOf_=None, mixedclass_=None, content_=None): + super(tomato_commentsSub, self).__init__(emp, valueOf_, mixedclass_, content_, ) +supermod.tomato_comments.subclass = tomato_commentsSub +# end class tomato_commentsSub + + +class tomato_personSub(supermod.tomato_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, extensiontype_=None): + super(tomato_personSub, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, extensiontype_, ) +supermod.tomato_person.subclass = tomato_personSub +# end class tomato_personSub + + +class tomato_programmerSub(supermod.tomato_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, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, extensiontype_=None): + super(tomato_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, eldatetime, eltoken, elshort, ellong, elparam, elarraytypes, extensiontype_, ) +supermod.tomato_programmer.subclass = tomato_programmerSub +# end class tomato_programmerSub + + +class tomato_paramSub(supermod.tomato_param): + def __init__(self, semantic=None, name=None, flow=None, sid=None, type_=None, id=None, valueOf_=None): + super(tomato_paramSub, self).__init__(semantic, name, flow, sid, type_, id, valueOf_, ) +supermod.tomato_param.subclass = tomato_paramSub +# end class tomato_paramSub + + +class tomato_python_programmerSub(supermod.tomato_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, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, nick_name=None, favorite_editor=None): + super(tomato_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, eldatetime, eltoken, elshort, ellong, elparam, elarraytypes, nick_name, favorite_editor, ) +supermod.tomato_python_programmer.subclass = tomato_python_programmerSub +# end class tomato_python_programmerSub + + +class tomato_java_programmerSub(supermod.tomato_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, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, status=None, nick_name=None, favorite_editor=None): + super(tomato_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, eldatetime, eltoken, elshort, ellong, elparam, elarraytypes, status, nick_name, favorite_editor, ) +supermod.tomato_java_programmer.subclass = tomato_java_programmerSub +# end class tomato_java_programmerSub + + +class tomato_agentSub(supermod.tomato_agent): + def __init__(self, firstname=None, lastname=None, priority=None, info=None): + super(tomato_agentSub, self).__init__(firstname, lastname, priority, info, ) +supermod.tomato_agent.subclass = tomato_agentSub +# end class tomato_agentSub + + +class tomato_special_agentSub(supermod.tomato_special_agent): + def __init__(self, firstname=None, lastname=None, priority=None, info=None): + super(tomato_special_agentSub, self).__init__(firstname, lastname, priority, info, ) +supermod.tomato_special_agent.subclass = tomato_special_agentSub +# end class tomato_special_agentSub + + +class tomato_boosterSub(supermod.tomato_booster): + def __init__(self, firstname=None, lastname=None, other_name=None, class_=None, other_value=None, type_=None, client_handler=None): + super(tomato_boosterSub, self).__init__(firstname, lastname, other_name, class_, other_value, type_, client_handler, ) +supermod.tomato_booster.subclass = tomato_boosterSub +# end class tomato_boosterSub + + +class tomato_infoSub(supermod.tomato_info): + def __init__(self, rating=None, type_=None, name=None): + super(tomato_infoSub, self).__init__(rating, type_, name, ) +supermod.tomato_info.subclass = tomato_infoSub +# end class tomato_infoSub + + +class tomato_client_handlerTypeSub(supermod.tomato_client_handlerType): + def __init__(self, fullname=None, refid=None): + super(tomato_client_handlerTypeSub, self).__init__(fullname, refid, ) +supermod.tomato_client_handlerType.subclass = tomato_client_handlerTypeSub +# end class tomato_client_handlerTypeSub + + +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): + doc = parsexml_(inFilename) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'people' + rootClass = supermod.tomato_people + 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 parseEtree(inFilename, silence=False): + doc = parsexml_(inFilename) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'people' + rootClass = supermod.tomato_people + 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): + from StringIO import StringIO + doc = parsexml_(StringIO(inString)) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'people' + rootClass = supermod.tomato_people + 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 parseLiteral(inFilename, silence=False): + doc = parsexml_(inFilename) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'people' + rootClass = supermod.tomato_people + 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 prefix_classname2_sup import *\n\n') + sys.stdout.write('import prefix_classname2_sup 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 ???.py <infilename> +""" + + +def usage(): + print USAGE_TEXT + sys.exit(1) + + +def main(): + args = sys.argv[1:] + if len(args) != 1: + usage() + infilename = args[0] + parse(infilename) + + +if __name__ == '__main__': + #import pdb; pdb.set_trace() + main() diff --git a/tests/prefix_classname1_sup.py b/tests/prefix_classname1_sup.py new file mode 100644 index 0000000..5f2ebd0 --- /dev/null +++ b/tests/prefix_classname1_sup.py @@ -0,0 +1,2897 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# +# Generated by generateDS.py. +# +# Command line options: +# ('--no-dates', '') +# ('--no-versions', '') +# ('-p', 'tomato_') +# ('--member-specs', 'list') +# ('-f', '') +# ('-o', 'tests/prefix_classname2_sup.py') +# ('-s', 'tests/prefix_classname2_sub.py') +# ('--super', 'prefix_classname2_sup') +# +# Command line arguments: +# tests/prefix_classname.xsd +# +# Command line: +# generateDS.py --no-dates --no-versions -p "tomato_" --member-specs="list" -f -o "tests/prefix_classname2_sup.py" -s "tests/prefix_classname2_sub.py" --super="prefix_classname2_sup" tests/prefix_classname.xsd +# +# Current working directory (os.getcwd()): +# generateds +# + +import sys +import getopt +import re as re_ +import base64 +import datetime as datetime_ + +etree_ = None +Verbose_import_ = False +( + XMLParser_import_none, XMLParser_import_lxml, + XMLParser_import_elementtree +) = range(3) +XMLParser_import_library = None +try: + # lxml + from lxml import etree as etree_ + XMLParser_import_library = XMLParser_import_lxml + if Verbose_import_: + print("running with lxml.etree") +except ImportError: + try: + # cElementTree from Python 2.5+ + import xml.etree.cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree on Python 2.5+") + except ImportError: + try: + # ElementTree from Python 2.5+ + import xml.etree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree on Python 2.5+") + except ImportError: + try: + # normal cElementTree install + import cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree") + except ImportError: + try: + # normal ElementTree install + import elementtree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree") + except ImportError: + raise ImportError( + "Failed to import ElementTree from any known place") + + +def parsexml_(*args, **kwargs): + if (XMLParser_import_library == XMLParser_import_lxml and + 'parser' not in kwargs): + # Use the lxml ElementTree compatible parser so that, e.g., + # we ignore comments. + kwargs['parser'] = etree_.ETCompatXMLParser() + doc = etree_.parse(*args, **kwargs) + return doc + +# +# User methods +# +# Calls to the methods in these classes are generated by generateDS.py. +# You can replace these methods by re-implementing the following class +# in a module named generatedssuper.py. + +try: + from generatedssuper import GeneratedsSuper +except ImportError, exp: + + class GeneratedsSuper(object): + tzoff_pattern = re_.compile(r'(\+|-)((0\d|1[0-3]):[0-5]\d|14:00)$') + class _FixedOffsetTZ(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, 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, input_name=''): + return input_data + def gds_format_integer(self, input_data, input_name=''): + return '%d' % input_data + def gds_validate_integer(self, input_data, node, input_name=''): + return input_data + def gds_format_integer_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_integer_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + try: + float(value) + except (TypeError, ValueError): + raise_parse_error(node, 'Requires sequence of integers') + return input_data + def gds_format_float(self, input_data, input_name=''): + return ('%.15f' % input_data).rstrip('0') + def gds_validate_float(self, input_data, node, input_name=''): + return input_data + def gds_format_float_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_float_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + try: + float(value) + except (TypeError, ValueError): + raise_parse_error(node, 'Requires sequence of floats') + return input_data + def gds_format_double(self, input_data, input_name=''): + return '%e' % input_data + def gds_validate_double(self, input_data, node, input_name=''): + return input_data + def gds_format_double_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_double_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + try: + float(value) + except (TypeError, ValueError): + raise_parse_error(node, 'Requires sequence of doubles') + return input_data + def gds_format_boolean(self, input_data, input_name=''): + return ('%s' % input_data).lower() + def gds_validate_boolean(self, input_data, node, input_name=''): + return input_data + def gds_format_boolean_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_boolean_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + if value not in ('true', '1', 'false', '0', ): + raise_parse_error( + node, + 'Requires sequence of booleans ' + '("true", "1", "false", "0")') + return input_data + def gds_validate_datetime(self, input_data, node, input_name=''): + return input_data + def gds_format_datetime(self, input_data, input_name=''): + 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, 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, 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 + @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())) + + +# +# If you have installed IPython you can uncomment and use the following. +# IPython is available from http://ipython.scipy.org/. +# + +## from IPython.Shell import IPShellEmbed +## args = '' +## ipshell = IPShellEmbed(args, +## banner = 'Dropping into IPython', +## exit_msg = 'Leaving Interpreter, back to program.') + +# Then use the following line where and when you want to drop into the +# IPython shell: +# ipshell('<some message> -- Entering ipshell.\nHit Ctrl-D to exit') + +# +# Globals +# + +ExternalEncoding = 'ascii' +Tag_pattern_ = re_.compile(r'({.*})?(.*)') +String_cleanup_pat_ = re_.compile(r"[\n\r\s]+") +Namespace_extract_pat_ = re_.compile(r'{(.*)}(.*)') + +# +# Support/utility functions. +# + + +def showIndent(outfile, level, pretty_print=True): + if pretty_print: + for idx in range(level): + outfile.write(' ') + + +def quote_xml(inStr): + if not inStr: + return '' + s1 = (isinstance(inStr, basestring) and inStr or + '%s' % inStr) + s1 = s1.replace('&', '&') + s1 = s1.replace('<', '<') + s1 = s1.replace('>', '>') + return s1 + + +def quote_attrib(inStr): + s1 = (isinstance(inStr, basestring) and inStr or + '%s' % inStr) + s1 = s1.replace('&', '&') + s1 = s1.replace('<', '<') + s1 = s1.replace('>', '>') + if '"' in s1: + if "'" in s1: + s1 = '"%s"' % s1.replace('"', """) + else: + s1 = "'%s'" % s1 + else: + s1 = '"%s"' % s1 + return s1 + + +def quote_python(inStr): + s1 = inStr + if s1.find("'") == -1: + if s1.find('\n') == -1: + return "'%s'" % s1 + else: + return "'''%s'''" % s1 + else: + if s1.find('"') != -1: + s1 = s1.replace('"', '\\"') + if s1.find('\n') == -1: + return '"%s"' % s1 + else: + return '"""%s"""' % s1 + + +def get_all_text_(node): + if node.text is not None: + text = node.text + else: + text = '' + for child in node: + if child.tail is not None: + text += child.tail + return text + + +def find_attr_value_(attr_name, node): + attrs = node.attrib + attr_parts = attr_name.split(':') + value = None + if len(attr_parts) == 1: + value = attrs.get(attr_name) + elif len(attr_parts) == 2: + prefix, name = attr_parts + namespace = node.nsmap.get(prefix) + if namespace is not None: + value = attrs.get('{%s}%s' % (namespace, name, )) + return value + + +class GDSParseError(Exception): + pass + + +def raise_parse_error(node, msg): + if XMLParser_import_library == XMLParser_import_lxml: + msg = '%s (element %s/line %d)' % ( + msg, node.tag, node.sourceline, ) + else: + msg = '%s (element %s)' % (msg, node.tag, ) + raise GDSParseError(msg) + + +class MixedContainer: + # Constants for category: + CategoryNone = 0 + CategoryText = 1 + CategorySimple = 2 + CategoryComplex = 3 + # Constants for content_type: + TypeNone = 0 + TypeText = 1 + TypeString = 2 + TypeInteger = 3 + TypeFloat = 4 + TypeDecimal = 5 + TypeDouble = 6 + TypeBoolean = 7 + TypeBase64 = 8 + def __init__(self, category, content_type, name, value): + self.category = category + self.content_type = content_type + self.name = name + self.value = value + def getCategory(self): + return self.category + def getContenttype(self, content_type): + return self.content_type + def getValue(self): + return self.value + def getName(self): + return self.name + def export(self, outfile, level, name, namespace, pretty_print=True): + if self.category == MixedContainer.CategoryText: + # Prevent exporting empty content as empty lines. + if self.value.strip(): + outfile.write(self.value) + elif self.category == MixedContainer.CategorySimple: + self.exportSimple(outfile, level, name) + else: # category == MixedContainer.CategoryComplex + self.value.export(outfile, level, namespace, name, pretty_print) + def exportSimple(self, outfile, level, name): + if self.content_type == MixedContainer.TypeString: + outfile.write('<%s>%s</%s>' % ( + self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeInteger or \ + self.content_type == MixedContainer.TypeBoolean: + outfile.write('<%s>%d</%s>' % ( + self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeFloat or \ + self.content_type == MixedContainer.TypeDecimal: + outfile.write('<%s>%f</%s>' % ( + self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeDouble: + outfile.write('<%s>%g</%s>' % ( + self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeBase64: + outfile.write('<%s>%s</%s>' % ( + self.name, base64.b64encode(self.value), self.name)) + def 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): + self.name = name + self.data_type = data_type + self.container = container + def set_name(self, name): self.name = name + def get_name(self): return self.name + def set_data_type(self, data_type): self.data_type = data_type + def get_data_type_chain(self): return self.data_type + def get_data_type(self): + if isinstance(self.data_type, list): + if len(self.data_type) > 0: + return self.data_type[-1] + else: + return 'xs:string' + else: + return self.data_type + def set_container(self, container): self.container = container + def get_container(self): return self.container + + +def _cast(typ, value): + if typ is None or value is None: + return value + return typ(value) + +# +# Data representation classes. +# + + +class tomato_people(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('comments', 'comments', 1), + MemberSpec_('person', 'person', 1), + MemberSpec_('programmer', 'programmer', 1), + MemberSpec_('python_programmer', 'python-programmer', 1), + MemberSpec_('java_programmer', 'java-programmer', 1), + ] + subclass = None + superclass = None + def __init__(self, comments=None, person=None, programmer=None, python_programmer=None, java_programmer=None): + self.original_tagname_ = None + if comments is None: + self.comments = [] + else: + self.comments = comments + if person is None: + self.person = [] + else: + self.person = person + if programmer is None: + self.programmer = [] + else: + self.programmer = programmer + if python_programmer is None: + self.python_programmer = [] + else: + self.python_programmer = python_programmer + if java_programmer is None: + self.java_programmer = [] + else: + self.java_programmer = java_programmer + def factory(*args_, **kwargs_): + if tomato_people.subclass: + return tomato_people.subclass(*args_, **kwargs_) + else: + return tomato_people(*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_at(self, index, value): self.comments.insert(index, value) + def replace_comments_at(self, index, value): self.comments[index] = value + 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_at(self, index, value): self.person.insert(index, value) + def replace_person_at(self, index, value): self.person[index] = value + 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_at(self, index, value): self.programmer.insert(index, value) + def replace_programmer_at(self, index, value): self.programmer[index] = value + 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_at(self, index, value): self.python_programmer.insert(index, value) + def replace_python_programmer_at(self, index, value): self.python_programmer[index] = value + 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_at(self, index, value): self.java_programmer.insert(index, value) + def replace_java_programmer_at(self, index, value): self.java_programmer[index] = value + def hasContent_(self): + if ( + self.comments or + self.person or + self.programmer or + self.python_programmer or + self.java_programmer + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='people', namespacedef_='', pretty_print=True): + 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_='people') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='people', 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_='people'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='people', 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 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 exportLiteral(self, outfile, level, name_='people'): + 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_): + showIndent(outfile, level) + outfile.write('comments=[\n') + level += 1 + for comments_ in self.comments: + showIndent(outfile, level) + outfile.write('model_.comments(\n') + comments_.exportLiteral(outfile, level) + showIndent(outfile, level) + outfile.write('),\n') + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + showIndent(outfile, level) + outfile.write('person=[\n') + level += 1 + for person_ in self.person: + showIndent(outfile, level) + outfile.write('model_.person(\n') + person_.exportLiteral(outfile, level) + showIndent(outfile, level) + outfile.write('),\n') + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + showIndent(outfile, level) + outfile.write('programmer=[\n') + level += 1 + for programmer_ in self.programmer: + showIndent(outfile, level) + outfile.write('model_.programmer(\n') + programmer_.exportLiteral(outfile, level) + showIndent(outfile, level) + outfile.write('),\n') + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + showIndent(outfile, level) + outfile.write('python_programmer=[\n') + 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') + showIndent(outfile, level) + outfile.write('),\n') + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + showIndent(outfile, level) + outfile.write('java_programmer=[\n') + 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') + showIndent(outfile, level) + outfile.write('),\n') + level -= 1 + 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): + pass + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + if nodeName_ == 'comments': + obj_ = tomato_comments.factory() + obj_.build(child_) + self.comments.append(obj_) + obj_.original_tagname_ = 'comments' + elif nodeName_ == 'person': + class_obj_ = self.get_class_obj_(child_, tomato_person) + obj_ = class_obj_.factory() + obj_.build(child_) + self.person.append(obj_) + obj_.original_tagname_ = 'person' + elif nodeName_ == 'programmer': + class_obj_ = self.get_class_obj_(child_, tomato_programmer) + obj_ = class_obj_.factory() + obj_.build(child_) + self.programmer.append(obj_) + obj_.original_tagname_ = 'programmer' + elif nodeName_ == 'python-programmer': + obj_ = tomato_python_programmer.factory() + obj_.build(child_) + self.python_programmer.append(obj_) + obj_.original_tagname_ = 'python-programmer' + elif nodeName_ == 'java-programmer': + obj_ = tomato_java_programmer.factory() + obj_.build(child_) + self.java_programmer.append(obj_) + obj_.original_tagname_ = 'java-programmer' +# end class tomato_people + + +class tomato_comments(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('emp', 'xs:string', 1), + MemberSpec_('valueOf_', [], 0), + ] + subclass = None + superclass = None + def __init__(self, emp=None, valueOf_=None, mixedclass_=None, content_=None): + self.original_tagname_ = None + if emp is None: + self.emp = [] + else: + self.emp = emp + self.valueOf_ = valueOf_ + if mixedclass_ is None: + self.mixedclass_ = MixedContainer + else: + self.mixedclass_ = mixedclass_ + if content_ is None: + self.content_ = [] + else: + self.content_ = content_ + self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): + if tomato_comments.subclass: + return tomato_comments.subclass(*args_, **kwargs_) + else: + return tomato_comments(*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_at(self, index, value): self.emp.insert(index, value) + def replace_emp_at(self, index, value): self.emp[index] = value + def get_valueOf_(self): return self.valueOf_ + def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def hasContent_(self): + if ( + self.emp or + self.valueOf_ + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='comments', namespacedef_='', pretty_print=True): + 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_='comments') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='comments', 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_='comments'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='comments', fromsubclass_=False, pretty_print=True): + if not fromsubclass_: + for item_ in self.content_: + item_.export(outfile, level, item_.name, namespace_, pretty_print=pretty_print) + def exportLiteral(self, outfile, level, name_='comments'): + level += 1 + 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_): + pass + def exportLiteralChildren(self, outfile, level, name_): + showIndent(outfile, level) + outfile.write('content_ = [\n') + for item_ in self.content_: + item_.exportLiteral(outfile, level, name_) + showIndent(outfile, level) + outfile.write('],\n') + pass + def build(self, node): + 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, + MixedContainer.TypeNone, '', node.text) + self.content_.append(obj_) + 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_ == 'emp' and child_.text is not None: + valuestr_ = child_.text + obj_ = self.mixedclass_(MixedContainer.CategorySimple, + MixedContainer.TypeString, 'emp', valuestr_) + self.content_.append(obj_) + if not fromsubclass_ and child_.tail is not None: + obj_ = self.mixedclass_(MixedContainer.CategoryText, + MixedContainer.TypeNone, '', child_.tail) + self.content_.append(obj_) +# end class tomato_comments + + +class tomato_person(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('vegetable', 'xs:string', 0), + MemberSpec_('fruit', 'xs:string', 0), + MemberSpec_('ratio', 'xs:float', 0), + MemberSpec_('id', 'xs:integer', 0), + MemberSpec_('value', 'xs:string', 0), + MemberSpec_('name', 'xs:string', 0), + MemberSpec_('interest', 'xs:string', 1), + MemberSpec_('category', 'xs:integer', 0), + MemberSpec_('agent', 'agent', 1), + MemberSpec_('promoter', 'booster', 1), + MemberSpec_('description', 'xs:string', 0), + ] + 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, extensiontype_=None): + self.original_tagname_ = None + self.vegetable = _cast(None, vegetable) + self.fruit = _cast(None, fruit) + self.ratio = _cast(float, ratio) + self.id = _cast(int, id) + self.value = _cast(None, value) + self.name = name + if interest is None: + self.interest = [] + else: + self.interest = interest + self.category = category + if agent is None: + self.agent = [] + else: + self.agent = agent + if promoter is None: + self.promoter = [] + else: + self.promoter = promoter + self.description = description + self.extensiontype_ = extensiontype_ + def factory(*args_, **kwargs_): + if tomato_person.subclass: + return tomato_person.subclass(*args_, **kwargs_) + else: + return tomato_person(*args_, **kwargs_) + factory = staticmethod(factory) + def get_name(self): return self.name + def set_name(self, name): self.name = name + 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_at(self, index, value): self.interest.insert(index, value) + def replace_interest_at(self, index, value): self.interest[index] = value + def get_category(self): return self.category + def set_category(self, category): self.category = category + 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_at(self, index, value): self.agent.insert(index, value) + def replace_agent_at(self, index, value): self.agent[index] = value + 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_at(self, index, value): self.promoter.insert(index, value) + def replace_promoter_at(self, index, value): self.promoter[index] = value + def get_description(self): return self.description + def set_description(self, description): self.description = description + def get_vegetable(self): return self.vegetable + def set_vegetable(self, vegetable): self.vegetable = vegetable + def get_fruit(self): return self.fruit + def set_fruit(self, fruit): self.fruit = fruit + def get_ratio(self): return self.ratio + def set_ratio(self, ratio): self.ratio = ratio + def get_id(self): return self.id + def set_id(self, id): self.id = id + def get_value(self): return self.value + def set_value(self, value): self.value = value + def get_extensiontype_(self): return self.extensiontype_ + def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_ + 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 + else: + return False + def export(self, outfile, level, namespace_='', name_='person', namespacedef_='', pretty_print=True): + 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_='person') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='person', 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_='person'): + if self.vegetable is not None and 'vegetable' not in already_processed: + already_processed.add('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.add('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.add('ratio') + outfile.write(' ratio="%s"' % self.gds_format_float(self.ratio, input_name='ratio')) + if self.id is not None and 'id' not in already_processed: + 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.add('value') + outfile.write(' value=%s' % (self.gds_format_string(quote_attrib(self.value).encode(ExternalEncoding), input_name='value'), )) + 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_='person', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.name is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sname>%s</%sname>%s' % (namespace_, self.gds_format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_, eol_)) + for interest_ in self.interest: + showIndent(outfile, level, pretty_print) + outfile.write('<%sinterest>%s</%sinterest>%s' % (namespace_, self.gds_format_string(quote_xml(interest_).encode(ExternalEncoding), input_name='interest'), namespace_, eol_)) + if self.category is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%scategory>%s</%scategory>%s' % (namespace_, self.gds_format_integer(self.category, input_name='category'), namespace_, eol_)) + for agent_ in self.agent: + agent_.export(outfile, level, namespace_, name_='agent', pretty_print=pretty_print) + for promoter_ in self.promoter: + promoter_.export(outfile, level, namespace_, name_='promoter', pretty_print=pretty_print) + if self.description is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdescription>%s</%sdescription>%s' % (namespace_, self.gds_format_string(quote_xml(self.description).encode(ExternalEncoding), input_name='description'), namespace_, eol_)) + def exportLiteral(self, outfile, level, name_='person'): + 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_): + if self.vegetable is not None and 'vegetable' not in already_processed: + already_processed.add('vegetable') + showIndent(outfile, level) + outfile.write('vegetable="%s",\n' % (self.vegetable,)) + if self.fruit is not None and 'fruit' not in already_processed: + already_processed.add('fruit') + showIndent(outfile, level) + outfile.write('fruit="%s",\n' % (self.fruit,)) + if self.ratio is not None and 'ratio' not in already_processed: + 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.add('id') + showIndent(outfile, level) + outfile.write('id=%d,\n' % (self.id,)) + if self.value is not None and 'value' not in already_processed: + already_processed.add('value') + showIndent(outfile, level) + outfile.write('value="%s",\n' % (self.value,)) + def exportLiteralChildren(self, outfile, level, name_): + if self.name is not None: + showIndent(outfile, level) + outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) + showIndent(outfile, level) + outfile.write('interest=[\n') + level += 1 + for interest_ in self.interest: + showIndent(outfile, level) + outfile.write('%s,\n' % quote_python(interest_).encode(ExternalEncoding)) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + if self.category is not None: + showIndent(outfile, level) + outfile.write('category=%d,\n' % self.category) + 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) + showIndent(outfile, level) + outfile.write('),\n') + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + showIndent(outfile, level) + outfile.write('promoter=[\n') + level += 1 + for promoter_ in self.promoter: + showIndent(outfile, level) + outfile.write('model_.booster(\n') + promoter_.exportLiteral(outfile, level, name_='booster') + showIndent(outfile, level) + outfile.write('),\n') + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + if self.description is not None: + showIndent(outfile, level) + outfile.write('description=%s,\n' % quote_python(self.description).encode(ExternalEncoding)) + 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_('vegetable', node) + if value is not None and 'vegetable' not in already_processed: + already_processed.add('vegetable') + self.vegetable = value + 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_('ratio', node) + if value is not None and 'ratio' not in already_processed: + already_processed.add('ratio') + try: + self.ratio = float(value) + except ValueError, exp: + raise ValueError('Bad float/double attribute (ratio): %s' % exp) + value = find_attr_value_('id', node) + if value is not None and 'id' not in already_processed: + already_processed.add('id') + try: + self.id = int(value) + except ValueError, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + 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_('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: + raise_parse_error(child_, 'requires integer: %s' % exp) + ival_ = self.gds_validate_integer(ival_, node, 'category') + self.category = ival_ + elif nodeName_ == 'agent': + obj_ = tomato_agent.factory() + obj_.build(child_) + self.agent.append(obj_) + obj_.original_tagname_ = 'agent' + elif nodeName_ == 'promoter': + obj_ = tomato_booster.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 tomato_person + + +class tomato_programmer(tomato_person): + member_data_items_ = [ + MemberSpec_('language', 'xs:string', 0), + MemberSpec_('area', 'xs:string', 0), + MemberSpec_('attrnegint', 'xs:negativeInteger', 0), + MemberSpec_('attrposint', 'xs:positiveInteger', 0), + MemberSpec_('attrnonnegint', 'xs:nonNegativeInteger', 0), + MemberSpec_('attrnonposint', 'xs:nonPositiveInteger', 0), + MemberSpec_('email', 'xs:string', 0), + MemberSpec_('elposint', 'xs:positiveInteger', 0), + MemberSpec_('elnonposint', 'xs:nonPositiveInteger', 0), + MemberSpec_('elnegint', 'xs:negativeInteger', 0), + MemberSpec_('elnonnegint', 'xs:nonNegativeInteger', 0), + MemberSpec_('eldate', 'xs:date', 0), + MemberSpec_('eldatetime', 'xs:dateTime', 0), + MemberSpec_('eltoken', 'xs:token', 0), + MemberSpec_('elshort', 'xs:short', 0), + MemberSpec_('ellong', 'xs:long', 0), + MemberSpec_('elparam', 'param', 0), + MemberSpec_('elarraytypes', ['ArrayTypes', 'xs:NMTOKEN'], 0), + ] + subclass = None + superclass = tomato_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, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, extensiontype_=None): + self.original_tagname_ = None + super(tomato_programmer, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, 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.email = email + self.elposint = elposint + self.elnonposint = elnonposint + self.elnegint = elnegint + self.elnonnegint = elnonnegint + if isinstance(eldate, basestring): + initvalue_ = datetime_.datetime.strptime(eldate, '%Y-%m-%d').date() + else: + initvalue_ = eldate + self.eldate = initvalue_ + if isinstance(eldatetime, basestring): + initvalue_ = datetime_.datetime.strptime(eldatetime, '%Y-%m-%dT%H:%M:%S') + else: + initvalue_ = eldatetime + self.eldatetime = initvalue_ + self.eltoken = eltoken + self.elshort = elshort + self.ellong = ellong + self.elparam = elparam + self.elarraytypes = elarraytypes + self.extensiontype_ = extensiontype_ + def factory(*args_, **kwargs_): + if tomato_programmer.subclass: + return tomato_programmer.subclass(*args_, **kwargs_) + else: + return tomato_programmer(*args_, **kwargs_) + factory = staticmethod(factory) + def get_email(self): return self.email + def set_email(self, email): self.email = email + def get_elposint(self): return self.elposint + def set_elposint(self, elposint): self.elposint = elposint + def get_elnonposint(self): return self.elnonposint + def set_elnonposint(self, elnonposint): self.elnonposint = elnonposint + def get_elnegint(self): return self.elnegint + def set_elnegint(self, elnegint): self.elnegint = elnegint + def get_elnonnegint(self): return self.elnonnegint + def set_elnonnegint(self, elnonnegint): self.elnonnegint = elnonnegint + def get_eldate(self): return self.eldate + def set_eldate(self, eldate): self.eldate = eldate + def get_eldatetime(self): return self.eldatetime + def set_eldatetime(self, eldatetime): self.eldatetime = eldatetime + def get_eltoken(self): return self.eltoken + def set_eltoken(self, eltoken): self.eltoken = eltoken + def get_elshort(self): return self.elshort + def set_elshort(self, elshort): self.elshort = elshort + def get_ellong(self): return self.ellong + def set_ellong(self, ellong): self.ellong = ellong + def get_elparam(self): return self.elparam + def set_elparam(self, elparam): self.elparam = elparam + def get_elarraytypes(self): return self.elarraytypes + def set_elarraytypes(self, elarraytypes): self.elarraytypes = elarraytypes + def get_language(self): return self.language + def set_language(self, language): self.language = language + def get_area(self): return self.area + def set_area(self, area): self.area = area + def get_attrnegint(self): return self.attrnegint + def set_attrnegint(self, attrnegint): self.attrnegint = attrnegint + def get_attrposint(self): return self.attrposint + def set_attrposint(self, attrposint): self.attrposint = attrposint + def get_attrnonnegint(self): return self.attrnonnegint + def set_attrnonnegint(self, attrnonnegint): self.attrnonnegint = attrnonnegint + def get_attrnonposint(self): return self.attrnonposint + def set_attrnonposint(self, attrnonposint): self.attrnonposint = attrnonposint + 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. + pass + 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.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(tomato_programmer, self).hasContent_() + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='programmer', namespacedef_='', pretty_print=True): + 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_='programmer') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='programmer', 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_='programmer'): + super(tomato_programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='programmer') + if self.language is not None and 'language' not in already_processed: + already_processed.add('language') + outfile.write(' language=%s' % (self.gds_format_string(quote_attrib(self.language).encode(ExternalEncoding), input_name='language'), )) + if self.area is not None and 'area' not in already_processed: + already_processed.add('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.add('attrnegint') + outfile.write(' attrnegint="%s"' % self.gds_format_integer(self.attrnegint, input_name='attrnegint')) + if self.attrposint is not None and 'attrposint' not in already_processed: + 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.add('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.add('attrnonposint') + outfile.write(' attrnonposint="%s"' % self.gds_format_integer(self.attrnonposint, input_name='attrnonposint')) + 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_='programmer', fromsubclass_=False, pretty_print=True): + super(tomato_programmer, 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, pretty_print) + outfile.write('<%semail>%s</%semail>%s' % (namespace_, self.gds_format_string(quote_xml(self.email).encode(ExternalEncoding), input_name='email'), namespace_, eol_)) + if self.elposint is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%selposint>%s</%selposint>%s' % (namespace_, self.gds_format_integer(self.elposint, input_name='elposint'), namespace_, eol_)) + if self.elnonposint is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%selnonposint>%s</%selnonposint>%s' % (namespace_, self.gds_format_integer(self.elnonposint, input_name='elnonposint'), namespace_, eol_)) + if self.elnegint is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%selnegint>%s</%selnegint>%s' % (namespace_, self.gds_format_integer(self.elnegint, input_name='elnegint'), namespace_, eol_)) + if self.elnonnegint is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%selnonnegint>%s</%selnonnegint>%s' % (namespace_, self.gds_format_integer(self.elnonnegint, input_name='elnonnegint'), namespace_, eol_)) + if self.eldate is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%seldate>%s</%seldate>%s' % (namespace_, self.gds_format_date(self.eldate, input_name='eldate'), namespace_, eol_)) + if self.eldatetime is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%seldatetime>%s</%seldatetime>%s' % (namespace_, self.gds_format_datetime(self.eldatetime, input_name='eldatetime'), namespace_, eol_)) + if self.eltoken is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%seltoken>%s</%seltoken>%s' % (namespace_, self.gds_format_string(quote_xml(self.eltoken).encode(ExternalEncoding), input_name='eltoken'), namespace_, eol_)) + if self.elshort is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%selshort>%s</%selshort>%s' % (namespace_, self.gds_format_integer(self.elshort, input_name='elshort'), namespace_, eol_)) + if self.ellong is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sellong>%s</%sellong>%s' % (namespace_, self.gds_format_integer(self.ellong, input_name='ellong'), namespace_, 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, pretty_print) + outfile.write('<%selarraytypes>%s</%selarraytypes>%s' % (namespace_, self.gds_format_string(quote_xml(self.elarraytypes).encode(ExternalEncoding), input_name='elarraytypes'), namespace_, eol_)) + def exportLiteral(self, outfile, level, name_='programmer'): + 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_): + if self.language is not None and 'language' not in already_processed: + already_processed.add('language') + showIndent(outfile, level) + outfile.write('language="%s",\n' % (self.language,)) + if self.area is not None and 'area' not in already_processed: + already_processed.add('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.add('attrnegint') + showIndent(outfile, level) + outfile.write('attrnegint=%d,\n' % (self.attrnegint,)) + if self.attrposint is not None and 'attrposint' not in already_processed: + 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.add('attrnonnegint') + showIndent(outfile, level) + outfile.write('attrnonnegint=%d,\n' % (self.attrnonnegint,)) + if self.attrnonposint is not None and 'attrnonposint' not in already_processed: + already_processed.add('attrnonposint') + showIndent(outfile, level) + outfile.write('attrnonposint=%d,\n' % (self.attrnonposint,)) + super(tomato_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_) + def exportLiteralChildren(self, outfile, level, name_): + super(tomato_programmer, 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)) + if self.elposint is not None: + showIndent(outfile, level) + outfile.write('elposint=%d,\n' % self.elposint) + if self.elnonposint is not None: + showIndent(outfile, level) + outfile.write('elnonposint=%d,\n' % self.elnonposint) + if self.elnegint is not None: + showIndent(outfile, level) + outfile.write('elnegint=%d,\n' % self.elnegint) + if self.elnonnegint is not None: + showIndent(outfile, level) + outfile.write('elnonnegint=%d,\n' % self.elnonnegint) + if self.eldate is not None: + showIndent(outfile, level) + 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.eltoken is not None: + showIndent(outfile, level) + outfile.write('eltoken=%s,\n' % quote_python(self.eltoken).encode(ExternalEncoding)) + if self.elshort is not None: + showIndent(outfile, level) + outfile.write('elshort=%d,\n' % self.elshort) + if self.ellong is not None: + showIndent(outfile, level) + outfile.write('ellong=%d,\n' % self.ellong) + if self.elparam is not None: + showIndent(outfile, level) + outfile.write('elparam=model_.param(\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)) + 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_('language', node) + if value is not None and 'language' not in already_processed: + already_processed.add('language') + self.language = value + value = find_attr_value_('area', node) + if value is not None and 'area' not in already_processed: + already_processed.add('area') + self.area = value + 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, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + if self.attrnegint >= 0: + raise_parse_error(node, 'Invalid NegativeInteger') + value = find_attr_value_('attrposint', node) + if value is not None and 'attrposint' not in already_processed: + already_processed.add('attrposint') + try: + self.attrposint = int(value) + except ValueError, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + if self.attrposint <= 0: + raise_parse_error(node, 'Invalid PositiveInteger') + 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, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + if self.attrnonnegint < 0: + raise_parse_error(node, 'Invalid NonNegativeInteger') + value = find_attr_value_('attrnonposint', node) + if value is not None and 'attrnonposint' not in already_processed: + already_processed.add('attrnonposint') + try: + self.attrnonposint = int(value) + except ValueError, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + if self.attrnonposint > 0: + raise_parse_error(node, 'Invalid NonPositiveInteger') + 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(tomato_programmer, 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: + 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: + 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: + 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: + 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': + 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_ == 'eltoken': + eltoken_ = child_.text + eltoken_ = re_.sub(String_cleanup_pat_, " ", eltoken_).strip() + 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: + 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: + raise_parse_error(child_, 'requires integer: %s' % exp) + ival_ = self.gds_validate_integer(ival_, node, 'ellong') + self.ellong = ival_ + elif nodeName_ == 'elparam': + obj_ = tomato_param.factory() + obj_.build(child_) + self.elparam = obj_ + obj_.original_tagname_ = 'elparam' + elif nodeName_ == 'elarraytypes': + elarraytypes_ = child_.text + elarraytypes_ = self.gds_validate_string(elarraytypes_, node, 'elarraytypes') + self.elarraytypes = elarraytypes_ + self.validate_ArrayTypes(self.elarraytypes) # validate type ArrayTypes + super(tomato_programmer, self).buildChildren(child_, node, nodeName_, True) +# end class tomato_programmer + + +class tomato_param(GeneratedsSuper): + """Finding flow attribute unneccesary in practice. A unnamed parameter + is unbound/skipped.""" + member_data_items_ = [ + MemberSpec_('semantic', 'xs:token', 0), + MemberSpec_('name', 'xs:NCName', 0), + MemberSpec_('flow', 'FlowType', 0), + MemberSpec_('sid', 'xs:NCName', 0), + MemberSpec_('type', 'xs:NMTOKEN', 0), + MemberSpec_('id', 'xs:string', 0), + 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.original_tagname_ = None + self.semantic = _cast(None, semantic) + self.name = _cast(None, name) + self.flow = _cast(None, flow) + self.sid = _cast(None, sid) + self.type_ = _cast(None, type_) + self.id = _cast(None, id) + self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): + if tomato_param.subclass: + return tomato_param.subclass(*args_, **kwargs_) + else: + return tomato_param(*args_, **kwargs_) + factory = staticmethod(factory) + def get_semantic(self): return self.semantic + def set_semantic(self, semantic): self.semantic = semantic + def get_name(self): return self.name + def set_name(self, name): self.name = name + def get_flow(self): return self.flow + def set_flow(self, flow): self.flow = flow + def get_sid(self): return self.sid + def set_sid(self, sid): self.sid = sid + def get_type(self): return self.type_ + def set_type(self, type_): self.type_ = type_ + def get_id(self): return self.id + def set_id(self, id): self.id = id + def get_valueOf_(self): return self.valueOf_ + def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def hasContent_(self): + if ( + self.valueOf_ + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='param', namespacedef_='', pretty_print=True): + 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_='param') + if self.hasContent_(): + outfile.write('>') + outfile.write(str(self.valueOf_).encode(ExternalEncoding)) + self.exportChildren(outfile, level + 1, namespace_='', name_='param', pretty_print=pretty_print) + outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) + else: + outfile.write('/>%s' % (eol_, )) + def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='param'): + if self.semantic is not None and 'semantic' not in already_processed: + already_processed.add('semantic') + outfile.write(' semantic=%s' % (self.gds_format_string(quote_attrib(self.semantic).encode(ExternalEncoding), input_name='semantic'), )) + if self.name is not None and 'name' not in already_processed: + 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.add('flow') + outfile.write(' flow=%s' % (quote_attrib(self.flow), )) + if self.sid is not None and 'sid' not in already_processed: + already_processed.add('sid') + outfile.write(' sid=%s' % (quote_attrib(self.sid), )) + if self.type_ is not None and 'type_' not in already_processed: + already_processed.add('type_') + 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.add('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', fromsubclass_=False, pretty_print=True): + pass + def exportLiteral(self, outfile, level, name_='param'): + level += 1 + 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.add('semantic') + showIndent(outfile, level) + outfile.write('semantic="%s",\n' % (self.semantic,)) + if self.name is not None and 'name' not in already_processed: + already_processed.add('name') + showIndent(outfile, level) + outfile.write('name="%s",\n' % (self.name,)) + if self.flow is not None and 'flow' not in already_processed: + already_processed.add('flow') + showIndent(outfile, level) + outfile.write('flow=%s,\n' % (self.flow,)) + if self.sid is not None and 'sid' not in already_processed: + already_processed.add('sid') + showIndent(outfile, level) + outfile.write('sid="%s",\n' % (self.sid,)) + if self.type_ is not None and 'type_' not in already_processed: + already_processed.add('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.add('id') + showIndent(outfile, level) + outfile.write('id="%s",\n' % (self.id,)) + def exportLiteralChildren(self, outfile, level, name_): + pass + def build(self, node): + 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, node, nodeName_) + return self + def buildAttributes(self, node, attrs, already_processed): + 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_('name', node) + if value is not None and 'name' not in already_processed: + already_processed.add('name') + self.name = value + value = find_attr_value_('flow', node) + if value is not None and 'flow' not in already_processed: + already_processed.add('flow') + self.flow = value + 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_('type', node) + if value is not None and 'type' not in already_processed: + already_processed.add('type') + self.type_ = value + value = find_attr_value_('id', node) + if value is not None and 'id' not in already_processed: + already_processed.add('id') + self.id = value + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + pass +# end class tomato_param + + +class tomato_python_programmer(tomato_programmer): + member_data_items_ = [ + MemberSpec_('nick-name', 'xs:string', 0), + MemberSpec_('favorite_editor', 'xs:string', 0), + ] + subclass = None + superclass = tomato_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, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, nick_name=None, favorite_editor=None): + self.original_tagname_ = None + super(tomato_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, eldatetime, eltoken, elshort, ellong, elparam, elarraytypes, ) + self.nick_name = _cast(None, nick_name) + self.favorite_editor = favorite_editor + def factory(*args_, **kwargs_): + if tomato_python_programmer.subclass: + return tomato_python_programmer.subclass(*args_, **kwargs_) + else: + return tomato_python_programmer(*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 + def get_nick_name(self): return self.nick_name + def set_nick_name(self, nick_name): self.nick_name = nick_name + def hasContent_(self): + if ( + self.favorite_editor is not None or + super(tomato_python_programmer, self).hasContent_() + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='python-programmer', namespacedef_='', pretty_print=True): + 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-programmer') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='python-programmer', 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-programmer'): + super(tomato_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.add('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', fromsubclass_=False, pretty_print=True): + super(tomato_python_programmer, 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('<%sfavorite-editor>%s</%sfavorite-editor>%s' % (namespace_, self.gds_format_string(quote_xml(self.favorite_editor).encode(ExternalEncoding), input_name='favorite-editor'), namespace_, eol_)) + def exportLiteral(self, outfile, level, name_='python-programmer'): + 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_): + if self.nick_name is not None and 'nick_name' not in already_processed: + already_processed.add('nick_name') + showIndent(outfile, level) + outfile.write('nick_name="%s",\n' % (self.nick_name,)) + super(tomato_python_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_) + def exportLiteralChildren(self, outfile, level, name_): + super(tomato_python_programmer, 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)) + 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_('nick-name', node) + if value is not None and 'nick-name' not in already_processed: + already_processed.add('nick-name') + self.nick_name = value + super(tomato_python_programmer, 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(tomato_python_programmer, self).buildChildren(child_, node, nodeName_, True) +# end class tomato_python_programmer + + +class tomato_java_programmer(tomato_programmer): + member_data_items_ = [ + MemberSpec_('status', 'xs:string', 0), + MemberSpec_('nick-name', 'xs:string', 0), + MemberSpec_('favorite_editor', 'xs:string', 0), + ] + subclass = None + superclass = tomato_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, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, status=None, nick_name=None, favorite_editor=None): + self.original_tagname_ = None + super(tomato_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, eldatetime, eltoken, elshort, ellong, elparam, elarraytypes, ) + self.status = _cast(None, status) + self.nick_name = _cast(None, nick_name) + self.favorite_editor = favorite_editor + def factory(*args_, **kwargs_): + if tomato_java_programmer.subclass: + return tomato_java_programmer.subclass(*args_, **kwargs_) + else: + return tomato_java_programmer(*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 + def get_status(self): return self.status + def set_status(self, status): self.status = status + def get_nick_name(self): return self.nick_name + def set_nick_name(self, nick_name): self.nick_name = nick_name + def hasContent_(self): + if ( + self.favorite_editor is not None or + super(tomato_java_programmer, self).hasContent_() + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='java-programmer', namespacedef_='', pretty_print=True): + 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-programmer') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='java-programmer', 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-programmer'): + super(tomato_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.add('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.add('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', fromsubclass_=False, pretty_print=True): + super(tomato_java_programmer, 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('<%sfavorite-editor>%s</%sfavorite-editor>%s' % (namespace_, self.gds_format_string(quote_xml(self.favorite_editor).encode(ExternalEncoding), input_name='favorite-editor'), namespace_, eol_)) + def exportLiteral(self, outfile, level, name_='java-programmer'): + 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_): + if self.status is not None and 'status' not in already_processed: + already_processed.add('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.add('nick_name') + showIndent(outfile, level) + outfile.write('nick_name="%s",\n' % (self.nick_name,)) + super(tomato_java_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_) + def exportLiteralChildren(self, outfile, level, name_): + super(tomato_java_programmer, 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)) + 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_('status', node) + if value is not None and 'status' not in already_processed: + already_processed.add('status') + self.status = value + value = find_attr_value_('nick-name', node) + if value is not None and 'nick-name' not in already_processed: + already_processed.add('nick-name') + self.nick_name = value + super(tomato_java_programmer, 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(tomato_java_programmer, self).buildChildren(child_, node, nodeName_, True) +# end class tomato_java_programmer + + +class tomato_agent(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('firstname', 'xs:string', 0), + MemberSpec_('lastname', 'xs:string', 0), + MemberSpec_('priority', 'xs:float', 0), + MemberSpec_('info', 'info', 0), + ] + subclass = None + superclass = None + def __init__(self, firstname=None, lastname=None, priority=None, info=None): + self.original_tagname_ = None + self.firstname = firstname + self.lastname = lastname + self.priority = priority + self.info = info + def factory(*args_, **kwargs_): + if tomato_agent.subclass: + return tomato_agent.subclass(*args_, **kwargs_) + else: + return tomato_agent(*args_, **kwargs_) + factory = staticmethod(factory) + def get_firstname(self): return self.firstname + def set_firstname(self, firstname): self.firstname = firstname + def get_lastname(self): return self.lastname + def set_lastname(self, lastname): self.lastname = lastname + def get_priority(self): return self.priority + def set_priority(self, priority): self.priority = priority + def get_info(self): return self.info + def set_info(self, info): self.info = 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 + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='agent', namespacedef_='', pretty_print=True): + 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_='agent') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='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_='agent'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='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('<%sfirstname>%s</%sfirstname>%s' % (namespace_, self.gds_format_string(quote_xml(self.firstname).encode(ExternalEncoding), input_name='firstname'), namespace_, eol_)) + if self.lastname is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%slastname>%s</%slastname>%s' % (namespace_, self.gds_format_string(quote_xml(self.lastname).encode(ExternalEncoding), input_name='lastname'), namespace_, eol_)) + if self.priority is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%spriority>%s</%spriority>%s' % (namespace_, self.gds_format_float(self.priority, input_name='priority'), namespace_, eol_)) + if self.info is not None: + self.info.export(outfile, level, namespace_, name_='info', pretty_print=pretty_print) + def exportLiteral(self, outfile, level, name_='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_): + pass + 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)) + if self.lastname is not None: + showIndent(outfile, level) + outfile.write('lastname=%s,\n' % quote_python(self.lastname).encode(ExternalEncoding)) + 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) + 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): + pass + 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: + 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_ = tomato_info.factory() + obj_.build(child_) + self.info = obj_ + obj_.original_tagname_ = 'info' +# end class tomato_agent + + +class tomato_special_agent(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('firstname', 'xs:string', 0), + MemberSpec_('lastname', 'xs:string', 0), + MemberSpec_('priority', 'xs:float', 0), + MemberSpec_('info', 'info', 0), + ] + subclass = None + superclass = None + def __init__(self, firstname=None, lastname=None, priority=None, info=None): + self.original_tagname_ = None + self.firstname = firstname + self.lastname = lastname + self.priority = priority + self.info = info + def factory(*args_, **kwargs_): + if tomato_special_agent.subclass: + return tomato_special_agent.subclass(*args_, **kwargs_) + else: + return tomato_special_agent(*args_, **kwargs_) + factory = staticmethod(factory) + def get_firstname(self): return self.firstname + def set_firstname(self, firstname): self.firstname = firstname + def get_lastname(self): return self.lastname + def set_lastname(self, lastname): self.lastname = lastname + def get_priority(self): return self.priority + def set_priority(self, priority): self.priority = priority + def get_info(self): return self.info + def set_info(self, info): self.info = 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 + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='special-agent', namespacedef_='', pretty_print=True): + 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_='special-agent') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='special-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_='special-agent'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='special-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('<%sfirstname>%s</%sfirstname>%s' % (namespace_, self.gds_format_string(quote_xml(self.firstname).encode(ExternalEncoding), input_name='firstname'), namespace_, eol_)) + if self.lastname is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%slastname>%s</%slastname>%s' % (namespace_, self.gds_format_string(quote_xml(self.lastname).encode(ExternalEncoding), input_name='lastname'), namespace_, eol_)) + if self.priority is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%spriority>%s</%spriority>%s' % (namespace_, self.gds_format_float(self.priority, input_name='priority'), namespace_, eol_)) + if self.info is not None: + self.info.export(outfile, level, namespace_, name_='info', pretty_print=pretty_print) + def exportLiteral(self, outfile, level, name_='special-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_): + pass + 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)) + if self.lastname is not None: + showIndent(outfile, level) + outfile.write('lastname=%s,\n' % quote_python(self.lastname).encode(ExternalEncoding)) + 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) + 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): + pass + 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: + 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_ = tomato_info.factory() + obj_.build(child_) + self.info = obj_ + obj_.original_tagname_ = 'info' +# end class tomato_special_agent + + +class tomato_booster(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('firstname', 'xs:string', 0), + MemberSpec_('lastname', 'xs:string', 0), + MemberSpec_('other_name', 'xs:float', 0), + MemberSpec_('class_', 'xs:float', 0), + MemberSpec_('other_value', 'xs:float', 1), + MemberSpec_('type_', 'xs:float', 1), + MemberSpec_('client_handler', 'client-handlerType', 1), + ] + subclass = None + superclass = None + def __init__(self, firstname=None, lastname=None, other_name=None, class_=None, other_value=None, type_=None, client_handler=None): + self.original_tagname_ = None + self.firstname = firstname + self.lastname = lastname + self.other_name = other_name + self.class_ = class_ + if other_value is None: + self.other_value = [] + else: + self.other_value = other_value + if type_ is None: + self.type_ = [] + else: + self.type_ = type_ + if client_handler is None: + self.client_handler = [] + else: + self.client_handler = client_handler + def factory(*args_, **kwargs_): + if tomato_booster.subclass: + return tomato_booster.subclass(*args_, **kwargs_) + else: + return tomato_booster(*args_, **kwargs_) + factory = staticmethod(factory) + def get_firstname(self): return self.firstname + def set_firstname(self, firstname): self.firstname = firstname + def get_lastname(self): return self.lastname + def set_lastname(self, lastname): self.lastname = lastname + def get_other_name(self): return self.other_name + def set_other_name(self, other_name): self.other_name = other_name + def get_class(self): return self.class_ + def set_class(self, class_): self.class_ = 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_at(self, index, value): self.other_value.insert(index, value) + def replace_other_value_at(self, index, value): self.other_value[index] = 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_at(self, index, value): self.type_.insert(index, value) + def replace_type_at(self, index, value): self.type_[index] = value + 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_at(self, index, value): self.client_handler.insert(index, value) + def replace_client_handler_at(self, index, value): self.client_handler[index] = value + def hasContent_(self): + if ( + self.firstname is not None or + self.lastname is not None or + self.other_name 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 export(self, outfile, level, namespace_='', name_='booster', namespacedef_='', pretty_print=True): + 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_='booster') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='booster', 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_='booster'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='booster', 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('<%sfirstname>%s</%sfirstname>%s' % (namespace_, self.gds_format_string(quote_xml(self.firstname).encode(ExternalEncoding), input_name='firstname'), namespace_, eol_)) + if self.lastname is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%slastname>%s</%slastname>%s' % (namespace_, self.gds_format_string(quote_xml(self.lastname).encode(ExternalEncoding), input_name='lastname'), namespace_, eol_)) + if self.other_name is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sother-name>%s</%sother-name>%s' % (namespace_, self.gds_format_float(self.other_name, input_name='other-name'), namespace_, eol_)) + if self.class_ is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sclass>%s</%sclass>%s' % (namespace_, self.gds_format_float(self.class_, input_name='class'), namespace_, eol_)) + for other_value_ in self.other_value: + showIndent(outfile, level, pretty_print) + outfile.write('<%sother-value>%s</%sother-value>%s' % (namespace_, self.gds_format_float(other_value_, input_name='other-value'), namespace_, eol_)) + for type_ in self.type_: + showIndent(outfile, level, pretty_print) + outfile.write('<%stype>%s</%stype>%s' % (namespace_, self.gds_format_float(type_, input_name='type'), namespace_, eol_)) + for client_handler_ in self.client_handler: + client_handler_.export(outfile, level, namespace_, name_='client-handler', pretty_print=pretty_print) + def exportLiteral(self, outfile, level, name_='booster'): + 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.firstname is not None: + showIndent(outfile, level) + outfile.write('firstname=%s,\n' % quote_python(self.firstname).encode(ExternalEncoding)) + if self.lastname is not None: + showIndent(outfile, level) + outfile.write('lastname=%s,\n' % quote_python(self.lastname).encode(ExternalEncoding)) + if self.other_name is not None: + showIndent(outfile, level) + outfile.write('other_name=%f,\n' % self.other_name) + if self.class_ is not None: + showIndent(outfile, level) + outfile.write('class_=%f,\n' % self.class_) + showIndent(outfile, level) + outfile.write('other_value=[\n') + level += 1 + for other_value_ in self.other_value: + showIndent(outfile, level) + outfile.write('%f,\n' % other_value_) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + showIndent(outfile, level) + outfile.write('type_=[\n') + level += 1 + for type_ in self.type_: + showIndent(outfile, level) + outfile.write('%f,\n' % type_) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + showIndent(outfile, level) + outfile.write('client_handler=[\n') + level += 1 + for client_handler_ in self.client_handler: + showIndent(outfile, level) + 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): + 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_ == '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: + 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: + raise_parse_error(child_, 'requires float or double: %s' % exp) + fval_ = self.gds_validate_float(fval_, node, 'class') + self.class_ = fval_ + elif nodeName_ == 'other-value': + sval_ = child_.text + try: + fval_ = float(sval_) + except (TypeError, ValueError), exp: + raise_parse_error(child_, 'requires float or double: %s' % exp) + fval_ = self.gds_validate_float(fval_, node, 'other_value') + self.other_value.append(fval_) + elif nodeName_ == 'type': + sval_ = child_.text + try: + fval_ = float(sval_) + except (TypeError, ValueError), exp: + raise_parse_error(child_, 'requires float or double: %s' % exp) + fval_ = self.gds_validate_float(fval_, node, 'type') + self.type_.append(fval_) + elif nodeName_ == 'client-handler': + obj_ = tomato_client_handlerType.factory() + obj_.build(child_) + self.client_handler.append(obj_) + obj_.original_tagname_ = 'client-handler' +# end class tomato_booster + + +class tomato_info(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('rating', 'xs:float', 0), + MemberSpec_('type', 'xs:integer', 0), + MemberSpec_('name', 'xs:string', 0), + ] + subclass = None + superclass = None + def __init__(self, rating=None, type_=None, name=None): + self.original_tagname_ = None + self.rating = _cast(float, rating) + self.type_ = _cast(int, type_) + self.name = _cast(None, name) + def factory(*args_, **kwargs_): + if tomato_info.subclass: + return tomato_info.subclass(*args_, **kwargs_) + else: + return tomato_info(*args_, **kwargs_) + factory = staticmethod(factory) + def get_rating(self): return self.rating + def set_rating(self, rating): self.rating = rating + def get_type(self): return self.type_ + def set_type(self, type_): self.type_ = type_ + def get_name(self): return self.name + def set_name(self, name): self.name = name + def hasContent_(self): + if ( + + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='info', namespacedef_='', pretty_print=True): + 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_='info') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='info', pretty_print=pretty_print) + outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) + else: + outfile.write('/>%s' % (eol_, )) + def exportAttributes(self, outfile, level, already_processed, 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')) + if self.type_ is not None and 'type_' not in already_processed: + 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.add('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', fromsubclass_=False, pretty_print=True): + pass + def exportLiteral(self, outfile, level, name_='info'): + 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_): + if self.rating is not None and 'rating' not in already_processed: + already_processed.add('rating') + showIndent(outfile, level) + outfile.write('rating=%f,\n' % (self.rating,)) + if self.type_ is not None and 'type_' not in already_processed: + 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.add('name') + showIndent(outfile, level) + outfile.write('name="%s",\n' % (self.name,)) + def exportLiteralChildren(self, outfile, level, name_): + pass + 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_('rating', node) + if value is not None and 'rating' not in already_processed: + already_processed.add('rating') + try: + self.rating = float(value) + except ValueError, exp: + raise ValueError('Bad float/double attribute (rating): %s' % exp) + value = find_attr_value_('type', node) + if value is not None and 'type' not in already_processed: + already_processed.add('type') + try: + self.type_ = int(value) + except ValueError, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + value = find_attr_value_('name', node) + if value is not None and 'name' not in already_processed: + already_processed.add('name') + self.name = value + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + pass +# end class tomato_info + + +class tomato_client_handlerType(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('fullname', 'xs:string', 0), + MemberSpec_('refid', 'xs:integer', 0), + ] + 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 tomato_client_handlerType.subclass: + return tomato_client_handlerType.subclass(*args_, **kwargs_) + else: + return tomato_client_handlerType(*args_, **kwargs_) + factory = staticmethod(factory) + def get_fullname(self): return self.fullname + def set_fullname(self, fullname): self.fullname = fullname + def get_refid(self): return self.refid + def set_refid(self, refid): self.refid = 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_='', pretty_print=True): + 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('<%sfullname>%s</%sfullname>%s' % (namespace_, self.gds_format_string(quote_xml(self.fullname).encode(ExternalEncoding), input_name='fullname'), namespace_, eol_)) + if self.refid is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%srefid>%s</%srefid>%s' % (namespace_, self.gds_format_integer(self.refid, input_name='refid'), namespace_, eol_)) + 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' % 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): + 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), exp: + raise_parse_error(child_, 'requires integer: %s' % exp) + ival_ = self.gds_validate_integer(ival_, node, 'refid') + self.refid = ival_ +# end class tomato_client_handlerType + + +GDSClassesMapping = { + 'client-handler': tomato_client_handlerType, + 'elparam': tomato_param, + 'promoter': tomato_booster, +} + + +USAGE_TEXT = """ +Usage: python <tomato_Parser>.py [ -s ] <in_xml_file> +""" + + +def usage(): + print USAGE_TEXT + sys.exit(1) + + +def get_root_tag(node): + tag = Tag_pattern_.match(node.tag).groups()[-1] + rootClass = GDSClassesMapping.get(tag) + if rootClass is None: + rootClass = globals().get(tag) + return tag, rootClass + + +def parse(inFileName, silence=False): + doc = parsexml_(inFileName) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'people' + rootClass = tomato_people + 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 parseEtree(inFileName, silence=False): + doc = parsexml_(inFileName) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'people' + rootClass = tomato_people + 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): + from StringIO import StringIO + doc = parsexml_(StringIO(inString)) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'people' + rootClass = tomato_people + 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 parseLiteral(inFileName, silence=False): + doc = parsexml_(inFileName) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'people' + rootClass = tomato_people + 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 prefix_classname2_sup import *\n\n') + sys.stdout.write('import prefix_classname2_sup 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: + parse(args[0]) + else: + usage() + + +if __name__ == '__main__': + #import pdb; pdb.set_trace() + main() + + +__all__ = [ + "tomato_agent", + "tomato_booster", + "tomato_client_handlerType", + "tomato_comments", + "tomato_info", + "tomato_java_programmer", + "tomato_param", + "tomato_people", + "tomato_person", + "tomato_programmer", + "tomato_python_programmer", + "tomato_special_agent" +] diff --git a/tests/prefix_classname2_out.xml b/tests/prefix_classname2_out.xml new file mode 100644 index 0000000..c2e2e7e --- /dev/null +++ b/tests/prefix_classname2_out.xml @@ -0,0 +1,91 @@ +<?xml version="1.0" ?> +<people> + <comments> +1. This is a <emp>foolish</emp> comment. It is <emp>really</emp> important. </comments> + <comments> +2. This is a <emp>silly</emp> comment. It is <emp>very</emp> significant. </comments> + <person ratio="3.2" id="1" value="abcd"> + <name>Alberta</name> + <interest>gardening</interest> + <interest>reading</interest> + <category>5</category> + </person> + <person id="2"> + <name>Bernardo</name> + <interest>programming</interest> + <category>0</category> + <agent> + <firstname>Darren</firstname> + <lastname>Diddly</lastname> + <priority>4.5</priority> + <info rating="5.33" type="321" name="Albert Abasinian"/> + </agent> + </person> + <person id="3"> + <name>Charlie</name> + <interest>people</interest> + <interest>cats</interest> + <interest>dogs</interest> + <category>8</category> + <promoter> + <firstname>David</firstname> + <lastname>Donaldson</lastname> + </promoter> + <promoter> + <firstname>Edward</firstname> + <lastname>Eddleberry</lastname> + </promoter> + </person> + <person id="4"/> + <programmer id="2" language="python" area="xml"> + <name>Charles Carlson</name> + <interest>programming</interest> + <category>2233</category> + <agent> + <firstname>Ernest</firstname> + <lastname>Echo</lastname> + <priority>3.8</priority> + <info rating="5.33" type="321" name="George Gregory"/> + </agent> + <description>A very happy programmer</description> + <email>charles@happyprogrammers.com</email> + <elposint>14</elposint> + <elnonposint>0</elnonposint> + <elnegint>-12</elnegint> + <elnonnegint>4</elnonnegint> + <eldate>2005-04-26</eldate> + <eldatetime>2005-04-26T10:11:12</eldatetime> + <eltoken>aa bb cc dd</eltoken> + <elshort>123</elshort> + <ellong>13241234123412341234</ellong> + <elparam semantic="a big semantic" name="Davy" id="id001"/> + </programmer> + <python-programmer vegetable="tomato" fruit="peach" ratio="8.699999999999999" id="232" value="abcd" language="python" area="xml" nick-name="davy"> + <name>Darrel Dawson</name> + <interest>hang gliding</interest> + <category>3344</category> + <agent> + <firstname>Harvey</firstname> + <lastname>Hippolite</lastname> + <priority>5.2</priority> + <info rating="6.55" type="543" name="Harvey Hippolite"/> + </agent> + <description>An object-orientated programmer</description> + <email>darrel@happyprogrammers.com</email> + <favorite-editor>jed</favorite-editor> + </python-programmer> + <java-programmer vegetable="tomato" fruit="peach" ratio="8.699999999999999" id="232" value="abcd" language="python" area="xml" nick-name="davy"> + <name>Darrel Dawson</name> + <interest>hang gliding</interest> + <category>3344</category> + <agent> + <firstname>Harvey</firstname> + <lastname>Hippolite</lastname> + <priority>5.2</priority> + <info rating="6.55" type="543" name="Harvey Hippolite"/> + </agent> + <description>An object-orientated programmer</description> + <email>darrel@happyprogrammers.com</email> + <favorite-editor>jed</favorite-editor> + </java-programmer> +</people> diff --git a/tests/prefix_classname2_sub.py b/tests/prefix_classname2_sub.py new file mode 100644 index 0000000..a196947 --- /dev/null +++ b/tests/prefix_classname2_sub.py @@ -0,0 +1,292 @@ +#!/usr/bin/env python + +# +# Generated by generateDS.py. +# +# Command line options: +# ('--no-dates', '') +# ('--no-versions', '') +# ('-p', 'tomato_') +# ('--member-specs', 'list') +# ('-f', '') +# ('-o', 'tests/prefix_classname2_sup.py') +# ('-s', 'tests/prefix_classname2_sub.py') +# ('--super', 'prefix_classname2_sup') +# +# Command line arguments: +# tests/prefix_classname.xsd +# +# Command line: +# generateDS.py --no-dates --no-versions -p "tomato_" --member-specs="list" -f -o "tests/prefix_classname2_sup.py" -s "tests/prefix_classname2_sub.py" --super="prefix_classname2_sup" tests/prefix_classname.xsd +# +# Current working directory (os.getcwd()): +# generateds +# + +import sys + +import prefix_classname2_sup as supermod + +etree_ = None +Verbose_import_ = False +( + XMLParser_import_none, XMLParser_import_lxml, + XMLParser_import_elementtree +) = range(3) +XMLParser_import_library = None +try: + # lxml + from lxml import etree as etree_ + XMLParser_import_library = XMLParser_import_lxml + if Verbose_import_: + print("running with lxml.etree") +except ImportError: + try: + # cElementTree from Python 2.5+ + import xml.etree.cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree on Python 2.5+") + except ImportError: + try: + # ElementTree from Python 2.5+ + import xml.etree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree on Python 2.5+") + except ImportError: + try: + # normal cElementTree install + import cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree") + except ImportError: + try: + # normal ElementTree install + import elementtree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree") + except ImportError: + raise ImportError( + "Failed to import ElementTree from any known place") + + +def parsexml_(*args, **kwargs): + if (XMLParser_import_library == XMLParser_import_lxml and + 'parser' not in kwargs): + # Use the lxml ElementTree compatible parser so that, e.g., + # we ignore comments. + kwargs['parser'] = etree_.ETCompatXMLParser() + doc = etree_.parse(*args, **kwargs) + return doc + +# +# Globals +# + +ExternalEncoding = 'ascii' + +# +# Data representation classes +# + + +class tomato_peopleSub(supermod.tomato_people): + def __init__(self, comments=None, person=None, programmer=None, python_programmer=None, java_programmer=None): + super(tomato_peopleSub, self).__init__(comments, person, programmer, python_programmer, java_programmer, ) +supermod.tomato_people.subclass = tomato_peopleSub +# end class tomato_peopleSub + + +class tomato_commentsSub(supermod.tomato_comments): + def __init__(self, emp=None, valueOf_=None, mixedclass_=None, content_=None): + super(tomato_commentsSub, self).__init__(emp, valueOf_, mixedclass_, content_, ) +supermod.tomato_comments.subclass = tomato_commentsSub +# end class tomato_commentsSub + + +class tomato_personSub(supermod.tomato_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, extensiontype_=None): + super(tomato_personSub, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, extensiontype_, ) +supermod.tomato_person.subclass = tomato_personSub +# end class tomato_personSub + + +class tomato_programmerSub(supermod.tomato_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, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, extensiontype_=None): + super(tomato_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, eldatetime, eltoken, elshort, ellong, elparam, elarraytypes, extensiontype_, ) +supermod.tomato_programmer.subclass = tomato_programmerSub +# end class tomato_programmerSub + + +class tomato_paramSub(supermod.tomato_param): + def __init__(self, semantic=None, name=None, flow=None, sid=None, type_=None, id=None, valueOf_=None): + super(tomato_paramSub, self).__init__(semantic, name, flow, sid, type_, id, valueOf_, ) +supermod.tomato_param.subclass = tomato_paramSub +# end class tomato_paramSub + + +class tomato_python_programmerSub(supermod.tomato_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, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, nick_name=None, favorite_editor=None): + super(tomato_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, eldatetime, eltoken, elshort, ellong, elparam, elarraytypes, nick_name, favorite_editor, ) +supermod.tomato_python_programmer.subclass = tomato_python_programmerSub +# end class tomato_python_programmerSub + + +class tomato_java_programmerSub(supermod.tomato_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, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, status=None, nick_name=None, favorite_editor=None): + super(tomato_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, eldatetime, eltoken, elshort, ellong, elparam, elarraytypes, status, nick_name, favorite_editor, ) +supermod.tomato_java_programmer.subclass = tomato_java_programmerSub +# end class tomato_java_programmerSub + + +class tomato_agentSub(supermod.tomato_agent): + def __init__(self, firstname=None, lastname=None, priority=None, info=None): + super(tomato_agentSub, self).__init__(firstname, lastname, priority, info, ) +supermod.tomato_agent.subclass = tomato_agentSub +# end class tomato_agentSub + + +class tomato_special_agentSub(supermod.tomato_special_agent): + def __init__(self, firstname=None, lastname=None, priority=None, info=None): + super(tomato_special_agentSub, self).__init__(firstname, lastname, priority, info, ) +supermod.tomato_special_agent.subclass = tomato_special_agentSub +# end class tomato_special_agentSub + + +class tomato_boosterSub(supermod.tomato_booster): + def __init__(self, firstname=None, lastname=None, other_name=None, class_=None, other_value=None, type_=None, client_handler=None): + super(tomato_boosterSub, self).__init__(firstname, lastname, other_name, class_, other_value, type_, client_handler, ) +supermod.tomato_booster.subclass = tomato_boosterSub +# end class tomato_boosterSub + + +class tomato_infoSub(supermod.tomato_info): + def __init__(self, rating=None, type_=None, name=None): + super(tomato_infoSub, self).__init__(rating, type_, name, ) +supermod.tomato_info.subclass = tomato_infoSub +# end class tomato_infoSub + + +class tomato_client_handlerTypeSub(supermod.tomato_client_handlerType): + def __init__(self, fullname=None, refid=None): + super(tomato_client_handlerTypeSub, self).__init__(fullname, refid, ) +supermod.tomato_client_handlerType.subclass = tomato_client_handlerTypeSub +# end class tomato_client_handlerTypeSub + + +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): + doc = parsexml_(inFilename) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'people' + rootClass = supermod.tomato_people + 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 parseEtree(inFilename, silence=False): + doc = parsexml_(inFilename) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'people' + rootClass = supermod.tomato_people + 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): + from StringIO import StringIO + doc = parsexml_(StringIO(inString)) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'people' + rootClass = supermod.tomato_people + 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 parseLiteral(inFilename, silence=False): + doc = parsexml_(inFilename) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'people' + rootClass = supermod.tomato_people + 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 prefix_classname2_sup import *\n\n') + sys.stdout.write('import prefix_classname2_sup 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 ???.py <infilename> +""" + + +def usage(): + print USAGE_TEXT + sys.exit(1) + + +def main(): + args = sys.argv[1:] + if len(args) != 1: + usage() + infilename = args[0] + parse(infilename) + + +if __name__ == '__main__': + #import pdb; pdb.set_trace() + main() diff --git a/tests/prefix_classname2_sup.py b/tests/prefix_classname2_sup.py new file mode 100644 index 0000000..5f2ebd0 --- /dev/null +++ b/tests/prefix_classname2_sup.py @@ -0,0 +1,2897 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# +# Generated by generateDS.py. +# +# Command line options: +# ('--no-dates', '') +# ('--no-versions', '') +# ('-p', 'tomato_') +# ('--member-specs', 'list') +# ('-f', '') +# ('-o', 'tests/prefix_classname2_sup.py') +# ('-s', 'tests/prefix_classname2_sub.py') +# ('--super', 'prefix_classname2_sup') +# +# Command line arguments: +# tests/prefix_classname.xsd +# +# Command line: +# generateDS.py --no-dates --no-versions -p "tomato_" --member-specs="list" -f -o "tests/prefix_classname2_sup.py" -s "tests/prefix_classname2_sub.py" --super="prefix_classname2_sup" tests/prefix_classname.xsd +# +# Current working directory (os.getcwd()): +# generateds +# + +import sys +import getopt +import re as re_ +import base64 +import datetime as datetime_ + +etree_ = None +Verbose_import_ = False +( + XMLParser_import_none, XMLParser_import_lxml, + XMLParser_import_elementtree +) = range(3) +XMLParser_import_library = None +try: + # lxml + from lxml import etree as etree_ + XMLParser_import_library = XMLParser_import_lxml + if Verbose_import_: + print("running with lxml.etree") +except ImportError: + try: + # cElementTree from Python 2.5+ + import xml.etree.cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree on Python 2.5+") + except ImportError: + try: + # ElementTree from Python 2.5+ + import xml.etree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree on Python 2.5+") + except ImportError: + try: + # normal cElementTree install + import cElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with cElementTree") + except ImportError: + try: + # normal ElementTree install + import elementtree.ElementTree as etree_ + XMLParser_import_library = XMLParser_import_elementtree + if Verbose_import_: + print("running with ElementTree") + except ImportError: + raise ImportError( + "Failed to import ElementTree from any known place") + + +def parsexml_(*args, **kwargs): + if (XMLParser_import_library == XMLParser_import_lxml and + 'parser' not in kwargs): + # Use the lxml ElementTree compatible parser so that, e.g., + # we ignore comments. + kwargs['parser'] = etree_.ETCompatXMLParser() + doc = etree_.parse(*args, **kwargs) + return doc + +# +# User methods +# +# Calls to the methods in these classes are generated by generateDS.py. +# You can replace these methods by re-implementing the following class +# in a module named generatedssuper.py. + +try: + from generatedssuper import GeneratedsSuper +except ImportError, exp: + + class GeneratedsSuper(object): + tzoff_pattern = re_.compile(r'(\+|-)((0\d|1[0-3]):[0-5]\d|14:00)$') + class _FixedOffsetTZ(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, 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, input_name=''): + return input_data + def gds_format_integer(self, input_data, input_name=''): + return '%d' % input_data + def gds_validate_integer(self, input_data, node, input_name=''): + return input_data + def gds_format_integer_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_integer_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + try: + float(value) + except (TypeError, ValueError): + raise_parse_error(node, 'Requires sequence of integers') + return input_data + def gds_format_float(self, input_data, input_name=''): + return ('%.15f' % input_data).rstrip('0') + def gds_validate_float(self, input_data, node, input_name=''): + return input_data + def gds_format_float_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_float_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + try: + float(value) + except (TypeError, ValueError): + raise_parse_error(node, 'Requires sequence of floats') + return input_data + def gds_format_double(self, input_data, input_name=''): + return '%e' % input_data + def gds_validate_double(self, input_data, node, input_name=''): + return input_data + def gds_format_double_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_double_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + try: + float(value) + except (TypeError, ValueError): + raise_parse_error(node, 'Requires sequence of doubles') + return input_data + def gds_format_boolean(self, input_data, input_name=''): + return ('%s' % input_data).lower() + def gds_validate_boolean(self, input_data, node, input_name=''): + return input_data + def gds_format_boolean_list(self, input_data, input_name=''): + return '%s' % input_data + def gds_validate_boolean_list(self, input_data, node, input_name=''): + values = input_data.split() + for value in values: + if value not in ('true', '1', 'false', '0', ): + raise_parse_error( + node, + 'Requires sequence of booleans ' + '("true", "1", "false", "0")') + return input_data + def gds_validate_datetime(self, input_data, node, input_name=''): + return input_data + def gds_format_datetime(self, input_data, input_name=''): + 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, 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, 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 + @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())) + + +# +# If you have installed IPython you can uncomment and use the following. +# IPython is available from http://ipython.scipy.org/. +# + +## from IPython.Shell import IPShellEmbed +## args = '' +## ipshell = IPShellEmbed(args, +## banner = 'Dropping into IPython', +## exit_msg = 'Leaving Interpreter, back to program.') + +# Then use the following line where and when you want to drop into the +# IPython shell: +# ipshell('<some message> -- Entering ipshell.\nHit Ctrl-D to exit') + +# +# Globals +# + +ExternalEncoding = 'ascii' +Tag_pattern_ = re_.compile(r'({.*})?(.*)') +String_cleanup_pat_ = re_.compile(r"[\n\r\s]+") +Namespace_extract_pat_ = re_.compile(r'{(.*)}(.*)') + +# +# Support/utility functions. +# + + +def showIndent(outfile, level, pretty_print=True): + if pretty_print: + for idx in range(level): + outfile.write(' ') + + +def quote_xml(inStr): + if not inStr: + return '' + s1 = (isinstance(inStr, basestring) and inStr or + '%s' % inStr) + s1 = s1.replace('&', '&') + s1 = s1.replace('<', '<') + s1 = s1.replace('>', '>') + return s1 + + +def quote_attrib(inStr): + s1 = (isinstance(inStr, basestring) and inStr or + '%s' % inStr) + s1 = s1.replace('&', '&') + s1 = s1.replace('<', '<') + s1 = s1.replace('>', '>') + if '"' in s1: + if "'" in s1: + s1 = '"%s"' % s1.replace('"', """) + else: + s1 = "'%s'" % s1 + else: + s1 = '"%s"' % s1 + return s1 + + +def quote_python(inStr): + s1 = inStr + if s1.find("'") == -1: + if s1.find('\n') == -1: + return "'%s'" % s1 + else: + return "'''%s'''" % s1 + else: + if s1.find('"') != -1: + s1 = s1.replace('"', '\\"') + if s1.find('\n') == -1: + return '"%s"' % s1 + else: + return '"""%s"""' % s1 + + +def get_all_text_(node): + if node.text is not None: + text = node.text + else: + text = '' + for child in node: + if child.tail is not None: + text += child.tail + return text + + +def find_attr_value_(attr_name, node): + attrs = node.attrib + attr_parts = attr_name.split(':') + value = None + if len(attr_parts) == 1: + value = attrs.get(attr_name) + elif len(attr_parts) == 2: + prefix, name = attr_parts + namespace = node.nsmap.get(prefix) + if namespace is not None: + value = attrs.get('{%s}%s' % (namespace, name, )) + return value + + +class GDSParseError(Exception): + pass + + +def raise_parse_error(node, msg): + if XMLParser_import_library == XMLParser_import_lxml: + msg = '%s (element %s/line %d)' % ( + msg, node.tag, node.sourceline, ) + else: + msg = '%s (element %s)' % (msg, node.tag, ) + raise GDSParseError(msg) + + +class MixedContainer: + # Constants for category: + CategoryNone = 0 + CategoryText = 1 + CategorySimple = 2 + CategoryComplex = 3 + # Constants for content_type: + TypeNone = 0 + TypeText = 1 + TypeString = 2 + TypeInteger = 3 + TypeFloat = 4 + TypeDecimal = 5 + TypeDouble = 6 + TypeBoolean = 7 + TypeBase64 = 8 + def __init__(self, category, content_type, name, value): + self.category = category + self.content_type = content_type + self.name = name + self.value = value + def getCategory(self): + return self.category + def getContenttype(self, content_type): + return self.content_type + def getValue(self): + return self.value + def getName(self): + return self.name + def export(self, outfile, level, name, namespace, pretty_print=True): + if self.category == MixedContainer.CategoryText: + # Prevent exporting empty content as empty lines. + if self.value.strip(): + outfile.write(self.value) + elif self.category == MixedContainer.CategorySimple: + self.exportSimple(outfile, level, name) + else: # category == MixedContainer.CategoryComplex + self.value.export(outfile, level, namespace, name, pretty_print) + def exportSimple(self, outfile, level, name): + if self.content_type == MixedContainer.TypeString: + outfile.write('<%s>%s</%s>' % ( + self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeInteger or \ + self.content_type == MixedContainer.TypeBoolean: + outfile.write('<%s>%d</%s>' % ( + self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeFloat or \ + self.content_type == MixedContainer.TypeDecimal: + outfile.write('<%s>%f</%s>' % ( + self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeDouble: + outfile.write('<%s>%g</%s>' % ( + self.name, self.value, self.name)) + elif self.content_type == MixedContainer.TypeBase64: + outfile.write('<%s>%s</%s>' % ( + self.name, base64.b64encode(self.value), self.name)) + def 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): + self.name = name + self.data_type = data_type + self.container = container + def set_name(self, name): self.name = name + def get_name(self): return self.name + def set_data_type(self, data_type): self.data_type = data_type + def get_data_type_chain(self): return self.data_type + def get_data_type(self): + if isinstance(self.data_type, list): + if len(self.data_type) > 0: + return self.data_type[-1] + else: + return 'xs:string' + else: + return self.data_type + def set_container(self, container): self.container = container + def get_container(self): return self.container + + +def _cast(typ, value): + if typ is None or value is None: + return value + return typ(value) + +# +# Data representation classes. +# + + +class tomato_people(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('comments', 'comments', 1), + MemberSpec_('person', 'person', 1), + MemberSpec_('programmer', 'programmer', 1), + MemberSpec_('python_programmer', 'python-programmer', 1), + MemberSpec_('java_programmer', 'java-programmer', 1), + ] + subclass = None + superclass = None + def __init__(self, comments=None, person=None, programmer=None, python_programmer=None, java_programmer=None): + self.original_tagname_ = None + if comments is None: + self.comments = [] + else: + self.comments = comments + if person is None: + self.person = [] + else: + self.person = person + if programmer is None: + self.programmer = [] + else: + self.programmer = programmer + if python_programmer is None: + self.python_programmer = [] + else: + self.python_programmer = python_programmer + if java_programmer is None: + self.java_programmer = [] + else: + self.java_programmer = java_programmer + def factory(*args_, **kwargs_): + if tomato_people.subclass: + return tomato_people.subclass(*args_, **kwargs_) + else: + return tomato_people(*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_at(self, index, value): self.comments.insert(index, value) + def replace_comments_at(self, index, value): self.comments[index] = value + 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_at(self, index, value): self.person.insert(index, value) + def replace_person_at(self, index, value): self.person[index] = value + 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_at(self, index, value): self.programmer.insert(index, value) + def replace_programmer_at(self, index, value): self.programmer[index] = value + 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_at(self, index, value): self.python_programmer.insert(index, value) + def replace_python_programmer_at(self, index, value): self.python_programmer[index] = value + 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_at(self, index, value): self.java_programmer.insert(index, value) + def replace_java_programmer_at(self, index, value): self.java_programmer[index] = value + def hasContent_(self): + if ( + self.comments or + self.person or + self.programmer or + self.python_programmer or + self.java_programmer + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='people', namespacedef_='', pretty_print=True): + 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_='people') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='people', 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_='people'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='people', 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 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 exportLiteral(self, outfile, level, name_='people'): + 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_): + showIndent(outfile, level) + outfile.write('comments=[\n') + level += 1 + for comments_ in self.comments: + showIndent(outfile, level) + outfile.write('model_.comments(\n') + comments_.exportLiteral(outfile, level) + showIndent(outfile, level) + outfile.write('),\n') + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + showIndent(outfile, level) + outfile.write('person=[\n') + level += 1 + for person_ in self.person: + showIndent(outfile, level) + outfile.write('model_.person(\n') + person_.exportLiteral(outfile, level) + showIndent(outfile, level) + outfile.write('),\n') + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + showIndent(outfile, level) + outfile.write('programmer=[\n') + level += 1 + for programmer_ in self.programmer: + showIndent(outfile, level) + outfile.write('model_.programmer(\n') + programmer_.exportLiteral(outfile, level) + showIndent(outfile, level) + outfile.write('),\n') + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + showIndent(outfile, level) + outfile.write('python_programmer=[\n') + 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') + showIndent(outfile, level) + outfile.write('),\n') + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + showIndent(outfile, level) + outfile.write('java_programmer=[\n') + 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') + showIndent(outfile, level) + outfile.write('),\n') + level -= 1 + 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): + pass + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + if nodeName_ == 'comments': + obj_ = tomato_comments.factory() + obj_.build(child_) + self.comments.append(obj_) + obj_.original_tagname_ = 'comments' + elif nodeName_ == 'person': + class_obj_ = self.get_class_obj_(child_, tomato_person) + obj_ = class_obj_.factory() + obj_.build(child_) + self.person.append(obj_) + obj_.original_tagname_ = 'person' + elif nodeName_ == 'programmer': + class_obj_ = self.get_class_obj_(child_, tomato_programmer) + obj_ = class_obj_.factory() + obj_.build(child_) + self.programmer.append(obj_) + obj_.original_tagname_ = 'programmer' + elif nodeName_ == 'python-programmer': + obj_ = tomato_python_programmer.factory() + obj_.build(child_) + self.python_programmer.append(obj_) + obj_.original_tagname_ = 'python-programmer' + elif nodeName_ == 'java-programmer': + obj_ = tomato_java_programmer.factory() + obj_.build(child_) + self.java_programmer.append(obj_) + obj_.original_tagname_ = 'java-programmer' +# end class tomato_people + + +class tomato_comments(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('emp', 'xs:string', 1), + MemberSpec_('valueOf_', [], 0), + ] + subclass = None + superclass = None + def __init__(self, emp=None, valueOf_=None, mixedclass_=None, content_=None): + self.original_tagname_ = None + if emp is None: + self.emp = [] + else: + self.emp = emp + self.valueOf_ = valueOf_ + if mixedclass_ is None: + self.mixedclass_ = MixedContainer + else: + self.mixedclass_ = mixedclass_ + if content_ is None: + self.content_ = [] + else: + self.content_ = content_ + self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): + if tomato_comments.subclass: + return tomato_comments.subclass(*args_, **kwargs_) + else: + return tomato_comments(*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_at(self, index, value): self.emp.insert(index, value) + def replace_emp_at(self, index, value): self.emp[index] = value + def get_valueOf_(self): return self.valueOf_ + def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def hasContent_(self): + if ( + self.emp or + self.valueOf_ + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='comments', namespacedef_='', pretty_print=True): + 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_='comments') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='comments', 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_='comments'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='comments', fromsubclass_=False, pretty_print=True): + if not fromsubclass_: + for item_ in self.content_: + item_.export(outfile, level, item_.name, namespace_, pretty_print=pretty_print) + def exportLiteral(self, outfile, level, name_='comments'): + level += 1 + 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_): + pass + def exportLiteralChildren(self, outfile, level, name_): + showIndent(outfile, level) + outfile.write('content_ = [\n') + for item_ in self.content_: + item_.exportLiteral(outfile, level, name_) + showIndent(outfile, level) + outfile.write('],\n') + pass + def build(self, node): + 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, + MixedContainer.TypeNone, '', node.text) + self.content_.append(obj_) + 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_ == 'emp' and child_.text is not None: + valuestr_ = child_.text + obj_ = self.mixedclass_(MixedContainer.CategorySimple, + MixedContainer.TypeString, 'emp', valuestr_) + self.content_.append(obj_) + if not fromsubclass_ and child_.tail is not None: + obj_ = self.mixedclass_(MixedContainer.CategoryText, + MixedContainer.TypeNone, '', child_.tail) + self.content_.append(obj_) +# end class tomato_comments + + +class tomato_person(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('vegetable', 'xs:string', 0), + MemberSpec_('fruit', 'xs:string', 0), + MemberSpec_('ratio', 'xs:float', 0), + MemberSpec_('id', 'xs:integer', 0), + MemberSpec_('value', 'xs:string', 0), + MemberSpec_('name', 'xs:string', 0), + MemberSpec_('interest', 'xs:string', 1), + MemberSpec_('category', 'xs:integer', 0), + MemberSpec_('agent', 'agent', 1), + MemberSpec_('promoter', 'booster', 1), + MemberSpec_('description', 'xs:string', 0), + ] + 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, extensiontype_=None): + self.original_tagname_ = None + self.vegetable = _cast(None, vegetable) + self.fruit = _cast(None, fruit) + self.ratio = _cast(float, ratio) + self.id = _cast(int, id) + self.value = _cast(None, value) + self.name = name + if interest is None: + self.interest = [] + else: + self.interest = interest + self.category = category + if agent is None: + self.agent = [] + else: + self.agent = agent + if promoter is None: + self.promoter = [] + else: + self.promoter = promoter + self.description = description + self.extensiontype_ = extensiontype_ + def factory(*args_, **kwargs_): + if tomato_person.subclass: + return tomato_person.subclass(*args_, **kwargs_) + else: + return tomato_person(*args_, **kwargs_) + factory = staticmethod(factory) + def get_name(self): return self.name + def set_name(self, name): self.name = name + 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_at(self, index, value): self.interest.insert(index, value) + def replace_interest_at(self, index, value): self.interest[index] = value + def get_category(self): return self.category + def set_category(self, category): self.category = category + 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_at(self, index, value): self.agent.insert(index, value) + def replace_agent_at(self, index, value): self.agent[index] = value + 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_at(self, index, value): self.promoter.insert(index, value) + def replace_promoter_at(self, index, value): self.promoter[index] = value + def get_description(self): return self.description + def set_description(self, description): self.description = description + def get_vegetable(self): return self.vegetable + def set_vegetable(self, vegetable): self.vegetable = vegetable + def get_fruit(self): return self.fruit + def set_fruit(self, fruit): self.fruit = fruit + def get_ratio(self): return self.ratio + def set_ratio(self, ratio): self.ratio = ratio + def get_id(self): return self.id + def set_id(self, id): self.id = id + def get_value(self): return self.value + def set_value(self, value): self.value = value + def get_extensiontype_(self): return self.extensiontype_ + def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_ + 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 + else: + return False + def export(self, outfile, level, namespace_='', name_='person', namespacedef_='', pretty_print=True): + 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_='person') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='person', 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_='person'): + if self.vegetable is not None and 'vegetable' not in already_processed: + already_processed.add('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.add('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.add('ratio') + outfile.write(' ratio="%s"' % self.gds_format_float(self.ratio, input_name='ratio')) + if self.id is not None and 'id' not in already_processed: + 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.add('value') + outfile.write(' value=%s' % (self.gds_format_string(quote_attrib(self.value).encode(ExternalEncoding), input_name='value'), )) + 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_='person', fromsubclass_=False, pretty_print=True): + if pretty_print: + eol_ = '\n' + else: + eol_ = '' + if self.name is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sname>%s</%sname>%s' % (namespace_, self.gds_format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_, eol_)) + for interest_ in self.interest: + showIndent(outfile, level, pretty_print) + outfile.write('<%sinterest>%s</%sinterest>%s' % (namespace_, self.gds_format_string(quote_xml(interest_).encode(ExternalEncoding), input_name='interest'), namespace_, eol_)) + if self.category is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%scategory>%s</%scategory>%s' % (namespace_, self.gds_format_integer(self.category, input_name='category'), namespace_, eol_)) + for agent_ in self.agent: + agent_.export(outfile, level, namespace_, name_='agent', pretty_print=pretty_print) + for promoter_ in self.promoter: + promoter_.export(outfile, level, namespace_, name_='promoter', pretty_print=pretty_print) + if self.description is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sdescription>%s</%sdescription>%s' % (namespace_, self.gds_format_string(quote_xml(self.description).encode(ExternalEncoding), input_name='description'), namespace_, eol_)) + def exportLiteral(self, outfile, level, name_='person'): + 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_): + if self.vegetable is not None and 'vegetable' not in already_processed: + already_processed.add('vegetable') + showIndent(outfile, level) + outfile.write('vegetable="%s",\n' % (self.vegetable,)) + if self.fruit is not None and 'fruit' not in already_processed: + already_processed.add('fruit') + showIndent(outfile, level) + outfile.write('fruit="%s",\n' % (self.fruit,)) + if self.ratio is not None and 'ratio' not in already_processed: + 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.add('id') + showIndent(outfile, level) + outfile.write('id=%d,\n' % (self.id,)) + if self.value is not None and 'value' not in already_processed: + already_processed.add('value') + showIndent(outfile, level) + outfile.write('value="%s",\n' % (self.value,)) + def exportLiteralChildren(self, outfile, level, name_): + if self.name is not None: + showIndent(outfile, level) + outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) + showIndent(outfile, level) + outfile.write('interest=[\n') + level += 1 + for interest_ in self.interest: + showIndent(outfile, level) + outfile.write('%s,\n' % quote_python(interest_).encode(ExternalEncoding)) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + if self.category is not None: + showIndent(outfile, level) + outfile.write('category=%d,\n' % self.category) + 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) + showIndent(outfile, level) + outfile.write('),\n') + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + showIndent(outfile, level) + outfile.write('promoter=[\n') + level += 1 + for promoter_ in self.promoter: + showIndent(outfile, level) + outfile.write('model_.booster(\n') + promoter_.exportLiteral(outfile, level, name_='booster') + showIndent(outfile, level) + outfile.write('),\n') + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + if self.description is not None: + showIndent(outfile, level) + outfile.write('description=%s,\n' % quote_python(self.description).encode(ExternalEncoding)) + 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_('vegetable', node) + if value is not None and 'vegetable' not in already_processed: + already_processed.add('vegetable') + self.vegetable = value + 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_('ratio', node) + if value is not None and 'ratio' not in already_processed: + already_processed.add('ratio') + try: + self.ratio = float(value) + except ValueError, exp: + raise ValueError('Bad float/double attribute (ratio): %s' % exp) + value = find_attr_value_('id', node) + if value is not None and 'id' not in already_processed: + already_processed.add('id') + try: + self.id = int(value) + except ValueError, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + 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_('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: + raise_parse_error(child_, 'requires integer: %s' % exp) + ival_ = self.gds_validate_integer(ival_, node, 'category') + self.category = ival_ + elif nodeName_ == 'agent': + obj_ = tomato_agent.factory() + obj_.build(child_) + self.agent.append(obj_) + obj_.original_tagname_ = 'agent' + elif nodeName_ == 'promoter': + obj_ = tomato_booster.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 tomato_person + + +class tomato_programmer(tomato_person): + member_data_items_ = [ + MemberSpec_('language', 'xs:string', 0), + MemberSpec_('area', 'xs:string', 0), + MemberSpec_('attrnegint', 'xs:negativeInteger', 0), + MemberSpec_('attrposint', 'xs:positiveInteger', 0), + MemberSpec_('attrnonnegint', 'xs:nonNegativeInteger', 0), + MemberSpec_('attrnonposint', 'xs:nonPositiveInteger', 0), + MemberSpec_('email', 'xs:string', 0), + MemberSpec_('elposint', 'xs:positiveInteger', 0), + MemberSpec_('elnonposint', 'xs:nonPositiveInteger', 0), + MemberSpec_('elnegint', 'xs:negativeInteger', 0), + MemberSpec_('elnonnegint', 'xs:nonNegativeInteger', 0), + MemberSpec_('eldate', 'xs:date', 0), + MemberSpec_('eldatetime', 'xs:dateTime', 0), + MemberSpec_('eltoken', 'xs:token', 0), + MemberSpec_('elshort', 'xs:short', 0), + MemberSpec_('ellong', 'xs:long', 0), + MemberSpec_('elparam', 'param', 0), + MemberSpec_('elarraytypes', ['ArrayTypes', 'xs:NMTOKEN'], 0), + ] + subclass = None + superclass = tomato_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, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, extensiontype_=None): + self.original_tagname_ = None + super(tomato_programmer, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, 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.email = email + self.elposint = elposint + self.elnonposint = elnonposint + self.elnegint = elnegint + self.elnonnegint = elnonnegint + if isinstance(eldate, basestring): + initvalue_ = datetime_.datetime.strptime(eldate, '%Y-%m-%d').date() + else: + initvalue_ = eldate + self.eldate = initvalue_ + if isinstance(eldatetime, basestring): + initvalue_ = datetime_.datetime.strptime(eldatetime, '%Y-%m-%dT%H:%M:%S') + else: + initvalue_ = eldatetime + self.eldatetime = initvalue_ + self.eltoken = eltoken + self.elshort = elshort + self.ellong = ellong + self.elparam = elparam + self.elarraytypes = elarraytypes + self.extensiontype_ = extensiontype_ + def factory(*args_, **kwargs_): + if tomato_programmer.subclass: + return tomato_programmer.subclass(*args_, **kwargs_) + else: + return tomato_programmer(*args_, **kwargs_) + factory = staticmethod(factory) + def get_email(self): return self.email + def set_email(self, email): self.email = email + def get_elposint(self): return self.elposint + def set_elposint(self, elposint): self.elposint = elposint + def get_elnonposint(self): return self.elnonposint + def set_elnonposint(self, elnonposint): self.elnonposint = elnonposint + def get_elnegint(self): return self.elnegint + def set_elnegint(self, elnegint): self.elnegint = elnegint + def get_elnonnegint(self): return self.elnonnegint + def set_elnonnegint(self, elnonnegint): self.elnonnegint = elnonnegint + def get_eldate(self): return self.eldate + def set_eldate(self, eldate): self.eldate = eldate + def get_eldatetime(self): return self.eldatetime + def set_eldatetime(self, eldatetime): self.eldatetime = eldatetime + def get_eltoken(self): return self.eltoken + def set_eltoken(self, eltoken): self.eltoken = eltoken + def get_elshort(self): return self.elshort + def set_elshort(self, elshort): self.elshort = elshort + def get_ellong(self): return self.ellong + def set_ellong(self, ellong): self.ellong = ellong + def get_elparam(self): return self.elparam + def set_elparam(self, elparam): self.elparam = elparam + def get_elarraytypes(self): return self.elarraytypes + def set_elarraytypes(self, elarraytypes): self.elarraytypes = elarraytypes + def get_language(self): return self.language + def set_language(self, language): self.language = language + def get_area(self): return self.area + def set_area(self, area): self.area = area + def get_attrnegint(self): return self.attrnegint + def set_attrnegint(self, attrnegint): self.attrnegint = attrnegint + def get_attrposint(self): return self.attrposint + def set_attrposint(self, attrposint): self.attrposint = attrposint + def get_attrnonnegint(self): return self.attrnonnegint + def set_attrnonnegint(self, attrnonnegint): self.attrnonnegint = attrnonnegint + def get_attrnonposint(self): return self.attrnonposint + def set_attrnonposint(self, attrnonposint): self.attrnonposint = attrnonposint + 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. + pass + 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.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(tomato_programmer, self).hasContent_() + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='programmer', namespacedef_='', pretty_print=True): + 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_='programmer') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='programmer', 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_='programmer'): + super(tomato_programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='programmer') + if self.language is not None and 'language' not in already_processed: + already_processed.add('language') + outfile.write(' language=%s' % (self.gds_format_string(quote_attrib(self.language).encode(ExternalEncoding), input_name='language'), )) + if self.area is not None and 'area' not in already_processed: + already_processed.add('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.add('attrnegint') + outfile.write(' attrnegint="%s"' % self.gds_format_integer(self.attrnegint, input_name='attrnegint')) + if self.attrposint is not None and 'attrposint' not in already_processed: + 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.add('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.add('attrnonposint') + outfile.write(' attrnonposint="%s"' % self.gds_format_integer(self.attrnonposint, input_name='attrnonposint')) + 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_='programmer', fromsubclass_=False, pretty_print=True): + super(tomato_programmer, 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, pretty_print) + outfile.write('<%semail>%s</%semail>%s' % (namespace_, self.gds_format_string(quote_xml(self.email).encode(ExternalEncoding), input_name='email'), namespace_, eol_)) + if self.elposint is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%selposint>%s</%selposint>%s' % (namespace_, self.gds_format_integer(self.elposint, input_name='elposint'), namespace_, eol_)) + if self.elnonposint is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%selnonposint>%s</%selnonposint>%s' % (namespace_, self.gds_format_integer(self.elnonposint, input_name='elnonposint'), namespace_, eol_)) + if self.elnegint is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%selnegint>%s</%selnegint>%s' % (namespace_, self.gds_format_integer(self.elnegint, input_name='elnegint'), namespace_, eol_)) + if self.elnonnegint is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%selnonnegint>%s</%selnonnegint>%s' % (namespace_, self.gds_format_integer(self.elnonnegint, input_name='elnonnegint'), namespace_, eol_)) + if self.eldate is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%seldate>%s</%seldate>%s' % (namespace_, self.gds_format_date(self.eldate, input_name='eldate'), namespace_, eol_)) + if self.eldatetime is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%seldatetime>%s</%seldatetime>%s' % (namespace_, self.gds_format_datetime(self.eldatetime, input_name='eldatetime'), namespace_, eol_)) + if self.eltoken is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%seltoken>%s</%seltoken>%s' % (namespace_, self.gds_format_string(quote_xml(self.eltoken).encode(ExternalEncoding), input_name='eltoken'), namespace_, eol_)) + if self.elshort is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%selshort>%s</%selshort>%s' % (namespace_, self.gds_format_integer(self.elshort, input_name='elshort'), namespace_, eol_)) + if self.ellong is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sellong>%s</%sellong>%s' % (namespace_, self.gds_format_integer(self.ellong, input_name='ellong'), namespace_, 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, pretty_print) + outfile.write('<%selarraytypes>%s</%selarraytypes>%s' % (namespace_, self.gds_format_string(quote_xml(self.elarraytypes).encode(ExternalEncoding), input_name='elarraytypes'), namespace_, eol_)) + def exportLiteral(self, outfile, level, name_='programmer'): + 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_): + if self.language is not None and 'language' not in already_processed: + already_processed.add('language') + showIndent(outfile, level) + outfile.write('language="%s",\n' % (self.language,)) + if self.area is not None and 'area' not in already_processed: + already_processed.add('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.add('attrnegint') + showIndent(outfile, level) + outfile.write('attrnegint=%d,\n' % (self.attrnegint,)) + if self.attrposint is not None and 'attrposint' not in already_processed: + 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.add('attrnonnegint') + showIndent(outfile, level) + outfile.write('attrnonnegint=%d,\n' % (self.attrnonnegint,)) + if self.attrnonposint is not None and 'attrnonposint' not in already_processed: + already_processed.add('attrnonposint') + showIndent(outfile, level) + outfile.write('attrnonposint=%d,\n' % (self.attrnonposint,)) + super(tomato_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_) + def exportLiteralChildren(self, outfile, level, name_): + super(tomato_programmer, 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)) + if self.elposint is not None: + showIndent(outfile, level) + outfile.write('elposint=%d,\n' % self.elposint) + if self.elnonposint is not None: + showIndent(outfile, level) + outfile.write('elnonposint=%d,\n' % self.elnonposint) + if self.elnegint is not None: + showIndent(outfile, level) + outfile.write('elnegint=%d,\n' % self.elnegint) + if self.elnonnegint is not None: + showIndent(outfile, level) + outfile.write('elnonnegint=%d,\n' % self.elnonnegint) + if self.eldate is not None: + showIndent(outfile, level) + 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.eltoken is not None: + showIndent(outfile, level) + outfile.write('eltoken=%s,\n' % quote_python(self.eltoken).encode(ExternalEncoding)) + if self.elshort is not None: + showIndent(outfile, level) + outfile.write('elshort=%d,\n' % self.elshort) + if self.ellong is not None: + showIndent(outfile, level) + outfile.write('ellong=%d,\n' % self.ellong) + if self.elparam is not None: + showIndent(outfile, level) + outfile.write('elparam=model_.param(\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)) + 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_('language', node) + if value is not None and 'language' not in already_processed: + already_processed.add('language') + self.language = value + value = find_attr_value_('area', node) + if value is not None and 'area' not in already_processed: + already_processed.add('area') + self.area = value + 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, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + if self.attrnegint >= 0: + raise_parse_error(node, 'Invalid NegativeInteger') + value = find_attr_value_('attrposint', node) + if value is not None and 'attrposint' not in already_processed: + already_processed.add('attrposint') + try: + self.attrposint = int(value) + except ValueError, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + if self.attrposint <= 0: + raise_parse_error(node, 'Invalid PositiveInteger') + 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, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + if self.attrnonnegint < 0: + raise_parse_error(node, 'Invalid NonNegativeInteger') + value = find_attr_value_('attrnonposint', node) + if value is not None and 'attrnonposint' not in already_processed: + already_processed.add('attrnonposint') + try: + self.attrnonposint = int(value) + except ValueError, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + if self.attrnonposint > 0: + raise_parse_error(node, 'Invalid NonPositiveInteger') + 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(tomato_programmer, 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: + 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: + 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: + 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: + 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': + 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_ == 'eltoken': + eltoken_ = child_.text + eltoken_ = re_.sub(String_cleanup_pat_, " ", eltoken_).strip() + 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: + 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: + raise_parse_error(child_, 'requires integer: %s' % exp) + ival_ = self.gds_validate_integer(ival_, node, 'ellong') + self.ellong = ival_ + elif nodeName_ == 'elparam': + obj_ = tomato_param.factory() + obj_.build(child_) + self.elparam = obj_ + obj_.original_tagname_ = 'elparam' + elif nodeName_ == 'elarraytypes': + elarraytypes_ = child_.text + elarraytypes_ = self.gds_validate_string(elarraytypes_, node, 'elarraytypes') + self.elarraytypes = elarraytypes_ + self.validate_ArrayTypes(self.elarraytypes) # validate type ArrayTypes + super(tomato_programmer, self).buildChildren(child_, node, nodeName_, True) +# end class tomato_programmer + + +class tomato_param(GeneratedsSuper): + """Finding flow attribute unneccesary in practice. A unnamed parameter + is unbound/skipped.""" + member_data_items_ = [ + MemberSpec_('semantic', 'xs:token', 0), + MemberSpec_('name', 'xs:NCName', 0), + MemberSpec_('flow', 'FlowType', 0), + MemberSpec_('sid', 'xs:NCName', 0), + MemberSpec_('type', 'xs:NMTOKEN', 0), + MemberSpec_('id', 'xs:string', 0), + 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.original_tagname_ = None + self.semantic = _cast(None, semantic) + self.name = _cast(None, name) + self.flow = _cast(None, flow) + self.sid = _cast(None, sid) + self.type_ = _cast(None, type_) + self.id = _cast(None, id) + self.valueOf_ = valueOf_ + def factory(*args_, **kwargs_): + if tomato_param.subclass: + return tomato_param.subclass(*args_, **kwargs_) + else: + return tomato_param(*args_, **kwargs_) + factory = staticmethod(factory) + def get_semantic(self): return self.semantic + def set_semantic(self, semantic): self.semantic = semantic + def get_name(self): return self.name + def set_name(self, name): self.name = name + def get_flow(self): return self.flow + def set_flow(self, flow): self.flow = flow + def get_sid(self): return self.sid + def set_sid(self, sid): self.sid = sid + def get_type(self): return self.type_ + def set_type(self, type_): self.type_ = type_ + def get_id(self): return self.id + def set_id(self, id): self.id = id + def get_valueOf_(self): return self.valueOf_ + def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_ + def hasContent_(self): + if ( + self.valueOf_ + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='param', namespacedef_='', pretty_print=True): + 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_='param') + if self.hasContent_(): + outfile.write('>') + outfile.write(str(self.valueOf_).encode(ExternalEncoding)) + self.exportChildren(outfile, level + 1, namespace_='', name_='param', pretty_print=pretty_print) + outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) + else: + outfile.write('/>%s' % (eol_, )) + def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='param'): + if self.semantic is not None and 'semantic' not in already_processed: + already_processed.add('semantic') + outfile.write(' semantic=%s' % (self.gds_format_string(quote_attrib(self.semantic).encode(ExternalEncoding), input_name='semantic'), )) + if self.name is not None and 'name' not in already_processed: + 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.add('flow') + outfile.write(' flow=%s' % (quote_attrib(self.flow), )) + if self.sid is not None and 'sid' not in already_processed: + already_processed.add('sid') + outfile.write(' sid=%s' % (quote_attrib(self.sid), )) + if self.type_ is not None and 'type_' not in already_processed: + already_processed.add('type_') + 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.add('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', fromsubclass_=False, pretty_print=True): + pass + def exportLiteral(self, outfile, level, name_='param'): + level += 1 + 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.add('semantic') + showIndent(outfile, level) + outfile.write('semantic="%s",\n' % (self.semantic,)) + if self.name is not None and 'name' not in already_processed: + already_processed.add('name') + showIndent(outfile, level) + outfile.write('name="%s",\n' % (self.name,)) + if self.flow is not None and 'flow' not in already_processed: + already_processed.add('flow') + showIndent(outfile, level) + outfile.write('flow=%s,\n' % (self.flow,)) + if self.sid is not None and 'sid' not in already_processed: + already_processed.add('sid') + showIndent(outfile, level) + outfile.write('sid="%s",\n' % (self.sid,)) + if self.type_ is not None and 'type_' not in already_processed: + already_processed.add('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.add('id') + showIndent(outfile, level) + outfile.write('id="%s",\n' % (self.id,)) + def exportLiteralChildren(self, outfile, level, name_): + pass + def build(self, node): + 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, node, nodeName_) + return self + def buildAttributes(self, node, attrs, already_processed): + 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_('name', node) + if value is not None and 'name' not in already_processed: + already_processed.add('name') + self.name = value + value = find_attr_value_('flow', node) + if value is not None and 'flow' not in already_processed: + already_processed.add('flow') + self.flow = value + 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_('type', node) + if value is not None and 'type' not in already_processed: + already_processed.add('type') + self.type_ = value + value = find_attr_value_('id', node) + if value is not None and 'id' not in already_processed: + already_processed.add('id') + self.id = value + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + pass +# end class tomato_param + + +class tomato_python_programmer(tomato_programmer): + member_data_items_ = [ + MemberSpec_('nick-name', 'xs:string', 0), + MemberSpec_('favorite_editor', 'xs:string', 0), + ] + subclass = None + superclass = tomato_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, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, nick_name=None, favorite_editor=None): + self.original_tagname_ = None + super(tomato_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, eldatetime, eltoken, elshort, ellong, elparam, elarraytypes, ) + self.nick_name = _cast(None, nick_name) + self.favorite_editor = favorite_editor + def factory(*args_, **kwargs_): + if tomato_python_programmer.subclass: + return tomato_python_programmer.subclass(*args_, **kwargs_) + else: + return tomato_python_programmer(*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 + def get_nick_name(self): return self.nick_name + def set_nick_name(self, nick_name): self.nick_name = nick_name + def hasContent_(self): + if ( + self.favorite_editor is not None or + super(tomato_python_programmer, self).hasContent_() + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='python-programmer', namespacedef_='', pretty_print=True): + 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-programmer') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='python-programmer', 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-programmer'): + super(tomato_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.add('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', fromsubclass_=False, pretty_print=True): + super(tomato_python_programmer, 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('<%sfavorite-editor>%s</%sfavorite-editor>%s' % (namespace_, self.gds_format_string(quote_xml(self.favorite_editor).encode(ExternalEncoding), input_name='favorite-editor'), namespace_, eol_)) + def exportLiteral(self, outfile, level, name_='python-programmer'): + 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_): + if self.nick_name is not None and 'nick_name' not in already_processed: + already_processed.add('nick_name') + showIndent(outfile, level) + outfile.write('nick_name="%s",\n' % (self.nick_name,)) + super(tomato_python_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_) + def exportLiteralChildren(self, outfile, level, name_): + super(tomato_python_programmer, 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)) + 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_('nick-name', node) + if value is not None and 'nick-name' not in already_processed: + already_processed.add('nick-name') + self.nick_name = value + super(tomato_python_programmer, 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(tomato_python_programmer, self).buildChildren(child_, node, nodeName_, True) +# end class tomato_python_programmer + + +class tomato_java_programmer(tomato_programmer): + member_data_items_ = [ + MemberSpec_('status', 'xs:string', 0), + MemberSpec_('nick-name', 'xs:string', 0), + MemberSpec_('favorite_editor', 'xs:string', 0), + ] + subclass = None + superclass = tomato_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, eldatetime=None, eltoken=None, elshort=None, ellong=None, elparam=None, elarraytypes=None, status=None, nick_name=None, favorite_editor=None): + self.original_tagname_ = None + super(tomato_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, eldatetime, eltoken, elshort, ellong, elparam, elarraytypes, ) + self.status = _cast(None, status) + self.nick_name = _cast(None, nick_name) + self.favorite_editor = favorite_editor + def factory(*args_, **kwargs_): + if tomato_java_programmer.subclass: + return tomato_java_programmer.subclass(*args_, **kwargs_) + else: + return tomato_java_programmer(*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 + def get_status(self): return self.status + def set_status(self, status): self.status = status + def get_nick_name(self): return self.nick_name + def set_nick_name(self, nick_name): self.nick_name = nick_name + def hasContent_(self): + if ( + self.favorite_editor is not None or + super(tomato_java_programmer, self).hasContent_() + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='java-programmer', namespacedef_='', pretty_print=True): + 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-programmer') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='java-programmer', 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-programmer'): + super(tomato_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.add('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.add('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', fromsubclass_=False, pretty_print=True): + super(tomato_java_programmer, 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('<%sfavorite-editor>%s</%sfavorite-editor>%s' % (namespace_, self.gds_format_string(quote_xml(self.favorite_editor).encode(ExternalEncoding), input_name='favorite-editor'), namespace_, eol_)) + def exportLiteral(self, outfile, level, name_='java-programmer'): + 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_): + if self.status is not None and 'status' not in already_processed: + already_processed.add('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.add('nick_name') + showIndent(outfile, level) + outfile.write('nick_name="%s",\n' % (self.nick_name,)) + super(tomato_java_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_) + def exportLiteralChildren(self, outfile, level, name_): + super(tomato_java_programmer, 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)) + 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_('status', node) + if value is not None and 'status' not in already_processed: + already_processed.add('status') + self.status = value + value = find_attr_value_('nick-name', node) + if value is not None and 'nick-name' not in already_processed: + already_processed.add('nick-name') + self.nick_name = value + super(tomato_java_programmer, 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(tomato_java_programmer, self).buildChildren(child_, node, nodeName_, True) +# end class tomato_java_programmer + + +class tomato_agent(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('firstname', 'xs:string', 0), + MemberSpec_('lastname', 'xs:string', 0), + MemberSpec_('priority', 'xs:float', 0), + MemberSpec_('info', 'info', 0), + ] + subclass = None + superclass = None + def __init__(self, firstname=None, lastname=None, priority=None, info=None): + self.original_tagname_ = None + self.firstname = firstname + self.lastname = lastname + self.priority = priority + self.info = info + def factory(*args_, **kwargs_): + if tomato_agent.subclass: + return tomato_agent.subclass(*args_, **kwargs_) + else: + return tomato_agent(*args_, **kwargs_) + factory = staticmethod(factory) + def get_firstname(self): return self.firstname + def set_firstname(self, firstname): self.firstname = firstname + def get_lastname(self): return self.lastname + def set_lastname(self, lastname): self.lastname = lastname + def get_priority(self): return self.priority + def set_priority(self, priority): self.priority = priority + def get_info(self): return self.info + def set_info(self, info): self.info = 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 + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='agent', namespacedef_='', pretty_print=True): + 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_='agent') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='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_='agent'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='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('<%sfirstname>%s</%sfirstname>%s' % (namespace_, self.gds_format_string(quote_xml(self.firstname).encode(ExternalEncoding), input_name='firstname'), namespace_, eol_)) + if self.lastname is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%slastname>%s</%slastname>%s' % (namespace_, self.gds_format_string(quote_xml(self.lastname).encode(ExternalEncoding), input_name='lastname'), namespace_, eol_)) + if self.priority is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%spriority>%s</%spriority>%s' % (namespace_, self.gds_format_float(self.priority, input_name='priority'), namespace_, eol_)) + if self.info is not None: + self.info.export(outfile, level, namespace_, name_='info', pretty_print=pretty_print) + def exportLiteral(self, outfile, level, name_='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_): + pass + 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)) + if self.lastname is not None: + showIndent(outfile, level) + outfile.write('lastname=%s,\n' % quote_python(self.lastname).encode(ExternalEncoding)) + 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) + 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): + pass + 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: + 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_ = tomato_info.factory() + obj_.build(child_) + self.info = obj_ + obj_.original_tagname_ = 'info' +# end class tomato_agent + + +class tomato_special_agent(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('firstname', 'xs:string', 0), + MemberSpec_('lastname', 'xs:string', 0), + MemberSpec_('priority', 'xs:float', 0), + MemberSpec_('info', 'info', 0), + ] + subclass = None + superclass = None + def __init__(self, firstname=None, lastname=None, priority=None, info=None): + self.original_tagname_ = None + self.firstname = firstname + self.lastname = lastname + self.priority = priority + self.info = info + def factory(*args_, **kwargs_): + if tomato_special_agent.subclass: + return tomato_special_agent.subclass(*args_, **kwargs_) + else: + return tomato_special_agent(*args_, **kwargs_) + factory = staticmethod(factory) + def get_firstname(self): return self.firstname + def set_firstname(self, firstname): self.firstname = firstname + def get_lastname(self): return self.lastname + def set_lastname(self, lastname): self.lastname = lastname + def get_priority(self): return self.priority + def set_priority(self, priority): self.priority = priority + def get_info(self): return self.info + def set_info(self, info): self.info = 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 + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='special-agent', namespacedef_='', pretty_print=True): + 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_='special-agent') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='special-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_='special-agent'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='special-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('<%sfirstname>%s</%sfirstname>%s' % (namespace_, self.gds_format_string(quote_xml(self.firstname).encode(ExternalEncoding), input_name='firstname'), namespace_, eol_)) + if self.lastname is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%slastname>%s</%slastname>%s' % (namespace_, self.gds_format_string(quote_xml(self.lastname).encode(ExternalEncoding), input_name='lastname'), namespace_, eol_)) + if self.priority is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%spriority>%s</%spriority>%s' % (namespace_, self.gds_format_float(self.priority, input_name='priority'), namespace_, eol_)) + if self.info is not None: + self.info.export(outfile, level, namespace_, name_='info', pretty_print=pretty_print) + def exportLiteral(self, outfile, level, name_='special-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_): + pass + 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)) + if self.lastname is not None: + showIndent(outfile, level) + outfile.write('lastname=%s,\n' % quote_python(self.lastname).encode(ExternalEncoding)) + 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) + 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): + pass + 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: + 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_ = tomato_info.factory() + obj_.build(child_) + self.info = obj_ + obj_.original_tagname_ = 'info' +# end class tomato_special_agent + + +class tomato_booster(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('firstname', 'xs:string', 0), + MemberSpec_('lastname', 'xs:string', 0), + MemberSpec_('other_name', 'xs:float', 0), + MemberSpec_('class_', 'xs:float', 0), + MemberSpec_('other_value', 'xs:float', 1), + MemberSpec_('type_', 'xs:float', 1), + MemberSpec_('client_handler', 'client-handlerType', 1), + ] + subclass = None + superclass = None + def __init__(self, firstname=None, lastname=None, other_name=None, class_=None, other_value=None, type_=None, client_handler=None): + self.original_tagname_ = None + self.firstname = firstname + self.lastname = lastname + self.other_name = other_name + self.class_ = class_ + if other_value is None: + self.other_value = [] + else: + self.other_value = other_value + if type_ is None: + self.type_ = [] + else: + self.type_ = type_ + if client_handler is None: + self.client_handler = [] + else: + self.client_handler = client_handler + def factory(*args_, **kwargs_): + if tomato_booster.subclass: + return tomato_booster.subclass(*args_, **kwargs_) + else: + return tomato_booster(*args_, **kwargs_) + factory = staticmethod(factory) + def get_firstname(self): return self.firstname + def set_firstname(self, firstname): self.firstname = firstname + def get_lastname(self): return self.lastname + def set_lastname(self, lastname): self.lastname = lastname + def get_other_name(self): return self.other_name + def set_other_name(self, other_name): self.other_name = other_name + def get_class(self): return self.class_ + def set_class(self, class_): self.class_ = 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_at(self, index, value): self.other_value.insert(index, value) + def replace_other_value_at(self, index, value): self.other_value[index] = 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_at(self, index, value): self.type_.insert(index, value) + def replace_type_at(self, index, value): self.type_[index] = value + 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_at(self, index, value): self.client_handler.insert(index, value) + def replace_client_handler_at(self, index, value): self.client_handler[index] = value + def hasContent_(self): + if ( + self.firstname is not None or + self.lastname is not None or + self.other_name 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 export(self, outfile, level, namespace_='', name_='booster', namespacedef_='', pretty_print=True): + 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_='booster') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='booster', 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_='booster'): + pass + def exportChildren(self, outfile, level, namespace_='', name_='booster', 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('<%sfirstname>%s</%sfirstname>%s' % (namespace_, self.gds_format_string(quote_xml(self.firstname).encode(ExternalEncoding), input_name='firstname'), namespace_, eol_)) + if self.lastname is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%slastname>%s</%slastname>%s' % (namespace_, self.gds_format_string(quote_xml(self.lastname).encode(ExternalEncoding), input_name='lastname'), namespace_, eol_)) + if self.other_name is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sother-name>%s</%sother-name>%s' % (namespace_, self.gds_format_float(self.other_name, input_name='other-name'), namespace_, eol_)) + if self.class_ is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%sclass>%s</%sclass>%s' % (namespace_, self.gds_format_float(self.class_, input_name='class'), namespace_, eol_)) + for other_value_ in self.other_value: + showIndent(outfile, level, pretty_print) + outfile.write('<%sother-value>%s</%sother-value>%s' % (namespace_, self.gds_format_float(other_value_, input_name='other-value'), namespace_, eol_)) + for type_ in self.type_: + showIndent(outfile, level, pretty_print) + outfile.write('<%stype>%s</%stype>%s' % (namespace_, self.gds_format_float(type_, input_name='type'), namespace_, eol_)) + for client_handler_ in self.client_handler: + client_handler_.export(outfile, level, namespace_, name_='client-handler', pretty_print=pretty_print) + def exportLiteral(self, outfile, level, name_='booster'): + 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.firstname is not None: + showIndent(outfile, level) + outfile.write('firstname=%s,\n' % quote_python(self.firstname).encode(ExternalEncoding)) + if self.lastname is not None: + showIndent(outfile, level) + outfile.write('lastname=%s,\n' % quote_python(self.lastname).encode(ExternalEncoding)) + if self.other_name is not None: + showIndent(outfile, level) + outfile.write('other_name=%f,\n' % self.other_name) + if self.class_ is not None: + showIndent(outfile, level) + outfile.write('class_=%f,\n' % self.class_) + showIndent(outfile, level) + outfile.write('other_value=[\n') + level += 1 + for other_value_ in self.other_value: + showIndent(outfile, level) + outfile.write('%f,\n' % other_value_) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + showIndent(outfile, level) + outfile.write('type_=[\n') + level += 1 + for type_ in self.type_: + showIndent(outfile, level) + outfile.write('%f,\n' % type_) + level -= 1 + showIndent(outfile, level) + outfile.write('],\n') + showIndent(outfile, level) + outfile.write('client_handler=[\n') + level += 1 + for client_handler_ in self.client_handler: + showIndent(outfile, level) + 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): + 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_ == '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: + 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: + raise_parse_error(child_, 'requires float or double: %s' % exp) + fval_ = self.gds_validate_float(fval_, node, 'class') + self.class_ = fval_ + elif nodeName_ == 'other-value': + sval_ = child_.text + try: + fval_ = float(sval_) + except (TypeError, ValueError), exp: + raise_parse_error(child_, 'requires float or double: %s' % exp) + fval_ = self.gds_validate_float(fval_, node, 'other_value') + self.other_value.append(fval_) + elif nodeName_ == 'type': + sval_ = child_.text + try: + fval_ = float(sval_) + except (TypeError, ValueError), exp: + raise_parse_error(child_, 'requires float or double: %s' % exp) + fval_ = self.gds_validate_float(fval_, node, 'type') + self.type_.append(fval_) + elif nodeName_ == 'client-handler': + obj_ = tomato_client_handlerType.factory() + obj_.build(child_) + self.client_handler.append(obj_) + obj_.original_tagname_ = 'client-handler' +# end class tomato_booster + + +class tomato_info(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('rating', 'xs:float', 0), + MemberSpec_('type', 'xs:integer', 0), + MemberSpec_('name', 'xs:string', 0), + ] + subclass = None + superclass = None + def __init__(self, rating=None, type_=None, name=None): + self.original_tagname_ = None + self.rating = _cast(float, rating) + self.type_ = _cast(int, type_) + self.name = _cast(None, name) + def factory(*args_, **kwargs_): + if tomato_info.subclass: + return tomato_info.subclass(*args_, **kwargs_) + else: + return tomato_info(*args_, **kwargs_) + factory = staticmethod(factory) + def get_rating(self): return self.rating + def set_rating(self, rating): self.rating = rating + def get_type(self): return self.type_ + def set_type(self, type_): self.type_ = type_ + def get_name(self): return self.name + def set_name(self, name): self.name = name + def hasContent_(self): + if ( + + ): + return True + else: + return False + def export(self, outfile, level, namespace_='', name_='info', namespacedef_='', pretty_print=True): + 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_='info') + if self.hasContent_(): + outfile.write('>%s' % (eol_, )) + self.exportChildren(outfile, level + 1, namespace_='', name_='info', pretty_print=pretty_print) + outfile.write('</%s%s>%s' % (namespace_, name_, eol_)) + else: + outfile.write('/>%s' % (eol_, )) + def exportAttributes(self, outfile, level, already_processed, 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')) + if self.type_ is not None and 'type_' not in already_processed: + 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.add('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', fromsubclass_=False, pretty_print=True): + pass + def exportLiteral(self, outfile, level, name_='info'): + 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_): + if self.rating is not None and 'rating' not in already_processed: + already_processed.add('rating') + showIndent(outfile, level) + outfile.write('rating=%f,\n' % (self.rating,)) + if self.type_ is not None and 'type_' not in already_processed: + 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.add('name') + showIndent(outfile, level) + outfile.write('name="%s",\n' % (self.name,)) + def exportLiteralChildren(self, outfile, level, name_): + pass + 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_('rating', node) + if value is not None and 'rating' not in already_processed: + already_processed.add('rating') + try: + self.rating = float(value) + except ValueError, exp: + raise ValueError('Bad float/double attribute (rating): %s' % exp) + value = find_attr_value_('type', node) + if value is not None and 'type' not in already_processed: + already_processed.add('type') + try: + self.type_ = int(value) + except ValueError, exp: + raise_parse_error(node, 'Bad integer attribute: %s' % exp) + value = find_attr_value_('name', node) + if value is not None and 'name' not in already_processed: + already_processed.add('name') + self.name = value + def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): + pass +# end class tomato_info + + +class tomato_client_handlerType(GeneratedsSuper): + member_data_items_ = [ + MemberSpec_('fullname', 'xs:string', 0), + MemberSpec_('refid', 'xs:integer', 0), + ] + 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 tomato_client_handlerType.subclass: + return tomato_client_handlerType.subclass(*args_, **kwargs_) + else: + return tomato_client_handlerType(*args_, **kwargs_) + factory = staticmethod(factory) + def get_fullname(self): return self.fullname + def set_fullname(self, fullname): self.fullname = fullname + def get_refid(self): return self.refid + def set_refid(self, refid): self.refid = 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_='', pretty_print=True): + 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('<%sfullname>%s</%sfullname>%s' % (namespace_, self.gds_format_string(quote_xml(self.fullname).encode(ExternalEncoding), input_name='fullname'), namespace_, eol_)) + if self.refid is not None: + showIndent(outfile, level, pretty_print) + outfile.write('<%srefid>%s</%srefid>%s' % (namespace_, self.gds_format_integer(self.refid, input_name='refid'), namespace_, eol_)) + 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' % 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): + 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), exp: + raise_parse_error(child_, 'requires integer: %s' % exp) + ival_ = self.gds_validate_integer(ival_, node, 'refid') + self.refid = ival_ +# end class tomato_client_handlerType + + +GDSClassesMapping = { + 'client-handler': tomato_client_handlerType, + 'elparam': tomato_param, + 'promoter': tomato_booster, +} + + +USAGE_TEXT = """ +Usage: python <tomato_Parser>.py [ -s ] <in_xml_file> +""" + + +def usage(): + print USAGE_TEXT + sys.exit(1) + + +def get_root_tag(node): + tag = Tag_pattern_.match(node.tag).groups()[-1] + rootClass = GDSClassesMapping.get(tag) + if rootClass is None: + rootClass = globals().get(tag) + return tag, rootClass + + +def parse(inFileName, silence=False): + doc = parsexml_(inFileName) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'people' + rootClass = tomato_people + 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 parseEtree(inFileName, silence=False): + doc = parsexml_(inFileName) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'people' + rootClass = tomato_people + 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): + from StringIO import StringIO + doc = parsexml_(StringIO(inString)) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'people' + rootClass = tomato_people + 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 parseLiteral(inFileName, silence=False): + doc = parsexml_(inFileName) + rootNode = doc.getroot() + rootTag, rootClass = get_root_tag(rootNode) + if rootClass is None: + rootTag = 'people' + rootClass = tomato_people + 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 prefix_classname2_sup import *\n\n') + sys.stdout.write('import prefix_classname2_sup 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: + parse(args[0]) + else: + usage() + + +if __name__ == '__main__': + #import pdb; pdb.set_trace() + main() + + +__all__ = [ + "tomato_agent", + "tomato_booster", + "tomato_client_handlerType", + "tomato_comments", + "tomato_info", + "tomato_java_programmer", + "tomato_param", + "tomato_people", + "tomato_person", + "tomato_programmer", + "tomato_python_programmer", + "tomato_special_agent" +] diff --git a/tests/test.py b/tests/test.py index 96a05e2..5e965bc 100755 --- a/tests/test.py +++ b/tests/test.py @@ -525,6 +525,31 @@ class GenTest(unittest.TestCase): result, err = self.execute(cmd) self.check_result(result, err, ()) + def test_024_prefix_classname(self): + cmdTempl = ( + 'python generateDS.py --no-dates --no-versions ' + '-p tomato_ ' + '--member-specs=list -f ' + '-o tests/%s2_sup.py -s tests/%s2_sub.py ' + '--super=%s2_sup ' + 'tests/%s.xsd' + ) + t_ = 'prefix_classname' + cmd = cmdTempl % (t_, t_, t_, t_, ) + result, _ = self.execute(cmd, cwd='..') + cmd = 'diff %s1_sup.py %s2_sup.py' % (t_, t_, ) + result, err = self.execute(cmd) + self.check_result(result, err, ('sys.stdout.write',)) + cmd = 'diff %s1_sub.py %s2_sub.py' % (t_, t_, ) + result, err = self.execute(cmd) + self.check_result(result, err, ()) + cmdTempl = 'python tests/%s2_sup.py tests/%s.xml > tests/%s2_out.xml' + cmd = cmdTempl % (t_, t_, t_, ) + result, _ = self.execute(cmd, cwd='..') + cmd = 'diff %s1_out.xml %s2_out.xml' % (t_, t_, ) + result, err = self.execute(cmd) + self.check_result(result, err, ()) + def check_result(self, result, err, ignore_strings): self.failUnlessEqual(len(result), 0) self.failUnlessEqual(len(err), 0) diff --git a/tutorial/generateds_tutorial.html b/tutorial/generateds_tutorial.html index ce70917..4229ff0 100644 --- a/tutorial/generateds_tutorial.html +++ b/tutorial/generateds_tutorial.html @@ -3,7 +3,7 @@ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -<meta name="generator" content="Docutils 0.12: http://docutils.sourceforge.net/" /> +<meta name="generator" content="Docutils 0.13: http://docutils.sourceforge.net/" /> <title>generateDS -- Introduction and Tutorial</title> <meta name="author" content="Dave Kuhlman" /> <style type="text/css"> @@ -219,7 +219,7 @@ They are used by updateversion.py. --> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.12e</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.13a</td> </tr> </tbody> </table> @@ -228,7 +228,7 @@ They are used by updateversion.py. --> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">date:</th><td class="field-body">May 22, 2014</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">September 09, 2014</td> </tr> </tbody> </table> @@ -1210,7 +1210,7 @@ named <tt class="docutils literal">garden_api.py</tt>, you can create an instanc <div class="footer"> <hr class="footer" /> <a class="reference external" href="generateds_tutorial.txt">View document source</a>. -Generated on: 2014-05-22 16:15 UTC. +Generated on: 2014-09-09 19:14 UTC. Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source. </div> diff --git a/tutorial/generateds_tutorial.txt b/tutorial/generateds_tutorial.txt index 0dcab2b..3a9d416 100644 --- a/tutorial/generateds_tutorial.txt +++ b/tutorial/generateds_tutorial.txt @@ -11,7 +11,7 @@ generateDS -- Introduction and Tutorial .. version -:revision: 2.12g +:revision: 2.13a .. version diff --git a/tutorial/generateds_tutorial.zip b/tutorial/generateds_tutorial.zip index 0a67f630b3d3efdefc4e51b17fc154474101f81b..157eecae050a3a0201ce0ca0984aaeb93fe97c59 100644 GIT binary patch delta 12131 zcmZX41yEeuwr%6??v1-^aCdii4-h<f)3{3-4GzI2XmEFe1b27$pb0<cocrIs_r2P+ zS5=QW$F#kwYjyAO@CyC(3QeM}1Otl;000mHP8N(Zx{||)TF?Lh3>*MJ0O^J%0D1a& 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 delta 12084 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 U0^v0s0D%5_zY+s<+x|ZNAL-~s{Qv*} diff --git a/updateversion.py b/updateversion.py new file mode 100755 index 0000000..b122794 --- /dev/null +++ b/updateversion.py @@ -0,0 +1,143 @@ +#!/usr/bin/env python + +""" +Usage: + python updateversion.py [options] +Options: + -h, --help Display this help message. + -v x.xx, --version=x.xx + New version. Required. + --verbose Print extra info. +Example: + python updateversion.py -v 1.17c +""" + + +# +# Imports + +import sys +import getopt +import re +import shutil + + +# +# Globals and constants + +VERBOSE = False + +REPL_SPEC = [ + { + 'filename': 'setup.py', + 'pattern': r'(##VERSION##\s*version=")([\w\.\-]*)(",\s*##VERSION##)', + }, + { + 'filename': 'generateDS.py', + 'pattern': r"(##VERSION##\s*VERSION = ')([\w\.\-]*)('\s*##VERSION##)", + }, + { + 'filename': 'process_includes.py', + 'pattern': r"(##VERSION##\s*VERSION = ')([\w\.\-]*)('\s*##VERSION##)", + }, + { + 'filename': 'generateDS.txt', + 'pattern': r"(.. version\s*:revision: )([\w\.\-]*)(\s*.. version)", + }, + { + 'filename': 'generateDS.txt', + 'pattern': r"(\.\. version\s*- My Web site -- \s*" + r"http://www\.rexx\.com/~dkuhlman/generateDS-)" + r"([\w\.\-]*)(\.tar\.gz\s*\.\. version)", + }, + { + 'filename': 'librarytemplate_howto.txt', + 'pattern': r"(.. version\s*:revision: )([\w\.\-]*)(\s*.. version)", + }, + { + 'filename': 'tutorial/generateds_tutorial.txt', + 'pattern': r"(.. version\s*:revision: )([\w\.\-]*)(\s*.. version)", + }, + { + 'filename': 'gui/generateds_gui.py', + 'pattern': r"(##VERSION##\s*VERSION = ')([\w\.\-]*)('\s*##VERSION##)", + }, +] + + +# +# Functions for external use + +def updateversion(version): + replfunc = replfuncmaker(version) + for spec in REPL_SPEC: + targetfilename = spec['filename'] + if VERBOSE: + print 'updating: "%s"' % (targetfilename, ) + targetfile = open(targetfilename, 'r') + content = targetfile.read() + targetfile.close() + content1 = re.sub( + spec['pattern'], + replfunc, + content) + update1file(targetfilename, content1) + + + +# +# Classes + + + +# +# Functions for internal use and testing + +def update1file(targetfilename, content): + backupfilename = targetfilename + '.bak' + shutil.copy2(targetfilename, backupfilename) + targetfile = open(targetfilename, 'w') + targetfile.write(content) + targetfile.close() + #shutil.copymode(backupfilename, targetfilename) + +def replfuncmaker(version): + def replfunc(matchobj): + if VERBOSE: + print '(replfunc) matchobj.groups()', matchobj.groups() + return matchobj.group(1) + version + matchobj.group(3) + return replfunc + + +USAGE_TEXT = __doc__ + +def usage(): + print USAGE_TEXT + sys.exit(1) + + +def main(): + global VERBOSE + args = sys.argv[1:] + try: + opts, args = getopt.getopt(args, 'hv:', [ + 'help', 'version=', 'verbose', ]) + except: + usage() + version = None + for opt, val in opts: + if opt in ('-h', '--help'): + usage() + elif opt in ('-v', '--version'): + version = val + elif opt in ('--verbose', ): + VERBOSE = True + if len(args) != 0 or version is None: + usage() + updateversion(version) + + +if __name__ == '__main__': + #import pdb; pdb.set_trace() + main() + -- GitLab