import operator
|
|
import sys
|
|
|
|
|
|
try:
|
|
from collections import MutableMapping, Sequence # noqa
|
|
except ImportError:
|
|
from collections.abc import MutableMapping, Sequence # noqa
|
|
|
|
PY3 = sys.version_info[0] >= 3
|
|
|
|
if PY3:
|
|
zip = zip
|
|
from functools import lru_cache
|
|
from io import StringIO
|
|
from urllib.parse import (
|
|
unquote, urljoin, urlunsplit, SplitResult, urlsplit as _urlsplit
|
|
)
|
|
from urllib.request import urlopen
|
|
str_types = str,
|
|
int_types = int,
|
|
iteritems = operator.methodcaller("items")
|
|
else:
|
|
from itertools import izip as zip # noqa
|
|
from StringIO import StringIO
|
|
from urlparse import (
|
|
urljoin, urlunsplit, SplitResult, urlsplit as _urlsplit # noqa
|
|
)
|
|
from urllib import unquote # noqa
|
|
from urllib2 import urlopen # noqa
|
|
str_types = basestring
|
|
int_types = int, long
|
|
iteritems = operator.methodcaller("iteritems")
|
|
|
|
from functools32 import lru_cache
|
|
|
|
|
|
# On python < 3.3 fragments are not handled properly with unknown schemes
|
|
def urlsplit(url):
|
|
scheme, netloc, path, query, fragment = _urlsplit(url)
|
|
if "#" in path:
|
|
path, fragment = path.split("#", 1)
|
|
return SplitResult(scheme, netloc, path, query, fragment)
|
|
|
|
|
|
def urldefrag(url):
|
|
if "#" in url:
|
|
s, n, p, q, frag = urlsplit(url)
|
|
defrag = urlunsplit((s, n, p, q, ''))
|
|
else:
|
|
defrag = url
|
|
frag = ''
|
|
return defrag, frag
|
|
|
|
|
|
# flake8: noqa
|