Skip to content

Commit

Permalink
Merge pull request #501 from techalchemy/pypi-pip-version-bugfix
Browse files Browse the repository at this point in the history
Pypi pip version bugfix
  • Loading branch information
kennethreitz authored Sep 8, 2017
2 parents 3d74d31 + d1d3e73 commit f5e93be
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 28 deletions.
24 changes: 13 additions & 11 deletions Pipfile.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

38 changes: 22 additions & 16 deletions pipenv/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def shellquote(s):


def clean_pkg_version(version):
return six.u(pep440_version(str(version))).replace('==', '')
return six.u(pep440_version(str(version).replace('==', '')))


def resolve_deps(deps, sources=None, verbose=False, hashes=False):
Expand Down Expand Up @@ -69,14 +69,19 @@ def resolve_deps(deps, sources=None, verbose=False, hashes=False):
try:
collected_hashes = []
r = requests.get('https://pypi.org/pypi/{0}/json'.format(name))
for release in r.json()['releases'][version]:
api_releases = r.json()['releases']
cleaned_releases = {}
for api_version, api_info in api_releases.items():
cleaned_releases[clean_pkg_version(api_version)] = api_info

for release in cleaned_releases[version]:
collected_hashes.append(release['digests']['sha256'])

collected_hashes = ['sha256:' + s for s in collected_hashes]

# Collect un-collectable hashes.
if not collected_hashes:
collected_hashes = list(resolver.resolve_hashes([result]).items()[0][1])
collected_hashes = list(list(resolver.resolve_hashes([result]).items())[0][1])

results.append({'name': name, 'version': version, 'hashes': collected_hashes})
except ValueError:
Expand Down Expand Up @@ -254,8 +259,9 @@ def is_vcs(pipfile_entry):


def pep440_version(version):
# TODO: https://github.com/pypa/pip/blob/a9d56c7734fd465d01437d61f632749a293e7805/src/pip/_vendor/distlib/version.py#L184
return version.replace('.post', '-')
"""Normalize version to PEP 440 standards"""
# use pip built in version parser
return str(pip.index.parse_version(version))


def pep423_name(name):
Expand Down Expand Up @@ -346,14 +352,14 @@ def walk_up(bottom):


def find_requirements(max_depth=3):
"""Returns the path of a Pipfile in parent directories."""
i = 0
for c, d, f in walk_up(os.getcwd()):
i += 1

if i < max_depth:
if 'requirements.txt':
r = os.path.join(c, 'requirements.txt')
if os.path.isfile(r):
return r
raise RuntimeError('No requirements.txt found!')
"""Returns the path of a Pipfile in parent directories."""
i = 0
for c, d, f in walk_up(os.getcwd()):
i += 1

if i < max_depth:
if 'requirements.txt':
r = os.path.join(c, 'requirements.txt')
if os.path.isfile(r):
return r
raise RuntimeError('No requirements.txt found!')
3 changes: 2 additions & 1 deletion tests/test_pipenv.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ def test_cli_usage(self):
assert delegator.run('pipenv --python python').return_code == 0
assert delegator.run('pipenv install Werkzeug').return_code == 0
assert delegator.run('pipenv install pytest --dev').return_code == 0
assert delegator.run('pipenv install regex').return_code == 0 # failing before
assert delegator.run('pipenv install git+https://github.com/requests/requests.git@v2.18.4#egg=requests').return_code == 0
assert delegator.run('pipenv lock').return_code == 0

Expand Down Expand Up @@ -151,7 +152,7 @@ def test_pipenv_uninstall(self):
pipfile_output = delegator.run('cat Pipfile').out
pipfile_list = pipfile_output.split('\n')

assert 'Werkzeug = "*"' in pipfile_list
assert 'werkzeug = "*"' in pipfile_list
assert 'pytest = "*"' in pipfile_list
assert '[packages]' in pipfile_list
assert '[dev-packages]' in pipfile_list
Expand Down

0 comments on commit f5e93be

Please sign in to comment.