From 16799c24658d5a694221c0d8f7524957c25947fe Mon Sep 17 00:00:00 2001 From: Brian Matherly Date: Tue, 26 Feb 2008 04:32:57 +0000 Subject: [PATCH] Improvements to CLI reports - 0001824: Bug in command line - gramps does not show right error. 0001821: A command "python src/gramps.py --open=DG1 --action=report" cause a crash Fix help strings. svn: r10122 --- ChangeLog | 10 ++++ src/ArgHandler.py | 2 +- src/PluginUtils/_GuiOptions.py | 4 +- src/ReportBase/_CommandLineReport.py | 71 ++++++++++++++++++++-------- 4 files changed, 63 insertions(+), 24 deletions(-) diff --git a/ChangeLog b/ChangeLog index a19681d27..67a8a05c5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2008-02-25 Brian Matherly + * src/PluginUtils/_GuiOptions.py: + * src/ArgHandler.py: + * src/ReportBase/_CommandLineReport.py: + Improvements to CLI reports - + 0001824: Bug in command line - gramps does not show right error. + 0001821: A command "python src/gramps.py --open=DG1 --action=report" cause + a crash + Fix help strings. + 2008-02-25 Douglas S. Blank * src/DateHandler/_DateParser.py: set year += 1 * src/gen/lib/date.py: removed slash-date fix diff --git a/src/ArgHandler.py b/src/ArgHandler.py index 621cd32d8..d356059bc 100644 --- a/src/ArgHandler.py +++ b/src/ArgHandler.py @@ -737,7 +737,7 @@ class ArgHandler: category = item[1] report_class = item[2] options_class = item[3] - if category in (CATEGORY_BOOK, CATEGORY_CODE, CATEGORY_WEB): + if category in (CATEGORY_BOOK, CATEGORY_CODE): options_class(self.state.db, name, category, options_str_dict) else: diff --git a/src/PluginUtils/_GuiOptions.py b/src/PluginUtils/_GuiOptions.py index 50b01baf9..de1200d1b 100644 --- a/src/PluginUtils/_GuiOptions.py +++ b/src/PluginUtils/_GuiOptions.py @@ -1154,7 +1154,7 @@ class GuiMenuOptions: for name in self.menu.get_all_option_names(): option = self.menu.get_option_by_name(name) self.options_dict[name] = option.get_value() - self.options_help[name] = option.get_help() + self.options_help[name] = [ "", option.get_help() ] def make_default_style(self, default_style): """ @@ -1178,7 +1178,7 @@ class GuiMenuOptions: """ self.menu.add_option(category, name, option) self.options_dict[name] = option.get_value() - self.options_help[name] = option.get_help() + self.options_help[name] = [ "", option.get_help() ] def add_user_options(self, dialog): """ diff --git a/src/ReportBase/_CommandLineReport.py b/src/ReportBase/_CommandLineReport.py index 49ee568e5..0f544fe08 100644 --- a/src/ReportBase/_CommandLineReport.py +++ b/src/ReportBase/_CommandLineReport.py @@ -36,11 +36,52 @@ import PluginUtils from BasicUtils import name_displayer import Utils import BaseDoc -from _Constants import CATEGORY_TEXT, CATEGORY_DRAW, CATEGORY_BOOK +from ReportBase import CATEGORY_TEXT, CATEGORY_DRAW, CATEGORY_BOOK, \ + CATEGORY_GRAPHVIZ from _PaperMenu import paper_sizes import os import const +#------------------------------------------------------------------------ +# +# Private Functions +# +#------------------------------------------------------------------------ +def _initialize_options(options, dbase): + """ + Validates all options by making sure that their values are consistent with + the database. + + menu: The Menu class + dbase: the database the options will be applied to + """ + if not hasattr(options, "menu"): + return + menu = options.menu + + for name in menu.get_all_option_names(): + option = menu.get_option_by_name(name) + + if isinstance(option, PluginUtils.PersonOption): + pid = option.get_value() + person = dbase.get_person_from_gramps_id(pid) + if not person: + person = dbase.get_default_person() + option.set_value(person.get_gramps_id()) + + elif isinstance(option, PluginUtils.FamilyOption): + fid = option.get_value() + family = dbase.get_family_from_gramps_id(fid) + if not family: + person = dbase.get_default_person() + family_list = person.get_family_handle_list() + if family_list: + family_handle = family_list[0] + else: + family_handle = dbase.get_family_handles()[0] + family = dbase.get_family_from_handle(family_handle) + option.set_value(family.get_gramps_id()) + #------------------------------------------------------------------------ # # Command-line report @@ -58,7 +99,8 @@ class CommandLineReport: self.format = None self.option_class = option_class(name, database) self.option_class.load_previous_values() - self.show = options_str_dict.pop('show',None) + _initialize_options(self.option_class, database) + self.show = options_str_dict.pop('show', None) self.options_str_dict = options_str_dict self.init_options(noopt) self.parse_option_str() @@ -73,7 +115,6 @@ class CommandLineReport: 'papers' : self.option_class.handler.get_paper_name(), 'papero' : self.option_class.handler.get_orientation(), 'template' : self.option_class.handler.get_template_name(), - 'id' : '' } self.options_help = { @@ -83,9 +124,6 @@ class CommandLineReport: 'papers' : ["=name","Paper size name."], 'papero' : ["=num","Paper orientation number."], 'template' : ["=name","Template name (HTML only)."], - 'id' : ["=ID","Gramps ID of a central person. MANDATORY"], - 'gen' : ["=num","Number of generations to follow."], - 'pagebbg' : ["=0/1","Page break between generations."], } if noopt: @@ -112,17 +150,6 @@ class CommandLineReport: else: print "Ignoring unknown option: %s" % opt - person_id = self.options_dict['id'] - self.person = self.database.get_person_from_gramps_id(person_id) - id_list = [] - for person_handle in self.database.get_person_handles(): - person = self.database.get_person_from_handle(person_handle) - id_list.append("%s\t%s" % ( - person.get_gramps_id(), - name_displayer.display(person))) - self.options_help['id'].append(id_list) - self.options_help['id'].append(False) - self.option_class.handler.output = self.options_dict['of'] self.options_help['of'].append(os.path.join(const.USER_HOME, "whatever_name")) @@ -256,10 +283,12 @@ def cl_report(database, name, category, report_class, options_class, # write report try: - clr.option_class.handler.doc = clr.format( - clr.selected_style, - BaseDoc.PaperStyle(clr.paper,clr.orien), - clr.template_name) + if category in [CATEGORY_TEXT, CATEGORY_DRAW, CATEGORY_BOOK, \ + CATEGORY_GRAPHVIZ]: + clr.option_class.handler.doc = clr.format( + clr.selected_style, + BaseDoc.PaperStyle(clr.paper,clr.orien), + clr.template_name) MyReport = report_class(database, clr.option_class) MyReport.doc.init() MyReport.begin_report()