From: Tim L. <guy...@gm...> - 2013-09-04 18:50:50
|
Tim Lyons wrote > > Nick Hall-6 wrote >> On 29/08/13 19:16, Tim Lyons wrote: >>> (2) treebasemodel._rebuild_filter applies the filter that the user has >>> specified first to the primary objects and then the secondary objects. >>> I don't understand how or why applying a source filter to a citation >>> object lets it get through. Should this happen? What would be the >>> consequence elsewhere if this behaviour were changed? How could it be >>> changed? >>> >> >> I would expect an exception to be raised if the wrong type of object is >> passed to a rule. The result will depend on how this is handled. > Any idea what handles the exception? I couldn't see anything obvious. > > Tim. The 'problem' seems to be this code in check_and in _GenericFilter. <pre> for data in id_list: if tupleind is None: handle = data else: handle = data[tupleind] person = self.find_from_handle(db, handle) if cb_progress: cb_progress() val = all(rule.apply(db, person) for rule in flist if person) if val != self.invert: final_list.append(data) return final_list </pre> 'person' is the wrong name, because this is actually any object type. find_from_handle using a Citation object when trying to get a source returns None. I don't quite understand how "all(rule.apply(db, person) for rule in flist if person)" is evaluated, or what it expects to find, but as 'person' is None, it seems to return True (why?). Hence this means that 'val' is True, and the 'data' which is the handle, is appended to the returned value. Is this what is supposed to happen? If so, why? I might have thought that if the object didn't exist, it shouldn't be added to the final_list. But what would be the consequences of changing this? regards, Tim. -- View this message in context: http://gramps.1791082.n4.nabble.com/Help-please-on-filters-tp4662277p4662361.html Sent from the GRAMPS - Dev mailing list archive at Nabble.com. |