From ba40e3734aebf011fd2b88426c0f49de570fd6a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Fri, 25 Mar 2011 11:56:14 +0100 Subject: [PATCH] Fix Numeric over XML-RPC for issue1874 --- proteus/__init__.py | 9 +++++++-- proteus/config.py | 5 +++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/proteus/__init__.py b/proteus/__init__.py index cca2aa1542..7052007175 100644 --- a/proteus/__init__.py +++ b/proteus/__init__.py @@ -102,8 +102,7 @@ class FloatDescriptor(FieldDescriptor): default = 0.0 def __set__(self, instance, value): - assert isinstance(value, float) - super(FloatDescriptor, self).__set__(instance, value) + super(FloatDescriptor, self).__set__(instance, float(value)) class NumericDescriptor(FieldDescriptor): @@ -609,6 +608,12 @@ class Model(object): fields.append(name) self._values.update(self._proxy.read(self.id, fields, self._config.context)) + for field in fields: + if (field in self._fields + and self._fields[field]['type'] == 'float' + and isinstance(self._values[field], Decimal)): + # XML-RPC return Decimal for double + self._values[field] = float(self._values[field]) def _default_get(self): 'Set default values' diff --git a/proteus/config.py b/proteus/config.py index 710b01b296..286234c5f6 100644 --- a/proteus/config.py +++ b/proteus/config.py @@ -22,6 +22,11 @@ xmlrpclib.Marshaller.dispatch[datetime.date] = \ lambda self, value, write: self.dump_datetime( datetime.datetime.combine(value, datetime.time()), write) +def _end_double(self, data): + self.append(Decimal(data)) + self._value = 0 +xmlrpclib.Unmarshaller.dispatch["double"] = _end_double + _CONFIG = threading.local()