diff options
Diffstat (limited to 'lib/spack/external/jsonschema/compat.py')
-rw-r--r-- | lib/spack/external/jsonschema/compat.py | 46 |
1 files changed, 24 insertions, 22 deletions
diff --git a/lib/spack/external/jsonschema/compat.py b/lib/spack/external/jsonschema/compat.py index 6ca49ab6be..47e0980455 100644 --- a/lib/spack/external/jsonschema/compat.py +++ b/lib/spack/external/jsonschema/compat.py @@ -1,52 +1,54 @@ -from __future__ import unicode_literals -import sys +""" +Python 2/3 compatibility helpers. + +Note: This module is *not* public API. +""" +import contextlib import operator +import sys + try: - from collections import MutableMapping, Sequence # noqa -except ImportError: from collections.abc import MutableMapping, Sequence # noqa +except ImportError: + from collections import MutableMapping, Sequence # noqa PY3 = sys.version_info[0] >= 3 if PY3: zip = zip - from io import StringIO + from functools import lru_cache + from io import StringIO as NativeIO from urllib.parse import ( - unquote, urljoin, urlunsplit, SplitResult, urlsplit as _urlsplit + unquote, urljoin, urlunsplit, SplitResult, urlsplit ) - from urllib.request import urlopen + from urllib.request import pathname2url, 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 + from io import BytesIO as NativeIO + from urlparse import urljoin, urlunsplit, SplitResult, urlsplit + from urllib import pathname2url, unquote # noqa + import urllib2 # noqa + def urlopen(*args, **kwargs): + return contextlib.closing(urllib2.urlopen(*args, **kwargs)) + str_types = basestring int_types = int, long iteritems = operator.methodcaller("iteritems") - -# 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) + from functools32 import lru_cache def urldefrag(url): if "#" in url: s, n, p, q, frag = urlsplit(url) - defrag = urlunsplit((s, n, p, q, '')) + defrag = urlunsplit((s, n, p, q, "")) else: defrag = url - frag = '' + frag = "" return defrag, frag |