mirror of
https://github.com/pypa/pip
synced 2023-12-13 21:30:23 +01:00
Upgrade distlib to 0.2.9.post0
This commit is contained in:
parent
0d45b3cc4c
commit
3f85093d6d
1
news/distlib.vendor
Normal file
1
news/distlib.vendor
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Upgrade distlib to 0.2.9.post0
|
|
@ -1,12 +1,12 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
# Copyright (C) 2012-2017 Vinay Sajip.
|
# Copyright (C) 2012-2019 Vinay Sajip.
|
||||||
# Licensed to the Python Software Foundation under a contributor agreement.
|
# Licensed to the Python Software Foundation under a contributor agreement.
|
||||||
# See LICENSE.txt and CONTRIBUTORS.txt.
|
# See LICENSE.txt and CONTRIBUTORS.txt.
|
||||||
#
|
#
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
__version__ = '0.2.8'
|
__version__ = '0.2.9.post0'
|
||||||
|
|
||||||
class DistlibException(Exception):
|
class DistlibException(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -22,7 +22,7 @@ from .util import cached_property, zip_dir, ServerProxy
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
DEFAULT_INDEX = 'https://pypi.python.org/pypi'
|
DEFAULT_INDEX = 'https://pypi.org/pypi'
|
||||||
DEFAULT_REALM = 'pypi'
|
DEFAULT_REALM = 'pypi'
|
||||||
|
|
||||||
class PackageIndex(object):
|
class PackageIndex(object):
|
||||||
|
|
|
@ -36,7 +36,7 @@ logger = logging.getLogger(__name__)
|
||||||
HASHER_HASH = re.compile(r'^(\w+)=([a-f0-9]+)')
|
HASHER_HASH = re.compile(r'^(\w+)=([a-f0-9]+)')
|
||||||
CHARSET = re.compile(r';\s*charset\s*=\s*(.*)\s*$', re.I)
|
CHARSET = re.compile(r';\s*charset\s*=\s*(.*)\s*$', re.I)
|
||||||
HTML_CONTENT_TYPE = re.compile('text/html|application/x(ht)?ml')
|
HTML_CONTENT_TYPE = re.compile('text/html|application/x(ht)?ml')
|
||||||
DEFAULT_INDEX = 'https://pypi.python.org/pypi'
|
DEFAULT_INDEX = 'https://pypi.org/pypi'
|
||||||
|
|
||||||
def get_all_distribution_names(url=None):
|
def get_all_distribution_names(url=None):
|
||||||
"""
|
"""
|
||||||
|
@ -197,7 +197,7 @@ class Locator(object):
|
||||||
is_downloadable = basename.endswith(self.downloadable_extensions)
|
is_downloadable = basename.endswith(self.downloadable_extensions)
|
||||||
if is_wheel:
|
if is_wheel:
|
||||||
compatible = is_compatible(Wheel(basename), self.wheel_tags)
|
compatible = is_compatible(Wheel(basename), self.wheel_tags)
|
||||||
return (t.scheme == 'https', 'pypi.python.org' in t.netloc,
|
return (t.scheme == 'https', 'pypi.org' in t.netloc,
|
||||||
is_downloadable, is_wheel, compatible, basename)
|
is_downloadable, is_wheel, compatible, basename)
|
||||||
|
|
||||||
def prefer_url(self, url1, url2):
|
def prefer_url(self, url1, url2):
|
||||||
|
@ -1049,7 +1049,7 @@ class AggregatingLocator(Locator):
|
||||||
# versions which don't conform to PEP 426 / PEP 440.
|
# versions which don't conform to PEP 426 / PEP 440.
|
||||||
default_locator = AggregatingLocator(
|
default_locator = AggregatingLocator(
|
||||||
JSONLocator(),
|
JSONLocator(),
|
||||||
SimpleScrapingLocator('https://pypi.python.org/simple/',
|
SimpleScrapingLocator('https://pypi.org/simple/',
|
||||||
timeout=3.0),
|
timeout=3.0),
|
||||||
scheme='legacy')
|
scheme='legacy')
|
||||||
|
|
||||||
|
|
|
@ -91,9 +91,11 @@ _426_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform',
|
||||||
_426_MARKERS = ('Private-Version', 'Provides-Extra', 'Obsoleted-By',
|
_426_MARKERS = ('Private-Version', 'Provides-Extra', 'Obsoleted-By',
|
||||||
'Setup-Requires-Dist', 'Extension')
|
'Setup-Requires-Dist', 'Extension')
|
||||||
|
|
||||||
# See issue #106: Sometimes 'Requires' occurs wrongly in the metadata. Include
|
# See issue #106: Sometimes 'Requires' and 'Provides' occur wrongly in
|
||||||
# it in the tuple literal below to allow it (for now)
|
# the metadata. Include them in the tuple literal below to allow them
|
||||||
_566_FIELDS = _426_FIELDS + ('Description-Content-Type', 'Requires')
|
# (for now).
|
||||||
|
_566_FIELDS = _426_FIELDS + ('Description-Content-Type',
|
||||||
|
'Requires', 'Provides')
|
||||||
|
|
||||||
_566_MARKERS = ('Description-Content-Type',)
|
_566_MARKERS = ('Description-Content-Type',)
|
||||||
|
|
||||||
|
|
|
@ -39,27 +39,12 @@ _DEFAULT_MANIFEST = '''
|
||||||
# check if Python is called on the first line with this expression
|
# check if Python is called on the first line with this expression
|
||||||
FIRST_LINE_RE = re.compile(b'^#!.*pythonw?[0-9.]*([ \t].*)?$')
|
FIRST_LINE_RE = re.compile(b'^#!.*pythonw?[0-9.]*([ \t].*)?$')
|
||||||
SCRIPT_TEMPLATE = r'''# -*- coding: utf-8 -*-
|
SCRIPT_TEMPLATE = r'''# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from %(module)s import %(import_name)s
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
import sys, re
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(%(func)s())
|
||||||
def _resolve(module, func):
|
|
||||||
__import__(module)
|
|
||||||
mod = sys.modules[module]
|
|
||||||
parts = func.split('.')
|
|
||||||
result = getattr(mod, parts.pop(0))
|
|
||||||
for p in parts:
|
|
||||||
result = getattr(result, p)
|
|
||||||
return result
|
|
||||||
|
|
||||||
try:
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
|
|
||||||
func = _resolve('%(module)s', '%(func)s')
|
|
||||||
rc = func() # None interpreted as 0
|
|
||||||
except Exception as e: # only supporting Python >= 2.6
|
|
||||||
sys.stderr.write('%%s\n' %% e)
|
|
||||||
rc = 1
|
|
||||||
sys.exit(rc)
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
@ -225,6 +210,7 @@ class ScriptMaker(object):
|
||||||
|
|
||||||
def _get_script_text(self, entry):
|
def _get_script_text(self, entry):
|
||||||
return self.script_template % dict(module=entry.prefix,
|
return self.script_template % dict(module=entry.prefix,
|
||||||
|
import_name=entry.suffix.split('.')[0],
|
||||||
func=entry.suffix)
|
func=entry.suffix)
|
||||||
|
|
||||||
manifest = _DEFAULT_MANIFEST
|
manifest = _DEFAULT_MANIFEST
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -804,11 +804,15 @@ def ensure_slash(s):
|
||||||
def parse_credentials(netloc):
|
def parse_credentials(netloc):
|
||||||
username = password = None
|
username = password = None
|
||||||
if '@' in netloc:
|
if '@' in netloc:
|
||||||
prefix, netloc = netloc.split('@', 1)
|
prefix, netloc = netloc.rsplit('@', 1)
|
||||||
if ':' not in prefix:
|
if ':' not in prefix:
|
||||||
username = prefix
|
username = prefix
|
||||||
else:
|
else:
|
||||||
username, password = prefix.split(':', 1)
|
username, password = prefix.split(':', 1)
|
||||||
|
if username:
|
||||||
|
username = unquote(username)
|
||||||
|
if password:
|
||||||
|
password = unquote(password)
|
||||||
return username, password, netloc
|
return username, password, netloc
|
||||||
|
|
||||||
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -433,6 +433,22 @@ class Wheel(object):
|
||||||
self.build_zip(pathname, archive_paths)
|
self.build_zip(pathname, archive_paths)
|
||||||
return pathname
|
return pathname
|
||||||
|
|
||||||
|
def skip_entry(self, arcname):
|
||||||
|
"""
|
||||||
|
Determine whether an archive entry should be skipped when verifying
|
||||||
|
or installing.
|
||||||
|
"""
|
||||||
|
# The signature file won't be in RECORD,
|
||||||
|
# and we don't currently don't do anything with it
|
||||||
|
# We also skip directories, as they won't be in RECORD
|
||||||
|
# either. See:
|
||||||
|
#
|
||||||
|
# https://github.com/pypa/wheel/issues/294
|
||||||
|
# https://github.com/pypa/wheel/issues/287
|
||||||
|
# https://github.com/pypa/wheel/pull/289
|
||||||
|
#
|
||||||
|
return arcname.endswith(('/', '/RECORD.jws'))
|
||||||
|
|
||||||
def install(self, paths, maker, **kwargs):
|
def install(self, paths, maker, **kwargs):
|
||||||
"""
|
"""
|
||||||
Install a wheel to the specified paths. If kwarg ``warner`` is
|
Install a wheel to the specified paths. If kwarg ``warner`` is
|
||||||
|
@ -514,9 +530,7 @@ class Wheel(object):
|
||||||
u_arcname = arcname
|
u_arcname = arcname
|
||||||
else:
|
else:
|
||||||
u_arcname = arcname.decode('utf-8')
|
u_arcname = arcname.decode('utf-8')
|
||||||
# The signature file won't be in RECORD,
|
if self.skip_entry(u_arcname):
|
||||||
# and we don't currently don't do anything with it
|
|
||||||
if u_arcname.endswith('/RECORD.jws'):
|
|
||||||
continue
|
continue
|
||||||
row = records[u_arcname]
|
row = records[u_arcname]
|
||||||
if row[2] and str(zinfo.file_size) != row[2]:
|
if row[2] and str(zinfo.file_size) != row[2]:
|
||||||
|
@ -786,13 +800,15 @@ class Wheel(object):
|
||||||
u_arcname = arcname
|
u_arcname = arcname
|
||||||
else:
|
else:
|
||||||
u_arcname = arcname.decode('utf-8')
|
u_arcname = arcname.decode('utf-8')
|
||||||
if '..' in u_arcname:
|
# See issue #115: some wheels have .. in their entries, but
|
||||||
|
# in the filename ... e.g. __main__..py ! So the check is
|
||||||
|
# updated to look for .. in the directory portions
|
||||||
|
p = u_arcname.split('/')
|
||||||
|
if '..' in p:
|
||||||
raise DistlibException('invalid entry in '
|
raise DistlibException('invalid entry in '
|
||||||
'wheel: %r' % u_arcname)
|
'wheel: %r' % u_arcname)
|
||||||
|
|
||||||
# The signature file won't be in RECORD,
|
if self.skip_entry(u_arcname):
|
||||||
# and we don't currently don't do anything with it
|
|
||||||
if u_arcname.endswith('/RECORD.jws'):
|
|
||||||
continue
|
continue
|
||||||
row = records[u_arcname]
|
row = records[u_arcname]
|
||||||
if row[2] and str(zinfo.file_size) != row[2]:
|
if row[2] and str(zinfo.file_size) != row[2]:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
appdirs==1.4.3
|
appdirs==1.4.3
|
||||||
CacheControl==0.12.5
|
CacheControl==0.12.5
|
||||||
colorama==0.4.1
|
colorama==0.4.1
|
||||||
distlib==0.2.8
|
distlib==0.2.9.post0
|
||||||
distro==1.4.0
|
distro==1.4.0
|
||||||
html5lib==1.0.1
|
html5lib==1.0.1
|
||||||
ipaddress==1.0.22 # Only needed on 2.6 and 2.7
|
ipaddress==1.0.22 # Only needed on 2.6 and 2.7
|
||||||
|
|
Loading…
Reference in a new issue