Ensure completion dict for ebook-convert has unicode strings

This commit is contained in:
Kovid Goyal 2019-04-29 20:48:52 +05:30
parent f6e709d430
commit ed2e2e060f
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 14 additions and 2 deletions

View File

@ -12,7 +12,7 @@ from itertools import chain
is_ci = os.environ.get('CI', '').lower() == 'true' is_ci = os.environ.get('CI', '').lower() == 'true'
from setup import Command, basenames, __appname__, download_securely, dump_json from setup import Command, basenames, __appname__, download_securely, dump_json
from polyglot.builtins import codepoint_to_chr, itervalues, iteritems from polyglot.builtins import codepoint_to_chr, itervalues, iteritems, as_unicode_recursive
def get_opts_from_parser(parser): def get_opts_from_parser(parser):
@ -358,7 +358,7 @@ class Resources(Command): # {{{
get_opts_from_parser(p)] get_opts_from_parser(p)]
with open(dest, 'wb') as f: with open(dest, 'wb') as f:
f.write(msgpack_dumps(complete)) f.write(msgpack_dumps(as_unicode_recursive(complete)))
self.info('\tCreating template-functions.json') self.info('\tCreating template-functions.json')
dest = self.j(self.RESOURCES, 'template-functions.json') dest = self.j(self.RESOURCES, 'template-functions.json')

View File

@ -35,6 +35,18 @@ def as_unicode(x, encoding='utf-8', errors='strict'):
return unicode_type(x) return unicode_type(x)
def as_unicode_recursive(x, encoding='utf-8', errors='strict'):
if isinstance(x, bytes):
return x.decode(x, errors)
if isinstance(x, unicode_type):
return x
if isinstance(x, (list, tuple)):
return type(x)(as_unicode_recursive(i, encoding, errors) for i in x)
if isinstance(x, dict):
return {as_unicode_recursive(k, encoding, errors): as_unicode_recursive(v, encoding, errors) for k, v in iteritems(x)}
return x
if is_py3: if is_py3:
def reraise(tp, value, tb=None): def reraise(tp, value, tb=None):
try: try: