aboutsummaryrefslogtreecommitdiffstats
path: root/jython-tosca-parser/src/main/resources/Lib/site-packages/pip/backwardcompat/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'jython-tosca-parser/src/main/resources/Lib/site-packages/pip/backwardcompat/__init__.py')
-rw-r--r--jython-tosca-parser/src/main/resources/Lib/site-packages/pip/backwardcompat/__init__.py168
1 files changed, 168 insertions, 0 deletions
diff --git a/jython-tosca-parser/src/main/resources/Lib/site-packages/pip/backwardcompat/__init__.py b/jython-tosca-parser/src/main/resources/Lib/site-packages/pip/backwardcompat/__init__.py
new file mode 100644
index 0000000..6384f9e
--- /dev/null
+++ b/jython-tosca-parser/src/main/resources/Lib/site-packages/pip/backwardcompat/__init__.py
@@ -0,0 +1,168 @@
+"""Stuff that differs in different Python versions and platform
+distributions."""
+
+# flake8: noqa
+
+import os
+import imp
+import sys
+import site
+
+__all__ = ['WindowsError']
+
+uses_pycache = hasattr(imp, 'cache_from_source')
+
+
+class NeverUsedException(Exception):
+ """this exception should never be raised"""
+
+try:
+ WindowsError = WindowsError
+except NameError:
+ WindowsError = NeverUsedException
+
+try:
+ #new in Python 3.3
+ PermissionError = PermissionError
+except NameError:
+ PermissionError = NeverUsedException
+
+console_encoding = sys.__stdout__.encoding
+
+
+try:
+ unicode
+
+ def binary(s):
+ if isinstance(s, unicode):
+ return s.encode('ascii')
+ return s
+except NameError:
+ def binary(s):
+ if isinstance(s, str):
+ return s.encode('ascii')
+
+
+if sys.version_info >= (3,):
+ from io import StringIO, BytesIO
+ from functools import reduce
+ from urllib.error import URLError, HTTPError
+ from queue import Queue, Empty
+ from urllib.request import url2pathname, urlretrieve, pathname2url
+ from email import message as emailmessage
+ import urllib.parse as urllib
+ import urllib.request as urllib2
+ import configparser as ConfigParser
+ import xmlrpc.client as xmlrpclib
+ import urllib.parse as urlparse
+ import http.client as httplib
+
+ def cmp(a, b):
+ return (a > b) - (a < b)
+
+ def b(s):
+ return s.encode('utf-8')
+
+ def u(s):
+ return s.decode('utf-8')
+
+ def console_to_str(s):
+ try:
+ return s.decode(console_encoding)
+ except UnicodeDecodeError:
+ return s.decode('utf_8')
+
+ def get_http_message_param(http_message, param, default_value):
+ return http_message.get_param(param, default_value)
+
+ bytes = bytes
+ string_types = (str,)
+ raw_input = input
+else:
+ from cStringIO import StringIO
+ from urllib2 import URLError, HTTPError
+ from Queue import Queue, Empty
+ from urllib import url2pathname, urlretrieve, pathname2url
+ from email import Message as emailmessage
+ import urllib
+ import urllib2
+ import urlparse
+ import ConfigParser
+ import xmlrpclib
+ import httplib
+
+ def b(s):
+ return s
+
+ def u(s):
+ return s
+
+ def console_to_str(s):
+ return s
+
+ def get_http_message_param(http_message, param, default_value):
+ result = http_message.getparam(param)
+ return result or default_value
+
+ bytes = str
+ string_types = (basestring,)
+ reduce = reduce
+ cmp = cmp
+ raw_input = raw_input
+ BytesIO = StringIO
+
+
+from distutils.sysconfig import get_python_lib, get_python_version
+
+#site.USER_SITE was created in py2.6
+user_site = getattr(site, 'USER_SITE', None)
+
+
+def product(*args, **kwds):
+ # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
+ # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
+ pools = list(map(tuple, args)) * kwds.get('repeat', 1)
+ result = [[]]
+ for pool in pools:
+ result = [x + [y] for x in result for y in pool]
+ for prod in result:
+ yield tuple(prod)
+
+
+def get_path_uid(path):
+ """
+ Return path's uid.
+
+ Does not follow symlinks:
+ https://github.com/pypa/pip/pull/935#discussion_r5307003
+
+ Placed this function in backwardcompat due to differences on AIX and
+ Jython, that should eventually go away.
+
+ :raises OSError: When path is a symlink or can't be read.
+ """
+ if hasattr(os, 'O_NOFOLLOW'):
+ fd = os.open(path, os.O_RDONLY | os.O_NOFOLLOW)
+ file_uid = os.fstat(fd).st_uid
+ os.close(fd)
+ else: # AIX and Jython
+ # WARNING: time of check vulnerabity, but best we can do w/o NOFOLLOW
+ if not os.path.islink(path):
+ # older versions of Jython don't have `os.fstat`
+ file_uid = os.stat(path).st_uid
+ else:
+ # raise OSError for parity with os.O_NOFOLLOW above
+ raise OSError(
+ "%s is a symlink; Will not return uid for symlinks" % path
+ )
+ return file_uid
+
+
+# packages in the stdlib that may have installation metadata, but should not be
+# considered 'installed'. this theoretically could be determined based on
+# dist.location (py27:`sysconfig.get_paths()['stdlib']`,
+# py26:sysconfig.get_config_vars('LIBDEST')), but fear platform variation may
+# make this ineffective, so hard-coding
+stdlib_pkgs = ['python', 'wsgiref']
+if sys.version_info >= (2, 7):
+ stdlib_pkgs.extend(['argparse'])