From 3f07d8420b8b71b6b9e8b2941e5b926e366c7560 Mon Sep 17 00:00:00 2001 From: Brian Matherly Date: Sat, 2 Apr 2011 03:29:05 +0000 Subject: [PATCH] 0004706: Book Report subject-name nuances, and pathological cases Patch from Paul Franklin svn: r17022 --- src/plugins/BookReport.py | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/src/plugins/BookReport.py b/src/plugins/BookReport.py index 477847233..b0a29cdc3 100644 --- a/src/plugins/BookReport.py +++ b/src/plugins/BookReport.py @@ -130,9 +130,15 @@ def _initialize_options(options, dbstate, uistate): if family_list: family_handle = family_list[0] else: - family_handle = dbase.iter_family_handles().next() - family = dbase.get_family_from_handle(family_handle) - option.set_value(family.get_gramps_id()) + try: + family_handle = dbase.iter_family_handles().next() + except StopIteration: + family_handle = None + if family_handle: + family = dbase.get_family_from_handle(family_handle) + option.set_value(family.get_gramps_id()) + else: + print "No family specified for ", name def _get_subject(options, dbase): """ @@ -144,10 +150,12 @@ def _get_subject(options, dbase): dbase: the database for which it corresponds """ if not hasattr(options, "menu"): - return _("Not Applicable") + return "" menu = options.menu option_names = menu.get_all_option_names() + if not option_names: + return _("Entire Database") for name in option_names: option = menu.get_option_by_name(name) @@ -162,6 +170,8 @@ def _get_subject(options, dbase): elif isinstance(option, FamilyOption): family = dbase.get_family_from_gramps_id(option.get_value()) + if not family: + return "" family_id = family.get_gramps_id() fhandle = family.get_father_handle() mhandle = family.get_mother_handle() @@ -179,10 +189,12 @@ def _get_subject(options, dbase): mother_name = _("unknown mother") name = _("%(father)s and %(mother)s (%(id)s)") % { - 'father' : father_name, 'mother' : mother_name, 'id' : family_id } + 'father' : father_name, + 'mother' : mother_name, + 'id' : family_id } return name - return _("Not Applicable") + return "" #------------------------------------------------------------------------ # @@ -1258,8 +1270,9 @@ class BookReportDialog(DocReportDialog): if newpage: self.doc.page_break() newpage = 1 - item.begin_report() - item.write_report() + if item: + item.begin_report() + item.write_report() self.doc.close() if self.open_with_app.get_active(): @@ -1279,13 +1292,17 @@ def cl_report(database, name, category, options_str_dict): if clr.show: return - if 'bookname' not in clr.options_dict: - print "Please Specify a book name" + if 'bookname' not in clr.options_dict or not clr.options_dict['bookname']: + print _("Please specify a book name") return book_list = BookList('books.xml', database) book_name = clr.options_dict['bookname'] - book = book_list.get_book(book_name) + if book_name: + book = book_list.get_book(book_name) + else: + print _("Please specify a book name") + return selected_style = StyleSheet() for item in book.get_item_list():