def create_profile(): ans = getattr(create_profile, 'ans', None) if ans is None: ans = QWebEngineProfile(QApplication.instance()) osname = 'windows' if iswindows else ('macos' if isosx else 'linux') # DO NOT change the user agent as it is used to workaround # Qt bugs see workaround_qt_bug() in ajax.pyj ua = 'calibre-viewer {} {}'.format(__version__, osname) ans.setHttpUserAgent(ua) if is_running_from_develop: from calibre.utils.rapydscript import compile_viewer prints('Compiling viewer code...') compile_viewer() js = P('viewer.js', data=True, allow_user_override=False) translations_json = get_translations_data() or b'null' js = js.replace(b'__TRANSLATIONS_DATA__', translations_json, 1) if hasenv('CALIBRE_ENABLE_DEVELOP_MODE'): js = js.replace( b'__IN_DEVELOP_MODE__', os.environ['CALIBRE_ENABLE_DEVELOP_MODE'].encode('ascii')) insert_scripts(ans, create_script('viewer.js', js)) url_handler = UrlSchemeHandler(ans) ans.installUrlSchemeHandler(QByteArray(FAKE_PROTOCOL.encode('ascii')), url_handler) s = ans.settings() s.setDefaultTextEncoding('utf-8') s.setAttribute(s.LinksIncludedInFocusChain, False) create_profile.ans = ans return ans
def index(ctx, rd): ans_file = lopen(P('content-server/index-generated.html'), 'rb') if not hasenv('CALIBRE_ENABLE_DEVELOP_MODE'): return ans_file return ans_file.read().replace( b'__IN_DEVELOP_MODE__', os.environ['CALIBRE_ENABLE_DEVELOP_MODE'].encode('ascii'))
def setup_cli_handlers(logger, level): import logging if hasenv('CALIBRE_WORKER') and logger.handlers: return logger.setLevel(level) if level == logging.WARNING: handler = logging.StreamHandler(sys.stdout) handler.setFormatter(logging.Formatter('%(levelname)s: %(message)s')) handler.setLevel(logging.WARNING) elif level == logging.INFO: handler = logging.StreamHandler(sys.stdout) handler.setFormatter(logging.Formatter()) handler.setLevel(logging.INFO) elif level == logging.DEBUG: handler = logging.StreamHandler(sys.stderr) handler.setLevel(logging.DEBUG) handler.setFormatter(logging.Formatter('[%(levelname)s] %(filename)s:%(lineno)s: %(message)s')) logger.addHandler(handler)
''' _plat = sys.platform.lower() iswindows = 'win32' in _plat or 'win64' in _plat isosx = 'darwin' in _plat isnewosx = isosx and getattr(sys, 'new_app_bundle', False) isfreebsd = 'freebsd' in _plat isnetbsd = 'netbsd' in _plat isdragonflybsd = 'dragonfly' in _plat isbsd = isfreebsd or isnetbsd or isdragonflybsd ishaiku = 'haiku1' in _plat islinux = not(iswindows or isosx or isbsd or ishaiku) isfrozen = hasattr(sys, 'frozen') isunix = isosx or islinux or ishaiku isportable = hasenv('CALIBRE_PORTABLE_BUILD') ispy3 = sys.version_info.major > 2 isxp = isoldvista = False if iswindows: wver = sys.getwindowsversion() isxp = wver.major < 6 isoldvista = wver.build < 6002 is64bit = sys.maxsize > (1 << 32) isworker = hasenv('CALIBRE_WORKER') or hasenv('CALIBRE_SIMPLE_WORKER') if isworker: os.environ.pop(environ_item('CALIBRE_FORCE_ANSI'), None) FAKE_PROTOCOL, FAKE_HOST = 'https', 'calibre-internal.invalid' VIEWER_APP_UID = 'com.calibre-ebook.viewer' EDITOR_APP_UID = 'com.calibre-ebook.edit-book' MAIN_APP_UID = 'com.calibre-ebook.main-gui' try:
def prints(*args, **kwargs): ''' Print unicode arguments safely by encoding them to preferred_encoding Has the same signature as the print function from Python 3, except for the additional keyword argument safe_encode, which if set to True will cause the function to use repr when encoding fails. Returns the number of bytes written. ''' file = kwargs.get('file', sys.stdout) file = getattr(file, 'buffer', file) enc = 'utf-8' if hasenv('CALIBRE_WORKER') else preferred_encoding sep = kwargs.get('sep', ' ') if not isinstance(sep, bytes): sep = sep.encode(enc) end = kwargs.get('end', '\n') if not isinstance(end, bytes): end = end.encode(enc) safe_encode = kwargs.get('safe_encode', False) count = 0 for i, arg in enumerate(args): if isinstance(arg, unicode_type): if iswindows: from calibre.utils.terminal import Detect cs = Detect(file) if cs.is_console: cs.write_unicode_text(arg) count += len(arg) if i != len(args)-1: file.write(sep) count += len(sep) continue try: arg = arg.encode(enc) except UnicodeEncodeError: try: arg = arg.encode('utf-8') except: if not safe_encode: raise arg = repr(arg) if not isinstance(arg, bytes): try: arg = native_string_type(arg) except ValueError: arg = unicode_type(arg) if isinstance(arg, unicode_type): try: arg = arg.encode(enc) except UnicodeEncodeError: try: arg = arg.encode('utf-8') except: if not safe_encode: raise arg = repr(arg) try: file.write(arg) count += len(arg) except: from polyglot import reprlib arg = reprlib.repr(arg) file.write(arg) count += len(arg) if i != len(args)-1: file.write(sep) count += len(sep) file.write(end) count += len(end) return count
from __future__ import unicode_literals, print_function ''' E-book management software''' __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal <*****@*****.**>' __docformat__ = 'restructuredtext en' import sys, os, re, time, random, warnings from polyglot.builtins import codepoint_to_chr, unicode_type, range, hasenv, native_string_type from math import floor from functools import partial if not hasenv('CALIBRE_SHOW_DEPRECATION_WARNINGS'): warnings.simplefilter('ignore', DeprecationWarning) try: os.getcwd() except EnvironmentError: os.chdir(os.path.expanduser('~')) from calibre.constants import (iswindows, isosx, islinux, isfrozen, isbsd, preferred_encoding, __appname__, __version__, __author__, win32event, win32api, winerror, fcntl, ispy3, filesystem_encoding, plugins, config_dir) from calibre.startup import winutil, winutilerror from calibre.utils.icu import safe_chr if False: # Prevent pyflakes from complaining winutil, winutilerror, __appname__, islinux, __version__ fcntl, win32event, isfrozen, __author__ winerror, win32api, isbsd, config_dir
from __future__ import unicode_literals, print_function ''' E-book management software''' __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal <*****@*****.**>' __docformat__ = 'restructuredtext en' import sys, os, re, time, random, warnings from polyglot.builtins import codepoint_to_chr, unicode_type, range, hasenv, native_string_type from math import floor from functools import partial if not hasenv('CALIBRE_SHOW_DEPRECATION_WARNINGS'): warnings.simplefilter('ignore', DeprecationWarning) try: os.getcwd() except EnvironmentError: os.chdir(os.path.expanduser('~')) from calibre.constants import (iswindows, isosx, islinux, isfrozen, isbsd, preferred_encoding, __appname__, __version__, __author__, win32event, win32api, winerror, fcntl, filesystem_encoding, plugins, config_dir) from calibre.startup import winutil, winutilerror from calibre.utils.icu import safe_chr if False: # Prevent pyflakes from complaining winutil, winutilerror, __appname__, islinux, __version__ fcntl, win32event, isfrozen, __author__ winerror, win32api, isbsd, config_dir