/
usr
/
lib
/
python2.7
/
site-packages
/
pip
/
utils
/
/usr/lib/python2.7/site-packages/pip/utils
mkdir
upload
Name
Size
Mode
Actions
appdirs.py
8811
0644
edit
dl
rm
appdirs.pyc
8607
0644
edit
dl
rm
appdirs.pyo
8607
0644
edit
dl
rm
build.py
1312
0644
edit
dl
rm
build.pyc
1719
0644
edit
dl
rm
build.pyo
1719
0644
edit
dl
rm
deprecation.py
2232
0644
edit
dl
rm
deprecation.pyc
2317
0644
edit
dl
rm
deprecation.pyo
2317
0644
edit
dl
rm
encoding.py
971
0644
edit
dl
rm
encoding.pyc
1282
0644
edit
dl
rm
encoding.pyo
1282
0644
edit
dl
rm
filesystem.py
899
0644
edit
dl
rm
filesystem.pyc
780
0644
edit
dl
rm
filesystem.pyo
780
0644
edit
dl
rm
glibc.py
2939
0644
edit
dl
rm
glibc.pyc
1826
0644
edit
dl
rm
glibc.pyo
1826
0644
edit
dl
rm
hashes.py
2866
0644
edit
dl
rm
hashes.pyc
3961
0644
edit
dl
rm
hashes.pyo
3961
0644
edit
dl
rm
logging.py
3327
0644
edit
dl
rm
logging.pyc
4842
0644
edit
dl
rm
logging.pyo
4842
0644
edit
dl
rm
outdated.py
5989
0644
edit
dl
rm
outdated.pyc
5680
0644
edit
dl
rm
outdated.pyo
5680
0644
edit
dl
rm
packaging.py
2080
0644
edit
dl
rm
packaging.pyc
2461
0644
edit
dl
rm
packaging.pyo
2461
0644
edit
dl
rm
setuptools_build.py
278
0644
edit
dl
rm
setuptools_build.pyc
347
0644
edit
dl
rm
setuptools_build.pyo
347
0644
edit
dl
rm
ui.py
11597
0644
edit
dl
rm
ui.pyc
11683
0644
edit
dl
rm
ui.pyo
11613
0644
edit
dl
rm
__init__.py
27187
0644
edit
dl
rm
__init__.pyc
27725
0644
edit
dl
rm
__init__.pyo
27666
0644
edit
dl
rm
Edit:
/usr/lib/python2.7/site-packages/pip/utils/hashes.py
(2866B)
from __future__ import absolute_import import hashlib from pip.exceptions import HashMismatch, HashMissing, InstallationError from pip.utils import read_chunks from pip._vendor.six import iteritems, iterkeys, itervalues # The recommended hash algo of the moment. Change this whenever the state of # the art changes; it won't hurt backward compatibility. FAVORITE_HASH = 'sha256' # Names of hashlib algorithms allowed by the --hash option and ``pip hash`` # Currently, those are the ones at least as collision-resistant as sha256. STRONG_HASHES = ['sha256', 'sha384', 'sha512'] class Hashes(object): """A wrapper that builds multiple hashes at once and checks them against known-good values """ def __init__(self, hashes=None): """ :param hashes: A dict of algorithm names pointing to lists of allowed hex digests """ self._allowed = {} if hashes is None else hashes def check_against_chunks(self, chunks): """Check good hashes against ones built from iterable of chunks of data. Raise HashMismatch if none match. """ gots = {} for hash_name in iterkeys(self._allowed): try: gots[hash_name] = hashlib.new(hash_name) except (ValueError, TypeError): raise InstallationError('Unknown hash name: %s' % hash_name) for chunk in chunks: for hash in itervalues(gots): hash.update(chunk) for hash_name, got in iteritems(gots): if got.hexdigest() in self._allowed[hash_name]: return self._raise(gots) def _raise(self, gots): raise HashMismatch(self._allowed, gots) def check_against_file(self, file): """Check good hashes against a file-like object Raise HashMismatch if none match. """ return self.check_against_chunks(read_chunks(file)) def check_against_path(self, path): with open(path, 'rb') as file: return self.check_against_file(file) def __nonzero__(self): """Return whether I know any known-good hashes.""" return bool(self._allowed) def __bool__(self): return self.__nonzero__() class MissingHashes(Hashes): """A workalike for Hashes used when we're missing a hash for a requirement It computes the actual hash of the requirement and raises a HashMissing exception showing it to the user. """ def __init__(self): """Don't offer the ``hashes`` kwarg.""" # Pass our favorite hash in to generate a "gotten hash". With the # empty list, it will never match, so an error will always raise. super(MissingHashes, self).__init__(hashes={FAVORITE_HASH: []}) def _raise(self, gots): raise HashMissing(gots[FAVORITE_HASH].hexdigest())
Save
cmd:
run