From 698362b7a15b4b3ff2c88f756fe7a464884cac74 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 2 May 2013 20:24:33 +0530 Subject: [PATCH] Delay load playform nad utils.config --- src/calibre/customize/builtins.py | 2 +- src/calibre/devices/apple/driver.py | 7 +++-- src/calibre/devices/kobo/books.py | 2 +- src/calibre/devices/kobo/driver.py | 8 +++--- src/calibre/devices/mtp/driver.py | 3 +- .../devices/smart_device_app/driver.py | 3 +- src/calibre/devices/usbms/books.py | 3 +- src/calibre/devices/usbms/deviceconfig.py | 2 +- src/calibre/devices/usbms/driver.py | 2 +- src/calibre/ebooks/metadata/__init__.py | 2 +- src/calibre/ebooks/metadata/sources/base.py | 18 +----------- src/calibre/ebooks/metadata/sources/covers.py | 3 +- .../ebooks/metadata/sources/identify.py | 3 +- src/calibre/ebooks/metadata/sources/prefs.py | 28 +++++++++++++++++++ src/calibre/ebooks/metadata/sources/test.py | 4 +-- src/calibre/gui2/metadata/single.py | 2 +- .../gui2/preferences/metadata_sources.py | 2 +- src/calibre/library/catalogs/epub_mobi.py | 2 +- src/calibre/library/field_metadata.py | 2 +- src/calibre/library/server/__init__.py | 2 +- 20 files changed, 60 insertions(+), 40 deletions(-) create mode 100644 src/calibre/ebooks/metadata/sources/prefs.py diff --git a/src/calibre/customize/builtins.py b/src/calibre/customize/builtins.py index d34c21d825..5fdddbf190 100644 --- a/src/calibre/customize/builtins.py +++ b/src/calibre/customize/builtins.py @@ -1762,7 +1762,7 @@ if __name__ == '__main__': for x in ('lxml', 'calibre.ebooks.BeautifulSoup', 'uuid', 'calibre.utils.terminal', 'calibre.utils.magick', 'PIL', 'Image', 'sqlite3', 'mechanize', 'httplib', 'xml', 'inspect', 'urllib', - 'calibre.utils.date'): + 'calibre.utils.date', 'calibre.utils.config', 'platform'): if x in sys.modules: ret = 1 print (x, 'has been loaded by a plugin') diff --git a/src/calibre/devices/apple/driver.py b/src/calibre/devices/apple/driver.py index 1bedd298a9..e4b21fce8f 100644 --- a/src/calibre/devices/apple/driver.py +++ b/src/calibre/devices/apple/driver.py @@ -5,7 +5,7 @@ __copyright__ = '2010, Gregory Riker' __docformat__ = 'restructuredtext en' -import cStringIO, ctypes, datetime, os, platform, re, shutil, sys, tempfile, time +import cStringIO, ctypes, datetime, os, re, shutil, sys, tempfile, time from calibre import fit_image, confirm_config_name, strftime as _strftime from calibre.constants import ( @@ -17,7 +17,7 @@ from calibre.devices.interface import DevicePlugin from calibre.ebooks.metadata import (author_to_author_sort, authors_to_string, MetaInformation, title_sort) from calibre.ebooks.metadata.book.base import Metadata -from calibre.utils.config import config_dir, dynamic, prefs +from calibre.utils.config_base import config_dir, prefs from calibre.utils.zipfile import ZipFile DEBUG = CALIBRE_DEBUG @@ -96,6 +96,7 @@ class AppleOpenFeedback(OpenFeedback): def do_it(self, return_code): from calibre.utils.logging import default_log + from calibre.utils.config import dynamic if return_code == self.Accepted: default_log.info(" Apple driver ENABLED") dynamic[confirm_config_name(self.cd.plugin.DISPLAY_DISABLE_DIALOG)] = False @@ -882,6 +883,7 @@ class ITUNES(DriverBase): if False: # Display a dialog recommending using 'Connect to iTunes' if user hasn't # previously disabled the dialog + from calibre.utils.config import dynamic if dynamic.get(confirm_config_name(self.DISPLAY_DISABLE_DIALOG), True): raise AppleOpenFeedback(self) else: @@ -2480,6 +2482,7 @@ class ITUNES(DriverBase): ''' if DEBUG: + import platform logger().info(" %s %s" % (__appname__, __version__)) logger().info(" [OSX %s, %s %s (%s), %s driver version %d.%d.%d]" % (platform.mac_ver()[0], diff --git a/src/calibre/devices/kobo/books.py b/src/calibre/devices/kobo/books.py index 7e552e8de1..5a76ec2f63 100644 --- a/src/calibre/devices/kobo/books.py +++ b/src/calibre/devices/kobo/books.py @@ -10,7 +10,7 @@ from calibre.utils.icu import sort_key from calibre.devices.usbms.books import Book as Book_ from calibre.devices.usbms.books import CollectionsBookList -from calibre.utils.config import prefs +from calibre.utils.config_base import prefs from calibre.devices.usbms.driver import debug_print from calibre.ebooks.metadata import author_to_author_sort diff --git a/src/calibre/devices/kobo/driver.py b/src/calibre/devices/kobo/driver.py index c4864c92e7..7c980432f0 100644 --- a/src/calibre/devices/kobo/driver.py +++ b/src/calibre/devices/kobo/driver.py @@ -26,7 +26,7 @@ from calibre.devices.usbms.driver import USBMS, debug_print from calibre import prints from calibre.ptempfile import PersistentTemporaryFile from calibre.constants import DEBUG -from calibre.utils.config import prefs +from calibre.utils.config_base import prefs class KOBO(USBMS): @@ -1193,7 +1193,7 @@ class KOBO(USBMS): db.set_comment(db_id, mi.comments) # Add bookmark file to db_id - # NOTE: As it is, this copied the book from the device back to the library. That meant it replaced the + # NOTE: As it is, this copied the book from the device back to the library. That meant it replaced the # existing file. Taking this out for that reason, but some books have a ANNOT file that could be # copied. # db.add_format_with_hooks(db_id, bm.value.bookmark_extension, @@ -1212,10 +1212,10 @@ class KOBOTOUCH(KOBO): min_dbversion_series = 65 min_dbversion_archive = 71 min_dbversion_images_on_sdcard = 77 - + max_supported_fwversion = (2,5,1) min_fwversion_images_on_sdcard = (2,4,1) - + has_kepubs = True booklist_class = KTCollectionsBookList diff --git a/src/calibre/devices/mtp/driver.py b/src/calibre/devices/mtp/driver.py index 20a637a317..f0e532639a 100644 --- a/src/calibre/devices/mtp/driver.py +++ b/src/calibre/devices/mtp/driver.py @@ -17,7 +17,6 @@ from calibre.devices.errors import PathError from calibre.devices.mtp.base import debug from calibre.devices.mtp.defaults import DeviceDefaults from calibre.ptempfile import SpooledTemporaryFile, PersistentTemporaryDirectory -from calibre.utils.config import from_json, to_json, JSONConfig from calibre.utils.filenames import shorten_components_to BASE = importlib.import_module('calibre.devices.mtp.%s.driver'%( @@ -56,6 +55,7 @@ class MTP_DEVICE(BASE): @property def prefs(self): + from calibre.utils.config import JSONConfig if self._prefs is None: self._prefs = p = JSONConfig('mtp_devices') p.defaults['format_map'] = self.FORMATS @@ -129,6 +129,7 @@ class MTP_DEVICE(BASE): # Device information {{{ def _update_drive_info(self, storage, location_code, name=None): from calibre.utils.date import isoformat, now + from calibre.utils.config import from_json, to_json import uuid f = storage.find_path((self.DRIVEINFO,)) dinfo = {} diff --git a/src/calibre/devices/smart_device_app/driver.py b/src/calibre/devices/smart_device_app/driver.py index 1c41e2c585..6187f94b31 100644 --- a/src/calibre/devices/smart_device_app/driver.py +++ b/src/calibre/devices/smart_device_app/driver.py @@ -34,7 +34,7 @@ from calibre.library import current_library_name from calibre.library.server import server_config as content_server_config from calibre.ptempfile import PersistentTemporaryFile from calibre.utils.ipc import eintr_retry_call -from calibre.utils.config import from_json, tweaks +from calibre.utils.config_base import tweaks from calibre.utils.filenames import ascii_filename as sanitize, shorten_components_to from calibre.utils.mdns import (publish as publish_zeroconf, unpublish as unpublish_zeroconf, get_all_ips) @@ -594,6 +594,7 @@ class SMART_DEVICE_APP(DeviceConfig, DevicePlugin): raise ControlError(desc='Device responded with incorrect information') def _receive_from_client(self, print_debug_info=True): + from calibre.utils.config import from_json extra_debug = self.settings().extra_customization[self.OPT_EXTRA_DEBUG] try: v = self._read_string_from_net() diff --git a/src/calibre/devices/usbms/books.py b/src/calibre/devices/usbms/books.py index 509e8a1019..bbbb3938ac 100644 --- a/src/calibre/devices/usbms/books.py +++ b/src/calibre/devices/usbms/books.py @@ -12,7 +12,7 @@ from calibre.devices.mime import mime_type_ext from calibre.devices.interface import BookList as _BookList from calibre.constants import preferred_encoding from calibre import isbytestring, force_unicode -from calibre.utils.config import device_prefs, tweaks +from calibre.utils.config_base import tweaks from calibre.utils.icu import sort_key class Book(Metadata): @@ -124,6 +124,7 @@ class CollectionsBookList(BookList): def get_collections(self, collection_attributes): from calibre.devices.usbms.driver import debug_print + from calibre.utils.config import device_prefs debug_print('Starting get_collections:', device_prefs['manage_device_metadata']) debug_print('Renaming rules:', tweaks['sony_collection_renaming_rules']) debug_print('Formatting template:', tweaks['sony_collection_name_template']) diff --git a/src/calibre/devices/usbms/deviceconfig.py b/src/calibre/devices/usbms/deviceconfig.py index 2aac9fb769..b2eadd7461 100644 --- a/src/calibre/devices/usbms/deviceconfig.py +++ b/src/calibre/devices/usbms/deviceconfig.py @@ -4,7 +4,7 @@ __license__ = 'GPL 3' __copyright__ = '2009, John Schember ' __docformat__ = 'restructuredtext en' -from calibre.utils.config import Config, ConfigProxy +from calibre.utils.config_base import Config, ConfigProxy class DeviceConfig(object): diff --git a/src/calibre/devices/usbms/driver.py b/src/calibre/devices/usbms/driver.py index 3b4fe434e5..f367e549e2 100644 --- a/src/calibre/devices/usbms/driver.py +++ b/src/calibre/devices/usbms/driver.py @@ -20,7 +20,6 @@ from calibre.devices.usbms.cli import CLI from calibre.devices.usbms.device import Device from calibre.devices.usbms.books import BookList, Book from calibre.ebooks.metadata.book.json_codec import JsonCodec -from calibre.utils.config import from_json, to_json BASE_TIME = None def debug_print(*args): @@ -75,6 +74,7 @@ class USBMS(CLI, Device): return dinfo def _update_driveinfo_file(self, prefix, location_code, name=None): + from calibre.utils.config import from_json, to_json if os.path.exists(os.path.join(prefix, self.DRIVEINFO)): with open(os.path.join(prefix, self.DRIVEINFO), 'rb') as f: try: diff --git a/src/calibre/ebooks/metadata/__init__.py b/src/calibre/ebooks/metadata/__init__.py index 0e04874e6d..13b0b7daa5 100644 --- a/src/calibre/ebooks/metadata/__init__.py +++ b/src/calibre/ebooks/metadata/__init__.py @@ -11,7 +11,7 @@ from urlparse import urlparse from calibre import relpath, guess_type, remove_bracketed_text, prints -from calibre.utils.config import tweaks +from calibre.utils.config_base import tweaks try: _author_pat = re.compile(tweaks['authors_split_regex']) diff --git a/src/calibre/ebooks/metadata/sources/base.py b/src/calibre/ebooks/metadata/sources/base.py index cb2729fe1c..2d3053bd5f 100644 --- a/src/calibre/ebooks/metadata/sources/base.py +++ b/src/calibre/ebooks/metadata/sources/base.py @@ -12,26 +12,9 @@ from future_builtins import map from calibre import browser, random_user_agent from calibre.customize import Plugin -from calibre.utils.config import JSONConfig from calibre.utils.icu import capitalize, lower, upper from calibre.ebooks.metadata import check_isbn -msprefs = JSONConfig('metadata_sources/global.json') -msprefs.defaults['txt_comments'] = False -msprefs.defaults['ignore_fields'] = [] -msprefs.defaults['user_default_ignore_fields'] = [] -msprefs.defaults['max_tags'] = 20 -msprefs.defaults['wait_after_first_identify_result'] = 30 # seconds -msprefs.defaults['wait_after_first_cover_result'] = 60 # seconds -msprefs.defaults['swap_author_names'] = False -msprefs.defaults['fewer_tags'] = True -msprefs.defaults['find_first_edition_date'] = False - -# Google covers are often poor quality (scans/errors) but they have high -# resolution, so they trump covers from better sources. So make sure they -# are only used if no other covers are found. -msprefs.defaults['cover_priorities'] = {'Google':2, 'Google Images':2, 'Big Book Search':2} - def create_log(ostream=None): from calibre.utils.logging import ThreadSafeLog, FileStream log = ThreadSafeLog(level=ThreadSafeLog.DEBUG) @@ -263,6 +246,7 @@ class Source(Plugin): @property def prefs(self): if self._config_obj is None: + from calibre.utils.config import JSONConfig self._config_obj = JSONConfig('metadata_sources/%s.json'%self.name) return self._config_obj # }}} diff --git a/src/calibre/ebooks/metadata/sources/covers.py b/src/calibre/ebooks/metadata/sources/covers.py index 2df716253b..bae9203f70 100644 --- a/src/calibre/ebooks/metadata/sources/covers.py +++ b/src/calibre/ebooks/metadata/sources/covers.py @@ -13,7 +13,8 @@ from threading import Thread, Event from io import BytesIO from calibre.customize.ui import metadata_plugins -from calibre.ebooks.metadata.sources.base import msprefs, create_log +from calibre.ebooks.metadata.sources.base import create_log +from calibre.ebooks.metadata.sources.prefs import msprefs from calibre.utils.magick.draw import Image, save_cover_data_to class Worker(Thread): diff --git a/src/calibre/ebooks/metadata/sources/identify.py b/src/calibre/ebooks/metadata/sources/identify.py index 4a214d4e66..71055ff099 100644 --- a/src/calibre/ebooks/metadata/sources/identify.py +++ b/src/calibre/ebooks/metadata/sources/identify.py @@ -16,7 +16,8 @@ from operator import attrgetter from urlparse import urlparse from calibre.customize.ui import metadata_plugins, all_metadata_plugins -from calibre.ebooks.metadata.sources.base import create_log, msprefs +from calibre.ebooks.metadata.sources.base import create_log +from calibre.ebooks.metadata.sources.prefs import msprefs from calibre.ebooks.metadata.xisbn import xisbn from calibre.ebooks.metadata.book.base import Metadata from calibre.utils.date import utc_tz, as_utc diff --git a/src/calibre/ebooks/metadata/sources/prefs.py b/src/calibre/ebooks/metadata/sources/prefs.py new file mode 100644 index 0000000000..39e0933b3b --- /dev/null +++ b/src/calibre/ebooks/metadata/sources/prefs.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8 +from __future__ import (unicode_literals, division, absolute_import, + print_function) + +__license__ = 'GPL v3' +__copyright__ = '2013, Kovid Goyal ' + +from calibre.utils.config import JSONConfig + +msprefs = JSONConfig('metadata_sources/global.json') +msprefs.defaults['txt_comments'] = False +msprefs.defaults['ignore_fields'] = [] +msprefs.defaults['user_default_ignore_fields'] = [] +msprefs.defaults['max_tags'] = 20 +msprefs.defaults['wait_after_first_identify_result'] = 30 # seconds +msprefs.defaults['wait_after_first_cover_result'] = 60 # seconds +msprefs.defaults['swap_author_names'] = False +msprefs.defaults['fewer_tags'] = True +msprefs.defaults['find_first_edition_date'] = False + +# Google covers are often poor quality (scans/errors) but they have high +# resolution, so they trump covers from better sources. So make sure they +# are only used if no other covers are found. +msprefs.defaults['cover_priorities'] = {'Google':2, 'Google Images':2, 'Big Book Search':2} + + + diff --git a/src/calibre/ebooks/metadata/sources/test.py b/src/calibre/ebooks/metadata/sources/test.py index 7c790a2c0c..52a4082b31 100644 --- a/src/calibre/ebooks/metadata/sources/test.py +++ b/src/calibre/ebooks/metadata/sources/test.py @@ -14,8 +14,8 @@ from threading import Event from calibre.customize.ui import all_metadata_plugins from calibre import prints, sanitize_file_name2 from calibre.ebooks.metadata import check_isbn -from calibre.ebooks.metadata.sources.base import (create_log, - get_cached_cover_urls, msprefs) +from calibre.ebooks.metadata.sources.base import create_log, get_cached_cover_urls +from calibre.ebooks.metadata.sources.prefs import msprefs def isbn_test(isbn): isbn_ = check_isbn(isbn) diff --git a/src/calibre/gui2/metadata/single.py b/src/calibre/gui2/metadata/single.py index e254b711cc..1593c977ff 100644 --- a/src/calibre/gui2/metadata/single.py +++ b/src/calibre/gui2/metadata/single.py @@ -421,7 +421,7 @@ class MetadataSingleDialogBase(ResizableDialog): ret = d.start(title=self.title.current_val, authors=self.authors.current_val, identifiers=self.identifiers.current_val) if ret == d.Accepted: - from calibre.ebooks.metadata.sources.base import msprefs + from calibre.ebooks.metadata.sources.prefs import msprefs mi = d.book dummy = Metadata(_('Unknown')) for f in msprefs['ignore_fields']: diff --git a/src/calibre/gui2/preferences/metadata_sources.py b/src/calibre/gui2/preferences/metadata_sources.py index db4d4a01e9..c091203824 100644 --- a/src/calibre/gui2/preferences/metadata_sources.py +++ b/src/calibre/gui2/preferences/metadata_sources.py @@ -14,7 +14,7 @@ from PyQt4.Qt import (QAbstractTableModel, Qt, QAbstractListModel, QWidget, from calibre.gui2.preferences import ConfigWidgetBase, test_widget from calibre.gui2.preferences.metadata_sources_ui import Ui_Form -from calibre.ebooks.metadata.sources.base import msprefs +from calibre.ebooks.metadata.sources.prefs import msprefs from calibre.customize.ui import (all_metadata_plugins, is_disabled, enable_plugin, disable_plugin, default_disabled_plugins) from calibre.gui2 import NONE, error_dialog, question_dialog diff --git a/src/calibre/library/catalogs/epub_mobi.py b/src/calibre/library/catalogs/epub_mobi.py index d7c24f8a97..4984fbf9e2 100644 --- a/src/calibre/library/catalogs/epub_mobi.py +++ b/src/calibre/library/catalogs/epub_mobi.py @@ -17,7 +17,6 @@ from calibre.ebooks import calibre_cover from calibre.library import current_library_name from calibre.library.catalogs import AuthorSortMismatchException, EmptyCatalogException from calibre.ptempfile import PersistentTemporaryFile -from calibre.utils.config import JSONConfig from calibre.utils.localization import calibre_langcode_to_name, canonicalize_lang, get_lang Option = namedtuple('Option', 'option, default, dest, action, help') @@ -191,6 +190,7 @@ class EPUB_MOBI(CatalogPlugin): def run(self, path_to_output, opts, db, notification=DummyReporter()): from calibre.library.catalogs.epub_mobi_builder import CatalogBuilder from calibre.utils.logging import default_log as log + from calibre.utils.config import JSONConfig # If preset specified from the cli, insert stored options from JSON file if hasattr(opts, 'preset') and opts.preset: diff --git a/src/calibre/library/field_metadata.py b/src/calibre/library/field_metadata.py index 105b66a677..08c26e95a9 100644 --- a/src/calibre/library/field_metadata.py +++ b/src/calibre/library/field_metadata.py @@ -6,7 +6,7 @@ Created on 25 May 2010 import copy, traceback from collections import OrderedDict -from calibre.utils.config import tweaks +from calibre.utils.config_base import tweaks class TagsIcons(dict): ''' diff --git a/src/calibre/library/server/__init__.py b/src/calibre/library/server/__init__.py index 56429c44d0..2a08c0b9b7 100644 --- a/src/calibre/library/server/__init__.py +++ b/src/calibre/library/server/__init__.py @@ -7,7 +7,7 @@ __docformat__ = 'restructuredtext en' import os -from calibre.utils.config import Config, StringConfig, config_dir, tweaks +from calibre.utils.config_base import Config, StringConfig, config_dir, tweaks listen_on = tweaks['server_listen_on']