web/views/treeview.py
changeset 5569 cb14af012a96
parent 5557 1a534c596bff
child 5597 180229f07c12
equal deleted inserted replaced
5568:83acff1b50cc 5569:cb14af012a96
    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'