Merge lp:~j-launchpad-dennis/ladon/ladon into lp:ladon

Proposed by Dennis Plöger
Status: Needs review
Proposed branch: lp:~j-launchpad-dennis/ladon/ladon
Merge into: lp:ladon
Diff against target: 218 lines (+61/-59)
1 file modified
frameworks/python/src/ladon/interfaces/xmlrpc.py (+61/-59)
To merge this branch: bzr merge lp:~j-launchpad-dennis/ladon/ladon
Reviewer Review Type Date Requested Status
Ladon Developer Pending
Review via email: mp+151956@code.launchpad.net

Description of the change

To post a comment you must log in.
Revision history for this message
Dennis Plöger (j-launchpad-dennis) wrote :

Hello? Could this be integrated please?

Unmerged revisions

99. By Dennis Ploeger <email address hidden>

errors in xmlrpc type handling on responses

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'frameworks/python/src/ladon/interfaces/xmlrpc.py'
2--- frameworks/python/src/ladon/interfaces/xmlrpc.py 2013-03-03 21:17:57 +0000
3+++ frameworks/python/src/ladon/interfaces/xmlrpc.py 2013-03-06 13:36:38 +0000
4@@ -58,7 +58,8 @@
5 _content_type = 'text/xml'
6 _special_types = []
7
8- def _get_type_name(self, type_class):
9+ @staticmethod
10+ def get_type_name(type_class):
11
12 try:
13
14@@ -68,7 +69,8 @@
15
16 return type(type_class).__name__
17
18- def _type_to_xmlrpc(self, type_name):
19+ @staticmethod
20+ def type_to_xmlrpc(type_name):
21
22 if type_name in ['str', 'unicode']:
23
24@@ -84,7 +86,7 @@
25
26 elif type_name == 'datetime.time':
27
28- return 'dateTime8601'
29+ return 'dateTime.iso8601'
30
31 elif type_name == 'bool':
32
33@@ -122,7 +124,7 @@
34
35 for type_class in type_dict:
36
37- self._special_types.append(self._get_type_name(type_class))
38+ self._special_types.append(get_type_name(type_class))
39
40 impl = getDOMImplementation()
41
42@@ -160,8 +162,8 @@
43
44 member_el.setAttribute(
45 'type',
46- self._type_to_xmlrpc(
47- self._get_type_name(member_type)
48+ type_to_xmlrpc(
49+ get_type_name(member_type)
50 )
51 )
52
53@@ -188,8 +190,8 @@
54 method_el.setAttribute('name', method.name())
55 method_el.setAttribute(
56 'result',
57- self._type_to_xmlrpc(
58- self._get_type_name(method_info['rtype'][0])
59+ type_to_xmlrpc(
60+ get_type_name(method_info['rtype'][0])
61 )
62 )
63
64@@ -199,8 +201,8 @@
65
66 param_el.setAttribute(
67 'type',
68- self._type_to_xmlrpc(
69- self._get_type_name(param['type'])
70+ type_to_xmlrpc(
71+ get_type_name(param['type'])
72 )
73 )
74
75@@ -346,65 +348,65 @@
76
77 value_el = resp_doc.createElement('value')
78
79- if isinstance(value, (str, unicode)):
80-
81- # Check for special cases base64, dateTime.iso8601
82-
83- if is_binary(value):
84-
85- base64_el = resp_doc.createElement('base64')
86- base64_el.appendChild(
87- resp_doc.createTextNode(base64.b64encode(str(value)))
88- )
89-
90- value_el.appendChild(base64_el)
91-
92- elif self.datetime_re.match(value):
93-
94- datetime_el = resp_doc.createElement('dateTime.iso8601')
95- datetime_el.appendChild(
96- resp_doc.createTextNode(value)
97- )
98-
99- value_el.appendChild(datetime_el)
100-
101- elif isinstance(value, unicode):
102-
103- string_el = resp_doc.createElement('string')
104- string_el.appendChild(
105- resp_doc.createTextNode(value)
106- )
107-
108- value_el.appendChild(string_el)
109-
110- else:
111-
112- string_el = resp_doc.createElement('string')
113- string_el.appendChild(
114- resp_doc.createTextNode(u(value))
115- )
116-
117- value_el.appendChild(string_el)
118-
119- elif isinstance(value, int):
120+ type = XMLRPCServiceDescriptor.type_to_xmlrpc(XMLRPCServiceDescriptor.get_type_name(value))
121+
122+ if type == 'base64':
123+
124+ base64_el = resp_doc.createElement('base64')
125+ base64_el.appendChild(
126+ resp_doc.createTextNode(base64.b64encode(str(value)))
127+ )
128+
129+ value_el.appendChild(base64_el)
130+
131+ elif type == 'string' and self.datetime_re.match(value):
132+
133+ # Special case of a string, that is in dateTime.iso8601 format
134+
135+ datetime_el = resp_doc.createElement('dateTime.iso8601')
136+ datetime_el.appendChild(
137+ resp_doc.createTextNode(value)
138+ )
139+
140+ value_el.appendChild(datetime_el)
141+
142+ elif type == 'string' and XMLRPCServiceDescriptor.get_type_name(value) == 'unicode':
143+
144+ string_el = resp_doc.createElement('string')
145+ string_el.appendChild(
146+ resp_doc.createTextNode(value)
147+ )
148+
149+ value_el.appendChild(string_el)
150+
151+ elif type == 'string':
152+
153+ string_el = resp_doc.createElement('string')
154+ string_el.appendChild(
155+ resp_doc.createTextNode(u(value))
156+ )
157+
158+ value_el.appendChild(string_el)
159+
160+ elif type == 'int':
161
162 int_el = resp_doc.createElement('int')
163 int_el.appendChild(
164- resp_doc.createTextNode(value)
165+ resp_doc.createTextNode(u(str(value)))
166 )
167
168 value_el.appendChild(int_el)
169
170- elif isinstance(value, float):
171+ elif type == 'double':
172
173 double_el = resp_doc.createElement('double')
174 double_el.appendChild(
175- resp_doc.createTextNode(value)
176+ resp_doc.createTextNode(u(str(value)))
177 )
178
179 value_el.appendChild(double_el)
180
181- elif isinstance(value, bool):
182+ elif type == 'boolean':
183
184 if value:
185 value = 1
186@@ -413,12 +415,12 @@
187
188 boolean_el = resp_doc.createElement('boolean')
189 boolean_el.appendChild(
190- resp_doc.createTextNode(value)
191+ resp_doc.createTextNode(u(str(value)))
192 )
193
194 value_el.appendChild(boolean_el)
195
196- elif isinstance(value, datetime.time):
197+ elif type == 'dateTime.iso8601':
198
199 datetime_el = resp_doc.createElement('dateTime.iso8601')
200 datetime_el.appendChild(
201@@ -429,7 +431,7 @@
202
203 value_el.appendChild(datetime_el)
204
205- elif isinstance(value, dict):
206+ elif type == 'struct':
207
208 struct_el = resp_doc.createElement('struct')
209
210@@ -456,7 +458,7 @@
211
212 value_el.appendChild(struct_el)
213
214- elif isinstance(value, list):
215+ elif type == 'array':
216
217 array_el = resp_doc.createElement('array')
218 data_el = resp_doc.createElement('data')

Subscribers

People subscribed via source and target branches