0001828: update cli handling of new options. (new in 3.0?)
svn: r10127
This commit is contained in:
parent
fe6c305a14
commit
e913abe88b
@ -1,3 +1,7 @@
|
|||||||
|
2008-02-26 Brian Matherly <brian@gramps-project.org>
|
||||||
|
* src/ReportBase/_CommandLineReport.py:
|
||||||
|
0001828: update cli handling of new options. (new in 3.0?)
|
||||||
|
|
||||||
2008-02-26 Brian Matherly <brian@gramps-project.org>
|
2008-02-26 Brian Matherly <brian@gramps-project.org>
|
||||||
* src/ReportBase/_CommandLineReport.py:
|
* src/ReportBase/_CommandLineReport.py:
|
||||||
0001835: cli crashes for all reports. NoneType has no attribute
|
0001835: cli crashes for all reports. NoneType has no attribute
|
||||||
|
@ -41,6 +41,7 @@ log = logging.getLogger(".")
|
|||||||
import PluginUtils
|
import PluginUtils
|
||||||
import Utils
|
import Utils
|
||||||
import BaseDoc
|
import BaseDoc
|
||||||
|
from BasicUtils import name_displayer
|
||||||
from ReportBase import CATEGORY_TEXT, CATEGORY_DRAW, CATEGORY_BOOK, \
|
from ReportBase import CATEGORY_TEXT, CATEGORY_DRAW, CATEGORY_BOOK, \
|
||||||
CATEGORY_GRAPHVIZ
|
CATEGORY_GRAPHVIZ
|
||||||
from _PaperMenu import paper_sizes
|
from _PaperMenu import paper_sizes
|
||||||
@ -52,7 +53,7 @@ import const
|
|||||||
# Private Functions
|
# Private Functions
|
||||||
#
|
#
|
||||||
#------------------------------------------------------------------------
|
#------------------------------------------------------------------------
|
||||||
def _initialize_options(options, dbase):
|
def _validate_options(options, dbase):
|
||||||
"""
|
"""
|
||||||
Validates all options by making sure that their values are consistent with
|
Validates all options by making sure that their values are consistent with
|
||||||
the database.
|
the database.
|
||||||
@ -100,21 +101,25 @@ class CommandLineReport:
|
|||||||
Provide a way to generate report from the command line.
|
Provide a way to generate report from the command line.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self,database, name,category, option_class, options_str_dict,
|
def __init__(self, database, name, category, option_class, options_str_dict,
|
||||||
noopt=False):
|
noopt=False):
|
||||||
self.database = database
|
self.database = database
|
||||||
self.category = category
|
self.category = category
|
||||||
self.format = None
|
self.format = None
|
||||||
self.option_class = option_class(name, database)
|
self.option_class = option_class(name, database)
|
||||||
self.option_class.load_previous_values()
|
self.option_class.load_previous_values()
|
||||||
_initialize_options(self.option_class, database)
|
_validate_options(self.option_class, database)
|
||||||
self.show = options_str_dict.pop('show', None)
|
self.show = options_str_dict.pop('show', None)
|
||||||
self.options_str_dict = options_str_dict
|
self.options_str_dict = options_str_dict
|
||||||
self.init_options(noopt)
|
self.init_standard_options(noopt)
|
||||||
self.parse_option_str()
|
self.init_report_options()
|
||||||
|
self.parse_options()
|
||||||
self.show_options()
|
self.show_options()
|
||||||
|
|
||||||
def init_options(self, noopt):
|
def init_standard_options(self, noopt):
|
||||||
|
"""
|
||||||
|
Initialize the options that are hard-coded into the report system.
|
||||||
|
"""
|
||||||
self.options_dict = {
|
self.options_dict = {
|
||||||
'of' : self.option_class.handler.module_name,
|
'of' : self.option_class.handler.module_name,
|
||||||
'off' : self.option_class.handler.get_format_name(),
|
'off' : self.option_class.handler.get_format_name(),
|
||||||
@ -137,27 +142,6 @@ class CommandLineReport:
|
|||||||
if noopt:
|
if noopt:
|
||||||
return
|
return
|
||||||
|
|
||||||
# Add report-specific options
|
|
||||||
for key in self.option_class.handler.options_dict.keys():
|
|
||||||
if key not in self.options_dict.keys():
|
|
||||||
self.options_dict[key] = \
|
|
||||||
self.option_class.handler.options_dict[key]
|
|
||||||
|
|
||||||
# Add help for report-specific options
|
|
||||||
for key in self.option_class.options_help.keys():
|
|
||||||
if key not in self.options_help.keys():
|
|
||||||
self.options_help[key] = self.option_class.options_help[key]
|
|
||||||
|
|
||||||
def parse_option_str(self):
|
|
||||||
for opt in self.options_str_dict.keys():
|
|
||||||
if opt in self.options_dict.keys():
|
|
||||||
converter = Utils.get_type_converter(self.options_dict[opt])
|
|
||||||
self.options_dict[opt] = converter(self.options_str_dict[opt])
|
|
||||||
self.option_class.handler.options_dict[opt] = \
|
|
||||||
self.options_dict[opt]
|
|
||||||
else:
|
|
||||||
print "Ignoring unknown option: %s" % opt
|
|
||||||
|
|
||||||
self.option_class.handler.output = self.options_dict['of']
|
self.option_class.handler.output = self.options_dict['of']
|
||||||
self.options_help['of'].append(os.path.join(const.USER_HOME,
|
self.options_help['of'].append(os.path.join(const.USER_HOME,
|
||||||
"whatever_name"))
|
"whatever_name"))
|
||||||
@ -217,7 +201,7 @@ class CommandLineReport:
|
|||||||
self.options_help['template'].append(os.path.join(const.USER_HOME,
|
self.options_help['template'].append(os.path.join(const.USER_HOME,
|
||||||
"whatever_name"))
|
"whatever_name"))
|
||||||
|
|
||||||
if self.category in (CATEGORY_TEXT,CATEGORY_DRAW):
|
if self.category in (CATEGORY_TEXT, CATEGORY_DRAW):
|
||||||
default_style = BaseDoc.StyleSheet()
|
default_style = BaseDoc.StyleSheet()
|
||||||
self.option_class.make_default_style(default_style)
|
self.option_class.make_default_style(default_style)
|
||||||
|
|
||||||
@ -226,13 +210,95 @@ class CommandLineReport:
|
|||||||
self.style_list = BaseDoc.StyleSheetList(style_file,default_style)
|
self.style_list = BaseDoc.StyleSheetList(style_file,default_style)
|
||||||
|
|
||||||
# Get the selected stylesheet
|
# Get the selected stylesheet
|
||||||
style_name =self.option_class.handler.get_default_stylesheet_name()
|
style_name = self.option_class.handler.get_default_stylesheet_name()
|
||||||
self.selected_style = self.style_list.get_style_sheet(style_name)
|
self.selected_style = self.style_list.get_style_sheet(style_name)
|
||||||
|
|
||||||
self.options_help['style'].append(
|
self.options_help['style'].append(self.style_list.get_style_names())
|
||||||
self.style_list.get_style_names() )
|
|
||||||
self.options_help['style'].append(False)
|
self.options_help['style'].append(False)
|
||||||
|
|
||||||
|
def init_report_options(self):
|
||||||
|
"""
|
||||||
|
Initialize the options that are defined by each report.
|
||||||
|
"""
|
||||||
|
if not hasattr(self.option_class, "menu"):
|
||||||
|
return
|
||||||
|
menu = self.option_class.menu
|
||||||
|
for name in menu.get_all_option_names():
|
||||||
|
option = menu.get_option_by_name(name)
|
||||||
|
self.options_dict[name] = option.get_value()
|
||||||
|
self.options_help[name] = [ "", option.get_help() ]
|
||||||
|
|
||||||
|
if isinstance(option, PluginUtils.PersonOption):
|
||||||
|
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[name].append(id_list)
|
||||||
|
self.options_help[name].append(False)
|
||||||
|
elif isinstance(option, PluginUtils.FamilyOption):
|
||||||
|
id_list = []
|
||||||
|
for fhandle in self.database.get_family_handles():
|
||||||
|
family = self.database.get_person_from_handle(fhandle)
|
||||||
|
id_list.append(family.get_gramps_id())
|
||||||
|
self.options_help[name].append(id_list)
|
||||||
|
self.options_help[name].append(False)
|
||||||
|
elif isinstance(option, PluginUtils.NoteOption):
|
||||||
|
id_list = []
|
||||||
|
for nhandle in self.database.get_note_handles():
|
||||||
|
note = self.database.get_note_from_handle(nhandle)
|
||||||
|
id_list.append(note.get_gramps_id())
|
||||||
|
self.options_help[name].append(id_list)
|
||||||
|
self.options_help[name].append(False)
|
||||||
|
elif isinstance(option, PluginUtils.MediaOption):
|
||||||
|
id_list = []
|
||||||
|
for mhandle in self.database.get_media_object_handles():
|
||||||
|
mobject = self.database.get_object_from_handle(mhandle)
|
||||||
|
id_list.append(mobject.get_gramps_id())
|
||||||
|
self.options_help[name].append(id_list)
|
||||||
|
self.options_help[name].append(False)
|
||||||
|
elif isinstance(option, PluginUtils.PersonListOption):
|
||||||
|
self.options_help[name].append("")
|
||||||
|
self.options_help[name].append(False)
|
||||||
|
elif isinstance(option, PluginUtils.NumberOption):
|
||||||
|
self.options_help[name].append("A number")
|
||||||
|
self.options_help[name].append(False)
|
||||||
|
elif isinstance(option, PluginUtils.BooleanOption):
|
||||||
|
self.options_help[name].append(["0\tno", "1\tyes"])
|
||||||
|
self.options_help[name].append(False)
|
||||||
|
elif isinstance(option, PluginUtils.DestinationOption):
|
||||||
|
self.options_help[name].append("A file system path")
|
||||||
|
self.options_help[name].append(False)
|
||||||
|
elif isinstance(option, PluginUtils.StringOption):
|
||||||
|
self.options_help[name].append("Any text")
|
||||||
|
self.options_help[name].append(False)
|
||||||
|
elif isinstance(option, PluginUtils.EnumeratedListOption):
|
||||||
|
ilist = []
|
||||||
|
for (value, description) in option.get_items():
|
||||||
|
ilist.append("%s\t%s" % (value, description))
|
||||||
|
self.options_help[name].append(ilist)
|
||||||
|
self.options_help[name].append(False)
|
||||||
|
|
||||||
|
def parse_options(self):
|
||||||
|
"""
|
||||||
|
Load the options that the user has entered.
|
||||||
|
"""
|
||||||
|
if not hasattr(self.option_class, "menu"):
|
||||||
|
return
|
||||||
|
menu = self.option_class.menu
|
||||||
|
for opt in self.options_str_dict.keys():
|
||||||
|
if opt in self.options_dict.keys():
|
||||||
|
converter = Utils.get_type_converter(self.options_dict[opt])
|
||||||
|
self.options_dict[opt] = converter(self.options_str_dict[opt])
|
||||||
|
self.option_class.handler.options_dict[opt] = \
|
||||||
|
self.options_dict[opt]
|
||||||
|
option = menu.get_option_by_name(opt)
|
||||||
|
option.set_value(self.options_dict[opt])
|
||||||
|
|
||||||
|
else:
|
||||||
|
print "Ignoring unknown option: %s" % opt
|
||||||
|
|
||||||
def show_options(self):
|
def show_options(self):
|
||||||
"""
|
"""
|
||||||
Print available options on the CLI.
|
Print available options on the CLI.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user