# HG changeset patch # User Sylvain Thenault <sylvain.thenault@logilab.fr> # Date 1223465568 -7200 # Wed Oct 08 13:32:48 2008 +0200 # Node ID 581690fba7f701c80331334a392583cf44a28fc5 # Parent 03953db80b92807ade3d86e16255dac66cabf309 new traverse_scope argument to ored() diff --git a/nodes.py b/nodes.py --- a/nodes.py +++ b/nodes.py @@ -211,8 +211,9 @@ def __repr__(self): return '%s AND %s' % (repr(self.children[0]), repr(self.children[1])) - def ored(self, _fromnode=None): - return self.parent.ored(_fromnode or self) + def ored(self, traverse_scope=False, _fromnode=None): + return self.parent.ored(traverse_scope, _fromnode or self) + def neged(self, _fromnode=None): return self.parent.neged(_fromnode or self) @@ -228,8 +229,9 @@ def __repr__(self): return '%s OR %s' % (repr(self.children[0]), repr(self.children[1])) - def ored(self, _fromnode=None): + def ored(self, traverse_scope=False, _fromnode=None): return self + def neged(self, _fromnode=None): return self.parent.neged(_fromnode or self) @@ -250,8 +252,10 @@ def scope(self): return self - def ored(self, _fromnode=None): - return self.parent.ored(_fromnode or self) + def ored(self, traverse_scope=False, _fromnode=None): + # XXX consider traverse_scope ? + return self.parent.ored(traverse_scope, _fromnode or self) + def neged(self, _fromnode=None): return self @@ -299,10 +303,13 @@ def scope(self): return self - def ored(self, _fromnode=None): - if _fromnode is not None: # stop here - return False - return self.parent.ored(self) + def ored(self, traverse_scope=False, _fromnode=None): + if not traverse_scope: + if _fromnode is not None: # stop here + return False + return self.parent.ored(traverse_scope, self) + return self.parent.ored(traverse_scope, _fromnode) + def neged(self, _fromnode=None, strict=False): if _fromnode is not None: # stop here return False @@ -369,8 +376,9 @@ """return the parent relation where self occurs or None""" return self - def ored(self, _fromnode=None): - return self.parent.ored(_fromnode or self) + def ored(self, traverse_scope=False, _fromnode=None): + return self.parent.ored(traverse_scope, _fromnode or self) + def neged(self, _fromnode=None, strict=False): if strict: return isinstance(self.parent, Not) diff --git a/stmts.py b/stmts.py --- a/stmts.py +++ b/stmts.py @@ -160,7 +160,7 @@ def scope(self): return self - def ored(self, _fromnode=None): + def ored(self, traverse_scope=False, _fromnode=None): return None def neged(self, _fromnode=None, strict=False): return None @@ -241,6 +241,8 @@ def copy(self, copy_children=True): new = Union() + if self.schema is not None: + new.schema = self.schema if copy_children: for child in self.children: new.append(child.copy())