Browse Source

----------------------------------------------------------------------

Modified Files:
 	XMLSchema.py --
            Wasn't resolving schema imports in every scenario.
            Now look in parent schema imported_schemas first, second look
            in the parent wsdl, lastly try to resolve schemaLocation.

            Removed 'what' parameter from marker interface methods, I don't
            know what it was doing there.  Check self.

 ----------------------------------------------------------------------
main
Joshua Boverhof 22 years ago
parent
commit
3198b42070
1 changed files with 40 additions and 30 deletions
  1. +40
    -30
      XMLSchema.py

+ 40
- 30
XMLSchema.py View File

@@ -403,6 +403,10 @@ class WSDLToolsAdapter(XMLSchemaComponent):
XMLSchemaComponent.__init__(self, None) XMLSchemaComponent.__init__(self, None)
self.setAttributes(DOMAdapter(wsdl.document)) self.setAttributes(DOMAdapter(wsdl.document))


def getImportSchemas(self):
"""returns WSDLTools.WSDL types Collection
"""
return self._parent().types


"""Marker Interface: can determine something about an instances properties by using """Marker Interface: can determine something about an instances properties by using
the provided convenience functions. the provided convenience functions.
@@ -471,38 +475,38 @@ class ComplexMarker:
pass pass


class MarkerInterface: class MarkerInterface:
def isDefinition(self, what): def isDefinition(self):
return isinstance(what, DefinitionMarker) return isinstance(self, DefinitionMarker)


def isDeclaration(self, what): def isDeclaration(self):
return isinstance(what, DeclarationMarker) return isinstance(self, DeclarationMarker)


def isAttribute(self, what): def isAttribute(self):
return isinstance(what, AttributeMarker) return isinstance(self, AttributeMarker)


def isAttributeGroup(self, what): def isAttributeGroup(self):
return isinstance(what, AttributeGroupMarker) return isinstance(self, AttributeGroupMarker)


def isReference(self, what): def isReference(self):
return isinstance(what, ReferenceMarker) return isinstance(self, ReferenceMarker)


def isWildCard(self, what): def isWildCard(self):
return isinstance(what, WildCardMarker) return isinstance(self, WildCardMarker)


def isModelGroup(self, what): def isModelGroup(self):
return isinstance(what, ModelGroupMarker) return isinstance(self, ModelGroupMarker)


def isExtension(self, what): def isExtension(self):
return isinstance(what, ExtensionMarker) return isinstance(self, ExtensionMarker)


def isRestriction(self, what): def isRestriction(self):
return isinstance(what, RestrictionMarker) return isinstance(self, RestrictionMarker)


def isSimple(self, what): def isSimple(self):
return isinstance(what, SimpleMarker) return isinstance(self, SimpleMarker)


def isComplex(self, what): def isComplex(self):
return isinstance(what, ComplexMarker) return isinstance(self, ComplexMarker)




class Notation(XMLSchemaComponent): class Notation(XMLSchemaComponent):
@@ -931,6 +935,7 @@ class XMLSchema(XMLSchemaComponent):
def __init__(self, parent): def __init__(self, parent):
XMLSchemaComponent.__init__(self, parent) XMLSchemaComponent.__init__(self, parent)
self.annotation = None self.annotation = None
self._schema = None


def fromDom(self, node): def fromDom(self, node):
self.setAttributes(node) self.setAttributes(node)
@@ -950,20 +955,25 @@ class XMLSchema(XMLSchemaComponent):
def getSchema(self): def getSchema(self):
"""if schema is not defined, first look for a Schema class instance """if schema is not defined, first look for a Schema class instance
in parent Schema. Else if not defined resolve schemaLocation in parent Schema. Else if not defined resolve schemaLocation
and create a new Schema class instance. and create a new Schema class instance, and keep a hard reference.
""" """
if not self._schema: if not self._schema:
schema = self._parent()._parent() schema = self._parent().getImportSchemas().get(self.attributes['namespace'])
self._schema = schema.getImportSchemas()[self.attributes['namespace']] if not schema and self._parent()._parent:
if not self._schema: schema = self._parent()._parent().getImportSchemas().get(self.attributes['namespace'])
url = urllib.basejoin(schema.getBaseUrl(),\ if not schema:
if not self.attributes.has_key('schemaLocation'):
raise SchemaError, 'namespace(%s) is unknown'\
%self.attributes['namespace']

url = urllib.basejoin(self._parent().getBaseUrl(),\
self.attributes['schemaLocation']) self.attributes['schemaLocation'])
reader = SchemaReader() reader = SchemaReader()
reader._imports = schema.getImportSchemas() reader._imports = self._parent().getImportSchemas()
reader._includes = schema.getIncludeSchemas() reader._includes = self._parent().getIncludeSchemas()
self._schema = reader.readFromUrl(url) self._schema = reader.readFromUrl(url)
self._schema.setBaseUrl(url) self._schema.setBaseUrl(url)
return self._schema return self._schema or schema




class Include(XMLSchemaComponent): class Include(XMLSchemaComponent):


||||||
x
 
000:0
Loading…
Cancel
Save