Passed
Pull Request — 2.x (#1864)
by Ramon
04:51
created

UIDReferenceWidgetFactory()   A

Complexity

Conditions 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 4
dl 0
loc 6
rs 10
c 0
b 0
f 0
cc 1
nop 2
1
# -*- coding: utf-8 -*-
2
3
from bika.lims import api
4
from senaite.core.interfaces import ISenaiteFormLayer
5
from senaite.core.schema.interfaces import IUIDReferenceField
6
from senaite.core.z3cform.interfaces import IUIDReferenceWidget
7
from z3c.form import interfaces
8
from z3c.form.browser import widget
9
from z3c.form.browser.textlines import TextLinesWidget
10
from z3c.form.converter import TextLinesConverter
11
from z3c.form.interfaces import IFieldWidget
12
from z3c.form.widget import FieldWidget
13
from zope.component import adapter
14
from zope.interface import implementer
15
16
17
@adapter(IUIDReferenceField, interfaces.IWidget)
18
class UIDReferenceDataConverter(TextLinesConverter):
19
20
    def toWidgetValue(self, value):
21
        if self.widget.mode == "display":
22
            return map(api.get_object, value)
23
        return super(UIDReferenceDataConverter, self).toWidgetValue(value)
24
25
26
@implementer(IUIDReferenceWidget)
27
class UIDReferenceWidget(TextLinesWidget):
28
    """Senaite UID reference widget
29
    """
30
    klass = u"uidreference-widget"
31
32
    def __init__(self, request, *args, **kw):
33
        super(UIDReferenceWidget, self).__init__(request)
34
        self.request = request
35
36
    def update(self):
37
        super(UIDReferenceWidget, self).update()
38
        widget.addFieldClass(self)
39
40
    def get_info_for(self, uid):
41
        obj = api.get_object(uid)
42
        return {
43
            "title": api.get_title(obj),
44
            "path": api.get_path(obj),
45
            "url": api.get_url(obj),
46
        }
47
48
49
@adapter(IUIDReferenceField, ISenaiteFormLayer)
50
@implementer(IFieldWidget)
51
def UIDReferenceWidgetFactory(field, request):
52
    """Widget factory for UIDReferenceField
53
    """
54
    return FieldWidget(field, UIDReferenceWidget(request))
55