Handle date and datetime in XML-RPC

(transplanted from 9a9c2ca4f50794fd13f08b09eb5093aef1a041d7)
This commit is contained in:
Cédric Krier committed 2010-06-09 19:52:47 +02:00
1 parent 8e16613cc4
commit f341f6f68d
2 files changed
+15 -3

No files matched your search

+5 -3
View File
@@ -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
+10
View File
@@ -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: