def main(args=sys.argv): from calibre.constants import debug debug() opts, args = option_parser().parse_args(args) if opts.gui: from calibre.gui2.main import main print_basic_debug_info() main(['calibre']) elif opts.gui_debug is not None: run_debug_gui(opts.gui_debug) elif opts.show_gui_debug: import time, re time.sleep(1) from calibre.gui2 import open_local_file if iswindows: with open(opts.show_gui_debug, 'r+b') as f: raw = f.read() raw = re.sub('(?<!\r)\n', '\r\n', raw) f.seek(0) f.truncate() f.write(raw) open_local_file(opts.show_gui_debug) elif opts.viewer: from calibre.gui2.viewer.main import main vargs = ['ebook-viewer', '--debug-javascript'] if len(args) > 1: vargs.append(args[-1]) main(vargs) elif opts.py_console: from calibre.utils.pyconsole.main import main main() elif opts.command: sys.argv = args exec(opts.command) elif opts.debug_device_driver: debug_device_driver() elif opts.add_simple_plugin is not None: add_simple_plugin(opts.add_simple_plugin) elif opts.paths: prints('CALIBRE_RESOURCES_PATH='+sys.resources_location) prints('CALIBRE_EXTENSIONS_PATH='+sys.extensions_location) prints('CALIBRE_PYTHON_PATH='+os.pathsep.join(sys.path)) elif opts.reinitialize_db is not None: reinit_db(opts.reinitialize_db) elif opts.inspect_mobi: for path in args[1:]: inspect_mobi(path) elif opts.tweak_book: from calibre.gui2.tweak_book.main import main main(['ebook-tweak'] + args[1:]) elif opts.test_build: from calibre.test_build import test test() elif opts.shutdown_running_calibre: from calibre.gui2.main import shutdown_other shutdown_other() elif opts.subset_font: from calibre.utils.fonts.sfnt.subset import main main(['subset-font']+[opts.subset_font]+args[1:]) elif opts.exec_file: run_script(opts.exec_file, args[1:]) elif opts.run_plugin: from calibre.customize.ui import find_plugin plugin = find_plugin(opts.run_plugin) if plugin is None: prints(_('No plugin named %s found')%opts.run_plugin) raise SystemExit(1) plugin.cli_main([plugin.name] + args[1:]) elif len(args) >= 2 and args[1].rpartition('.')[-1] in {'py', 'recipe'}: run_script(args[1], args[2:]) elif len(args) >= 2 and args[1].rpartition('.')[-1] in {'mobi', 'azw', 'azw3', 'docx'}: for path in args[1:]: ext = path.rpartition('.')[-1] if ext == 'docx': from calibre.ebooks.docx.dump import dump dump(path) elif ext in {'mobi', 'azw', 'azw3'}: inspect_mobi(path) else: print ('Cannot dump unknown filetype: %s' % path) else: from calibre import ipython ipython() return 0
# cdata = br.open(doiquery).read() # json.loads(cdata) sd.is_short_doi(short_doi) sd.return_full_doi(br, short_doi) # https://doi.org/api/handles/10/aabbe # doilink = 'https://dx.doi.org/10.1002/(SICI)1097-0258(19980815/30)17:15/16%3C1661::AID-SIM968%3E3.0.CO;2-2?noredirect' # fullurl = 'https://api.crossref.org/works?%s' % dois # fullurl = 'https://api.crossref.org/works?filter=doi:10/aabbe&mailto=vikoya5988%40oniaj.com' # cdata = br.open(fullurl).read() # data = json.loads(cdata) # message = data['message'] # results = message['items'] # identifiers = {} # # fin = map(lambda x:reader.result2meta(x,identifiers),results) # for r in results: # reader.result2meta(r,identifiers) # result = results[1] # title = get_title(result) # authors = get_author_list(result) # mi = Metadata(title=title, authors=authors) from calibre import ipython ipython(locals())
def main(args=sys.argv): from calibre.constants import debug debug() opts, args = option_parser().parse_args(args) if opts.gui: from calibre.gui_launch import calibre print_basic_debug_info() calibre(['calibre']) elif opts.gui_debug is not None: run_debug_gui(opts.gui_debug) elif opts.viewer: from calibre.gui_launch import ebook_viewer ebook_viewer(['ebook-viewer', '--debug-javascript'] + args[1:]) elif opts.py_console: from calibre.utils.pyconsole.main import main main() elif opts.command: sys.argv = args exec(opts.command) elif opts.debug_device_driver: debug_device_driver() elif opts.add_simple_plugin is not None: add_simple_plugin(opts.add_simple_plugin) elif opts.paths: prints('CALIBRE_RESOURCES_PATH='+sys.resources_location) prints('CALIBRE_EXTENSIONS_PATH='+sys.extensions_location) prints('CALIBRE_PYTHON_PATH='+os.pathsep.join(sys.path)) elif opts.reinitialize_db is not None: reinit_db(opts.reinitialize_db) elif opts.inspect_mobi: for path in args[1:]: inspect_mobi(path) elif opts.edit_book: from calibre.gui_launch import ebook_edit ebook_edit(['ebook-edit'] + args[1:]) elif opts.explode_book: from calibre.ebooks.tweak import tweak tweak(opts.explode_book) elif opts.test_build: from calibre.test_build import test test() elif opts.shutdown_running_calibre: from calibre.gui2.main import shutdown_other shutdown_other() elif opts.subset_font: from calibre.utils.fonts.sfnt.subset import main main(['subset-font'] + args[1:]) elif opts.exec_file: run_script(opts.exec_file, args[1:]) elif opts.run_plugin: from calibre.customize.ui import find_plugin plugin = find_plugin(opts.run_plugin) if plugin is None: prints(_('No plugin named %s found')%opts.run_plugin) raise SystemExit(1) plugin.cli_main([plugin.name] + args[1:]) elif opts.diff: from calibre.gui2.tweak_book.diff.main import main main(['calibre-diff'] + args[1:]) elif opts.default_programs: if not iswindows: raise SystemExit('Can only be run on Microsoft Windows') if opts.default_programs == 'register': from calibre.utils.winreg.default_programs import register as func else: from calibre.utils.winreg.default_programs import unregister as func print 'Running', func.__name__, '...' func() elif opts.new_server: from calibre.srv.standalone import main main(args) elif opts.export_all_calibre_data: from calibre.utils.exim import run_exporter run_exporter() elif opts.import_calibre_data: from calibre.utils.exim import run_importer run_importer() elif len(args) >= 2 and args[1].rpartition('.')[-1] in {'py', 'recipe'}: run_script(args[1], args[2:]) elif len(args) >= 2 and args[1].rpartition('.')[-1] in {'mobi', 'azw', 'azw3', 'docx', 'odt'}: for path in args[1:]: ext = path.rpartition('.')[-1] if ext in {'docx', 'odt'}: from calibre.ebooks.docx.dump import dump dump(path) elif ext in {'mobi', 'azw', 'azw3'}: inspect_mobi(path) else: print ('Cannot dump unknown filetype: %s' % path) elif len(args) >= 2 and os.path.exists(os.path.join(args[1], '__main__.py')): sys.path.insert(0, args[1]) run_script(os.path.join(args[1], '__main__.py'), args[2:]) else: from calibre import ipython ipython() return 0
def main(args=sys.argv): from calibre.constants import debug debug() opts, args = option_parser().parse_args(args) if opts.gui: from calibre.gui_launch import calibre calibre(['calibre'] + args[1:]) elif opts.gui_debug is not None: run_debug_gui(opts.gui_debug) elif opts.viewer: from calibre.gui_launch import ebook_viewer ebook_viewer(['ebook-viewer', '--debug-javascript'] + args[1:]) elif opts.command: sys.argv = args exec(opts.command) elif opts.debug_device_driver: debug_device_driver() elif opts.add_simple_plugin is not None: add_simple_plugin(opts.add_simple_plugin) elif opts.paths: prints('CALIBRE_RESOURCES_PATH=' + sys.resources_location) prints('CALIBRE_EXTENSIONS_PATH=' + sys.extensions_location) prints('CALIBRE_PYTHON_PATH=' + os.pathsep.join(sys.path)) elif opts.reinitialize_db is not None: reinit_db(opts.reinitialize_db) elif opts.inspect_mobi: for path in args[1:]: inspect_mobi(path) elif opts.edit_book: from calibre.gui_launch import ebook_edit ebook_edit(['ebook-edit'] + args[1:]) elif opts.explode_book or opts.implode_book: from calibre.ebooks.tweak import explode, implode try: a1, a2 = args[1:] except Exception: raise SystemExit('Must provide exactly two arguments') f = explode if opts.explode_book else implode f(a1, a2) elif opts.test_build: from calibre.test_build import test test() elif opts.shutdown_running_calibre: from calibre.gui2.main import shutdown_other shutdown_other() elif opts.subset_font: from calibre.utils.fonts.sfnt.subset import main main(['subset-font'] + args[1:]) elif opts.exec_file: run_script(opts.exec_file, args[1:]) elif opts.run_plugin: from calibre.customize.ui import find_plugin plugin = find_plugin(opts.run_plugin) if plugin is None: prints(_('No plugin named %s found') % opts.run_plugin) raise SystemExit(1) plugin.cli_main([plugin.name] + args[1:]) elif opts.diff: from calibre.gui2.tweak_book.diff.main import main main(['calibre-diff'] + args[1:]) elif opts.default_programs: if not iswindows: raise SystemExit('Can only be run on Microsoft Windows') if opts.default_programs == 'register': from calibre.utils.winreg.default_programs import register as func else: from calibre.utils.winreg.default_programs import unregister as func print('Running', func.__name__, '...') func() elif opts.export_all_calibre_data: args = args[1:] from calibre.utils.exim import run_exporter run_exporter(args=args) elif opts.import_calibre_data: from calibre.utils.exim import run_importer run_importer() elif len(args) >= 2 and args[1].rpartition('.')[-1] in {'py', 'recipe'}: run_script(args[1], args[2:]) elif len(args) >= 2 and args[1].rpartition('.')[-1] in { 'mobi', 'azw', 'azw3', 'docx', 'odt' }: for path in args[1:]: ext = path.rpartition('.')[-1] if ext in {'docx', 'odt'}: from calibre.ebooks.docx.dump import dump dump(path) elif ext in {'mobi', 'azw', 'azw3'}: inspect_mobi(path) else: print('Cannot dump unknown filetype: %s' % path) elif len(args) >= 2 and os.path.exists(os.path.join( args[1], '__main__.py')): sys.path.insert(0, args[1]) run_script(os.path.join(args[1], '__main__.py'), args[2:]) else: load_user_plugins() from calibre import ipython ipython() return 0
def main(args=sys.argv): from calibre.constants import debug debug() if len(args) > 2 and args[1] in ("-e", "--exec-file"): # Load all plugins user defined plugins so the script can import from the # calibre_plugins namespace import calibre.customize.ui as dummy dummy sys.argv = [args[2]] + args[3:] ef = os.path.abspath(args[2]) base = os.path.dirname(ef) sys.path.insert(0, base) g = globals() g["__name__"] = "__main__" g["__file__"] = ef execfile(ef, g) return opts, args = option_parser().parse_args(args) if opts.gui: from calibre.gui2.main import main main(["calibre"]) elif opts.gui_debug is not None: run_debug_gui(opts.gui_debug) elif opts.show_gui_debug: import time, re time.sleep(1) from calibre.gui2 import open_local_file if iswindows: with open(opts.show_gui_debug, "r+b") as f: raw = f.read() raw = re.sub("(?<!\r)\n", "\r\n", raw) f.seek(0) f.truncate() f.write(raw) open_local_file(opts.show_gui_debug) elif opts.viewer: from calibre.gui2.viewer.main import main vargs = ["ebook-viewer", "--debug-javascript"] if len(args) > 1: vargs.append(args[-1]) main(vargs) elif opts.py_console: from calibre.utils.pyconsole.main import main main() elif opts.command: sys.argv = args exec opts.command elif opts.debug_device_driver: debug_device_driver() elif opts.migrate: if len(args) < 3: print "You must specify the path to library1.db and the path to the new library folder" return 1 migrate(args[1], args[2]) elif opts.add_simple_plugin is not None: add_simple_plugin(opts.add_simple_plugin) elif opts.paths: prints("CALIBRE_RESOURCES_PATH=" + sys.resources_location) prints("CALIBRE_EXTENSIONS_PATH=" + sys.extensions_location) prints("CALIBRE_PYTHON_PATH=" + os.pathsep.join(sys.path)) elif opts.reinitialize_db is not None: sql_dump = None if len(args) > 1 and os.access(args[-1], os.R_OK): sql_dump = args[-1] reinit_db(opts.reinitialize_db, sql_dump=sql_dump) elif opts.inspect_mobi: from calibre.ebooks.mobi.debug.main import inspect_mobi for path in args[1:]: prints("Inspecting:", path) inspect_mobi(path) print elif opts.tweak_book: from calibre.ebooks.tweak import tweak tweak(opts.tweak_book) elif opts.test_build: from calibre.test_build import test test() elif opts.shutdown_running_calibre: from calibre.gui2.main import shutdown_other shutdown_other() else: from calibre import ipython ipython() return 0
def main(args=sys.argv): from calibre.constants import debug debug() opts, args = option_parser().parse_args(args) if opts.gui: from calibre.gui2.main import main print_basic_debug_info() main(['calibre']) elif opts.gui_debug is not None: run_debug_gui(opts.gui_debug) elif opts.viewer: from calibre.gui2.viewer.main import main main(['ebook-viewer'] + args[1:]) elif opts.py_console: from calibre.utils.pyconsole.main import main main() elif opts.command: sys.argv = args exec(opts.command) elif opts.debug_device_driver: debug_device_driver() elif opts.add_simple_plugin is not None: add_simple_plugin(opts.add_simple_plugin) elif opts.paths: prints('CALIBRE_RESOURCES_PATH='+sys.resources_location) prints('CALIBRE_EXTENSIONS_PATH='+sys.extensions_location) prints('CALIBRE_PYTHON_PATH='+os.pathsep.join(sys.path)) elif opts.reinitialize_db is not None: reinit_db(opts.reinitialize_db) elif opts.inspect_mobi: for path in args[1:]: inspect_mobi(path) elif opts.edit_book: from calibre.gui2.tweak_book.main import main main(['ebook-edit'] + args[1:]) elif opts.explode_book: from calibre.ebooks.tweak import tweak tweak(opts.explode_book) elif opts.test_build: from calibre.test_build import test test() elif opts.shutdown_running_calibre: from calibre.gui2.main import shutdown_other shutdown_other() elif opts.subset_font: from calibre.utils.fonts.sfnt.subset import main main(['subset-font']+[opts.subset_font]+args[1:]) elif opts.exec_file: run_script(opts.exec_file, args[1:]) elif opts.run_plugin: from calibre.customize.ui import find_plugin plugin = find_plugin(opts.run_plugin) if plugin is None: prints(_('No plugin named %s found')%opts.run_plugin) raise SystemExit(1) plugin.cli_main([plugin.name] + args[1:]) elif opts.diff: from calibre.gui2.tweak_book.diff.main import main main(['calibre-diff'] + args[1:]) elif len(args) >= 2 and args[1].rpartition('.')[-1] in {'py', 'recipe'}: run_script(args[1], args[2:]) elif len(args) >= 2 and args[1].rpartition('.')[-1] in {'mobi', 'azw', 'azw3', 'docx', 'odt'}: for path in args[1:]: ext = path.rpartition('.')[-1] if ext in {'docx', 'odt'}: from calibre.ebooks.docx.dump import dump dump(path) elif ext in {'mobi', 'azw', 'azw3'}: inspect_mobi(path) else: print ('Cannot dump unknown filetype: %s' % path) else: from calibre import ipython ipython() return 0
def main(args=sys.argv): from calibre.constants import debug debug() opts, args = option_parser().parse_args(args) if opts.gui: from calibre.gui2.main import main print_basic_debug_info() main(['calibre']) elif opts.gui_debug is not None: run_debug_gui(opts.gui_debug) elif opts.show_gui_debug: import time, re time.sleep(1) from calibre.gui2 import open_local_file if iswindows: with open(opts.show_gui_debug, 'r+b') as f: raw = f.read() raw = re.sub('(?<!\r)\n', '\r\n', raw) f.seek(0) f.truncate() f.write(raw) open_local_file(opts.show_gui_debug) elif opts.viewer: from calibre.gui2.viewer.main import main main(['ebook-viewer'] + args[1:]) elif opts.py_console: from calibre.utils.pyconsole.main import main main() elif opts.command: sys.argv = args exec(opts.command) elif opts.debug_device_driver: debug_device_driver() elif opts.add_simple_plugin is not None: add_simple_plugin(opts.add_simple_plugin) elif opts.paths: prints('CALIBRE_RESOURCES_PATH='+sys.resources_location) prints('CALIBRE_EXTENSIONS_PATH='+sys.extensions_location) prints('CALIBRE_PYTHON_PATH='+os.pathsep.join(sys.path)) elif opts.reinitialize_db is not None: reinit_db(opts.reinitialize_db) elif opts.inspect_mobi: for path in args[1:]: inspect_mobi(path) elif opts.edit_book: from calibre.gui2.tweak_book.main import main main(['ebook-edit'] + args[1:]) elif opts.explode_book: from calibre.ebooks.tweak import tweak tweak(opts.explode_book) elif opts.test_build: from calibre.test_build import test test() elif opts.shutdown_running_calibre: from calibre.gui2.main import shutdown_other shutdown_other() elif opts.subset_font: from calibre.utils.fonts.sfnt.subset import main main(['subset-font']+[opts.subset_font]+args[1:]) elif opts.exec_file: run_script(opts.exec_file, args[1:]) elif opts.run_plugin: from calibre.customize.ui import find_plugin plugin = find_plugin(opts.run_plugin) if plugin is None: prints(_('No plugin named %s found')%opts.run_plugin) raise SystemExit(1) plugin.cli_main([plugin.name] + args[1:]) elif opts.diff: from calibre.gui2.tweak_book.diff.main import main main(['calibre-diff'] + args[1:]) elif len(args) >= 2 and args[1].rpartition('.')[-1] in {'py', 'recipe'}: run_script(args[1], args[2:]) elif len(args) >= 2 and args[1].rpartition('.')[-1] in {'mobi', 'azw', 'azw3', 'docx', 'odt'}: for path in args[1:]: ext = path.rpartition('.')[-1] if ext in {'docx', 'odt'}: from calibre.ebooks.docx.dump import dump dump(path) elif ext in {'mobi', 'azw', 'azw3'}: inspect_mobi(path) else: print ('Cannot dump unknown filetype: %s' % path) else: from calibre import ipython ipython() return 0
def main(args=sys.argv): from calibre.constants import debug debug() opts, args = option_parser().parse_args(args) if opts.gui: from calibre.gui2.main import main print_basic_debug_info() main(['calibre']) elif opts.gui_debug is not None: run_debug_gui(opts.gui_debug) elif opts.show_gui_debug: import time, re time.sleep(1) from calibre.gui2 import open_local_file if iswindows: with open(opts.show_gui_debug, 'r+b') as f: raw = f.read() raw = re.sub('(?<!\r)\n', '\r\n', raw) f.seek(0) f.truncate() f.write(raw) open_local_file(opts.show_gui_debug) elif opts.viewer: from calibre.gui2.viewer.main import main vargs = ['ebook-viewer', '--debug-javascript'] if len(args) > 1: vargs.append(args[-1]) main(vargs) elif opts.py_console: from calibre.utils.pyconsole.main import main main() elif opts.command: sys.argv = args exec opts.command elif opts.debug_device_driver: debug_device_driver() elif opts.add_simple_plugin is not None: add_simple_plugin(opts.add_simple_plugin) elif opts.paths: prints('CALIBRE_RESOURCES_PATH=' + sys.resources_location) prints('CALIBRE_EXTENSIONS_PATH=' + sys.extensions_location) prints('CALIBRE_PYTHON_PATH=' + os.pathsep.join(sys.path)) elif opts.reinitialize_db is not None: sql_dump = None if len(args) > 1 and os.access(args[-1], os.R_OK): sql_dump = args[-1] reinit_db(opts.reinitialize_db, sql_dump=sql_dump) elif opts.inspect_mobi: from calibre.ebooks.mobi.debug.main import inspect_mobi for path in args[1:]: prints('Inspecting:', path) inspect_mobi(path) print elif opts.tweak_book: from calibre.ebooks.tweak import tweak tweak(opts.tweak_book) elif opts.test_build: from calibre.test_build import test test() elif opts.shutdown_running_calibre: from calibre.gui2.main import shutdown_other shutdown_other() elif opts.subset_font: from calibre.utils.fonts.sfnt.subset import main main(['subset-font'] + [opts.subset_font] + args[1:]) elif opts.exec_file: run_script(opts.exec_file, args[1:]) elif opts.run_plugin: from calibre.customize.ui import find_plugin plugin = find_plugin(opts.run_plugin) if plugin is None: prints(_('No plugin named %s found') % opts.run_plugin) raise SystemExit(1) plugin.cli_main([plugin.name] + args[1:]) elif len(args) >= 2 and args[1].rpartition('.')[-1] in {'py', 'recipe'}: run_script(args[1], args[2:]) else: from calibre import ipython ipython() return 0
def main(args=sys.argv): from calibre.constants import debug debug() if len(args) > 2 and args[1] in ('-e', '--exec-file'): # Load all plugins user defined plugins so the script can import from the # calibre_plugins namespace import calibre.customize.ui as dummy dummy sys.argv = [args[2]] + args[3:] ef = os.path.abspath(args[2]) base = os.path.dirname(ef) sys.path.insert(0, base) g = globals() g['__name__'] = '__main__' g['__file__'] = ef execfile(ef, g) return opts, args = option_parser().parse_args(args) if opts.gui: from calibre.gui2.main import main main(['calibre']) elif opts.gui_debug is not None: run_debug_gui(opts.gui_debug) elif opts.show_gui_debug: import time, re time.sleep(1) from calibre.gui2 import open_local_file if iswindows: with open(opts.show_gui_debug, 'r+b') as f: raw = f.read() raw = re.sub('(?<!\r)\n', '\r\n', raw) f.seek(0) f.truncate() f.write(raw) open_local_file(opts.show_gui_debug) elif opts.viewer: from calibre.gui2.viewer.main import main vargs = ['ebook-viewer', '--debug-javascript'] if len(args) > 1: vargs.append(args[-1]) main(vargs) elif opts.py_console: from calibre.utils.pyconsole.main import main main() elif opts.command: sys.argv = args exec opts.command elif opts.debug_device_driver: debug_device_driver() elif opts.migrate: if len(args) < 3: print 'You must specify the path to library1.db and the path to the new library folder' return 1 migrate(args[1], args[2]) elif opts.add_simple_plugin is not None: add_simple_plugin(opts.add_simple_plugin) elif opts.paths: prints('CALIBRE_RESOURCES_PATH=' + sys.resources_location) prints('CALIBRE_EXTENSIONS_PATH=' + sys.extensions_location) prints('CALIBRE_PYTHON_PATH=' + os.pathsep.join(sys.path)) elif opts.reinitialize_db is not None: sql_dump = None if len(args) > 1 and os.access(args[-1], os.R_OK): sql_dump = args[-1] reinit_db(opts.reinitialize_db, sql_dump=sql_dump) elif opts.inspect_mobi: from calibre.ebooks.mobi.debug.main import inspect_mobi for path in args[1:]: prints('Inspecting:', path) inspect_mobi(path) print elif opts.tweak_book: from calibre.ebooks.tweak import tweak tweak(opts.tweak_book) elif opts.test_build: from calibre.test_build import test test() elif opts.shutdown_running_calibre: from calibre.gui2.main import shutdown_other shutdown_other() else: from calibre import ipython ipython() return 0
def main(args=sys.argv): from calibre.constants import debug debug() opts, args = option_parser().parse_args(args) if opts.gui: from calibre.gui2.main import main print_basic_debug_info() main(["calibre"]) elif opts.gui_debug is not None: run_debug_gui(opts.gui_debug) elif opts.show_gui_debug: import time, re time.sleep(1) from calibre.gui2 import open_local_file if iswindows: with open(opts.show_gui_debug, "r+b") as f: raw = f.read() raw = re.sub("(?<!\r)\n", "\r\n", raw) f.seek(0) f.truncate() f.write(raw) open_local_file(opts.show_gui_debug) elif opts.viewer: from calibre.gui2.viewer.main import main main(["ebook-viewer"] + args[1:]) elif opts.py_console: from calibre.utils.pyconsole.main import main main() elif opts.command: sys.argv = args exec(opts.command) elif opts.debug_device_driver: debug_device_driver() elif opts.add_simple_plugin is not None: add_simple_plugin(opts.add_simple_plugin) elif opts.paths: prints("CALIBRE_RESOURCES_PATH=" + sys.resources_location) prints("CALIBRE_EXTENSIONS_PATH=" + sys.extensions_location) prints("CALIBRE_PYTHON_PATH=" + os.pathsep.join(sys.path)) elif opts.reinitialize_db is not None: reinit_db(opts.reinitialize_db) elif opts.inspect_mobi: for path in args[1:]: inspect_mobi(path) elif opts.edit_book: from calibre.gui2.tweak_book.main import main main(["ebook-edit"] + args[1:]) elif opts.explode_book: from calibre.ebooks.tweak import tweak tweak(opts.explode_book) elif opts.test_build: from calibre.test_build import test test() elif opts.shutdown_running_calibre: from calibre.gui2.main import shutdown_other shutdown_other() elif opts.subset_font: from calibre.utils.fonts.sfnt.subset import main main(["subset-font"] + [opts.subset_font] + args[1:]) elif opts.exec_file: run_script(opts.exec_file, args[1:]) elif opts.run_plugin: from calibre.customize.ui import find_plugin plugin = find_plugin(opts.run_plugin) if plugin is None: prints(_("No plugin named %s found") % opts.run_plugin) raise SystemExit(1) plugin.cli_main([plugin.name] + args[1:]) elif opts.diff: from calibre.gui2.tweak_book.diff.main import main main(["calibre-diff"] + args[1:]) elif len(args) >= 2 and args[1].rpartition(".")[-1] in {"py", "recipe"}: run_script(args[1], args[2:]) elif len(args) >= 2 and args[1].rpartition(".")[-1] in {"mobi", "azw", "azw3", "docx", "odt"}: for path in args[1:]: ext = path.rpartition(".")[-1] if ext in {"docx", "odt"}: from calibre.ebooks.docx.dump import dump dump(path) elif ext in {"mobi", "azw", "azw3"}: inspect_mobi(path) else: print("Cannot dump unknown filetype: %s" % path) else: from calibre import ipython ipython() return 0
def identify(self, log, result_queue, abort, title=None, authors=None, identifiers={}, timeout=30, nested=False): matches = [] ipython(locals()) CBDB_id = identifiers.get('cbdb', None) isbn = check_isbn(identifiers.get('isbn', None)) br = self.browser if CBDB_id: matches.append(BASE_BOOK_URL % (BASE_URL, CBDB_id)) else: query = self.create_query(log, title=title, authors=authors, identifiers=identifiers) if query is None: log.error('Insufficient metadata to construct query') return try: log.info('Querying: %s' % query) response = br.open_novisit(query, timeout=timeout) if isbn: # Check whether we got redirected to a book page for ISBN searches. # If we did, will use the url. # If we didn't then treat it as no matches on CBDB location = response.geturl() if '/kniha-' in location: log.info('ISBN match location: %r' % location) matches.append(location) except IOError as e: err = 'Connection problem. Check your Internet connection' log.warning(err) return as_unicode(e) except Exception as e: err = 'Failed to make identify query: %r' % query # testing w/o inet log.exception(err) return as_unicode(e) # For ISBN based searches we have already done everything we need to # So anything from this point below is for title/author based searches. # CBDB doesn't redirect anymore when there's just one match if not isbn or (isbn and matches.__len__() == 0): try: raw = response.read().strip() # open('E:\\t.html', 'wb').write(raw) # raw = open('S:\\t.html', 'rb').read() raw = raw.decode('utf-8', errors='replace') if not raw: log.error('Failed to get raw result for query: %r' % query) return cln = clean_ascii_chars(raw) idxs = cln.find('<!DOCTYPE') if (idxs == -1): log.error('Failed to find HTML document') return vld = cln[idxs:] # log.info(vld) idxs = vld.find("<head>") if (idxs == -1): log.error('Failed to find HEAD element') return # <!DOCTYPE .. <head> hdr = vld[:idxs] idxs = vld.find('<h2>Nalezeno') if (idxs == -1): log.error('Incorrect document structure 1') return idxe = vld.find('</h2>', idxs) if (idxe == -1): log.error('Incorrect document structure 2') return arr = vld[idxs:idxe].split(':') if (arr.__len__() != 2): log.error('Incorrect document structure 3') return cnt = int(arr[1]) # a publication found if (cnt != 0): hdr += '<HEAD/>' + '<BODY>' + \ '<H3>' + str(cnt) + '</H3>' idxs = vld.find('<table', idxe) if (idxs == -1): log.error('Incorrect document structure 11') return idxe = vld.find('</table>', idxs) if (idxe == -1): log.error('Incorrect document structure 12') return hdr += vld[idxs:(idxe + 8)] + '</BODY>' + '</HTML>' # rebuild HTML to contain just relevant data # first line ~ result count # table ~ results vld = hdr else: # nothing found, so send an empty HTML vld = '<HTML/>' # log.info('vld') # log.info(vld) root = fromstring(vld) except: msg = 'Failed to parse CBDB page for query: %r' % query log.exception(msg) return msg # Now grab values from the search results, provided the # title and authors appear to be for the same book # isnb of course will only have one result if isbn: self._parse_isbn_search_results(log, root, matches) else: self._parse_search_results(log, title, authors, root, matches, timeout) if abort.is_set(): return if (matches.__len__() == 0): if nested: return log.info('No matches found, trying to strip accents') if (not self.identify(log, result_queue, abort, title=self.strip_accents(title), authors=self.strip_accents(authors), timeout=30, nested=True)): log.info('No matches found, trying to strip numbers') if (not self.identify(log, result_queue, abort, title=self.strip_accents( title.rstrip(string.digits)), authors=self.strip_accents(authors), timeout=30, nested=True)): log.error('No matches found with query: %r' % query) return # log.info('Lets process matches ...') from calibre_plugins.CBDB.worker import Worker workers = [ Worker(url, result_queue, br, log, i, self) for i, url in enumerate(matches) ] for w in workers: w.start() # Don't send all requests at the same time time.sleep(0.1) while not abort.is_set(): a_worker_is_alive = False for w in workers: w.join(0.2) if abort.is_set(): break if w.is_alive(): a_worker_is_alive = True if not a_worker_is_alive: break return None
def main(args=sys.argv): from calibre.constants import debug debug() if len(args) > 2 and args[1] in ('-e', '--exec-file'): # Load all plugins user defined plugins so the script can import from the # calibre_plugins namespace import calibre.customize.ui as dummy dummy sys.argv = [args[2]] + args[3:] ef = os.path.abspath(args[2]) base = os.path.dirname(ef) sys.path.insert(0, base) g = globals() g['__name__'] = '__main__' g['__file__'] = ef execfile(ef, g) return if len(args) > 1 and args[1] in ('-f', '--subset-font'): from calibre.utils.fonts.sfnt.subset import main main(['subset-font']+args[2:]) return opts, args = option_parser().parse_args(args) if opts.gui: from calibre.gui2.main import main print_basic_debug_info() main(['calibre']) elif opts.gui_debug is not None: run_debug_gui(opts.gui_debug) elif opts.show_gui_debug: import time, re time.sleep(1) from calibre.gui2 import open_local_file if iswindows: with open(opts.show_gui_debug, 'r+b') as f: raw = f.read() raw = re.sub('(?<!\r)\n', '\r\n', raw) f.seek(0) f.truncate() f.write(raw) open_local_file(opts.show_gui_debug) elif opts.viewer: from calibre.gui2.viewer.main import main vargs = ['ebook-viewer', '--debug-javascript'] if len(args) > 1: vargs.append(args[-1]) main(vargs) elif opts.py_console: from calibre.utils.pyconsole.main import main main() elif opts.command: sys.argv = args exec opts.command elif opts.debug_device_driver: debug_device_driver() elif opts.add_simple_plugin is not None: add_simple_plugin(opts.add_simple_plugin) elif opts.paths: prints('CALIBRE_RESOURCES_PATH='+sys.resources_location) prints('CALIBRE_EXTENSIONS_PATH='+sys.extensions_location) prints('CALIBRE_PYTHON_PATH='+os.pathsep.join(sys.path)) elif opts.reinitialize_db is not None: sql_dump = None if len(args) > 1 and os.access(args[-1], os.R_OK): sql_dump = args[-1] reinit_db(opts.reinitialize_db, sql_dump=sql_dump) elif opts.inspect_mobi: from calibre.ebooks.mobi.debug.main import inspect_mobi for path in args[1:]: prints('Inspecting:', path) inspect_mobi(path) print elif opts.tweak_book: from calibre.ebooks.tweak import tweak tweak(opts.tweak_book) elif opts.test_build: from calibre.test_build import test test() elif opts.shutdown_running_calibre: from calibre.gui2.main import shutdown_other shutdown_other() else: from calibre import ipython ipython() return 0