Filter fixes to prevent MatchesFilter types from running multiple times
This commit is contained in:
parent
77cc12a42e
commit
67cf51bbf3
@ -43,31 +43,6 @@ _ = glocale.translation.gettext
|
|||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
def filter_database(db, user, filter_name):
|
|
||||||
"""Returns a list of person handles"""
|
|
||||||
|
|
||||||
filt = MatchesFilter([filter_name])
|
|
||||||
filt.requestprepare(db, user)
|
|
||||||
|
|
||||||
if user:
|
|
||||||
user.begin_progress(_('Finding relationship paths'),
|
|
||||||
_('Retrieving all sub-filter matches'),
|
|
||||||
db.get_number_of_people())
|
|
||||||
matches = []
|
|
||||||
for handle in db.iter_person_handles():
|
|
||||||
person = db.get_person_from_handle(handle)
|
|
||||||
if filt.apply(db, person):
|
|
||||||
matches.append(handle)
|
|
||||||
if user:
|
|
||||||
user.step_progress()
|
|
||||||
if user:
|
|
||||||
user.end_progress()
|
|
||||||
|
|
||||||
filt.requestreset()
|
|
||||||
|
|
||||||
return matches
|
|
||||||
|
|
||||||
|
|
||||||
def get_family_handle_people(db, exclude_handle, family_handle):
|
def get_family_handle_people(db, exclude_handle, family_handle):
|
||||||
people = set()
|
people = set()
|
||||||
|
|
||||||
@ -170,9 +145,22 @@ class DeepRelationshipPathBetween(Rule):
|
|||||||
root_person = db.get_person_from_gramps_id(root_person_id)
|
root_person = db.get_person_from_gramps_id(root_person_id)
|
||||||
|
|
||||||
filter_name = self.list[1]
|
filter_name = self.list[1]
|
||||||
target_people = filter_database(db, user, filter_name)
|
self.filt = MatchesFilter([filter_name])
|
||||||
|
self.filt.requestprepare(db, user)
|
||||||
|
|
||||||
if user:
|
if user:
|
||||||
|
user.begin_progress(_('Finding relationship paths'),
|
||||||
|
_('Retrieving all sub-filter matches'),
|
||||||
|
db.get_number_of_people())
|
||||||
|
target_people = []
|
||||||
|
for handle in db.iter_person_handles():
|
||||||
|
person = db.get_person_from_handle(handle)
|
||||||
|
if self.filt.apply(db, person):
|
||||||
|
target_people.append(handle)
|
||||||
|
if user:
|
||||||
|
user.step_progress()
|
||||||
|
if user:
|
||||||
|
user.end_progress()
|
||||||
user.begin_progress(_('Finding relationship paths'),
|
user.begin_progress(_('Finding relationship paths'),
|
||||||
_('Evaluating people'),
|
_('Evaluating people'),
|
||||||
db.get_number_of_people())
|
db.get_number_of_people())
|
||||||
@ -182,6 +170,7 @@ class DeepRelationshipPathBetween(Rule):
|
|||||||
user.end_progress()
|
user.end_progress()
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
|
self.filt.requestreset()
|
||||||
self.__matches = set()
|
self.__matches = set()
|
||||||
|
|
||||||
def apply(self, db, person):
|
def apply(self, db, person):
|
||||||
|
@ -62,8 +62,8 @@ class HasCommonAncestorWithFilterMatch(HasCommonAncestorWith):
|
|||||||
# Start with filling the cache for root person (gramps_id in self.list[0])
|
# Start with filling the cache for root person (gramps_id in self.list[0])
|
||||||
self.ancestor_cache = {}
|
self.ancestor_cache = {}
|
||||||
self.with_people = []
|
self.with_people = []
|
||||||
filt = MatchesFilter(self.list)
|
self.filt = MatchesFilter(self.list)
|
||||||
filt.requestprepare(db, user)
|
self.filt.requestprepare(db, user)
|
||||||
if user:
|
if user:
|
||||||
user.begin_progress(self.category,
|
user.begin_progress(self.category,
|
||||||
_('Retrieving all sub-filter matches'),
|
_('Retrieving all sub-filter matches'),
|
||||||
@ -72,7 +72,7 @@ class HasCommonAncestorWithFilterMatch(HasCommonAncestorWith):
|
|||||||
person = db.get_person_from_handle(handle)
|
person = db.get_person_from_handle(handle)
|
||||||
if user:
|
if user:
|
||||||
user.step_progress()
|
user.step_progress()
|
||||||
if person and filt.apply(db, person):
|
if person and self.filt.apply(db, person):
|
||||||
#store all people in the filter so as to compare later
|
#store all people in the filter so as to compare later
|
||||||
self.with_people.append(person.handle)
|
self.with_people.append(person.handle)
|
||||||
#fill list of ancestor of person if not present yet
|
#fill list of ancestor of person if not present yet
|
||||||
@ -80,4 +80,7 @@ class HasCommonAncestorWithFilterMatch(HasCommonAncestorWith):
|
|||||||
self.add_ancs(db, person)
|
self.add_ancs(db, person)
|
||||||
if user:
|
if user:
|
||||||
user.end_progress()
|
user.end_progress()
|
||||||
filt.requestreset()
|
|
||||||
|
def reset(self):
|
||||||
|
self.filt.requestreset()
|
||||||
|
self.ancestor_cache = {}
|
||||||
|
@ -60,8 +60,8 @@ class IsAncestorOfFilterMatch(IsAncestorOf):
|
|||||||
except IndexError:
|
except IndexError:
|
||||||
first = 1
|
first = 1
|
||||||
|
|
||||||
filt = MatchesFilter(self.list[0:1])
|
self.filt = MatchesFilter(self.list[0:1])
|
||||||
filt.requestprepare(db, user)
|
self.filt.requestprepare(db, user)
|
||||||
if user:
|
if user:
|
||||||
user.begin_progress(self.category,
|
user.begin_progress(self.category,
|
||||||
_('Retrieving all sub-filter matches'),
|
_('Retrieving all sub-filter matches'),
|
||||||
@ -69,13 +69,13 @@ class IsAncestorOfFilterMatch(IsAncestorOf):
|
|||||||
for person in db.iter_people():
|
for person in db.iter_people():
|
||||||
if user:
|
if user:
|
||||||
user.step_progress()
|
user.step_progress()
|
||||||
if filt.apply(db, person):
|
if self.filt.apply(db, person):
|
||||||
self.init_ancestor_list(db, person, first)
|
self.init_ancestor_list(db, person, first)
|
||||||
if user:
|
if user:
|
||||||
user.end_progress()
|
user.end_progress()
|
||||||
filt.requestreset()
|
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
|
self.filt.requestreset()
|
||||||
self.map.clear()
|
self.map.clear()
|
||||||
|
|
||||||
def apply(self,db,person):
|
def apply(self,db,person):
|
||||||
|
@ -51,8 +51,8 @@ class IsChildOfFilterMatch(Rule):
|
|||||||
def prepare(self, db, user):
|
def prepare(self, db, user):
|
||||||
self.db = db
|
self.db = db
|
||||||
self.map = set()
|
self.map = set()
|
||||||
filt = MatchesFilter(self.list)
|
self.filt = MatchesFilter(self.list)
|
||||||
filt.requestprepare(db, user)
|
self.filt.requestprepare(db, user)
|
||||||
if user:
|
if user:
|
||||||
user.begin_progress(self.category,
|
user.begin_progress(self.category,
|
||||||
_('Retrieving all sub-filter matches'),
|
_('Retrieving all sub-filter matches'),
|
||||||
@ -60,13 +60,13 @@ class IsChildOfFilterMatch(Rule):
|
|||||||
for person in db.iter_people():
|
for person in db.iter_people():
|
||||||
if user:
|
if user:
|
||||||
user.step_progress()
|
user.step_progress()
|
||||||
if filt.apply(db, person):
|
if self.filt.apply(db, person):
|
||||||
self.init_list(person)
|
self.init_list(person)
|
||||||
if user:
|
if user:
|
||||||
user.end_progress()
|
user.end_progress()
|
||||||
filt.requestreset()
|
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
|
self.filt.requestreset()
|
||||||
self.map.clear()
|
self.map.clear()
|
||||||
|
|
||||||
def apply(self,db,person):
|
def apply(self,db,person):
|
||||||
|
@ -43,7 +43,7 @@ class IsDescendantFamilyOfFilterMatch(IsDescendantFamilyOf):
|
|||||||
"""Rule that checks for a person that is a descendant
|
"""Rule that checks for a person that is a descendant
|
||||||
of someone matched by a filter"""
|
of someone matched by a filter"""
|
||||||
|
|
||||||
labels = [ _('Filter name:') ]
|
labels = [ _('Filter name:')]
|
||||||
name = _('Descendant family members of <filter> match')
|
name = _('Descendant family members of <filter> match')
|
||||||
category = _('Descendant filters')
|
category = _('Descendant filters')
|
||||||
description = _("Matches people that are descendants or the spouse "
|
description = _("Matches people that are descendants or the spouse "
|
||||||
@ -53,8 +53,8 @@ class IsDescendantFamilyOfFilterMatch(IsDescendantFamilyOf):
|
|||||||
self.db = db
|
self.db = db
|
||||||
self.matches = set()
|
self.matches = set()
|
||||||
|
|
||||||
filt = MatchesFilter(self.list[0:1])
|
self.matchfilt = MatchesFilter(self.list[0:1])
|
||||||
filt.requestprepare(db, user)
|
self.matchfilt.requestprepare(db, user)
|
||||||
if user:
|
if user:
|
||||||
user.begin_progress(self.category,
|
user.begin_progress(self.category,
|
||||||
_('Retrieving all sub-filter matches'),
|
_('Retrieving all sub-filter matches'),
|
||||||
@ -62,9 +62,11 @@ class IsDescendantFamilyOfFilterMatch(IsDescendantFamilyOf):
|
|||||||
for person in db.iter_people():
|
for person in db.iter_people():
|
||||||
if user:
|
if user:
|
||||||
user.step_progress()
|
user.step_progress()
|
||||||
if filt.apply(db, person):
|
if self.matchfilt.apply(db, person):
|
||||||
self.add_matches(person)
|
self.add_matches(person)
|
||||||
if user:
|
if user:
|
||||||
user.end_progress()
|
user.end_progress()
|
||||||
filt.requestreset()
|
|
||||||
|
|
||||||
|
def reset(self):
|
||||||
|
self.matchfilt.requestreset()
|
||||||
|
self.matches = set()
|
||||||
|
@ -60,8 +60,8 @@ class IsDescendantOfFilterMatch(IsDescendantOf):
|
|||||||
except IndexError:
|
except IndexError:
|
||||||
first = 1
|
first = 1
|
||||||
|
|
||||||
filt = MatchesFilter(self.list[0:1])
|
self.filt = MatchesFilter(self.list[0:1])
|
||||||
filt.requestprepare(db, user)
|
self.filt.requestprepare(db, user)
|
||||||
if user:
|
if user:
|
||||||
user.begin_progress(self.category,
|
user.begin_progress(self.category,
|
||||||
_('Retrieving all sub-filter matches'),
|
_('Retrieving all sub-filter matches'),
|
||||||
@ -69,13 +69,13 @@ class IsDescendantOfFilterMatch(IsDescendantOf):
|
|||||||
for person in db.iter_people():
|
for person in db.iter_people():
|
||||||
if user:
|
if user:
|
||||||
user.step_progress()
|
user.step_progress()
|
||||||
if filt.apply(db, person):
|
if self.filt.apply(db, person):
|
||||||
self.init_list(person, first)
|
self.init_list(person, first)
|
||||||
if user:
|
if user:
|
||||||
user.end_progress()
|
user.end_progress()
|
||||||
filt.requestreset()
|
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
|
self.filt.requestreset()
|
||||||
self.map.clear()
|
self.map.clear()
|
||||||
|
|
||||||
def apply(self,db,person):
|
def apply(self,db,person):
|
||||||
|
@ -51,8 +51,8 @@ class IsParentOfFilterMatch(Rule):
|
|||||||
def prepare(self, db, user):
|
def prepare(self, db, user):
|
||||||
self.db = db
|
self.db = db
|
||||||
self.map = set()
|
self.map = set()
|
||||||
filt = MatchesFilter(self.list)
|
self.filt = MatchesFilter(self.list)
|
||||||
filt.requestprepare(db, user)
|
self.filt.requestprepare(db, user)
|
||||||
if user:
|
if user:
|
||||||
user.begin_progress(self.category,
|
user.begin_progress(self.category,
|
||||||
_('Retrieving all sub-filter matches'),
|
_('Retrieving all sub-filter matches'),
|
||||||
@ -60,13 +60,13 @@ class IsParentOfFilterMatch(Rule):
|
|||||||
for person in db.iter_people():
|
for person in db.iter_people():
|
||||||
if user:
|
if user:
|
||||||
user.step_progress()
|
user.step_progress()
|
||||||
if filt.apply(db, person):
|
if self.filt.apply(db, person):
|
||||||
self.init_list(person)
|
self.init_list(person)
|
||||||
if user:
|
if user:
|
||||||
user.end_progress()
|
user.end_progress()
|
||||||
filt.requestreset()
|
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
|
self.filt.requestreset()
|
||||||
self.map.clear()
|
self.map.clear()
|
||||||
|
|
||||||
def apply(self,db,person):
|
def apply(self,db,person):
|
||||||
|
@ -50,8 +50,8 @@ class IsSiblingOfFilterMatch(Rule):
|
|||||||
def prepare(self, db, user):
|
def prepare(self, db, user):
|
||||||
self.db = db
|
self.db = db
|
||||||
self.map = set()
|
self.map = set()
|
||||||
filt = MatchesFilter(self.list)
|
self.matchfilt = MatchesFilter(self.list)
|
||||||
filt.requestprepare(db, user)
|
self.matchfilt.requestprepare(db, user)
|
||||||
if user:
|
if user:
|
||||||
user.begin_progress(self.category,
|
user.begin_progress(self.category,
|
||||||
_('Retrieving all sub-filter matches'),
|
_('Retrieving all sub-filter matches'),
|
||||||
@ -59,13 +59,13 @@ class IsSiblingOfFilterMatch(Rule):
|
|||||||
for person in db.iter_people():
|
for person in db.iter_people():
|
||||||
if user:
|
if user:
|
||||||
user.step_progress()
|
user.step_progress()
|
||||||
if filt.apply (db, person):
|
if self.matchfilt.apply(db, person):
|
||||||
self.init_list (person)
|
self.init_list(person)
|
||||||
if user:
|
if user:
|
||||||
user.end_progress()
|
user.end_progress()
|
||||||
filt.requestreset()
|
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
|
self.matchfilt.requestreset()
|
||||||
self.map.clear()
|
self.map.clear()
|
||||||
|
|
||||||
def apply(self,db,person):
|
def apply(self,db,person):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user