summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjortel <devnull@localhost>2010-08-17 15:57:33 +0000
committerjortel <devnull@localhost>2010-08-17 15:57:33 +0000
commitb07ed92fff72fc7a405c0b5a75a8534e641fc52d (patch)
tree656c4eb703f392a844d8e14617024199a37c17c9
parentf6d3973455da2526e5f4db57769babb167967045 (diff)
downloadsuds-b07ed92fff72fc7a405c0b5a75a8534e641fc52d.tar.gz
Fix building xsd types using the builder with mixed content (string w/ attributes).
-rw-r--r--suds/builder.py19
-rw-r--r--suds/xsd/sxbase.py6
-rw-r--r--suds/xsd/sxbasic.py14
3 files changed, 31 insertions, 8 deletions
diff --git a/suds/builder.py b/suds/builder.py
index 95f81c4..c2aad98 100644
--- a/suds/builder.py
+++ b/suds/builder.py
@@ -44,10 +44,10 @@ class Builder:
else:
type = name
cls = type.name
- if len(type):
- data = Factory.object(cls)
- else:
+ if type.mixed():
data = Factory.property(cls)
+ else:
+ data = Factory.object(cls)
resolved = type.resolve()
md = data.__metadata__
md.sxtype = resolved
@@ -73,10 +73,15 @@ class Builder:
value = []
else:
if len(resolved) > 0:
- value = Factory.object(resolved.name)
- md = value.__metadata__
- md.sxtype = resolved
- md.ordering = self.ordering(resolved)
+ if resolved.mixed():
+ value = Factory.property(resolved.name)
+ md = value.__metadata__
+ md.sxtype = resolved
+ else:
+ value = Factory.object(resolved.name)
+ md = value.__metadata__
+ md.sxtype = resolved
+ md.ordering = self.ordering(resolved)
setattr(data, type.name, value)
if value is not None:
data = value
diff --git a/suds/xsd/sxbase.py b/suds/xsd/sxbase.py
index 643a118..2577ffd 100644
--- a/suds/xsd/sxbase.py
+++ b/suds/xsd/sxbase.py
@@ -297,6 +297,12 @@ class SchemaObject(object):
@rtype: boolean
"""
return False
+
+ def mixed(self):
+ """
+ Get whether this I{mixed} content.
+ """
+ return False
def find(self, qref, classes=()):
"""
diff --git a/suds/xsd/sxbasic.py b/suds/xsd/sxbasic.py
index 0b536d2..2506e04 100644
--- a/suds/xsd/sxbasic.py
+++ b/suds/xsd/sxbasic.py
@@ -118,6 +118,12 @@ class Complex(SchemaObject):
if c.extension():
return True
return False
+
+ def mixed(self):
+ for c in self.rawchildren:
+ if isinstance(c, SimpleContent) and c.mixed():
+ return True
+ return False
class Group(SchemaObject):
@@ -195,6 +201,9 @@ class Simple(SchemaObject):
if isinstance(child, Enumeration):
return True
return False
+
+ def mixed(self):
+ return len(self)
def description(self):
return ('name',)
@@ -340,6 +349,9 @@ class SimpleContent(SchemaObject):
if c.restriction():
return True
return False
+
+ def mixed(self):
+ return len(self)
class Enumeration(Content):
@@ -470,7 +482,7 @@ class Extension(SchemaObject):
def description(self):
return ('ref',)
-
+
class Import(SchemaObject):
"""