Add an option progress meter argument to GenericFilter.apply

If present it must be an instance of Utils.ProgressMeter.
        * src/Filters/_GenericFilter.py
        * src/plugins/WebCal.py
        * src/plugins/NarrativeWeb.py


svn: r11481
This commit is contained in:
Kees Bakker
2008-12-15 21:42:58 +00:00
parent fe133c0411
commit 679392ab4b
3 changed files with 24 additions and 15 deletions

View File

@@ -112,7 +112,7 @@ class GenericFilter:
def find_from_handle(self, db, handle): def find_from_handle(self, db, handle):
return db.get_person_from_handle(handle) return db.get_person_from_handle(handle)
def check_func(self, db, id_list, task): def check_func(self, db, id_list, task, progress=None):
final_list = [] final_list = []
if id_list is None: if id_list is None:
@@ -121,6 +121,8 @@ class GenericFilter:
while data: while data:
person = self.make_obj() person = self.make_obj()
person.unserialize(data[1]) person.unserialize(data[1])
if progress:
progress.step()
if task(db, person) != self.invert: if task(db, person) != self.invert:
final_list.append(data[0]) final_list.append(data[0])
data = cursor.next() data = cursor.next()
@@ -128,11 +130,13 @@ class GenericFilter:
else: else:
for handle in id_list: for handle in id_list:
person = self.find_from_handle(db, handle) person = self.find_from_handle(db, handle)
if progress:
progress.step()
if task(db, person) != self.invert: if task(db, person) != self.invert:
final_list.append(handle) final_list.append(handle)
return final_list return final_list
def check_and(self, db, id_list): def check_and(self, db, id_list, progress=None):
final_list = [] final_list = []
flist = self.flist flist = self.flist
if id_list is None: if id_list is None:
@@ -141,6 +145,8 @@ class GenericFilter:
while data: while data:
person = self.make_obj() person = self.make_obj()
person.unserialize(data[1]) person.unserialize(data[1])
if progress:
progress.step()
val = True val = True
for rule in flist: for rule in flist:
if not rule.apply(db, person): if not rule.apply(db, person):
@@ -153,6 +159,8 @@ class GenericFilter:
else: else:
for handle in id_list: for handle in id_list:
person = self.find_from_handle(db, handle) person = self.find_from_handle(db, handle)
if progress:
progress.step()
val = True val = True
for rule in flist: for rule in flist:
if not rule.apply(db, person): if not rule.apply(db, person):
@@ -162,14 +170,14 @@ class GenericFilter:
final_list.append(handle) final_list.append(handle)
return final_list return final_list
def check_or(self, db, id_list): def check_or(self, db, id_list, progress=None):
return self.check_func(db, id_list, self.or_test) return self.check_func(db, id_list, self.or_test, progress)
def check_one(self, db, id_list): def check_one(self, db, id_list, progress=None):
return self.check_func(db, id_list, self.one_test) return self.check_func(db, id_list, self.one_test, progress)
def check_xor(self, db, id_list): def check_xor(self, db, id_list, progress=None):
return self.check_func(db, id_list, self.xor_test) return self.check_func(db, id_list, self.xor_test, progress)
def xor_test(self, db, person): def xor_test(self, db, person):
test = False test = False
@@ -202,11 +210,12 @@ class GenericFilter:
def check(self, db, handle): def check(self, db, handle):
return self.get_check_func()(db, [handle]) return self.get_check_func()(db, [handle])
def apply(self, db, id_list=None): # progress is optional. If present it must be an instance of Utils.ProgressMeter
def apply(self, db, id_list=None, progress=None):
m = self.get_check_func() m = self.get_check_func()
for rule in self.flist: for rule in self.flist:
rule.prepare(db) rule.prepare(db)
res = m(db, id_list) res = m(db, id_list, progress)
for rule in self.flist: for rule in self.flist:
rule.reset() rule.reset()
return res return res

View File

@@ -2752,8 +2752,8 @@ class NavWebReport(Report):
# gets the person list and applies the requested filter # gets the person list and applies the requested filter
ind_list = self.database.get_person_handles(sort_handles=False) ind_list = self.database.get_person_handles(sort_handles=False)
self.progress.set_pass(_('Filtering'), 1) self.progress.set_pass(_('Applying Filter...'), len(ind_list))
ind_list = self.filter.apply(self.database, ind_list) ind_list = self.filter.apply(self.database, ind_list, self.progress)
return ind_list return ind_list
def copy_css(self, css_file): def copy_css(self, css_file):

View File

@@ -1193,9 +1193,9 @@ class WebCalReport(Report):
if person is dead, then do nothing more!!! if person is dead, then do nothing more!!!
""" """
self.progress.set_pass(_('Applying Filter...'), '') people = self.database.get_person_handles(sort_handles=False)
people = self.filter.apply(self.database, self.progress.set_pass(_('Applying Filter...'), len(people))
self.database.get_person_handles(sort_handles=False)) people = self.filter.apply(self.database, people, self.progress)
self.progress.set_pass(_("Reading database..."), len(people)) self.progress.set_pass(_("Reading database..."), len(people))
for person_handle in people: for person_handle in people: