Merge pull request #222 from arruda/extra-index

Add extra-index-url support
This commit is contained in:
Nate Prewitt
2017-02-13 20:14:20 -07:00
committed by GitHub
4 changed files with 69 additions and 9 deletions
+1
View File
@@ -1,6 +1,7 @@
[dev-packages]
pytest = "*"
sphinx = "*"
mock = "*"
[packages]
click = "*"
+10 -4
View File
@@ -551,10 +551,16 @@ def do_init(dev=False, requirements=False, skip_virtualenv=False, allow_global=F
def pip_install(package_name=None, r=None, allow_global=False):
if r:
c = delegator.run('{0} install -r {1} --require-hashes -i {2}'.format(which_pip(allow_global=allow_global), r, project.source['url']))
else:
c = delegator.run('{0} install "{1}" -i {2}'.format(which_pip(allow_global=allow_global), package_name, project.source['url']))
# try installing for each source in project.sources
for source in project.sources:
if r:
c = delegator.run('{0} install -r {1} --require-hashes -i {2}'.format(which_pip(allow_global=allow_global), r, source['url']))
else:
c = delegator.run('{0} install "{1}" -i {2}'.format(which_pip(allow_global=allow_global), package_name, source['url']))
if c.return_code == 0:
break
# return the result of the first one that runs ok or the last one that didn't work
return c
+4 -4
View File
@@ -127,16 +127,16 @@ class Project(object):
f.write(format_toml(toml.dumps(data)))
@property
def source(self):
def sources(self):
if self.lockfile_exists:
meta_ = self.lockfile_content['_meta']
sources_ = meta_.get('sources')
if sources_:
return sources_[0]
return sources_
if 'source' in self.parsed_pipfile:
return self.parsed_pipfile['source'][0]
return self.parsed_pipfile['source']
else:
return {u'url': u'https://pypi.python.org/simple', u'verify_ssl': True}
return [{u'url': u'https://pypi.python.org/simple', u'verify_ssl': True}]
def remove_package_from_pipfile(self, package_name, dev=False):
+54 -1
View File
@@ -1,13 +1,16 @@
import os
from mock import patch, Mock, PropertyMock
import pytest
import delegator
import toml
from pipenv.cli import (activate_virtualenv, ensure_proper_casing,
parse_download_fname, parse_install_output)
parse_download_fname, parse_install_output, pip_install)
from pipenv.project import Project
class TestPipenv():
@pytest.mark.parametrize('fname, name, expected', [
@@ -131,3 +134,53 @@ class TestPipenv():
venv = Project().virtualenv_location
assert command == '{0}/bin/activate'.format(venv)
@patch('pipenv.project.Project.sources', new_callable=PropertyMock)
@patch('delegator.run')
def test_pip_install_should_try_every_possible_source(self, mocked_delegator, mocked_sources):
sources = [
{'url': 'http://dontexistis.in.pypi/simple'},
{'url': 'http://existis.in.pypi/simple'}
]
mocked_sources.return_value = sources
first_cmd_return = Mock()
first_cmd_return.return_code = 1
second_cmd_return = Mock()
second_cmd_return.return_code = 0
mocked_delegator.side_effect = [first_cmd_return, second_cmd_return]
c = pip_install('package')
assert c.return_code == 0
@patch('pipenv.project.Project.sources', new_callable=PropertyMock)
@patch('delegator.run')
def test_pip_install_should_return_the_last_error_if_no_cmd_worked(self, mocked_delegator, mocked_sources):
sources = [
{'url': 'http://dontexistis.in.pypi/simple'},
{'url': 'http://dontexistis.in.pypi/simple'}
]
mocked_sources.return_value = sources
first_cmd_return = Mock()
first_cmd_return.return_code = 1
second_cmd_return = Mock()
second_cmd_return.return_code = 1
mocked_delegator.side_effect = [first_cmd_return, second_cmd_return]
c = pip_install('package')
assert c.return_code == 1
assert c == second_cmd_return
@patch('pipenv.project.Project.sources', new_callable=PropertyMock)
@patch('delegator.run')
def test_pip_install_should_return_the_first_cmd_that_worked(self, mocked_delegator, mocked_sources):
sources = [
{'url': 'http://existis.in.pypi/simple'},
{'url': 'http://existis.in.pypi/simple'}
]
mocked_sources.return_value = sources
first_cmd_return = Mock()
first_cmd_return.return_code = 0
second_cmd_return = Mock()
second_cmd_return.return_code = 0
mocked_delegator.side_effect = [first_cmd_return, second_cmd_return]
c = pip_install('package')
assert c.return_code == 0
assert c == first_cmd_return