trytond: Add support of time in JSONRPC and XML-RPC (issue231006)

8 views
Skip to first unread message

cedric...@b2ck.com

unread,
Jan 27, 2012, 4:53:30 AM1/27/12
to cedric...@b2ck.com, re...@tryton-rietveld.appspotmail.com, tryto...@googlegroups.com
Reviewers: ,

Please review this at http://codereview.tryton.org/231006/

Affected files:
M trytond/protocols/jsonrpc.py
M trytond/protocols/xmlrpc.py


Index: trytond/protocols/jsonrpc.py
===================================================================

--- a/trytond/protocols/jsonrpc.py
+++ b/trytond/protocols/jsonrpc.py
@@ -36,6 +36,8 @@
dct['hour'], dct['minute'], dct['second'])
elif dct['__class__'] == 'date':
return datetime.date(dct['year'], dct['month'], dct['day'])
+ elif dct['__class__'] == 'time':
+ return datetime.time(dct['hour'], dct['minute'], dct['second'])
elif dct['__class__'] == 'buffer':
return buffer(base64.decodestring(dct['base64']))
elif dct['__class__'] == 'Decimal':
@@ -65,6 +67,12 @@
'month': obj.month,
'day': obj.day,
}
+ elif isinstance(obj, datetime.time):
+ return {'__class__': 'time',
+ 'hour': obj.hour,
+ 'minute': obj.minute,
+ 'second': obj.second,
+ }
elif isinstance(obj, buffer):
return {'__class__': 'buffer',
'base64': base64.encodestring(obj),

Index: trytond/protocols/xmlrpc.py
===================================================================

--- a/trytond/protocols/xmlrpc.py
+++ b/trytond/protocols/xmlrpc.py
@@ -40,10 +40,18 @@
}
self.dump_struct(value, write)

+def dump_time(self, value, write):
+ value = {'__class__': 'time',
+ 'hour': value.hour,
+ 'minute': value.minute,
+ 'second': value.second,
+ }
+
xmlrpclib.Marshaller.dispatch[Decimal] = dump_decimal
xmlrpclib.Marshaller.dispatch[type(None)] = \
lambda self, value, write: self.dump_bool(bool(value), write)
xmlrpclib.Marshaller.dispatch[datetime.date] = dump_date
+xmlrpclib.Marshaller.dispatch[datetime.time] = dump_time
xmlrpclib.Marshaller.dispatch[buffer] = dump_buffer

def dump_struct(self, value, write, escape=xmlrpclib.escape):
@@ -68,6 +76,8 @@
if '__class__' in dct:
if dct['__class__'] == 'date':
dct = datetime.date(dct['year'], dct['month'], dct['day'])
+ elif dct['__class__'] == 'time':
+ dct = datetime.time(dct['hour'], dct['minute'], dct['second'])
elif dct['__class__'] == 'Decimal':
dct = Decimal(dct['decimal'])
self._stack[mark:] = [dct]

Reply all
Reply to author
Forward
0 new messages