2011-04-26 19:19:59 +02:00
|
|
|
import os.path
|
2010-02-24 11:24:55 +01:00
|
|
|
import textwrap
|
2013-08-18 11:59:44 +02:00
|
|
|
|
|
|
|
import pytest
|
|
|
|
|
2012-04-01 23:41:57 +02:00
|
|
|
from mock import patch
|
2013-08-18 11:59:44 +02:00
|
|
|
|
2012-06-03 17:16:31 +02:00
|
|
|
from pip.backwardcompat import urllib
|
2013-04-13 06:40:30 +02:00
|
|
|
from pip.req import Requirements, parse_editable, parse_requirements
|
2013-08-21 11:16:07 +02:00
|
|
|
|
|
|
|
from tests.lib import reset_env, pyversion, tests_data, path_to_url, find_links
|
2013-05-27 19:46:31 +02:00
|
|
|
from tests.lib.local_repos import local_checkout
|
|
|
|
from tests.lib.path import Path
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2011-05-04 09:44:02 +02:00
|
|
|
|
2010-02-25 00:16:43 +01:00
|
|
|
def test_requirements_file():
|
|
|
|
"""
|
|
|
|
Test installing from a requirements file.
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2010-02-25 00:16:43 +01:00
|
|
|
"""
|
2011-03-19 01:31:36 +01:00
|
|
|
other_lib_name, other_lib_version = 'anyjson', '0.3'
|
2013-08-21 11:16:07 +02:00
|
|
|
script = reset_env()
|
|
|
|
script.scratch_path.join("initools-req.txt").write(textwrap.dedent("""\
|
2010-02-24 11:24:55 +01:00
|
|
|
INITools==0.2
|
|
|
|
# and something else to test out:
|
2011-03-15 20:49:48 +01:00
|
|
|
%s<=%s
|
|
|
|
""" % (other_lib_name, other_lib_version)))
|
2013-08-21 11:16:07 +02:00
|
|
|
result = script.pip('install', '-r', script.scratch_path / 'initools-req.txt')
|
|
|
|
assert script.site_packages/'INITools-0.2-py%s.egg-info' % pyversion in result.files_created
|
|
|
|
assert script.site_packages/'initools' in result.files_created
|
|
|
|
assert result.files_created[script.site_packages/other_lib_name].dir
|
2011-03-15 20:49:48 +01:00
|
|
|
fn = '%s-%s-py%s.egg-info' % (other_lib_name, other_lib_version, pyversion)
|
2013-08-21 11:16:07 +02:00
|
|
|
assert result.files_created[script.site_packages/fn].dir
|
2010-02-24 11:24:55 +01:00
|
|
|
|
2013-03-18 17:43:59 +01:00
|
|
|
|
2012-03-13 23:38:47 +01:00
|
|
|
def test_schema_check_in_requirements_file():
|
|
|
|
"""
|
|
|
|
Test installing from a requirements file with an invalid vcs schema..
|
|
|
|
|
|
|
|
"""
|
2013-08-21 11:16:07 +02:00
|
|
|
script = reset_env()
|
|
|
|
script.scratch_path.join("file-egg-req.txt").write(textwrap.dedent("""\
|
2012-03-13 23:38:47 +01:00
|
|
|
git://github.com/alex/django-fixture-generator.git#egg=fixture_generator
|
|
|
|
"""))
|
2013-08-18 11:59:44 +02:00
|
|
|
|
|
|
|
with pytest.raises(AssertionError):
|
2013-08-21 11:16:07 +02:00
|
|
|
script.pip("install", "-vvv", "-r", script.scratch_path / "file-egg-req.txt")
|
2011-05-04 09:44:02 +02:00
|
|
|
|
2012-05-14 05:13:50 +02:00
|
|
|
|
2011-03-23 00:13:04 +01:00
|
|
|
def test_relative_requirements_file():
|
|
|
|
"""
|
|
|
|
Test installing from a requirements file with a relative path with an egg= definition..
|
|
|
|
|
|
|
|
"""
|
2013-05-27 19:46:31 +02:00
|
|
|
url = path_to_url(os.path.join(tests_data, 'packages', '..', 'packages', 'FSPkg')) + '#egg=FSPkg'
|
2013-08-21 11:16:07 +02:00
|
|
|
script = reset_env()
|
|
|
|
script.scratch_path.join("file-egg-req.txt").write(textwrap.dedent("""\
|
2011-03-23 00:13:04 +01:00
|
|
|
%s
|
|
|
|
""" % url))
|
2013-08-21 11:16:07 +02:00
|
|
|
result = script.pip('install', '-vvv', '-r', script.scratch_path / 'file-egg-req.txt')
|
|
|
|
assert (script.site_packages/'FSPkg-0.1dev-py%s.egg-info' % pyversion) in result.files_created, str(result)
|
|
|
|
assert (script.site_packages/'fspkg') in result.files_created, str(result.stdout)
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2011-05-04 09:44:02 +02:00
|
|
|
|
2010-02-25 00:16:43 +01:00
|
|
|
def test_multiple_requirements_files():
|
|
|
|
"""
|
|
|
|
Test installing from multiple nested requirements files.
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2010-02-25 00:16:43 +01:00
|
|
|
"""
|
2011-03-19 01:31:36 +01:00
|
|
|
other_lib_name, other_lib_version = 'anyjson', '0.3'
|
2013-08-21 11:16:07 +02:00
|
|
|
script = reset_env()
|
|
|
|
script.scratch_path.join("initools-req.txt").write(textwrap.dedent("""\
|
2010-07-02 03:44:26 +02:00
|
|
|
-e %s@10#egg=INITools-dev
|
2011-03-19 17:52:48 +01:00
|
|
|
-r %s-req.txt""" % (local_checkout('svn+http://svn.colorstudy.com/INITools/trunk'),
|
2011-03-15 20:49:48 +01:00
|
|
|
other_lib_name)))
|
2013-08-21 11:16:07 +02:00
|
|
|
script.scratch_path.join("%s-req.txt" % other_lib_name).write(textwrap.dedent("""\
|
2011-03-15 20:49:48 +01:00
|
|
|
%s<=%s
|
|
|
|
""" % (other_lib_name, other_lib_version)))
|
2013-08-21 11:16:07 +02:00
|
|
|
result = script.pip('install', '-r', script.scratch_path / 'initools-req.txt')
|
|
|
|
assert result.files_created[script.site_packages/other_lib_name].dir
|
2011-03-15 20:49:48 +01:00
|
|
|
fn = '%s-%s-py%s.egg-info' % (other_lib_name, other_lib_version, pyversion)
|
2013-08-21 11:16:07 +02:00
|
|
|
assert result.files_created[script.site_packages/fn].dir
|
|
|
|
assert script.venv/'src'/'initools' in result.files_created
|
2010-02-24 11:24:55 +01:00
|
|
|
|
2011-01-04 06:05:10 +01:00
|
|
|
|
|
|
|
def test_respect_order_in_requirements_file():
|
2013-08-21 11:16:07 +02:00
|
|
|
script = reset_env()
|
|
|
|
script.scratch_path.join("frameworks-req.txt").write(textwrap.dedent("""\
|
2012-10-04 03:51:49 +02:00
|
|
|
parent
|
|
|
|
child
|
|
|
|
simple
|
2011-01-04 06:05:10 +01:00
|
|
|
"""))
|
2012-10-04 03:51:49 +02:00
|
|
|
|
2013-08-21 11:16:07 +02:00
|
|
|
result = script.pip('install', '--no-index', '-f', find_links, '-r', script.scratch_path / 'frameworks-req.txt')
|
2012-10-04 03:51:49 +02:00
|
|
|
|
2011-01-04 06:05:10 +01:00
|
|
|
downloaded = [line for line in result.stdout.split('\n')
|
|
|
|
if 'Downloading/unpacking' in line]
|
2011-03-19 01:31:36 +01:00
|
|
|
|
2012-10-04 03:51:49 +02:00
|
|
|
assert 'parent' in downloaded[0], 'First download should ' \
|
|
|
|
'be "parent" but was "%s"' % downloaded[0]
|
|
|
|
assert 'child' in downloaded[1], 'Second download should ' \
|
|
|
|
'be "child" but was "%s"' % downloaded[1]
|
|
|
|
assert 'simple' in downloaded[2], 'Third download should ' \
|
|
|
|
'be "simple" but was "%s"' % downloaded[2]
|
2011-01-04 06:05:10 +01:00
|
|
|
|
|
|
|
|
2012-05-24 11:04:16 +02:00
|
|
|
|
|
|
|
def test_install_local_editable_with_extras():
|
2013-08-21 11:16:07 +02:00
|
|
|
script = reset_env()
|
2013-05-27 19:46:31 +02:00
|
|
|
to_install = os.path.abspath(os.path.join(tests_data, 'packages', 'LocalExtras'))
|
2013-08-21 11:16:07 +02:00
|
|
|
res = script.pip('install', '-e', to_install + '[bar]', expect_error=False)
|
|
|
|
assert script.site_packages/'easy-install.pth' in res.files_updated, str(result)
|
|
|
|
assert script.site_packages/'LocalExtras.egg-link' in res.files_created, str(result)
|
|
|
|
assert script.site_packages/'simple' in res.files_created, str(result)
|