Change to set logic for reduction in storage (no affect on runtime)

svn: r13190
This commit is contained in:
Gerald Britton 2009-09-10 18:49:13 +00:00
parent e8033040bb
commit d5e48cda06
2 changed files with 18 additions and 19 deletions

View File

@ -25,7 +25,7 @@
""" """
Proxy class for the GRAMPS databases. Apply filter Proxy class for the GRAMPS databases. Apply filter
""" """
import pdb
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# GRAMPS libraries # GRAMPS libraries
@ -48,30 +48,29 @@ class FilterProxyDb(ProxyDbBase):
""" """
ProxyDbBase.__init__(self, db) ProxyDbBase.__init__(self, db)
self.person_filter = person_filter self.person_filter = person_filter
if person_filter: if person_filter:
self.plist = dict((h, 1) for h in person_filter.apply( self.plist = set(h for h in person_filter.apply(
self.db, self.db.iter_person_handles())) self.db, self.db.iter_person_handles()))
else: else:
self.plist = dict((h, 1) for h in self.db.iter_person_handles()) self.plist = set(self.db.iter_person_handles())
if event_filter: if event_filter:
self.elist = dict((h, 1) for h in event_filter.apply( self.elist = set(h for h in event_filter.apply(
self.db, self.db.iter_event_handles())) self.db, self.db.iter_event_handles()))
else: else:
self.elist = dict((h, 1) for h in self.db.iter_event_handles()) self.elist = set(self.db.iter_event_handles())
if note_filter: if note_filter:
self.nlist = dict((h, 1) for h in note_filter.apply( self.nlist = set(h for h in note_filter.apply(
self.db, self.db.iter_note_handles())) self.db, self.db.iter_note_handles()))
else: else:
self.nlist = dict((h, 1) for h in self.db.iter_note_handles()) self.nlist = set(self.db.iter_note_handles())
self.flist = {} self.flist = set()
for handle in list(self.plist): for handle in self.plist:
person = self.db.get_person_from_handle(handle) person = self.db.get_person_from_handle(handle)
for handle in person.get_family_handle_list(): for handle in person.get_family_handle_list():
self.flist[handle] = 1 self.flist.add(handle)
def get_person_from_handle(self, handle): def get_person_from_handle(self, handle):
""" """
@ -298,7 +297,6 @@ class FilterProxyDb(ProxyDbBase):
Return an iterator over database handles, one handle for each Person in Return an iterator over database handles, one handle for each Person in
the database. the database.
""" """
# FIXME: plist is not a sorted list of handles
return self.plist return self.plist
def iter_people(self): def iter_people(self):
@ -420,6 +418,7 @@ class FilterProxyDb(ProxyDbBase):
@param notebase: NoteBase object to clean @param notebase: NoteBase object to clean
@type event: NoteBase @type event: NoteBase
""" """
note_list = notebase.get_note_list() note_list = notebase.get_note_list()
new_note_list = [ note for note in note_list if note in self.nlist ] new_note_list = [ note for note in note_list if note in self.nlist ]
notebase.set_note_list(new_note_list) notebase.set_note_list(new_note_list)

View File

@ -43,12 +43,12 @@ class ReferencedProxyDb(ProxyDbBase):
Create a new ReferencedProxyDb instance. Create a new ReferencedProxyDb instance.
""" """
ProxyDbBase.__init__(self, dbase) ProxyDbBase.__init__(self, dbase)
self.unreferenced_events = {} self.unreferenced_events = set()
self.unreferenced_places = {} self.unreferenced_places = set()
self.unreferenced_sources = {} self.unreferenced_sources = set()
self.unreferenced_repositories = {} self.unreferenced_repositories = set()
self.unreferenced_media_objects = {} self.unreferenced_media_objects = set()
self.unreferenced_notes = {} self.unreferenced_notes = set()
# Build lists of unreferenced objects # Build lists of unreferenced objects
self.__find_unreferenced_objects() self.__find_unreferenced_objects()
@ -155,7 +155,7 @@ class ReferencedProxyDb(ProxyDbBase):
for handle in handle_list: for handle in handle_list:
if (handle not in unref_list and if (handle not in unref_list and
not any(self.find_backlink_handles(handle)) ): not any(self.find_backlink_handles(handle)) ):
unref_list[handle] = True unref_list.add(handle)
current_count += len(unref_list) current_count += len(unref_list)
if current_count == last_count: if current_count == last_count: