From 54a2967cecdb3c834a4e400b11ebe0da9e653b32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Mon, 27 Dec 2010 16:35:23 +0100 Subject: [PATCH] Convert dictionary with numeric keys into str for xmlrpc --- trytond/protocols/xmlrpc.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/trytond/protocols/xmlrpc.py b/trytond/protocols/xmlrpc.py index 7b4ef6d613..ee3453447e 100644 --- a/trytond/protocols/xmlrpc.py +++ b/trytond/protocols/xmlrpc.py @@ -17,6 +17,7 @@ import gzip import StringIO import base64 import datetime +from types import DictType # convert decimal to float before marshalling: from decimal import Decimal @@ -33,6 +34,19 @@ xmlrpclib.Marshaller.dispatch[datetime.date] = \ lambda self, value, write: self.dump_datetime( datetime.datetime.combine(value, datetime.time()), write) +def dump_struct(self, value, write, escape=xmlrpclib.escape): + converted_value = {} + for k, v in value.items(): + if type(k) in (int, long): + k = str(int(k)) + elif type(k) == float: + k = repr(k) + converted_value[k] = v + return self.dump_struct(converted_value, write, escape=escape) + +xmlrpclib.Marshaller.dispatch[DictType] = dump_struct + + def _end_double(self, data): self.append(Float(data)) self._value = 0