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

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

Complexity

Conditions 1

Size

Total Lines 18
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 14
dl 0
loc 18
rs 9.7
c 0
b 0
f 0
cc 1
nop 11

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

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