Module EDGenerateDS
[hide private]
[frames] | no frames]

Module EDGenerateDS

source code

  1. Synopsis:

    Generate Python classes from XML Schema definition. Input is read from in_xsd_file or, if "-" (dash) arg, from stdin. Output is written to files named in "-o" and "-s" options.

  2. Usage:

    python EDGenerateDS.py [ options ] <xsd_file> python EDGenerateDS.py [ options ] -

  3. Options:

    -h, --help Display this help information. -o <outfilename> Output file name for data representation classes -s <subclassfilename> Output file name for subclasses -p <prefix> Prefix string to be pre-pended to the class names -f Force creation of output files. Do not ask. -a <namespaceabbrev> Namespace abbreviation, e.g. "xsd:". Default = 'xs:'. -b <behaviorfilename> Input file name for behaviors added to subclasses -m Generate properties for member variables --subclass-suffix="XXX" Append XXX to the generated subclass names. Default="Sub". --root-element="XXX" Assume XXX is root element of instance docs.Default is first element defined in schema. --super="XXX" Super module name in subclass module. Default="???" --validator-bodies=path Path to a directory containing files that provide bodies (implementations) of validator methods. --use-old-getter-setter Name getters and setters getVar() and setVar(), instead of get_var() and set_var(). --user-methods= <module>, -u <module Optional module containing user methods. See section "User Methods" in the documentation.

Classes [hide private]
  XschemaElementBase
  SimpleTypeElement
  XschemaElement
  XschemaAttributeGroup
  XschemaAttribute
  XschemaHandler
Functions [hide private]
 
set_type_constants(nameSpace) source code
 
dbgprint(level, msg) source code
 
pplist(lst) source code
 
showLevel(outfile, level) source code
 
generateExportFn_1(outfile, child, name, fill) source code
 
generateExportFn_2(outfile, child, name, fill) source code
 
generateExportFn_3(outfile, child, name, fill) source code
 
generateExportAttributes(outfile, element, hasAttributes) source code
 
generateExportChildren(outfile, element, hasChildren) source code
 
countChildren(element, count) source code
 
generateExportFn(outfile, prefix, element) source code
 
generateExportFnXML(outfile, prefix, element) source code
 
generateStaticParseString(outfile, prefix, element) source code
 
generateStaticParseFile(outfile, prefix, element) source code
 
generateMarshal(outfile, prefix, element) source code
 
generateExportLiteralFn_1(outfile, child, name, fill) source code
 
generateExportLiteralFn_2(outfile, child, name, fill) source code
 
generateExportLiteralFn(outfile, prefix, element) source code
 
generateBuildAttributes(outfile, element, hasAttributes) source code
 
generateBuildMixed_1(outfile, prefix, child, headChild, keyword, delayed) source code
 
generateBuildMixed(outfile, prefix, element, keyword, delayed, hasChildren) source code
 
generateBuildStandard_1(outfile, prefix, child, headChild, keyword, delayed) source code
 
generateBuildStandard(outfile, prefix, element, keyword, delayed, hasChildren) source code
 
generateBuildFn(outfile, prefix, element, delayed) source code
 
countElementChildren(element, count) source code
 
buildCtorArgs_multilevel(element) source code
 
buildCtorArgs_multilevel_aux(addedArgs, add, element) source code
 
buildCtorArgs_aux(addedArgs, add, element) source code
 
generateCtor(outfile, element) source code
 
getValidatorBody(stName) source code
 
generateGettersAndSetters(outfile, element) source code
 
generateMemberSpec(outfile, element) source code
 
generateUserMethods(outfile, element) source code
 
generateClasses(outfile, prefix, element, delayed) source code
 
getClassName(element) source code
 
generateSaxAttributes(wrt, element) source code
 
generateSAXStartElement_1(wrt, element) source code
 
generateSAXStartElement(outfile, root, elementList) source code
 
generateParentCheck(parent) source code
 
generateSAXEndElement(outfile, root, elementList) source code
 
produceAllElements_nogen(element, parent, collection) source code
 
generateSAXHndlr(outfile, root) source code
 
collect(element, elements) source code
 
generateHeader(outfile, prefix) source code
 
generateMain(outfile, prefix, root) source code
 
buildCtorParams(element) source code
 
buildCtorParams_aux(add, element) source code
 
get_class_behavior_args(classBehavior) source code
 
get_impl_body(classBehavior, baseImplUrl, implUrl) source code
 
generateClassBehaviors(wrt, classBehaviors, baseImplUrl) source code
 
generateSubclass(outfile, element, prefix, xmlbehavior, behaviors, baseUrl) source code
 
