Passed
Pull Request — 2.x (#1806)
by Ramon
06:55 queued 02:08
created

senaite.core.schema.fields.BaseField.set()   A

Complexity

Conditions 1

Size

Total Lines 7
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 2
dl 0
loc 7
rs 10
c 0
b 0
f 0
cc 1
nop 3
1
# -*- coding: utf-8 -*-
2
3
from senaite.core.schema.interfaces import IBaseField
4
from senaite.core.schema.interfaces import IIntField
5
from zope.interface import implementer
6
from zope.schema import Field
7
from zope.schema import Int
8
from zope.schema._bootstrapfields import _NotGiven
9
10
11
@implementer(IBaseField)
12
class BaseField(Field):
13
    """Extensible base field
14
    """
15
16
    def __init__(self, title=u"", description=u"", __name__="",
17
                 required=True, readonly=False, constraint=None,
18
                 default=None, defaultFactory=None,
19
                 missing_value=_NotGiven, **kw):
20
21
        # Call superclass with known keywords
22
        super(BaseField, self).__init__(title=title, description=description,
23
                                        __name__=__name__,
24
                                        required=required,
25
                                        readonly=readonly,
26
                                        constraint=constraint,
27
                                        default=default,
28
                                        defaultFactory=defaultFactory,
29
                                        missing_value=missing_value)
30
31
        # handle additional field arguments
32
        self.read_permission = kw.get("read_permission")
33
        self.write_permission = kw.get("write_permission")
34
35
    def get(self, object):
36
        """Custom field getter
37
        """
38
        return super(BaseField, self).get(object)
39
40
    def query(self, object, default=None):
41
        """Custom field query
42
        """
43
        return super(BaseField, self).query(object, default=default)
44
45
    def set(self, object, value):
46
        """Custom field setter
47
48
        This place would theoretically allow to set custom "change" events or
49
        check permissions to write the field.
50
        """
51
        super(BaseField, self).set(object, value)
52
53
54
@implementer(IIntField)
55
class IntField(Int, BaseField):
56
    """A field that handles Integer values
57
    """
58
    def _validate(self, value):
59
        super(IntField, self)._validate(value)
60