summaryrefslogtreecommitdiff
path: root/suds/xsd
diff options
context:
space:
mode:
authorjortel <devnull@localhost>2009-03-17 14:59:46 +0000
committerjortel <devnull@localhost>2009-03-17 14:59:46 +0000
commit3574b1f6ca37080479621fcc7f2899e631d6867f (patch)
tree06613ffe11da586517f1ab9c19cd8dd8e639b7a5 /suds/xsd
parentb3cbd7082363446a2c57133224fa13eb33a86079 (diff)
downloadsuds-3574b1f6ca37080479621fcc7f2899e631d6867f.tar.gz
Fix ticket 214. XS Attributes did not implement resolve() and thus were not being translated.
Diffstat (limited to 'suds/xsd')
-rw-r--r--suds/xsd/sxbasic.py76
1 files changed, 40 insertions, 36 deletions
diff --git a/suds/xsd/sxbasic.py b/suds/xsd/sxbasic.py
index 895bff3..0f639e8 100644
--- a/suds/xsd/sxbasic.py
+++ b/suds/xsd/sxbasic.py
@@ -127,6 +127,42 @@ class Factory:
for i in imports:
children.remove(i)
return (children, imports, attributes, elements, types, groups, agrps)
+
+
+class TypedContent(Content):
+
+ def resolve(self, nobuiltin=False):
+ """
+ Resolve and return the nodes true self.
+ @param nobuiltin: Flag indicates that resolution must
+ not continue to include xsd builtins.
+ @return: The resolved (true) type.
+ @rtype: L{SchemaObject}
+ """
+ if self.type is None:
+ return self
+ cached = self.cache.get(nobuiltin)
+ if cached is not None:
+ return cached
+ result = self
+ defns = self.root.defaultNamespace()
+ qref = qualify(self.type, self.root, defns)
+ query = TypeQuery(qref)
+ query.history = [self]
+ log.debug('%s, resolving: %s\n using:%s', self.id, qref, query)
+ resolved = query.execute(self.schema)
+ if resolved is None:
+ log.debug(self.schema)
+ raise TypeNotFound(qref)
+ if resolved.builtin():
+ if nobuiltin:
+ result = self
+ else:
+ result = resolved
+ else:
+ result = resolved.resolve(nobuiltin)
+ return result
+
class Complex(SchemaObject):
@@ -594,7 +630,7 @@ class Enumeration(Content):
return True
-class Element(Content):
+class Element(TypedContent):
"""
Represents an (xsd) schema <xs:element/> node.
"""
@@ -606,7 +642,7 @@ class Element(Content):
@param root: The xml root node.
@type root: L{sax.element.Element}
"""
- Content.__init__(self, schema, root)
+ TypedContent.__init__(self, schema, root)
self.min = root.get('minOccurs', default='1')
self.max = root.get('maxOccurs', default='1')
a = root.get('form')
@@ -656,38 +692,6 @@ class Element(Content):
"""
return ( self.min == '0' )
- def resolve(self, nobuiltin=False):
- """
- Resolve and return the nodes true self.
- @param nobuiltin: Flag indicates that resolution must
- not continue to include xsd builtins.
- @return: The resolved (true) type.
- @rtype: L{SchemaObject}
- """
- if self.type is None:
- return self
- cached = self.cache.get(nobuiltin)
- if cached is not None:
- return cached
- result = self
- defns = self.root.defaultNamespace()
- qref = qualify(self.type, self.root, defns)
- query = TypeQuery(qref)
- query.history = [self]
- log.debug('%s, resolving: %s\n using:%s', self.id, qref, query)
- resolved = query.execute(self.schema)
- if resolved is None:
- log.debug(self.schema)
- raise TypeNotFound(qref)
- if resolved.builtin():
- if nobuiltin:
- result = self
- else:
- result = resolved
- else:
- result = resolved.resolve(nobuiltin)
- return result
-
def dependencies(self):
"""
Get a list of dependancies for dereferencing.
@@ -896,7 +900,7 @@ class Include(Import):
pass
-class Attribute(Content):
+class Attribute(TypedContent):
"""
Represents an (xsd) <attribute/> node
"""
@@ -908,7 +912,7 @@ class Attribute(Content):
@param root: The xml root node.
@type root: L{sax.element.Element}
"""
- Content.__init__(self, schema, root)
+ TypedContent.__init__(self, schema, root)
self.use = root.get('use', default='')
def isattr(self):