Passed
Push — 2.x ( 96e9ed...864250 )
by Jordi
07:30
created

senaite.core.schema.traversal   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 28
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 3
eloc 21
dl 0
loc 28
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A FieldTraversal.traverse() 0 7 2
A FieldTraversal.__init__() 0 3 1
1
# -*- coding: utf-8 -*-
2
3
from bika.lims import api
4
from zope.component import adapter
5
from zope.interface import Interface
6
from zope.interface import implementer
7
from zope.publisher.interfaces.browser import IBrowserRequest
8
from zope.traversing.interfaces import ITraversable
9
from zope.traversing.interfaces import TraversalError
10
11
12
@adapter(Interface, IBrowserRequest)
13
@implementer(ITraversable)
14
class FieldTraversal(object):
15
    """Allow to traverse schema fields via the ++field++ namespace.
16
    """
17
    def __init__(self, context, request=None):
18
        self.context = context
19
        self.request = request
20
21
    def traverse(self, name, ignored):
22
        fields = api.get_fields(self.context)
23
        field = fields.get(name)
24
        if not field:
25
            raise TraversalError(name)
26
        field = field.bind(self.context)
27
        return field
28