• Login
  • Help/Guide
  • About Trac
  • Preferences
  • Wiki
  • Timeline
  • Roadmap
  • Browse Source
  • View Tickets
  • Search

Context Navigation

  • ← Previous Change
  • Next Change →

Changeset 168 for Xml/xsd-fu/trunk/generateDS/generateDS.py

Show
Ignore:
Timestamp:
04/11/08 13:59:39 (8 months ago)
Author:
callan
Message:

generateDS bug fixes:

  • Nested simpleType definitions now handled universally (booleans are insufficient)
  • New style classes throughout

xsd-fu additions:

  • Basic support for OME XML 2003 model (some hacks required)
  • Full support for OME XML 2008 model
  • XML Schema namespace definition support with "-n" command line argument
  • More configuration of certain overrides in xsd-fu mapping now available
Files:
1 modified

  • Xml/xsd-fu/trunk/generateDS/generateDS.py (modified) (8 diffs)

Legend:

Unmodified
Added
Removed
  • Xml/xsd-fu/trunk/generateDS/generateDS.py

    r112 r168  
    204204 
    205205 
    206 class XschemaElementBase: 
     206class XschemaElementBase(object): 
    207207    def __init__(self): 
    208208        pass 
    … …  
    667667 
    668668 
    669 class XschemaAttributeGroup: 
     669class XschemaAttributeGroup(object): 
    670670    def __init__(self, name='', group=None): 
    671671        self.name = name 
    … …  
    695695# end class XschemaAttributeGroup 
    696696 
    697 class XschemaAttribute: 
     697class XschemaAttribute(object): 
    698698    def __init__(self, name, data_type='xs:string', use='optional'): 
    699699        self.name = name 
    … …  
    871871            SimpleTypeDict[stName] = element 
    872872            self.stack.append(element) 
    873             self.inSimpleType = 1 
     873            self.inSimpleType += 1 
    874874        elif name == RestrictionType: 
    875875            # If we are in a simpleType, capture the name of 
    876876            #   the restriction base. 
    877             if self.inSimpleType and 'base' in attrs.keys(): 
     877            if self.inSimpleType > 0 and 'base' in attrs.keys(): 
    878878                self.stack[-1].setBase(attrs['base']) 
    879879            self.inRestrictionType = 1 
    … …  
    890890                # find the last element. 
    891891                element = None 
    892                 for entry in list(stack).reverse(): 
     892                reverse = list(self.stack) 
     893                reverse.reverse() 
     894                logging.debug("Found enum, reverse stack: %s" % reverse) 
     895                for entry in reverse: 
    893896                    if type(entry) == XschemaElement: 
    894897                        element = entry 
    895898                if element is None: 
    896899                    sys.stderr.write( 
    897                         'Cannot find element to attach enumeration: %s' % \ 
    898                             value) 
     900                        'Cannot find element to attach enumeration: %s\n' % \ 
     901                            attrs['value']) 
    899902                    sys.exit(-1) 
    900903                element.values.append(attrs['value']) 
    901             elif self.inSimpleType and attrs.has_key('value'): 
     904            elif self.inSimpleType > 0 and attrs.has_key('value'): 
    902905                # We've been defined as a simpleType on our own. 
    903906                self.stack[-1].values.append(attrs['value']) 
    … …  
    920923    def endElement(self, name): 
    921924        logging.debug("End element: %s" % (name)) 
    922         logging.debug("End element stack: %d" % (len(self.stack))) 
    923         if name == SimpleTypeType and self.inSimpleType: 
    924             self.inSimpleType = 0 
     925        logging.debug("End element stack length: %d" % (len(self.stack))) 
     926        if name == SimpleTypeType and self.inSimpleType > 0: 
     927            self.inSimpleType -= 1 
    925928            # If the simpleType is directly off the root, it may be used to  
    926929            # qualify the type of many elements and/or attributes so we  
    … …  
    935938            self.inNonanonymousComplexType = 0 
    936939            element = self.stack.pop() 
     940            logging.debug("Adding %s as child of %s" % (element, self.stack[-1])) 
    937941            self.stack[-1].addChild(element) 
    938942        elif name == ComplexTypeType: 
    … …  
    975979            pass 
    976980        elif name == ListType: 
    977             # List types are only used with a parent simpleType and can have a 
    978             # simpleType child. So, if we're in a list type we have to be 
    979             # careful to reset the inSimpleType flag otherwise the handler's 
    980             # internal stack will not be unrolled correctly. 
    981             self.inSimpleType = 1 
    982981            self.inListType = 0 
    983982 

Download in other formats:

  • Unified Diff
  • Zip Archive

Trac Powered

Powered by Trac 0.11
By Edgewall Software.

Visit the Trac open source project at
http://trac.edgewall.org/