import sys


if sys.version_info[0] >= 3:
    BINARY_TYPE = bytes
    TEXT_TYPE = str
else:
    BINARY_TYPE = str
    TEXT_TYPE = unicode


def decode_if_byte_string(s, force_text=False):
    if isinstance(s, BINARY_TYPE):
        s = s.decode('utf-8')
    if force_text and not isinstance(s, TEXT_TYPE):
        s = TEXT_TYPE(s)
    return s


# Follow Django in treating URLs as UTF-8 encoded (which requires undoing the
# implicit ISO-8859-1 decoding applied in Python 3). Strictly speaking, URLs
# should only be ASCII anyway, but UTF-8 can be found in the wild.
if sys.version_info[0] >= 3:
    def decode_path_info(path_info):
        return path_info.encode('iso-8859-1', 'replace').decode('utf-8', 'replace')
else:
    def decode_path_info(path_info):
        return path_info.decode('utf-8', 'replace')


def ensure_leading_trailing_slash(path):
    path = (path or u'').strip(u'/')
    return u'/{0}/'.format(path) if path else u'/'
