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
