| 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 |