def reindex_reference_map(self, callback): from gramps.webapp.grampsdb.models import Reference callback(4) self.dji.Reference.all().delete() primary_table = ( (self.get_person_cursor, Person), (self.get_family_cursor, Family), (self.get_event_cursor, Event), (self.get_place_cursor, Place), (self.get_source_cursor, Source), (self.get_citation_cursor, Citation), (self.get_media_cursor, MediaObject), (self.get_repository_cursor, Repository), (self.get_note_cursor, Note), (self.get_tag_cursor, Tag), ) # Now we use the functions and classes defined above # to loop through each of the primary object tables. for cursor_func, class_func in primary_table: logging.info("Rebuilding %s reference map" % class_func.__name__) with cursor_func() as cursor: for found_handle, val in cursor: obj = class_func.create(val) references = set(obj.get_referenced_handles_recursively()) # handle addition of new references for (ref_class_name, ref_handle) in references: reference = Reference(obj_handle=obj.handle, obj_class=obj.__class__.__name__, ref_handle=ref_handle, ref_class=ref_class_name) reference.save() callback(5)
def update_backlinks(self, obj): from gramps.webapp.grampsdb.models import Reference # First, delete the current references: self.dji.Reference.filter(obj_handle=obj.handle).delete() # Now, add the current ones: references = set(obj.get_referenced_handles_recursively()) for (ref_class_name, ref_handle) in references: reference = Reference(obj_handle=obj.handle, obj_class=obj.__class__.__name__, ref_handle=ref_handle, ref_class=ref_class_name) reference.save()