Total Complexity | 3 |
Total Lines | 28 |
Duplicated Lines | 0 % |
Changes | 0 |
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 |