from collections import OrderedDict as odict # noqa: F401 import os from shlex import split from tempfile import NamedTemporaryFile NoneType = type(None) primitive_types = (str, int, float, complex, bool, NoneType) def isiterable(obj): # and not a string from collections.abc import Iterable return not isinstance(obj, str) and isinstance(obj, Iterable) # shlex.split() is a poor function to use for anything general purpose (like calling subprocess). # It mishandles Unicode in Python 3 but all is not lost. We can escape it, then escape the escapes # then call shlex.split() then un-escape that. def shlex_split_unicode(to_split, posix=True): # shlex.split does its own un-escaping that we must counter. e_to_split = to_split.replace("\\", "\\\\") return split(e_to_split, posix=posix) def utf8_writer(fp): return fp def Utf8NamedTemporaryFile( mode="w+b", buffering=-1, newline=None, suffix=None, prefix=None, dir=None, delete=True ): if "CONDA_TEST_SAVE_TEMPS" in os.environ: delete = False encoding = None if "b" not in mode: encoding = "utf-8" return NamedTemporaryFile( mode=mode, buffering=buffering, encoding=encoding, newline=newline, suffix=suffix, prefix=prefix, dir=dir, delete=delete, )