equal
deleted
inserted
replaced
26 from logilab.common.decorators import cached |
26 from logilab.common.decorators import cached |
27 |
27 |
28 from cubicweb.utils import make_uid |
28 from cubicweb.utils import make_uid |
29 from cubicweb.selectors import implements, adaptable |
29 from cubicweb.selectors import implements, adaptable |
30 from cubicweb.view import EntityView, EntityAdapter, implements_adapter_compat |
30 from cubicweb.view import EntityView, EntityAdapter, implements_adapter_compat |
|
31 from cubicweb.mixins import _done_init |
31 from cubicweb.web import json |
32 from cubicweb.web import json |
32 from cubicweb.interfaces import ITree |
33 from cubicweb.interfaces import ITree |
33 from cubicweb.web.views import baseviews |
34 from cubicweb.web.views import baseviews |
34 |
35 |
35 def treecookiename(treeid): |
36 def treecookiename(treeid): |
182 adapter = entity.cw_adapt_to('ITree') |
183 adapter = entity.cw_adapt_to('ITree') |
183 except AttributeError: |
184 except AttributeError: |
184 break |
185 break |
185 path.reverse() |
186 path.reverse() |
186 return path |
187 return path |
187 |
|
188 |
|
189 def _done_init(done, view, row, col): |
|
190 """handle an infinite recursion safety belt""" |
|
191 if done is None: |
|
192 done = set() |
|
193 entity = view.cw_rset.get_entity(row, col) |
|
194 if entity.eid in done: |
|
195 msg = entity._cw._('loop in %(rel)s relation (%(eid)s)') % { |
|
196 'rel': entity.tree_attribute, |
|
197 'eid': entity.eid |
|
198 } |
|
199 return None, msg |
|
200 done.add(entity.eid) |
|
201 return done, entity |
|
202 |
188 |
203 |
189 |
204 class BaseTreeView(baseviews.ListView): |
190 class BaseTreeView(baseviews.ListView): |
205 """base tree view""" |
191 """base tree view""" |
206 __regid__ = 'tree' |
192 __regid__ = 'tree' |