From 324930e165fcff1cb4c3c6fdd10bc20c4ea397f7 Mon Sep 17 00:00:00 2001 From: Alex Roitman Date: Fri, 12 Aug 2005 18:35:30 +0000 Subject: [PATCH] * src/GrampsBSDDB.py (upgrade_8): Insert check for event_list. * src/plugins/Check.py (check_events): Add checks for family events; Replace garbage event_list with empty list for both types. svn: r5067 --- gramps2/ChangeLog | 6 ++++++ gramps2/src/GrampsBSDDB.py | 17 ++++++++------- gramps2/src/plugins/Check.py | 40 +++++++++++++++++++++++++++++++----- 3 files changed, 51 insertions(+), 12 deletions(-) diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index 25a33b042..1a08e1523 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -1,3 +1,9 @@ +2005-08-12 Alex Roitman + * src/GrampsBSDDB.py (upgrade_8): Insert check for event_list. + * src/plugins/Check.py (check_events): Add checks for family + events; Replace garbage event_list with empty list for both + types. + 2005-08-12 Jiri Pejchal * src/po/cs.po: Updated Czech translation. diff --git a/gramps2/src/GrampsBSDDB.py b/gramps2/src/GrampsBSDDB.py index a6909dcc0..f57ab3db4 100644 --- a/gramps2/src/GrampsBSDDB.py +++ b/gramps2/src/GrampsBSDDB.py @@ -847,9 +847,11 @@ class GrampsBSDDB(GrampsDbBase): while data: handle,val = data handle_list = val[8] - for handle in handle_list: - event = self.get_event_from_handle(handle) - self.individual_event_names.add(event.name) + if type(handle_list) == list: + # Check to prevent crash on corrupted data (event_list=None) + for handle in handle_list: + event = self.get_event_from_handle(handle) + self.individual_event_names.add(event.name) data = cursor.next() cursor.close() @@ -858,9 +860,10 @@ class GrampsBSDDB(GrampsDbBase): while data: handle,val = data handle_list = val[6] - for handle in handle_list: - event = self.get_event_from_handle(handle) - self.family_event_names.add(event.name) + if type(handle_list) == list: + # Check to prevent crash on corrupted data (event_list=None) + for handle in handle_list: + event = self.get_event_from_handle(handle) + self.family_event_names.add(event.name) data = cursor.next() cursor.close() - diff --git a/gramps2/src/plugins/Check.py b/gramps2/src/plugins/Check.py index 6ebb83424..072ce949f 100644 --- a/gramps2/src/plugins/Check.py +++ b/gramps2/src/plugins/Check.py @@ -431,7 +431,8 @@ class CheckIntegrity: def check_events(self): self.progress.set_pass(_('Looking for event problems'), - self.db.get_number_of_people()) + self.db.get_number_of_people() + +self.db.get_number_of_families()) for key in self.db.get_person_handles(sort_handles=False): self.progress.step() @@ -441,7 +442,8 @@ class CheckIntegrity: if birth_handle: birth = self.db.get_event_from_handle(birth_handle) if not birth: - # The birth event referenced by the birth handle does not exist in the database + # The birth event referenced by the birth handle + # does not exist in the database person.set_birth_handle("") self.db.commit_person(person,self.trans) self.invalid_events.append(key) @@ -455,7 +457,8 @@ class CheckIntegrity: if death_handle: death = self.db.get_event_from_handle(death_handle) if not death: - # The death event referenced by the death handle does not exist in the database + # The death event referenced by the death handle + # does not exist in the database person.set_death_handle("") self.db.commit_person(person,self.trans) self.invalid_events.append(key) @@ -465,15 +468,42 @@ class CheckIntegrity: death.set_name("Death"); self.db.commit_event(death,self.trans) self.invalid_death_events.append(key) + if person.get_event_list(): for event_handle in person.get_event_list(): event = self.db.get_event_from_handle(event_handle) if not event: - # The event referenced by the person does not exist in the database + # The event referenced by the person + # does not exist in the database #TODO: There is no better way? - person.set_event_list( person.get_event_list().remove(event_handle)) + person.set_event_list( + person.get_event_list().remove(event_handle)) self.db.commit_person(person,self.trans) self.invalid_events.append(key) + elif type(person.get_event_list()) != list: + # event_list is None or other garbage + person.set_event_list([]) + self.db.commit_person(person,self.trans) + self.invalid_events.append(key) + + for key in self.db.get_family_handles(): + self.progress.step() + family = self.db.get_family_from_handle(key) + if family.get_event_list(): + for event_handle in family.get_event_list(): + event = self.db.get_event_from_handle(event_handle) + if not event: + # The event referenced by the family + # does not exist in the database + family.set_event_list( + family.get_event_list().remove(event_handle)) + self.db.commit_family(family,self.trans) + self.invalid_events.append(key) + elif type(family.get_event_list()) != list: + # event_list is None or other garbage + family.set_event_list([]) + self.db.commit_family(family,self.trans) + self.invalid_events.append(key) def check_place_references(self): elist = self.db.get_event_handles()