diff --git a/setup/resources.py b/setup/resources.py index 0fe7a31ac3..63e1020d11 100644 --- a/setup/resources.py +++ b/setup/resources.py @@ -12,7 +12,7 @@ from itertools import chain is_ci = os.environ.get('CI', '').lower() == 'true' from setup import Command, basenames, __appname__, download_securely, dump_json -from polyglot.builtins import codepoint_to_chr, itervalues, iteritems, as_unicode_recursive +from polyglot.builtins import codepoint_to_chr, itervalues, iteritems, only_unicode_recursive def get_opts_from_parser(parser): @@ -358,7 +358,7 @@ class Resources(Command): # {{{ get_opts_from_parser(p)] with open(dest, 'wb') as f: - f.write(msgpack_dumps(as_unicode_recursive(complete))) + f.write(msgpack_dumps(only_unicode_recursive(complete))) self.info('\tCreating template-functions.json') dest = self.j(self.RESOURCES, 'template-functions.json') diff --git a/src/polyglot/builtins.py b/src/polyglot/builtins.py index aaf122dce8..f77828decb 100644 --- a/src/polyglot/builtins.py +++ b/src/polyglot/builtins.py @@ -32,15 +32,16 @@ def as_unicode(x, encoding='utf-8', errors='strict'): return unicode_type(x) -def as_unicode_recursive(x, encoding='utf-8', errors='strict'): +def only_unicode_recursive(x, encoding='utf-8', errors='strict'): + # Convert any bytestrings in lists/tuples/dicts to unicode if isinstance(x, bytes): return x.decode(encoding, 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) + return type(x)(only_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 {only_unicode_recursive(k, encoding, errors): only_unicode_recursive(v, encoding, errors) for k, v in iteritems(x)} return x