web/views/treeview.py
changeset 9256 697a8181ba30
parent 8900 010a59e12d89
child 10082 aa63a8e8c213
--- 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"""