def test_source_packages(): for ext in ('.tar.gz', '.tar', '.tgz', '.zip', '.tar.bz2'): sl = SourcePackage('a_p_r-3.1.3' + ext) assert sl._name == 'a_p_r' assert sl.name == 'a-p-r' assert sl.raw_version == '3.1.3' assert sl.version == parse_version(sl.raw_version) for req in ('a_p_r', 'a_p_r>2', 'a_p_r>3', 'a_p_r>=3.1.3', 'a_p_r==3.1.3', 'a_p_r>3,<3.5'): assert sl.satisfies(req) assert sl.satisfies(Requirement.parse(req)) for req in ('foo', 'a_p_r==4.0.0', 'a_p_r>4.0.0', 'a_p_r>3.0.0,<3.0.3', 'a==3.1.3'): assert not sl.satisfies(req) sl = SourcePackage('python-dateutil-1.5.tar.gz') assert sl.name == 'python-dateutil' assert sl.raw_version == '1.5'
def test_local_specifier(): for ext in ('.tar.gz', '.tar', '.tgz', '.zip', '.tar.bz2'): sl = SourcePackage('a_p_r-3.1.3+pexed.1' + ext) assert sl.name == 'a-p-r' assert sl.raw_version == '3.1.3+pexed.1' assert sl.version == parse_version(sl.raw_version) assert sl.satisfies('a_p_r==3.1.3+pexed.1')
def test_iteration_with_return(): pex_url = 'https://pypi.python.org/packages/source/p/pex/pex-0.8.6.tar.gz' crawler_mock = mock.create_autospec(Crawler, spec_set=True) crawler_mock.crawl.return_value = [pex_url] iterator = Iterator(crawler=crawler_mock, follow_links=True) assert list(iterator.iter( Requirement.parse('pex'))) == [SourcePackage(pex_url)] assert len(crawler_mock.crawl.mock_calls) == 1 _, _, kwargs = crawler_mock.crawl.mock_calls[0] assert kwargs == {'follow_links': True}
def test_href_translation(): VERSIONS = ['0.4.0', '0.4.1', '0.5.0', '0.6.0'] def fake_link(version): return 'http://www.example.com/foo/bar/psutil-%s.tar.gz' % version fc = FakeCrawler([fake_link(v) for v in VERSIONS]) ob = Iterator(crawler=fc) for v in VERSIONS: pkgs = list(ob.iter(Requirement.parse('psutil==%s' % v))) assert len(pkgs) == 1, 'Version: %s' % v assert pkgs[0] == SourcePackage(fake_link(v)) assert list(ob.iter(Requirement.parse('psutil>=0.5.0'))) == [ SourcePackage(fake_link('0.6.0')), SourcePackage(fake_link('0.5.0')) ] assert list(ob.iter(Requirement.parse('psutil'))) == [ SourcePackage(fake_link(v)) for v in reversed(VERSIONS) ]
def test_iter_ordering(): pi = PythonInterpreter.get() tgz = SourcePackage('psutil-0.6.1.tar.gz') egg = EggPackage('psutil-0.6.1-py%s-%s.egg' % (pi.python, get_build_platform())) whl = WheelPackage( 'psutil-0.6.1-cp%s-none-%s.whl' % (pi.python.replace('.', ''), get_build_platform().replace( '-', '_').replace('.', '_').lower())) req = Requirement.parse('psutil') assert list(FakeIterator([tgz, egg, whl]).iter(req)) == [whl, egg, tgz] assert list(FakeIterator([egg, tgz, whl]).iter(req)) == [whl, egg, tgz]
def test_sorter_sort(): pi = PythonInterpreter.get() tgz = SourcePackage('psutil-0.6.1.tar.gz') egg = EggPackage('psutil-0.6.1-py%s-%s.egg' % (pi.python, get_build_platform())) whl = WheelPackage('psutil-0.6.1-cp%s-none-%s.whl' % ( pi.python.replace('.', ''), get_build_platform().replace('-', '_').replace('.', '_').lower())) assert Sorter().sort([tgz, egg, whl]) == [whl, egg, tgz] assert Sorter().sort([egg, tgz, whl]) == [whl, egg, tgz] # test unknown type sorter = Sorter(precedence=(EggPackage, WheelPackage)) assert sorter.sort([egg, tgz, whl], filter=False) == [egg, whl, tgz] assert sorter.sort([egg, tgz, whl], filter=True) == [egg, whl]
def assert_iteration(all_versions, *expected_versions, **iterator_kwargs): def package_url(version): return 'https://pypi.org/packages/source/p/pex/pex-%s.tar.gz' % version urls = [package_url(v) for v in all_versions] crawler_mock = mock.create_autospec(Crawler, spec_set=True) crawler_mock.crawl.return_value = urls iterator = Iterator(crawler=crawler_mock, follow_links=True, **iterator_kwargs) assert list(iterator.iter(Requirement.parse('pex'))) == [ SourcePackage(package_url(v)) for v in expected_versions ] assert len(crawler_mock.crawl.mock_calls) == 1 _, _, kwargs = crawler_mock.crawl.mock_calls[0] assert kwargs == {'follow_links': True}
def test_package_precedence(): source = SourcePackage('psutil-0.6.1.tar.gz') egg = EggPackage('psutil-0.6.1-py2.6.egg') whl = WheelPackage('psutil-0.6.1-cp26-none-macosx_10_4_x86_64.whl') # default precedence assert Sorter.package_precedence(whl) > Sorter.package_precedence(egg) assert Sorter.package_precedence(egg) > Sorter.package_precedence(source) assert Sorter.package_precedence(whl) > Sorter.package_precedence(source) # overridden precedence PRECEDENCE = (EggPackage, WheelPackage) assert Sorter.package_precedence(source, PRECEDENCE) == ( source.version, -1, 0, True, source.url) # unknown rank assert Sorter.package_precedence(whl, PRECEDENCE) > Sorter.package_precedence( source, PRECEDENCE) assert Sorter.package_precedence(egg, PRECEDENCE) > Sorter.package_precedence( whl, PRECEDENCE)
def source_package(version): return SourcePackage('setuptools-%s.tar.gz' % version)