From f341f6f68dd939bd888f4eb08e2c41497ddb72e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Wed, 9 Jun 2010 19:52:47 +0200 Subject: [PATCH] Handle date and datetime in XML-RPC (transplanted from 9a9c2ca4f50794fd13f08b09eb5093aef1a041d7) --- trytond/backend/fields.py | 8 +++++--- trytond/protocols/xmlrpc.py | 10 ++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/trytond/backend/fields.py b/trytond/backend/fields.py index 6fa95c10cf..f250fabb49 100644 --- a/trytond/backend/fields.py +++ b/trytond/backend/fields.py @@ -98,9 +98,11 @@ class Date(Field): return datetime.date(year, month, day) assert(isinstance(value, datetime.date)) - # datetime must be tested separately because datetime is a - # subclass of date: - assert(not isinstance(value, datetime.datetime)) + # Allow datetime with min time for XML-RPC + if value.time() != datetime.time(): + # datetime must be tested separately because datetime is a + # subclass of date: + assert(not isinstance(value, datetime.datetime)) return value diff --git a/trytond/protocols/xmlrpc.py b/trytond/protocols/xmlrpc.py index 41bfae69a4..1e370f7c15 100644 --- a/trytond/protocols/xmlrpc.py +++ b/trytond/protocols/xmlrpc.py @@ -16,6 +16,7 @@ import os import gzip import StringIO import base64 +import datetime # convert decimal to float before marshalling: from decimal import Decimal @@ -23,11 +24,20 @@ xmlrpclib.Marshaller.dispatch[Decimal] = \ lambda self, value, write: self.dump_double(float(value), write) xmlrpclib.Marshaller.dispatch[type(None)] = \ lambda self, value, write: self.dump_bool(bool(value), write) +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(Float(data)) self._value = 0 xmlrpclib.Unmarshaller.dispatch["double"] = _end_double +def _end_dateTime(self, data): + value = xmlrpclib.DateTime() + value.decode(data) + value = xmlrpclib._datetime_type(data) + self.append(value) +xmlrpclib.Unmarshaller.dispatch["dateTime.iso8601"] = _end_dateTime class GenericXMLRPCRequestHandler: