Please review this at http://codereview.appspot.com/447041/show
Affected files:
M trytond/backend/fields.py
A trytond/protocols/datatype.py
M trytond/protocols/jsonrpc.py
M trytond/protocols/xmlrpc.py
Index: trytond/backend/fields.py
===================================================================
--- a/trytond/backend/fields.py
+++ b/trytond/backend/fields.py
@@ -79,8 +79,10 @@
def sql_format(value):
if not value:
value = Decimal('0.0')
- if isinstance(value, (int, long, float)):
+ if isinstance(value, (int, long)):
value = Decimal(repr(value))
+ if isinstance(value, float) and hasattr(value, 'decimal'):
+ value = Decimal(value.decimal)
assert isinstance(value, Decimal)
return value
Index: trytond/protocols/datatype.py
===================================================================
new file mode 100644
--- /dev/null
+++ b/trytond/protocols/datatype.py
@@ -0,0 +1,18 @@
+#This file is part of Tryton. The COPYRIGHT file at the top level of
+#this repository contains the full copyright notices and license terms.
+
+class Float(float):
+
+ def __init__(self, value):
+ super(Float, self).__init__()
+ self.__decimal = value
+
+ @property
+ def decimal(self):
+ return self.__decimal
+
+ def __repr__(self):
+ return self.decimal
+
+ def __str__(self):
+ return self.decimal
Index: trytond/protocols/jsonrpc.py
===================================================================
--- a/trytond/protocols/jsonrpc.py
+++ b/trytond/protocols/jsonrpc.py
@@ -3,6 +3,7 @@
from trytond.protocols.sslsocket import SSLSocket
from trytond.protocols.dispatcher import dispatch
from trytond.config import CONFIG
+from trytond.protocols.datatype import Float
import SimpleXMLRPCServer
import SimpleHTTPServer
import SocketServer
@@ -77,7 +78,7 @@
existing method through subclassing is the prefered means
of changing method dispatch behavior.
"""
- rawreq = json.loads(data, object_hook=object_hook)
+ rawreq = json.loads(data, object_hook=object_hook,
parse_float=Float)
req_id = rawreq.get('id', 0)
method = rawreq['method']
Index: trytond/protocols/xmlrpc.py
===================================================================
--- a/trytond/protocols/xmlrpc.py
+++ b/trytond/protocols/xmlrpc.py
@@ -3,6 +3,7 @@
from trytond.protocols.sslsocket import SSLSocket
from trytond.protocols.dispatcher import dispatch
from trytond.config import CONFIG
+from trytond.protocols.datatype import Float
import SimpleXMLRPCServer
import SocketServer
import xmlrpclib
@@ -21,6 +22,11 @@
xmlrpclib.Marshaller.dispatch[type(None)] = \
lambda self, value, write: self.dump_bool(bool(value), write)
+def _end_double(self, data):
+ self.append(Float(data))
+ self._value = 0
+xmlrpclib.Unmarshaller.dispatch["double"] = _end_double
+
class GenericXMLRPCRequestHandler:
--
Cédric Krier
B2CK SPRL
Rue de Rotterdam, 4
4000 Liège
Belgium
Tel: +32 472 54 46 59
Email/Jabber: [email protected]
Website: http://www.b2ck.com/
pgpn1c9ZqKblz.pgp
Description: PGP signature
