def _test_combine_install_requirements_extras(with_extra, without_extra): combined = combine_install_requirements([without_extra, with_extra]) assert str(combined) == str(with_extra) assert combined.extras == with_extra.extras combined = combine_install_requirements([with_extra, without_extra]) assert str(combined) == str(with_extra) assert combined.extras == with_extra.extras
def test_combine_install_requirements(from_line): celery30 = from_line("celery>3.0", comes_from="-r requirements.in") celery31 = from_line("celery==3.1.1", comes_from=from_line("fake-package")) celery32 = from_line("celery<3.2") combined = combine_install_requirements([celery30, celery31]) assert combined.comes_from == celery31.comes_from # shortest string assert set(combined._source_ireqs) == {celery30, celery31} assert str(combined.req.specifier) == "==3.1.1,>3.0" combined_all = combine_install_requirements([celery32, combined]) assert combined_all.comes_from is None assert set(combined_all._source_ireqs) == {celery30, celery31, celery32} assert str(combined_all.req.specifier) == "<3.2,==3.1.1,>3.0"
def test_combine_install_requirements_for_one_package_with_multiple_extras( from_line, ): """Regression test for https://github.com/jazzband/pip-tools/pull/1512""" pkg1 = from_line("ray[default]==1.1.1") pkg2 = from_line("ray[tune]==1.1.1") combined = combine_install_requirements([pkg1, pkg2]) assert str(combined) == "ray[default,tune]==1.1.1"
def test_combine_install_requirements_with_paths(from_line, make_package): name = "fake_package_b" version = "1.0.0" test_package = make_package(name, version=version) fake_package = from_line(f"{name} @ {path_to_url(test_package)}") fake_package_name = from_line(f"{name}=={version}", comes_from=from_line(name)) for pair in [(fake_package, fake_package_name), (fake_package_name, fake_package)]: combined = combine_install_requirements(pair) assert str(combined.specifier) == str(fake_package_name.specifier) assert str(combined.link) == str(fake_package.link) assert str(combined.local_file_path) == str( fake_package.local_file_path) assert str(combined.original_link) == str(fake_package.original_link)
def test_iter_dependencies_after_combine_install_requirements( pypi_repository, base_resolver, make_package, from_line): res = base_resolver([], repository=pypi_repository) sub_deps = ["click"] package_a = make_package("package-a", install_requires=sub_deps) package_b = make_package("package-b", install_requires=["package-a"]) local_package_a = from_line(path_to_url(package_a)) assert [dep.name for dep in res._iter_dependencies(local_package_a)] == sub_deps package_a_from_b = from_line("package-a", comes_from=path_to_url(package_b)) combined = combine_install_requirements( [local_package_a, package_a_from_b]) assert [dep.name for dep in res._iter_dependencies(combined)] == sub_deps
def test_iter_dependencies_after_combine_install_requirements_extras( pypi_repository, base_resolver, make_package, from_line): res = base_resolver([], repository=pypi_repository) package_a = make_package("package-a", extras_require={ "click": ["click"], "celery": ["celery"] }) package_b = make_package("package-b", install_requires=["package-a"]) local_package_a = from_line(path_to_url(package_a)) assert [dep.name for dep in res._iter_dependencies(local_package_a)] == [] package_a_from_b = from_line("package-a[click]", comes_from=path_to_url(package_b)) package_a_with_other_extra = from_line("package-a[celery]") combined = combine_install_requirements( [local_package_a, package_a_from_b, package_a_with_other_extra]) dependency_names = {dep.name for dep in res._iter_dependencies(combined)} assert {"celery", "click"}.issubset(dependency_names)