1
1
import inspect
2
- from soaplib .xml import *
2
+ from soaplib .xml import ns , create_xml_element , create_xml_subelement , qualify
3
3
4
4
from primitive import Null
5
5
@@ -43,8 +43,9 @@ def __init__(self):
43
43
setattr (self ,k ,None )
44
44
45
45
@classmethod
46
- def to_xml (cls ,value ,name = 'retval' ):
47
- element = create_xml_element (qualify (name , cls .namespace ))
46
+ def to_xml (cls ,value ,name = 'retval' , nsmap = ns ):
47
+ element = create_xml_element (
48
+ nsmap .get (cls .get_namespace_id ()) + name , nsmap )
48
49
49
50
for k ,v in cls .soap_members .items ():
50
51
member_value = getattr (value ,k ,None )
@@ -53,7 +54,7 @@ def to_xml(cls,value,name='retval'):
53
54
if subvalue is None :
54
55
v = Null
55
56
56
- subelements = v .to_xml (subvalue ,name = k )
57
+ subelements = v .to_xml (subvalue ,name = k , nsmap = nsmap )
57
58
if type (subelements ) != list :
58
59
subelements = [subelements ]
59
60
for s in subelements :
@@ -79,38 +80,40 @@ def from_xml(cls, element):
79
80
return obj
80
81
81
82
@classmethod
82
- def get_datatype (cls ,withNamespace = False ):
83
- if withNamespace :
84
- return 'tns:%s' % (cls .__name__ )
83
+ def get_datatype (cls ,nsmap = None ):
84
+ if nsmap is not None :
85
+ return nsmap . get (cls .get_namespace_id ()) + cls . __name__
85
86
return cls .__name__
86
-
87
+
88
+ @classmethod
89
+ def get_namespace_id (cls ):
90
+ return 'tns'
91
+
87
92
@classmethod
88
- def add_to_schema (cls , schemaDict ):
93
+ def add_to_schema (cls , schemaDict , nsmap ):
89
94
90
- if not schemaDict .has_key (cls .get_datatype (True )):
95
+ if not schemaDict .has_key (cls .get_datatype (nsmap )):
91
96
for k ,v in cls .soap_members .items ():
92
- v .add_to_schema (schemaDict )
97
+ v .add_to_schema (schemaDict , nsmap )
93
98
94
- tag = qualify ( "complexType" , ns [ "xs" ])
95
- schema_node = create_xml_element ( tag )
99
+ schema_node = create_xml_element (
100
+ nsmap . get ( "xs" ) + "complexType" , nsmap )
96
101
schema_node .set ('name' ,cls .__name__ )
97
102
98
103
sequence_node = create_xml_subelement (
99
- schema_node ,
100
- qualify ('sequence' , ns ["xs" ])
101
- )
104
+ schema_node , nsmap .get ('xs' ) + 'sequence' )
102
105
for k ,v in cls .soap_members .items ():
103
106
member_node = create_xml_subelement (
104
- sequence_node ,
105
- qualify ('element' , ns ["xs" ])
106
- )
107
+ sequence_node , nsmap .get ('xs' ) + 'element' )
107
108
member_node .set ('name' ,k )
108
109
member_node .set ('minOccurs' ,'0' )
109
- member_node .set ('type' ,v .get_datatype (True ))
110
+ member_node .set ('type' ,
111
+ "%s:%s" % (v .get_namespace_id (), v .get_datatype ()))
110
112
111
- tag = qualify ( "element" , ns [ "xs" ])
112
- typeElement = create_xml_element ( tag )
113
+ typeElement = create_xml_element (
114
+ nsmap . get ( 'xs' ) + 'element' , nsmap )
113
115
typeElement .set ('name' ,cls .__name__ )
114
- typeElement .set ('type' ,'tns:' + cls .__name__ )
115
- schemaDict [cls .get_datatype (True )+ 'Complex' ] = schema_node
116
- schemaDict [cls .get_datatype (True )] = typeElement
116
+ typeElement .set ('type' ,
117
+ "%s:%s" % (cls .get_namespace_id (),cls .__name__ ))
118
+ schemaDict [cls .get_datatype (nsmap )+ 'Complex' ] = schema_node
119
+ schemaDict [cls .get_datatype (nsmap )] = typeElement
0 commit comments