generateSubclasses(root, subclassFilename, behaviorFilename, prefix, superModule='xxx') source code
 
generateFromTree(outfile, prefix, elements, processed) source code
 
generate(outfileName, subclassFilename, behaviorFilename, prefix, root, superModule) source code
 
makeFile(outFileName) source code
 
mapName(oldName) source code
 
cleanupName(oldName) source code
 
make_gs_name(oldName) source code
 
strip_namespace(val) source code
 
parseAndGenerate(outfileName, subclassFilename, prefix, xschemaFileName, behaviorFilename, superModule='???') source code
 
usage() source code
 
main() source code
Variables [hide private]
  GenerateProperties = 0
  UseOldGetterSetter = 0
  DelayedElements = []
  DelayedElements_subclass = []
  AlreadyGenerated = []
  AlreadyGenerated_subclass = []
  PostponedExtensions = []
  ElementsForSubclasses = []
  ElementDict = {}
  SaxElementDict = {}
  Force = 0
  NameTable = {'and': 'andxx', 'as': 'asxx', 'assert': 'assertxx...
  SubclassSuffix = 'Sub'
  RootElement = None
hash(x)
  AttributeGroups = {}
  SubstitutionGroups = {}
  SimpleElementDict = {}
  SimpleTypeDict = {}
  ValidatorBodiesBasePath = None
hash(x)
  UserMethodsPath = None
hash(x)
  UserMethodsModule = None
hash(x)
  XsdNameSpace = ''
  DEBUG = 0
  MixedCtorInitializers = ' if mixedclass_ is None:\n ...
  SAX_STARTELEMENT_1 = ' def startElement(self, name, attrs):...
  SAX_STARTELEMENT_2 = ' stackObj = SaxStackElement(\...
  SAX_STARTELEMENT_3 = ' stackObj = SaxStackElement(\...
  SAX_STARTELEMENT_4 = ' if not done:\n self.r...
  SAX_ATTR_INTEGER = ' val = attrs.get(\'%s\', None)\...
  SAX_ATTR_BOOLEAN = ' val = attrs.get(\'%s\', None)\...
  SAX_ATTR_FLOAT = ' val = attrs.get(\'%s\', None)\n ...
  SAX_ATTR_STRING = ' val = attrs.get(\'%s\', None)\n...
  SAX_ENDELEMENT_1 = ' if name == \'%s\':\n if...
  SAX_ENDELEMENT_2 = ' elif name == \'%s\':\n ...
  SAX_ENDELEMENT_3 = ' elif name == \'%s\':\n ...
  SAX_ENDELEMENT_INT = ' if content:\n ...
  SAX_ENDELEMENT_FLOAT = ' if content:\n ...
  SAX_ENDELEMENT_BOOLEAN = ' if content and conte...
  SAX_ENDELEMENT_4 = ' if not done:\n self.rep...
  SAX_HEADER = 'from xml.sax import handler, make_parser\n\nclas...
  SAX_FOOTER = ' def characters(self, chrs, start, end):\n ...
  TEMPLATE_HEADER = '#!/usr/bin/env python\n\n#\n# Generated %s ...
  TEMPLATE_MAIN = 'USAGE_TEXT = """\nUsage: python <%(prefix)sPa...
  TEMPLATE_SUBCLASS_HEADER = '#!/usr/bin/env python\n\n#\n# Gene...
  TEMPLATE_SUBCLASS_FOOTER = '\n#\n# SAX handler used to determi...
  USAGE_TEXT = '\n1. Synopsis:\n\nGenerate Python classes from X...
  __package__ = None
hash(x)
  kw = 'yield'
Variables Details [hide private]

NameTable

Value:
{'and': 'andxx',
 'as': 'asxx',
 'assert': 'assertxx',
 'break': 'breakxx',
 'class': 'classxx',
 'continue': 'continuexx',
 'def': 'defxx',
 'del': 'delxx',
...

MixedCtorInitializers

Value:
'''        if mixedclass_ is None:
            self.mixedclass_ = MixedContainer
        else:
            self.mixedclass_ = mixedclass_
        if content_ is None:
            self.content_ = []
        else:
            self.content_ = content_
...

SAX_STARTELEMENT_1

Value:
'''    def startElement(self, name, attrs):
        done = 0
        if name == \'%s\':
            obj = %s.factory()
            stackObj = SaxStackElement(\'%s\', obj)
            self.stack.append(stackObj)
            done = 1
'''

SAX_STARTELEMENT_2

Value:
'''            stackObj = SaxStackElement(\'%s\', obj)
            self.stack.append(stackObj)
            done = 1
'''

SAX_STARTELEMENT_3

Value:
'''            stackObj = SaxStackElement(\'%s\', None)
            self.stack.append(stackObj)
            done = 1
'''

SAX_STARTELEMENT_4

Value:
'''        if not done:
            self.reportError(\'"%s" element not allowed here.\' % name\
)
'''

SAX_ATTR_INTEGER

Value:
'''            val = attrs.get(\'%s\', None)
            if val is not None:
                try:
                    obj.set%s(int(val))
                except Exception:
                    self.reportError(\'"%s" attribute must be integer\\
')
'''

SAX_ATTR_BOOLEAN

Value:
'''            val = attrs.get(\'%s\', None)
            if val is not None:
                if val in (\'true\', \'1\'):
                    obj.set%s(1)
                elif val in (\'false\', \'0\'):
                    obj.set%s(0)
                else:
                    self.reportError(\'"%s" attribute must be boolean \
...

SAX_ATTR_FLOAT

Value:
'''            val = attrs.get(\'%s\', None)
            if val is not None:
                try:
                    obj.set%s(float(val))
                except Exception:
                    self.reportError(\'"%s" attribute must be float\')
'''

SAX_ATTR_STRING

Value:
'''            val = attrs.get(\'%s\', None)
            if val is not None:
                obj.set%s(val)
'''

SAX_ENDELEMENT_1

Value:
'''        if name == \'%s\':
            if len(self.stack) == 1:
                self.root = self.stack[-1].obj
                self.stack.pop()
                done = 1
'''

SAX_ENDELEMENT_2

Value:
'''        elif name == \'%s\':
            if len(self.stack) >= 2:
                self.stack[-2].obj.%s%s(self.stack[-1].obj)
                self.stack.pop()
                done = 1
'''

SAX_ENDELEMENT_3

Value:
'''        elif name == \'%s\':
            if len(self.stack) >= 2:
                content = self.stack[-1].content
%s                self.stack[-2].obj.%s%s(content)
                self.stack.pop()
                done = 1
'''

SAX_ENDELEMENT_INT

Value:
'''                if content:
                    try:
                        content = int(content)
                    except Exception:
                        self.reportError(\'"%s" must be integer -- con\
tent: %%s\' %% content)
                else:
                    content = -1
...

SAX_ENDELEMENT_FLOAT

Value:
'''                if content:
                    try:
                        content = float(content)
                    except Exception:
                        self.reportError(\'"%s" must be float -- conte\
nt: %%s\' %% content)
                else:
                    content = -1
...

SAX_ENDELEMENT_BOOLEAN

Value:
'''                if content and content in (\'true\', \'1\'):
                    content = 1
                else:
                    content = 0
'''

SAX_ENDELEMENT_4

Value:
'''        if not done:
            self.reportError(\'"%s" element not allowed here.\' % name\
)
'''

SAX_HEADER

Value:
'''from xml.sax import handler, make_parser

class SaxStackElement:
    def __init__(self, name=\'\', obj=None):
        self.name = name
        self.obj = obj
        self.content = \'\'

...

SAX_FOOTER

Value:
'''    def characters(self, chrs, start, end):
        if len(self.stack) > 0:
            self.stack[-1].content += chrs[start:end]

    def reportError(self, mesg):
        locator = self.locator
        sys.stderr.write(\'Doc: %s  Line: %d  Column: %d\\n\' % \\
            (locator.getSystemId(), locator.getLineNumber(), 
...

TEMPLATE_HEADER

Value:
'''#!/usr/bin/env python

#
# Generated %s by EDGenerateDS.py.
#

import sys
import getopt
...

TEMPLATE_MAIN

Value:
'''USAGE_TEXT = """
Usage: python <%(prefix)sParser>.py [ -s ] <in_xml_file>
Options:
    -s        Use the SAX parser, not the minidom parser.
"""

def usage():
    print USAGE_TEXT
...

TEMPLATE_SUBCLASS_HEADER

Value:
'''#!/usr/bin/env python

#
# Generated %s by EDGenerateDS.py.
#

import sys
from xml.dom import minidom
...

TEMPLATE_SUBCLASS_FOOTER

Value:
'''
#
# SAX handler used to determine the top level element.
#
class SaxSelectorHandler(handler.ContentHandler):
    def __init__(self):
        self.topElementName = None
    def getTopElementName(self):
...

USAGE_TEXT

Value:
'''
1. Synopsis:

Generate Python classes from XML Schema definition.
Input is read from in_xsd_file or, if "-" (dash) arg, from stdin.
Output is written to files named in "-o" and "-s" options.
    
2. Usage:
...