import sys PY2 = sys.version_info[0] == 2 PY3 = not PY2 if PY2: string_types = basestring, text_type = unicode else: string_types = str, text_type = str def text_(s, encoding='latin-1', errors='strict'): """ If ``s`` is an instance of ``bytes``, return ``s.decode(encoding, errors)``, otherwise return ``s``""" if isinstance(s, bytes): return s.decode(encoding, errors) return s # pragma: no cover if PY2: def is_nonstr_iter(v): return hasattr(v, '__iter__') else: def is_nonstr_iter(v): if isinstance(v, str): return False return hasattr(v, '__iter__') try: xrange = xrange except NameError: # pragma: no cover xrange = range try: from cPickle import loads, dumps, HIGHEST_PROTOCOL except ImportError: # pragma: no cover from pickle import loads, dumps, HIGHEST_PROTOCOL