# HG changeset patch # User Aurelien Campeas # Date 1258656636 -3600 # Node ID 32634970a36c84c0258459a3db26ee631e5a1801 # Parent b0ff58d929a41b6be4923e436c194061eea0057e# Parent b3b3bebdb406954ed2cc1369fa63dc0ce93b0177 merge diff -r b0ff58d929a4 -r 32634970a36c utils.py --- a/utils.py Thu Nov 19 19:48:41 2009 +0100 +++ b/utils.py Thu Nov 19 19:50:36 2009 +0100 @@ -148,6 +148,20 @@ return dict1 +# use networkX instead ? +# http://networkx.lanl.gov/reference/algorithms.traversal.html#module-networkx.algorithms.traversal.astar +def transitive_closure_of(entity, relname, _seen=None): + if _seen is None: + _seen = set() + _seen.add(entity.eid) + yield entity + for child in getattr(entity, relname): + if child.eid in _seen: + continue + for subchild in transitive_closure_of(child, relname, _seen): + yield subchild + + class SizeConstrainedList(list): """simple list that makes sure the list does not get bigger than a given size. diff -r b0ff58d929a4 -r 32634970a36c web/views/editforms.py --- a/web/views/editforms.py Thu Nov 19 19:48:41 2009 +0100 +++ b/web/views/editforms.py Thu Nov 19 19:50:36 2009 +0100 @@ -436,6 +436,7 @@ form = self.vreg['forms'].select('edition', self.req, rset=self.rset, row=row, attrcategories=('primary',), + copy_nav_params=False, mainform=False) # XXX rely on the EntityCompositeFormRenderer to put the eid input form.remove_field(form.field_by_name('eid')) @@ -452,7 +453,8 @@ should be the eid """ #self.form_title(entity) - form = self.vreg['forms'].select(self.id, self.req, rset=self.rset) + form = self.vreg['forms'].select(self.id, self.req, rset=self.rset, + copy_nav_params=True) self.w(form.form_render()) diff -r b0ff58d929a4 -r 32634970a36c web/views/forms.py --- a/web/views/forms.py Thu Nov 19 19:48:41 2009 +0100 +++ b/web/views/forms.py Thu Nov 19 19:50:36 2009 +0100 @@ -89,6 +89,7 @@ if mainform: self.form_add_hidden('__errorurl', self.session_key()) self.form_add_hidden('__domid', self.domid) + # XXX why do we need two different variables (mainform and copy_nav_params ?) if self.copy_nav_params: for param in NAV_FORM_PARAMETERS: if not param in kwargs: