2012-09-23 23:58:14 +02:00
|
|
|
from pkg_resources import parse_version
|
2011-12-16 18:01:23 +01:00
|
|
|
from pip.backwardcompat import urllib
|
|
|
|
from pip.req import InstallRequirement
|
|
|
|
from pip.index import PackageFinder
|
2012-09-23 23:58:14 +02:00
|
|
|
from pip.exceptions import BestVersionAlreadyInstalled
|
2011-12-16 18:01:23 +01:00
|
|
|
from tests.path import Path
|
|
|
|
from tests.test_pip import here
|
2012-09-23 23:58:14 +02:00
|
|
|
from nose.tools import assert_raises
|
|
|
|
from mock import Mock
|
2011-12-16 18:01:23 +01:00
|
|
|
|
|
|
|
find_links = 'file://' + urllib.quote(str(Path(here).abspath/'packages').replace('\\', '/'))
|
2012-09-10 22:04:00 +02:00
|
|
|
find_links2 = 'file://' + urllib.quote(str(Path(here).abspath/'packages2').replace('\\', '/'))
|
2011-12-16 18:01:23 +01:00
|
|
|
|
|
|
|
|
|
|
|
def test_no_mpkg():
|
|
|
|
"""Finder skips zipfiles with "macosx10" in the name."""
|
|
|
|
finder = PackageFinder([find_links], [])
|
|
|
|
req = InstallRequirement.from_line("pkgwithmpkg")
|
|
|
|
found = finder.find_requirement(req, False)
|
|
|
|
|
|
|
|
assert found.url.endswith("pkgwithmpkg-1.0.tar.gz"), found
|
2012-04-17 01:27:47 +02:00
|
|
|
|
|
|
|
|
|
|
|
def test_no_partial_name_match():
|
|
|
|
"""Finder requires the full project name to match, not just beginning."""
|
|
|
|
finder = PackageFinder([find_links], [])
|
|
|
|
req = InstallRequirement.from_line("gmpy")
|
|
|
|
found = finder.find_requirement(req, False)
|
|
|
|
|
|
|
|
assert found.url.endswith("gmpy-1.15.tar.gz"), found
|
2012-09-10 22:04:00 +02:00
|
|
|
|
|
|
|
def test_duplicates_sort_ok():
|
|
|
|
"""Finder successfully finds one of a set of duplicates in different
|
|
|
|
locations"""
|
|
|
|
finder = PackageFinder([find_links, find_links2], [])
|
|
|
|
req = InstallRequirement.from_line("duplicate")
|
|
|
|
found = finder.find_requirement(req, False)
|
|
|
|
|
|
|
|
assert found.url.endswith("duplicate-1.0.tar.gz"), found
|
2012-09-23 23:58:14 +02:00
|
|
|
|
|
|
|
|
|
|
|
def test_finder_detects_latest_find_links():
|
|
|
|
"""Test PackageFinder detects latest using find-links"""
|
|
|
|
req = InstallRequirement.from_line('simple', None)
|
|
|
|
finder = PackageFinder([find_links], [])
|
|
|
|
link = finder.find_requirement(req, False)
|
|
|
|
assert link.url.endswith("simple-3.0.tar.gz")
|
|
|
|
|
|
|
|
|
|
|
|
def test_finder_detects_latest_already_satisfied_find_links():
|
|
|
|
"""Test PackageFinder detects latest already satisified using find-links"""
|
|
|
|
req = InstallRequirement.from_line('simple', None)
|
|
|
|
#the latest simple in local pkgs is 3.0
|
|
|
|
latest_version = "3.0"
|
|
|
|
satisfied_by = Mock(
|
|
|
|
location = "/path",
|
|
|
|
parsed_version = parse_version(latest_version),
|
|
|
|
version = latest_version
|
|
|
|
)
|
|
|
|
req.satisfied_by = satisfied_by
|
|
|
|
finder = PackageFinder([find_links], [])
|
|
|
|
assert_raises(BestVersionAlreadyInstalled, finder.find_requirement, req, True)
|
|
|
|
|
|
|
|
|
|
|
|
def test_finder_detects_latest_already_satisfied_pypi_links():
|
|
|
|
"""Test PackageFinder detects latest already satisified using pypi links"""
|
|
|
|
req = InstallRequirement.from_line('initools', None)
|
|
|
|
#the latest initools on pypi is 0.3.1
|
|
|
|
latest_version = "0.3.1"
|
|
|
|
satisfied_by = Mock(
|
|
|
|
location = "/path",
|
|
|
|
parsed_version = parse_version(latest_version),
|
|
|
|
version = latest_version
|
|
|
|
)
|
|
|
|
req.satisfied_by = satisfied_by
|
|
|
|
finder = PackageFinder([], ["http://pypi.python.org/simple"])
|
|
|
|
assert_raises(BestVersionAlreadyInstalled, finder.find_requirement, req, True)
|