diff -r 46f41c3e1443 -r 697a8181ba30 web/views/treeview.py --- a/web/views/treeview.py Mon Aug 26 16:12:30 2013 +0200 +++ b/web/views/treeview.py Mon Aug 26 16:14:09 2013 +0200 @@ -29,13 +29,26 @@ from cubicweb.utils import make_uid, json from cubicweb.predicates import adaptable from cubicweb.view import EntityView -from cubicweb.mixins import _done_init from cubicweb.web.views import baseviews from cubicweb.web.views.ajaxcontroller import ajaxfunc def treecookiename(treeid): return str('%s-treestate' % treeid) +def _done_init(done, view, row, col): + """handle an infinite recursion safety belt""" + if done is None: + done = set() + entity = view.cw_rset.get_entity(row, col) + if entity.eid in done: + msg = entity._cw._('loop in %(rel)s relation (%(eid)s)') % { + 'rel': entity.cw_adapt_to('ITree').tree_relation, + 'eid': entity.eid + } + return None, msg + done.add(entity.eid) + return done, entity + class BaseTreeView(baseviews.ListView): """base tree view"""