0004705: Book Report does not work from CLI (Patch from Paul Franklin).

svn: r17870
This commit is contained in:
Brian Matherly 2011-06-30 02:47:48 +00:00
parent ab8c2d8693
commit d25248ccb8
2 changed files with 48 additions and 10 deletions

View File

@ -146,7 +146,6 @@ def _validate_options(options, dbase):
dbase: the database the options will be applied to
"""
if not hasattr(options, "menu"):
print 'no menu'
return
menu = options.menu
@ -322,6 +321,15 @@ class CommandLineReport(object):
"""
Initialize the options that are defined by each report.
"""
if self.category == CATEGORY_BOOK: # a Book Report has no "menu"
for key in self.option_class.options_dict:
self.options_dict[key] = self.option_class.options_dict[key]
self.options_help[key] = \
self.option_class.options_help[key][:3]
# a Book Report can't have HTML output so "css" is meaningless
self.options_dict.pop('css')
if not hasattr(self.option_class, "menu"):
return
menu = self.option_class.menu
@ -400,9 +408,10 @@ class CommandLineReport(object):
Load the options that the user has entered.
"""
if not hasattr(self.option_class, "menu"):
return
menu = self.option_class.menu
menu_opt_names = menu.get_all_option_names()
menu = None
else:
menu = self.option_class.menu
menu_opt_names = menu.get_all_option_names()
for opt in self.options_str_dict:
if opt in self.options_dict:
self.options_dict[opt] = \
@ -412,7 +421,7 @@ class CommandLineReport(object):
self.option_class.handler.options_dict[opt] = \
self.options_dict[opt]
if opt in menu_opt_names:
if menu and opt in menu_opt_names:
option = menu.get_option_by_name(opt)
option.set_value(self.options_dict[opt])
@ -503,12 +512,12 @@ class CommandLineReport(object):
elif self.show in self.options_help:
opt = self.options_help[self.show]
tabs = '\t\t' if len(self.show) < 10 else '\t'
print ' %s%s%s%s' % (self.show, tabs, opt[0], opt[1])
print ' %s%s%s (%s)' % (self.show, tabs, opt[1], opt[0])
print " Available values are:"
vals = opt[2]
if isinstance(vals, (list, tuple)):
for val in vals:
optmsg = " %s" % val
optmsg = " %s" % val
print optmsg.encode(sys.getfilesystemencoding())
else:
optmsg = " %s" % opt[2]

View File

@ -72,7 +72,7 @@ import Utils
import ListModel
import Errors
from gui.pluginmanager import GuiPluginManager
from gen.plug.docgen import StyleSheet, StyleSheetList
from gen.plug.docgen import StyleSheet, StyleSheetList, PaperStyle
from QuestionDialog import WarningDialog, ErrorDialog
from gen.plug.menu import PersonOption, FilterOption, FamilyOption
import ManagedWindow
@ -700,7 +700,7 @@ class BookOptions(ReportOptions):
'bookname' : '',
}
self.options_help = {
'bookname' : ("=name","Name of the book. MANDATORY",
'bookname' : ("=name",_("Name of the book. MANDATORY"),
BookList('books.xml',dbase).get_book_names(),
False),
}
@ -1301,6 +1301,9 @@ def cl_report(database, name, category, options_str_dict):
book_list = BookList('books.xml', database)
book_name = clr.options_dict['bookname']
if book_name:
if book_name not in book_list.get_book_names():
print _("No such book '%s'") % book_name
return
book = book_list.get_book(book_name)
else:
print _("Please specify a book name")
@ -1326,8 +1329,34 @@ def cl_report(database, name, category, options_str_dict):
this_style_name,
style_sheet.get_paragraph_style(this_style_name))
for this_style_name in style_sheet.get_draw_style_names():
selected_style.add_draw_style(
this_style_name,
style_sheet.get_draw_style(this_style_name))
for this_style_name in style_sheet.get_table_style_names():
selected_style.add_table_style(
this_style_name,
style_sheet.get_table_style(this_style_name))
for this_style_name in style_sheet.get_cell_style_names():
selected_style.add_cell_style(
this_style_name,
style_sheet.get_cell_style(this_style_name))
# The option values were loaded magically by the book parser.
# But they still need to be applied to the menu options.
opt_dict = item.option_class.options_dict
menu = item.option_class.menu
for optname in opt_dict:
menu_option = menu.get_option_by_name(optname)
if menu_option:
menu_option.set_value(opt_dict[optname])
# write report
doc = clr.format(selected_style, clr.paper, clr.template_name, clr.orien)
doc = clr.format(selected_style,
PaperStyle(clr.paper, clr.orien, clr.marginl,
clr.marginr, clr.margint, clr.marginb))
rptlist = []
for item in book.get_item_list():
item.option_class.set_document(doc)