diff --git a/ebook_converter/__init__.py b/ebook_converter/__init__.py index 328d81b..2d64421 100644 --- a/ebook_converter/__init__.py +++ b/ebook_converter/__init__.py @@ -19,6 +19,8 @@ from ebook_converter.constants_old import islinux, isfrozen, \ config_dir from ebook_converter.startup import winutil, winutilerror from ebook_converter.utils.icu import safe_chr +from ebook_converter.utils.terminal import Detect + if False: # Prevent pyflakes from complaining @@ -98,63 +100,32 @@ def prints(*args, **kwargs): Returns the number of bytes written. """ - file = kwargs.get('file', sys.stdout) - file = getattr(file, 'buffer', file) + fobj = kwargs.get('file', sys.stdout) enc = ('utf-8' if os.getenv('CALIBRE_WORKER') else constants_old.preferred_encoding) sep = kwargs.get('sep', ' ') - if not isinstance(sep, bytes): - sep = sep.encode(enc) + if isinstance(sep, bytes): + sep = sep.decode(enc) end = kwargs.get('end', '\n') - if not isinstance(end, bytes): - end = end.encode(enc) - safe_encode = kwargs.get('safe_encode', False) + if isinstance(end, bytes): + end = end.decode(enc) count = 0 - for i, arg in enumerate(args): - if isinstance(arg, str): - if constants_old.iswindows: - from ebook_converter.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 Exception: - if not safe_encode: - raise - arg = repr(arg) - if not isinstance(arg, bytes): - if isinstance(arg, str): - try: - arg = arg.encode(enc) - except UnicodeEncodeError: - try: - arg = arg.encode('utf-8') - except Exception: - if not safe_encode: - raise - arg = repr(arg) + for i, arg in enumerate(args): + if isinstance(arg, bytes): + arg = arg.decode(enc) + arg = repr(arg) try: - file.write(arg) + fobj.write(arg) count += len(arg) except Exception: - from polyglot import reprlib - arg = reprlib.repr(arg) - file.write(arg) + arg = repr(arg) + fobj.write(arg) count += len(arg) if i != len(args)-1: - file.write(sep) + fobj.write(sep) count += len(sep) - file.write(end) + fobj.write(end) count += len(end) return count @@ -316,7 +287,7 @@ def entity_to_unicode(match, exceptions=[], encoding='cp1252', return check(html5_entities[ent]) except KeyError: pass - from polyglot.html_entities import name2codepoint + from ebook_converter.polyglot.html_entities import name2codepoint try: return check(my_unichr(name2codepoint[ent])) except KeyError: diff --git a/ebook_converter/constants.py b/ebook_converter/constants.py index 156b29d..ac75cb0 100644 --- a/ebook_converter/constants.py +++ b/ebook_converter/constants.py @@ -1,3 +1,4 @@ +VERSION = '0.1.0' CALIBRE_NS = 'http://calibre.kovidgoyal.net/2009/metadata' DC09_NS = 'http://purl.org/metadata/dublin_core' DC10_NS = 'http://purl.org/dc/elements/1.0/' diff --git a/ebook_converter/constants_old.py b/ebook_converter/constants_old.py index b77da5a..7ecb772 100644 --- a/ebook_converter/constants_old.py +++ b/ebook_converter/constants_old.py @@ -5,7 +5,7 @@ import locale import os import sys -from ebook_converter.polyglot.builtins import environ_item, as_unicode +from ebook_converter.polyglot.builtins import environ_item __appname__ = 'calibre' numeric_version = (4, 12, 0) @@ -176,12 +176,8 @@ class Plugins(collections.Mapping): p = importlib.import_module(name) except Exception as err: p = None - try: - plugin_err = str(err) - except Exception: - plugin_err = as_unicode(err, encoding=preferred_encoding, errors='replace') + plugin_err = str(err) self._plugins[name] = p, plugin_err - # sys.path.remove(plugins_loc) def __iter__(self): return iter(self.plugins) @@ -199,9 +195,7 @@ class Plugins(collections.Mapping): return self._plugins[name] -plugins = None -if plugins is None: - plugins = Plugins() +plugins = Plugins() # }}} # config_dir {{{ diff --git a/ebook_converter/ebooks/conversion/plumber.py b/ebook_converter/ebooks/conversion/plumber.py index bfe0dcb..de00ef7 100644 --- a/ebook_converter/ebooks/conversion/plumber.py +++ b/ebook_converter/ebooks/conversion/plumber.py @@ -15,7 +15,8 @@ from ebook_converter.ptempfile import PersistentTemporaryDirectory from ebook_converter.utils.date import parse_date from ebook_converter.utils.zipfile import ZipFile from ebook_converter import extract, walk -from ebook_converter.constants_old import __version__, filesystem_encoding +from ebook_converter import constants +from ebook_converter.constants_old import filesystem_encoding DEBUG_README=b''' @@ -956,7 +957,7 @@ OptionRecommendation(name='search_replace', if self.opts.verbose > 1: self.log.debug('Resolved conversion options') try: - self.log.debug('ebook_converter version:', __version__) + self.log.debug('ebook_converter version:', constants.VERSION) odict = dict(self.opts.__dict__) for x in ('username', 'password'): odict.pop(x, None) diff --git a/ebook_converter/utils/config.py b/ebook_converter/utils/config.py index 08e39ab..911527c 100644 --- a/ebook_converter/utils/config.py +++ b/ebook_converter/utils/config.py @@ -5,6 +5,7 @@ import optparse import os from copy import deepcopy +from ebook_converter import constants from ebook_converter import constants_old from ebook_converter.utils.config_base import ( Config, ConfigInterface, ConfigProxy, Option, OptionSet, OptionValues, @@ -92,7 +93,7 @@ class OptionParser(optparse.OptionParser): else '/some path/with spaces') if version is None: version = '%%prog (%s %s)' % (constants_old.__appname__, - constants_old.get_version()) + constants.VERSION) optparse.OptionParser.__init__(self, usage=usage, version=version, epilog=epilog, formatter=CustomHelpFormatter(), conflict_handler=conflict_handler, **kwds)