From 9e109c6e3df59ae212f23ba6da9838df1889545f 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 (transplanted from b578f95ef5c7dc5f58bbf986ca8108914303ac43) --- trytond/protocols/xmlrpc.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/trytond/protocols/xmlrpc.py b/trytond/protocols/xmlrpc.py index 1e370f7c15..06fe8b2d3c 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 @@ -28,6 +29,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