Reviewers: ,


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

Affected files:
  M CHANGELOG
  M proteus/__init__.py
  M proteus/config.py


Index: CHANGELOG
===================================================================

--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,5 @@
+* Add support of Time fields
+
 Version 2.2.0 - 2011-10-25
 * Bug fixes (see mercurial logs for details)
 * Change license to LGPL-3

Index: proteus/__init__.py
===================================================================

--- a/proteus/__init__.py
+++ b/proteus/__init__.py
@@ -173,6 +173,12 @@
         super(DateTimeDescriptor, self).__set__(instance, value)


+class TimeDescriptor(FieldDescriptor):
+    def __set__(self, instance, value):
+        assert isinstance(value, datetime.time) or value in (None, False)
+        super(TimeDescriptor, self).__set__(instance, value)
+
+
 class Many2OneDescriptor(FieldDescriptor):
     def __get__(self, instance, owner):
         relation = Model.get(self.definition['relation'], instance._config)
@@ -323,6 +329,7 @@
         'reference': ReferenceDescriptor,
         'date': DateDescriptor,
         'datetime': DateTimeDescriptor,
+        'time': TimeDescriptor,
         'many2one': Many2OneDescriptor,
         'one2many': One2ManyDescriptor,
         'many2many': Many2ManyDescriptor,

Index: proteus/config.py
===================================================================

--- a/proteus/config.py
+++ b/proteus/config.py
@@ -32,8 +32,18 @@
         }
     self.dump_struct(value, write)

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

 def end_struct(self, data):
@@ -46,6 +56,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]



--
[email protected] mailing list

Reply via email to