summaryrefslogtreecommitdiff
path: root/lib/spack/external/jsonschema/compat.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/spack/external/jsonschema/compat.py')
-rw-r--r--lib/spack/external/jsonschema/compat.py46
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