Passed
Pull Request — 2.x (#1930)
by Ramon
04:58
created

senaite.core.schema.datetimefield.localize()   A

Complexity

Conditions 3

Size

Total Lines 7
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 7
dl 0
loc 7
rs 10
c 0
b 0
f 0
cc 3
nop 2
1
# -*- coding: utf-8 -*-
2
3
from senaite.core.api import dtime
4
from senaite.core.schema.fields import BaseField
5
from senaite.core.schema.interfaces import IDatetimeField
6
from zope.interface import implementer
7
from zope.schema import Datetime
8
9
10
@implementer(IDatetimeField)
11
class DatetimeField(Datetime, BaseField):
12
    """A field that handles date and time
13
    """
14
15
    def set(self, object, value):
16
        """Set datetime value
17
18
        NOTE: we need to ensure timzone aware datetime values,
19
              so that also API calls work
20
21
        :param object: the instance of the field
22
        :param value: datetime value
23
        :type value: datetime
24
        """
25
        value = dtime.to_dt(value)
26
        super(DatetimeField, self).set(object, value)
27
28
    def get(self, object):
29
        """Get the current date
30
31
        :param object: the instance of the field
32
        :returns: datetime or None
33
        """
34
        value = super(DatetimeField, self).get(object)
35
        # ensure we have a `datetime` object
36
        dt = dtime.to_dt(value)
37
        # ensure we have always a date with a valid timezone
38
        if dt and dtime.is_timezone_naive(dt):
39
            # append default OS timezone
40
            tz = dtime.get_os_timezone()
41
            dt = dtime.to_zone(dt, tz)
42
        return dt
43
44
    def _validate(self, value):
45
        """Validator when called from form submission
46
        """
47
        super(DatetimeField, self)._validate(value)
48