mirror of https://github.com/pypa/pip
Upgrade distlib to 0.2.9.post0
This commit is contained in:
parent
0d45b3cc4c
commit
3f85093d6d
|
@ -0,0 +1 @@
|
|||
Upgrade distlib to 0.2.9.post0
|
|
@ -1,12 +1,12 @@
|
|||
# -*- 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.
|
||||
# See LICENSE.txt and CONTRIBUTORS.txt.
|
||||
#
|
||||
import logging
|
||||
|
||||
__version__ = '0.2.8'
|
||||
__version__ = '0.2.9.post0'
|
||||
|
||||
class DistlibException(Exception):
|
||||
pass
|
||||
|
|
|
@ -22,7 +22,7 @@ from .util import cached_property, zip_dir, ServerProxy
|
|||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
DEFAULT_INDEX = 'https://pypi.python.org/pypi'
|
||||
DEFAULT_INDEX = 'https://pypi.org/pypi'
|
||||
DEFAULT_REALM = 'pypi'
|
||||
|
||||
class PackageIndex(object):
|
||||
|
|
|
@ -36,7 +36,7 @@ logger = logging.getLogger(__name__)
|
|||
HASHER_HASH = re.compile(r'^(\w+)=([a-f0-9]+)')
|
||||
CHARSET = re.compile(r';\s*charset\s*=\s*(.*)\s*$', re.I)
|
||||
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):
|
||||
"""
|
||||
|
@ -197,7 +197,7 @@ class Locator(object):
|
|||
is_downloadable = basename.endswith(self.downloadable_extensions)
|
||||
if is_wheel:
|
||||
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)
|
||||
|
||||
def prefer_url(self, url1, url2):
|
||||
|
@ -1049,7 +1049,7 @@ class AggregatingLocator(Locator):
|
|||
# versions which don't conform to PEP 426 / PEP 440.
|
||||
default_locator = AggregatingLocator(
|
||||
JSONLocator(),
|
||||
SimpleScrapingLocator('https://pypi.python.org/simple/',
|
||||
SimpleScrapingLocator('https://pypi.org/simple/',
|
||||
timeout=3.0),
|
||||
scheme='legacy')
|
||||
|
||||
|
|
|
@ -91,9 +91,11 @@ _426_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform',
|
|||
_426_MARKERS = ('Private-Version', 'Provides-Extra', 'Obsoleted-By',
|
||||
'Setup-Requires-Dist', 'Extension')
|
||||
|
||||
# See issue #106: Sometimes 'Requires' occurs wrongly in the metadata. Include
|
||||
# it in the tuple literal below to allow it (for now)
|
||||
_566_FIELDS = _426_FIELDS + ('Description-Content-Type', 'Requires')
|
||||
# See issue #106: Sometimes 'Requires' and 'Provides' occur wrongly in
|
||||
# the metadata. Include them in the tuple literal below to allow them
|
||||
# (for now).
|
||||
_566_FIELDS = _426_FIELDS + ('Description-Content-Type',
|
||||
'Requires', 'Provides')
|
||||
|
||||
_566_MARKERS = ('Description-Content-Type',)
|
||||
|
||||
|
|
|
@ -39,27 +39,12 @@ _DEFAULT_MANIFEST = '''
|
|||
# check if Python is called on the first line with this expression
|
||||
FIRST_LINE_RE = re.compile(b'^#!.*pythonw?[0-9.]*([ \t].*)?$')
|
||||
SCRIPT_TEMPLATE = r'''# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from %(module)s import %(import_name)s
|
||||
if __name__ == '__main__':
|
||||
import sys, re
|
||||
|
||||
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)
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(%(func)s())
|
||||
'''
|
||||
|
||||
|
||||
|
@ -225,6 +210,7 @@ class ScriptMaker(object):
|
|||
|
||||
def _get_script_text(self, entry):
|
||||
return self.script_template % dict(module=entry.prefix,
|
||||
import_name=entry.suffix.split('.')[0],
|
||||
func=entry.suffix)
|
||||
|
||||
manifest = _DEFAULT_MANIFEST
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -804,11 +804,15 @@ def ensure_slash(s):
|
|||
def parse_credentials(netloc):
|
||||
username = password = None
|
||||
if '@' in netloc:
|
||||
prefix, netloc = netloc.split('@', 1)
|
||||
prefix, netloc = netloc.rsplit('@', 1)
|
||||
if ':' not in prefix:
|
||||
username = prefix
|
||||
else:
|
||||
username, password = prefix.split(':', 1)
|
||||
if username:
|
||||
username = unquote(username)
|
||||
if password:
|
||||
password = unquote(password)
|
||||
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)
|
||||
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):
|
||||
"""
|
||||
Install a wheel to the specified paths. If kwarg ``warner`` is
|
||||
|
@ -514,9 +530,7 @@ class Wheel(object):
|
|||
u_arcname = arcname
|
||||
else:
|
||||
u_arcname = arcname.decode('utf-8')
|
||||
# The signature file won't be in RECORD,
|
||||
# and we don't currently don't do anything with it
|
||||
if u_arcname.endswith('/RECORD.jws'):
|
||||
if self.skip_entry(u_arcname):
|
||||
continue
|
||||
row = records[u_arcname]
|
||||
if row[2] and str(zinfo.file_size) != row[2]:
|
||||
|
@ -786,13 +800,15 @@ class Wheel(object):
|
|||
u_arcname = arcname
|
||||
else:
|
||||
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 '
|
||||
'wheel: %r' % u_arcname)
|
||||
|
||||
# The signature file won't be in RECORD,
|
||||
# and we don't currently don't do anything with it
|
||||
if u_arcname.endswith('/RECORD.jws'):
|
||||
if self.skip_entry(u_arcname):
|
||||
continue
|
||||
row = records[u_arcname]
|
||||
if row[2] and str(zinfo.file_size) != row[2]:
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
appdirs==1.4.3
|
||||
CacheControl==0.12.5
|
||||
colorama==0.4.1
|
||||
distlib==0.2.8
|
||||
distlib==0.2.9.post0
|
||||
distro==1.4.0
|
||||
html5lib==1.0.1
|
||||
ipaddress==1.0.22 # Only needed on 2.6 and 2.7
|
||||
|
|
Loading…
Reference in New Issue