Browse Source

Fix for

[ 1279019 ] wildcard handsling -> anyType when no type

Added a couple unittest that aren't complete.
main
Joshua Boverhof 19 years ago
parent
commit
9b96041083
1 changed files with 59 additions and 13 deletions
  1. +59
    -13
      XMLSchema.py

+ 59
- 13
XMLSchema.py View File

@@ -15,7 +15,7 @@
ident = "$Id$"

import types, weakref, sys, warnings
from Namespaces import XMLNS
from Namespaces import SCHEMA, XMLNS
from Utility import DOM, DOMException, Collection, SplitQName, basejoin
from StringIO import StringIO

@@ -599,6 +599,8 @@ class XMLSchemaComponent(XMLBase, MarkerInterface):
%(namespace, collection, name)
elif parent.imports.has_key(namespace):
schema = parent.imports[namespace].getSchema()
if schema is None:
raise SchemaError, 'no schema instance for imported namespace (%s).'
try:
obj = getattr(schema, collection)[name]
except KeyError, ex:
@@ -1013,9 +1015,6 @@ class XMLSchema(XMLSchemaComponent):
schema -- schema instance
_imported_schemas
"""
print "XMLSchema(%s) ADD IMPORT SCHEMA: %s" \
%(self.targetNamespace, schema.targetNamespace)
if not isinstance(schema, XMLSchema):
raise TypeError, 'expecting a Schema instance'
if schema.targetNamespace != self.targetNamespace:
@@ -1167,11 +1166,28 @@ class XMLSchema(XMLSchemaComponent):
except SchemaError:
# Dependency declaration, hopefully implementation
# is aware of this namespace (eg. SOAP,WSDL,?)
warnings.warn(\
'<import namespace="%s" schemaLocation=?>, %s'\
%(import_ns, 'failed to load schema instance')
)
#warnings.warn(\
# '<import namespace="%s" schemaLocation=?>, %s'\
# %(import_ns, 'failed to load schema instance')
#)
del slocd[import_ns]
class LazyEval(str):
'''Lazy evaluation of import, replace entry in self.imports.'''
def getSchema(namespace):
schema = slocd.get(namespace)
if schema is None:
parent = self._parent()
wstypes = parent
if isinstance(parent, WSDLToolsAdapter):
wstypes = parent.getImportSchemas()
schema = wstypes.get(namespace)
if isinstance(schema, XMLSchema):
self.imports[namespace] = schema
return schema

return None

self.imports[import_ns] = LazyEval(import_ns)
continue
else:
tp._schema = schema
@@ -1822,17 +1838,42 @@ class ElementDeclaration(XMLSchemaComponent,\
self.constraints = ()

def isQualified(self):
"""
Global elements are always qualified.
"""Global elements are always qualified.
"""
return True

def getAttribute(self, attribute):
"""return attribute.
If attribute is type and it's None, and no simple or complex content,
return the default type "xsd:anyType"
"""
value = XMLSchemaComponent.getAttribute(self, attribute)
if attribute != 'type' or value is not None:
return value
if self.content is not None:
return None
parent = self
while 1:
nsdict = parent.attributes[XMLSchemaComponent.xmlns]
for k,v in nsdict.items():
if v not in SCHEMA.XSD_LIST: continue
return TypeDescriptionComponent((v, 'anyType'))
if isinstance(parent, WSDLToolsAdapter)\
or not hasattr(parent, '_parent'):
break
parent = parent._parent()
raise SchemaError, 'failed to locate the XSD namespace'
def getElementDeclaration(self, attribute):
raise Warning, 'invalid operation for <%s>' %self.tag

def getTypeDefinition(self, attribute=None):
"""
If attribute is None, "type" is assumed, return the corresponding
"""If attribute is None, "type" is assumed, return the corresponding
representation of the global type definition (TypeDefinition),
or the local definition if don't find "type". To maintain backwards
compat, if attribute is provided call base class method.
@@ -2013,6 +2054,11 @@ class ElementWildCard(LocalElementDeclaration, WildCardMarker):
"""
return GetSchema(self).isElementFormDefaultQualified()

def getAttribute(self, attribute):
"""return attribute.
"""
return XMLSchemaComponent.getAttribute(self, attribute)

def getTypeDefinition(self, attribute):
raise Warning, 'invalid operation for <%s>' % self.tag



Loading…
Cancel
Save