ladon-dev-team team mailing list archive
-
ladon-dev-team team
-
Mailing list archive
-
Message #00089
[Merge] lp:~j-launchpad-dennis/ladon/ladon into lp:ladon
Dennis Plöger has proposed merging lp:~j-launchpad-dennis/ladon/ladon into lp:ladon.
Requested reviews:
Ladon Developer (ladon-dev-team)
Related bugs:
Bug #1131214 in ladon: "XMLRPC support"
https://bugs.launchpad.net/ladon/+bug/1131214
Bug #1149525 in ladon: "XMLRPC-interface faults when requesting a method, that responses with a non-string"
https://bugs.launchpad.net/ladon/+bug/1149525
For more details, see:
https://code.launchpad.net/~j-launchpad-dennis/ladon/ladon/+merge/151956
Fixes Bug #1149525
--
https://code.launchpad.net/~j-launchpad-dennis/ladon/ladon/+merge/151956
Your team Ladon Developer is requested to review the proposed merge of lp:~j-launchpad-dennis/ladon/ladon into lp:ladon.
=== modified file 'frameworks/python/src/ladon/interfaces/xmlrpc.py'
--- frameworks/python/src/ladon/interfaces/xmlrpc.py 2013-03-03 21:17:57 +0000
+++ frameworks/python/src/ladon/interfaces/xmlrpc.py 2013-03-06 13:36:38 +0000
@@ -58,7 +58,8 @@
_content_type = 'text/xml'
_special_types = []
- def _get_type_name(self, type_class):
+ @staticmethod
+ def get_type_name(type_class):
try:
@@ -68,7 +69,8 @@
return type(type_class).__name__
- def _type_to_xmlrpc(self, type_name):
+ @staticmethod
+ def type_to_xmlrpc(type_name):
if type_name in ['str', 'unicode']:
@@ -84,7 +86,7 @@
elif type_name == 'datetime.time':
- return 'dateTime8601'
+ return 'dateTime.iso8601'
elif type_name == 'bool':
@@ -122,7 +124,7 @@
for type_class in type_dict:
- self._special_types.append(self._get_type_name(type_class))
+ self._special_types.append(get_type_name(type_class))
impl = getDOMImplementation()
@@ -160,8 +162,8 @@
member_el.setAttribute(
'type',
- self._type_to_xmlrpc(
- self._get_type_name(member_type)
+ type_to_xmlrpc(
+ get_type_name(member_type)
)
)
@@ -188,8 +190,8 @@
method_el.setAttribute('name', method.name())
method_el.setAttribute(
'result',
- self._type_to_xmlrpc(
- self._get_type_name(method_info['rtype'][0])
+ type_to_xmlrpc(
+ get_type_name(method_info['rtype'][0])
)
)
@@ -199,8 +201,8 @@
param_el.setAttribute(
'type',
- self._type_to_xmlrpc(
- self._get_type_name(param['type'])
+ type_to_xmlrpc(
+ get_type_name(param['type'])
)
)
@@ -346,65 +348,65 @@
value_el = resp_doc.createElement('value')
- if isinstance(value, (str, unicode)):
-
- # Check for special cases base64, dateTime.iso8601
-
- if is_binary(value):
-
- base64_el = resp_doc.createElement('base64')
- base64_el.appendChild(
- resp_doc.createTextNode(base64.b64encode(str(value)))
- )
-
- value_el.appendChild(base64_el)
-
- elif self.datetime_re.match(value):
-
- datetime_el = resp_doc.createElement('dateTime.iso8601')
- datetime_el.appendChild(
- resp_doc.createTextNode(value)
- )
-
- value_el.appendChild(datetime_el)
-
- elif isinstance(value, unicode):
-
- string_el = resp_doc.createElement('string')
- string_el.appendChild(
- resp_doc.createTextNode(value)
- )
-
- value_el.appendChild(string_el)
-
- else:
-
- string_el = resp_doc.createElement('string')
- string_el.appendChild(
- resp_doc.createTextNode(u(value))
- )
-
- value_el.appendChild(string_el)
-
- elif isinstance(value, int):
+ type = XMLRPCServiceDescriptor.type_to_xmlrpc(XMLRPCServiceDescriptor.get_type_name(value))
+
+ if type == 'base64':
+
+ base64_el = resp_doc.createElement('base64')
+ base64_el.appendChild(
+ resp_doc.createTextNode(base64.b64encode(str(value)))
+ )
+
+ value_el.appendChild(base64_el)
+
+ elif type == 'string' and self.datetime_re.match(value):
+
+ # Special case of a string, that is in dateTime.iso8601 format
+
+ datetime_el = resp_doc.createElement('dateTime.iso8601')
+ datetime_el.appendChild(
+ resp_doc.createTextNode(value)
+ )
+
+ value_el.appendChild(datetime_el)
+
+ elif type == 'string' and XMLRPCServiceDescriptor.get_type_name(value) == 'unicode':
+
+ string_el = resp_doc.createElement('string')
+ string_el.appendChild(
+ resp_doc.createTextNode(value)
+ )
+
+ value_el.appendChild(string_el)
+
+ elif type == 'string':
+
+ string_el = resp_doc.createElement('string')
+ string_el.appendChild(
+ resp_doc.createTextNode(u(value))
+ )
+
+ value_el.appendChild(string_el)
+
+ elif type == 'int':
int_el = resp_doc.createElement('int')
int_el.appendChild(
- resp_doc.createTextNode(value)
+ resp_doc.createTextNode(u(str(value)))
)
value_el.appendChild(int_el)
- elif isinstance(value, float):
+ elif type == 'double':
double_el = resp_doc.createElement('double')
double_el.appendChild(
- resp_doc.createTextNode(value)
+ resp_doc.createTextNode(u(str(value)))
)
value_el.appendChild(double_el)
- elif isinstance(value, bool):
+ elif type == 'boolean':
if value:
value = 1
@@ -413,12 +415,12 @@
boolean_el = resp_doc.createElement('boolean')
boolean_el.appendChild(
- resp_doc.createTextNode(value)
+ resp_doc.createTextNode(u(str(value)))
)
value_el.appendChild(boolean_el)
- elif isinstance(value, datetime.time):
+ elif type == 'dateTime.iso8601':
datetime_el = resp_doc.createElement('dateTime.iso8601')
datetime_el.appendChild(
@@ -429,7 +431,7 @@
value_el.appendChild(datetime_el)
- elif isinstance(value, dict):
+ elif type == 'struct':
struct_el = resp_doc.createElement('struct')
@@ -456,7 +458,7 @@
value_el.appendChild(struct_el)
- elif isinstance(value, list):
+ elif type == 'array':
array_el = resp_doc.createElement('array')
data_el = resp_doc.createElement('data')
Follow ups