Total Complexity | 5 |
Total Lines | 47 |
Duplicated Lines | 0 % |
Changes | 0 |
1 | # -*- coding: utf-8 -*- |
||
2 | |||
3 | from datetime import datetime |
||
4 | |||
5 | import pytz |
||
6 | from plone.app.event.base import default_timezone as current_timezone |
||
7 | from senaite.core.schema.fields import BaseField |
||
8 | from senaite.core.schema.interfaces import IDatetimeField |
||
9 | from zope.interface import implementer |
||
10 | from zope.schema import Datetime |
||
11 | |||
12 | |||
13 | @implementer(IDatetimeField) |
||
14 | class DatetimeField(Datetime, BaseField): |
||
15 | """A field that handles date and time |
||
16 | """ |
||
17 | |||
18 | def set(self, object, value): |
||
19 | """Set UID reference |
||
20 | |||
21 | :param object: the instance of the field |
||
22 | :param value: datetime value |
||
23 | :type value: datetime |
||
24 | """ |
||
25 | super(DatetimeField, self).set(object, value) |
||
26 | |||
27 | def get(self, object): |
||
28 | """Get the current date |
||
29 | |||
30 | :param object: the instance of the field |
||
31 | :returns: datetime or None |
||
32 | """ |
||
33 | value = super(DatetimeField, self).get(object) |
||
34 | if not isinstance(value, datetime): |
||
35 | return None |
||
36 | # append current timezone if timezone naive |
||
37 | if value.tzinfo is None: |
||
38 | tz = current_timezone() |
||
39 | tzinfo = pytz.timezone(tz) |
||
40 | value = tzinfo.localize(value) |
||
41 | return value |
||
42 | |||
43 | def _validate(self, value): |
||
44 | """Validator when called from form submission |
||
45 | """ |
||
46 | super(DatetimeField, self)._validate(value) |
||
47 |