Passed
Pull Request — 2.x (#1903)
by Ramon
05:07
created

DatetimeField._validate()   A

Complexity

Conditions 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 2
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nop 2
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