From 5fc7dd68743ab983258b102ab4fa1b57d2af5c74 Mon Sep 17 00:00:00 2001 From: Nick Hall Date: Sun, 13 Dec 2015 18:53:32 +0000 Subject: [PATCH] Fix handle errors in reports The find_spouse report utility function can return None. --- gramps/plugins/drawreport/descendtree.py | 5 ++-- gramps/plugins/lib/libnarrate.py | 24 +++++++++---------- .../plugins/textreport/detancestralreport.py | 15 +++++++----- .../plugins/textreport/detdescendantreport.py | 10 ++++---- 4 files changed, 29 insertions(+), 25 deletions(-) diff --git a/gramps/plugins/drawreport/descendtree.py b/gramps/plugins/drawreport/descendtree.py index c10fd48c8..93f9f0867 100644 --- a/gramps/plugins/drawreport/descendtree.py +++ b/gramps/plugins/drawreport/descendtree.py @@ -528,8 +528,9 @@ class RecurseDown: father if s_level else myself) spouse_handle = ReportUtils.find_spouse(person, family) - if self.max_spouses > s_level and \ - spouse_handle not in self.families_seen: + if (self.max_spouses > s_level and + spouse_handle and + spouse_handle not in self.families_seen): def _spouse_box(who): return self.add_person_box((x_level, s_level+1), spouse_handle, family_handle, who) diff --git a/gramps/plugins/lib/libnarrate.py b/gramps/plugins/lib/libnarrate.py index 6aa23e81d..b5c4e2472 100644 --- a/gramps/plugins/lib/libnarrate.py +++ b/gramps/plugins/lib/libnarrate.py @@ -1987,23 +1987,23 @@ class Narrator(object): :rtype: unicode """ - spouse_handle = ReportUtils.find_spouse(self.__person, family) - spouse = self.__db.get_person_from_handle(spouse_handle) - event = ReportUtils.find_marriage(self.__db, family) date = self.__empty_date place = self.__empty_place - if spouse: - if not name_display: - spouse_name = _nd.display(spouse) - else: - spouse_name = name_display.display(spouse) - if not spouse_name: - spouse_name = self.__translate_text("Unknown") - else: - # not all families have a spouse. + + spouse_name = None + spouse_handle = ReportUtils.find_spouse(self.__person, family) + if spouse_handle: + spouse = self.__db.get_person_from_handle(spouse_handle) + if spouse: + if not name_display: + spouse_name = _nd.display(spouse) + else: + spouse_name = name_display.display(spouse) + if not spouse_name: spouse_name = self.__translate_text("Unknown") # not: _("Unknown") + event = ReportUtils.find_marriage(self.__db, family) if event: if self.__use_fulldate : mdate = self.__get_date(event.get_date_object()) diff --git a/gramps/plugins/textreport/detancestralreport.py b/gramps/plugins/textreport/detancestralreport.py index 04e868c1d..9199e5005 100644 --- a/gramps/plugins/textreport/detancestralreport.py +++ b/gramps/plugins/textreport/detancestralreport.py @@ -526,13 +526,16 @@ class DetAncestorReport(Report): is_first = True for family_handle in person.get_family_handle_list(): family = self.db.get_family_from_handle(family_handle) - spouse_handle = ReportUtils.find_spouse(person,family) - spouse = self.db.get_person_from_handle(spouse_handle) - spouse_mark = ReportUtils.get_person_mark(self.db, spouse) - text = "" - text = self.__narrator.get_married_string(family, is_first, - self._name_display) + spouse_handle = ReportUtils.find_spouse(person, family) + if spouse_handle: + spouse = self.db.get_person_from_handle(spouse_handle) + spouse_mark = ReportUtils.get_person_mark(self.db, spouse) + else: + spouse_mark = None + text = self.__narrator.get_married_string(family, + is_first, + self._name_display) if text: self.doc.write_text_citation(text, spouse_mark) is_first = False diff --git a/gramps/plugins/textreport/detdescendantreport.py b/gramps/plugins/textreport/detdescendantreport.py index 8eb818636..94c1f4cae 100644 --- a/gramps/plugins/textreport/detdescendantreport.py +++ b/gramps/plugins/textreport/detdescendantreport.py @@ -527,15 +527,15 @@ class DetDescendantReport(Report): for family_handle in person.get_family_handle_list(): family = self.db.get_family_from_handle(family_handle) spouse_handle = ReportUtils.find_spouse(person, family) - spouse = self.db.get_person_from_handle(spouse_handle) - - text = "" - spouse_mark = ReportUtils.get_person_mark(self.db, spouse) + if spouse_handle: + spouse = self.db.get_person_from_handle(spouse_handle) + spouse_mark = ReportUtils.get_person_mark(self.db, spouse) + else: + spouse_mark = None text = self.__narrator.get_married_string(family, is_first, self._name_display) - if text: self.doc.write_text_citation(text, spouse_mark) is_first = False