1"""
2Python 2/3 compatibility helpers.
3
4Note: This module is *not* public API.
5"""
6import contextlib
7import operator
8import sys
9
10
11try:
12    from collections.abc import MutableMapping, Sequence  # noqa
13except ImportError:
14    from collections import MutableMapping, Sequence  # noqa
15
16PY3 = sys.version_info[0] >= 3
17
18if PY3:
19    zip = zip
20    from functools import lru_cache
21    from io import StringIO as NativeIO
22    from urllib.parse import (
23        unquote, urljoin, urlunsplit, SplitResult, urlsplit
24    )
25    from urllib.request import pathname2url, urlopen
26    str_types = str,
27    int_types = int,
28    iteritems = operator.methodcaller("items")
29else:
30    from itertools import izip as zip  # noqa
31    from io import BytesIO as NativeIO
32    from urlparse import urljoin, urlunsplit, SplitResult, urlsplit
33    from urllib import pathname2url, unquote  # noqa
34    import urllib2  # noqa
35    def urlopen(*args, **kwargs):
36        return contextlib.closing(urllib2.urlopen(*args, **kwargs))
37
38    str_types = basestring
39    int_types = int, long
40    iteritems = operator.methodcaller("iteritems")
41
42    from functools32 import lru_cache
43
44
45def urldefrag(url):
46    if "#" in url:
47        s, n, p, q, frag = urlsplit(url)
48        defrag = urlunsplit((s, n, p, q, ""))
49    else:
50        defrag = url
51        frag = ""
52    return defrag, frag
53
54
55# flake8: noqa
56