def get_conversion_options(input_fmt, output_fmt, book_id, db): from calibre.ebooks.conversion.plumber import create_dummy_plumber from calibre.ebooks.conversion.config import (load_specifics, load_defaults, OPTIONS, options_for_input_fmt, options_for_output_fmt) from calibre.customize.conversion import OptionRecommendation plumber = create_dummy_plumber(input_fmt, output_fmt) specifics = load_specifics(db, book_id) ans = {'options': {}, 'disabled': set(), 'defaults': {}, 'help': {}} ans['input_plugin_name'] = plumber.input_plugin.commit_name ans['output_plugin_name'] = plumber.output_plugin.commit_name ans['input_ui_data'] = plumber.input_plugin.ui_data ans['output_ui_data'] = plumber.output_plugin.ui_data def merge_group(group_name, option_names): if not group_name or group_name in ('debug', 'metadata'): return defs = load_defaults(group_name) defs.merge_recommendations(plumber.get_option_by_name, OptionRecommendation.LOW, option_names) specifics.merge_recommendations(plumber.get_option_by_name, OptionRecommendation.HIGH, option_names, only_existing=True) defaults = defs.as_dict()['options'] for k in defs: if k in specifics: defs[k] = specifics[k] defs = defs.as_dict() ans['options'].update(defs['options']) ans['disabled'] |= set(defs['disabled']) ans['defaults'].update(defaults) ans['help'] = plumber.get_all_help() for group_name, option_names in iteritems(OPTIONS['pipe']): merge_group(group_name, option_names) group_name, option_names = options_for_input_fmt(input_fmt) merge_group(group_name, option_names) group_name, option_names = options_for_output_fmt(output_fmt) merge_group(group_name, option_names) ans['disabled'] = tuple(ans['disabled']) return ans
def get_conversion_options(input_fmt, output_fmt, book_id, db): from calibre.ebooks.conversion.plumber import create_dummy_plumber from calibre.ebooks.conversion.config import ( load_specifics, load_defaults, OPTIONS, options_for_input_fmt, options_for_output_fmt) from calibre.customize.conversion import OptionRecommendation plumber = create_dummy_plumber(input_fmt, output_fmt) specifics = load_specifics(db, book_id) ans = {'options': {}, 'disabled': set(), 'defaults': {}, 'help': {}} ans['input_plugin_name'] = plumber.input_plugin.commit_name ans['output_plugin_name'] = plumber.output_plugin.commit_name ans['input_ui_data'] = plumber.input_plugin.ui_data ans['output_ui_data'] = plumber.output_plugin.ui_data def merge_group(group_name, option_names): if not group_name or group_name in ('debug', 'metadata'): return defs = load_defaults(group_name) defs.merge_recommendations( plumber.get_option_by_name, OptionRecommendation.LOW, option_names) specifics.merge_recommendations( plumber.get_option_by_name, OptionRecommendation.HIGH, option_names, only_existing=True) defaults = defs.as_dict()['options'] for k in defs: if k in specifics: defs[k] = specifics[k] defs = defs.as_dict() ans['options'].update(defs['options']) ans['disabled'] |= set(defs['disabled']) ans['defaults'].update(defaults) ans['help'] = plumber.get_all_help() for group_name, option_names in OPTIONS['pipe'].iteritems(): merge_group(group_name, option_names) group_name, option_names = options_for_input_fmt(input_fmt) merge_group(group_name, option_names) group_name, option_names = options_for_output_fmt(output_fmt) merge_group(group_name, option_names) ans['disabled'] = tuple(ans['disabled']) return ans