From cb66b03fe65bba5e8cfa44b0cdc6935d5923d2a7 Mon Sep 17 00:00:00 2001 From: Niyas Sait Date: Sun, 26 Sep 2021 09:36:25 +0100 Subject: Upgrade distlib to 0.3.3 (#10502) Co-authored-by: Niyas Sait --- ...d8390fd1-8c20-4ef8-bea3-ad6b2eb5b3a5.vendor.rst | 1 + setup.py | 9 ++++++- src/pip/_vendor/distlib/__init__.py | 2 +- src/pip/_vendor/distlib/compat.py | 26 +++++++++++---------- src/pip/_vendor/distlib/markers.py | 17 ++++++++++++++ src/pip/_vendor/distlib/scripts.py | 10 ++++++-- src/pip/_vendor/distlib/t64-arm.exe | Bin 0 -> 180736 bytes src/pip/_vendor/distlib/util.py | 4 ++++ src/pip/_vendor/distlib/version.py | 2 +- src/pip/_vendor/distlib/w64-arm.exe | Bin 0 -> 166400 bytes src/pip/_vendor/distlib/wheel.py | 5 +--- src/pip/_vendor/vendor.txt | 2 +- 12 files changed, 56 insertions(+), 22 deletions(-) create mode 100644 news/d8390fd1-8c20-4ef8-bea3-ad6b2eb5b3a5.vendor.rst create mode 100644 src/pip/_vendor/distlib/t64-arm.exe create mode 100644 src/pip/_vendor/distlib/w64-arm.exe diff --git a/news/d8390fd1-8c20-4ef8-bea3-ad6b2eb5b3a5.vendor.rst b/news/d8390fd1-8c20-4ef8-bea3-ad6b2eb5b3a5.vendor.rst new file mode 100644 index 000000000..9dc125923 --- /dev/null +++ b/news/d8390fd1-8c20-4ef8-bea3-ad6b2eb5b3a5.vendor.rst @@ -0,0 +1 @@ +Upgrade distlib to 0.3.3 diff --git a/setup.py b/setup.py index 75f5195cf..4e5ce3015 100644 --- a/setup.py +++ b/setup.py @@ -64,7 +64,14 @@ setup( "pip._vendor.certifi": ["*.pem"], "pip._vendor.requests": ["*.pem"], "pip._vendor.distlib._backport": ["sysconfig.cfg"], - "pip._vendor.distlib": ["t32.exe", "t64.exe", "w32.exe", "w64.exe"], + "pip._vendor.distlib": [ + "t32.exe", + "t64.exe", + "t64-arm.exe", + "w32.exe", + "w64.exe", + "w64-arm.exe", + ], }, entry_points={ "console_scripts": [ diff --git a/src/pip/_vendor/distlib/__init__.py b/src/pip/_vendor/distlib/__init__.py index 492c2c705..115494810 100644 --- a/src/pip/_vendor/distlib/__init__.py +++ b/src/pip/_vendor/distlib/__init__.py @@ -6,7 +6,7 @@ # import logging -__version__ = '0.3.2' +__version__ = '0.3.3' class DistlibException(Exception): pass diff --git a/src/pip/_vendor/distlib/compat.py b/src/pip/_vendor/distlib/compat.py index c316fd973..e59410695 100644 --- a/src/pip/_vendor/distlib/compat.py +++ b/src/pip/_vendor/distlib/compat.py @@ -48,17 +48,18 @@ if sys.version_info[0] < 3: # pragma: no cover from itertools import ifilter as filter from itertools import ifilterfalse as filterfalse - _userprog = None - def splituser(host): - """splituser('user[:passwd]@host[:port]') --> 'user[:passwd]', 'host[:port]'.""" - global _userprog - if _userprog is None: - import re - _userprog = re.compile('^(.*)@(.*)$') - - match = _userprog.match(host) - if match: return match.group(1, 2) - return None, host + # Leaving this around for now, in case it needs resurrecting in some way + # _userprog = None + # def splituser(host): + # """splituser('user[:passwd]@host[:port]') --> 'user[:passwd]', 'host[:port]'.""" + # global _userprog + # if _userprog is None: + # import re + # _userprog = re.compile('^(.*)@(.*)$') + + # match = _userprog.match(host) + # if match: return match.group(1, 2) + # return None, host else: # pragma: no cover from io import StringIO @@ -68,7 +69,7 @@ else: # pragma: no cover import builtins import configparser import shutil - from urllib.parse import (urlparse, urlunparse, urljoin, splituser, quote, + from urllib.parse import (urlparse, urlunparse, urljoin, quote, unquote, urlsplit, urlunsplit, splittype) from urllib.request import (urlopen, urlretrieve, Request, url2pathname, pathname2url, @@ -88,6 +89,7 @@ else: # pragma: no cover from itertools import filterfalse filter = filter + try: from ssl import match_hostname, CertificateError except ImportError: # pragma: no cover diff --git a/src/pip/_vendor/distlib/markers.py b/src/pip/_vendor/distlib/markers.py index 923a832b2..b43136fa1 100644 --- a/src/pip/_vendor/distlib/markers.py +++ b/src/pip/_vendor/distlib/markers.py @@ -13,19 +13,29 @@ Parser for the environment markers micro-language defined in PEP 508. # as ~= and === which aren't in Python, necessitating a different approach. import os +import re import sys import platform from .compat import string_types from .util import in_venv, parse_marker +from .version import NormalizedVersion as NV __all__ = ['interpret'] +_VERSION_PATTERN = re.compile(r'((\d+(\.\d+)*\w*)|\'(\d+(\.\d+)*\w*)\'|\"(\d+(\.\d+)*\w*)\")') + def _is_literal(o): if not isinstance(o, string_types) or not o: return False return o[0] in '\'"' +def _get_versions(s): + result = [] + for m in _VERSION_PATTERN.finditer(s): + result.append(NV(m.groups()[0])) + return set(result) + class Evaluator(object): """ This class is used to evaluate marker expessions. @@ -70,6 +80,13 @@ class Evaluator(object): lhs = self.evaluate(elhs, context) rhs = self.evaluate(erhs, context) + if ((elhs == 'python_version' or erhs == 'python_version') and + op in ('<', '<=', '>', '>=', '===', '==', '!=', '~=')): + lhs = NV(lhs) + rhs = NV(rhs) + elif elhs == 'python_version' and op in ('in', 'not in'): + lhs = NV(lhs) + rhs = _get_versions(rhs) result = self.operations[op](lhs, rhs) return result diff --git a/src/pip/_vendor/distlib/scripts.py b/src/pip/_vendor/distlib/scripts.py index 1ac01dde5..913912c7b 100644 --- a/src/pip/_vendor/distlib/scripts.py +++ b/src/pip/_vendor/distlib/scripts.py @@ -14,7 +14,7 @@ import sys from .compat import sysconfig, detect_encoding, ZipFile from .resources import finder from .util import (FileOperator, get_export_entry, convert_path, - get_executable, in_venv) + get_executable, get_platform, in_venv) logger = logging.getLogger(__name__) @@ -170,6 +170,11 @@ class ScriptMaker(object): sysconfig.get_config_var('BINDIR'), 'python%s%s' % (sysconfig.get_config_var('VERSION'), sysconfig.get_config_var('EXE'))) + if not os.path.isfile(executable): + # for Python builds from source on Windows, no Python executables with + # a version suffix are created, so we use python.exe + executable = os.path.join(sysconfig.get_config_var('BINDIR'), + 'python%s' % (sysconfig.get_config_var('EXE'))) if options: executable = self._get_alternate_executable(executable, options) @@ -379,7 +384,8 @@ class ScriptMaker(object): bits = '64' else: bits = '32' - name = '%s%s.exe' % (kind, bits) + platform_suffix = '-arm' if get_platform() == 'win-arm64' else '' + name = '%s%s%s.exe' % (kind, bits, platform_suffix) # Issue 31: don't hardcode an absolute package name, but # determine it relative to the current package distlib_package = __name__.rsplit('.', 1)[0] diff --git a/src/pip/_vendor/distlib/t64-arm.exe b/src/pip/_vendor/distlib/t64-arm.exe new file mode 100644 index 000000000..c5df4869d Binary files /dev/null and b/src/pip/_vendor/distlib/t64-arm.exe differ diff --git a/src/pip/_vendor/distlib/util.py b/src/pip/_vendor/distlib/util.py index b9e2c695c..80bfc864b 100644 --- a/src/pip/_vendor/distlib/util.py +++ b/src/pip/_vendor/distlib/util.py @@ -215,6 +215,10 @@ def parse_requirement(req): if not ver_remaining or ver_remaining[0] != ',': break ver_remaining = ver_remaining[1:].lstrip() + # Some packages have a trailing comma which would break things + # See issue #148 + if not ver_remaining: + break m = COMPARE_OP.match(ver_remaining) if not m: raise SyntaxError('invalid constraint: %s' % ver_remaining) diff --git a/src/pip/_vendor/distlib/version.py b/src/pip/_vendor/distlib/version.py index 86c069a7c..c7c8bb6ff 100644 --- a/src/pip/_vendor/distlib/version.py +++ b/src/pip/_vendor/distlib/version.py @@ -194,7 +194,7 @@ def _pep_440_key(s): if not groups[0]: epoch = 0 else: - epoch = int(groups[0]) + epoch = int(groups[0][:-1]) pre = groups[4:6] post = groups[7:9] dev = groups[10:12] diff --git a/src/pip/_vendor/distlib/w64-arm.exe b/src/pip/_vendor/distlib/w64-arm.exe new file mode 100644 index 000000000..70a2ec268 Binary files /dev/null and b/src/pip/_vendor/distlib/w64-arm.exe differ diff --git a/src/pip/_vendor/distlib/wheel.py b/src/pip/_vendor/distlib/wheel.py index 5262c8323..48abfde5b 100644 --- a/src/pip/_vendor/distlib/wheel.py +++ b/src/pip/_vendor/distlib/wheel.py @@ -47,10 +47,7 @@ else: VER_SUFFIX = sysconfig.get_config_var('py_version_nodot') if not VER_SUFFIX: # pragma: no cover - if sys.version_info[1] >= 10: - VER_SUFFIX = '%s_%s' % sys.version_info[:2] # PEP 641 (draft) - else: - VER_SUFFIX = '%s%s' % sys.version_info[:2] + VER_SUFFIX = '%s%s' % sys.version_info[:2] PYVER = 'py' + VER_SUFFIX IMPVER = IMP_PREFIX + VER_SUFFIX diff --git a/src/pip/_vendor/vendor.txt b/src/pip/_vendor/vendor.txt index ea0c213e7..991c3af8c 100644 --- a/src/pip/_vendor/vendor.txt +++ b/src/pip/_vendor/vendor.txt @@ -1,7 +1,7 @@ appdirs==1.4.4 CacheControl==0.12.6 colorama==0.4.4 -distlib==0.3.2 +distlib==0.3.3 distro==1.6.0 html5lib==1.1 msgpack==1.0.2 -- cgit v1.2.1