def test_non_editable_no_override_editable(project, working_set, is_editable): project.environment.python_requires = PySpecSet(">=3.6") actions.do_add( project, editables=[ "git+https://github.com/test-root/demo.git#egg=demo", "git+https://github.com/test-root/demo-module.git#egg=demo-module", ], ) actions.do_add( project, packages=["git+https://github.com/test-root/demo.git#egg=demo"], no_editable=not is_editable, ) assert working_set["demo-module"].link_file assert bool(working_set["demo"].link_file) is is_editable dependencies = project.get_pyproject_dependencies("default") if is_editable: assert dependencies == [ "-e git+https://github.com/test-root/demo.git#egg=demo", "-e git+https://github.com/test-root/demo-module.git#egg=demo-module", "demo @ git+https://github.com/test-root/demo.git", ] else: assert dependencies == [ "demo @ git+https://github.com/test-root/demo.git", "-e git+https://github.com/test-root/demo-module.git#egg=demo-module", ]
def test_update_all_packages(project, repository, capsys): actions.do_add(project, packages=["requests", "pytz"]) repository.add_candidate("pytz", "2019.6") repository.add_candidate("chardet", "3.0.5") repository.add_candidate("requests", "2.20.0") repository.add_dependencies( "requests", "2.20.0", [ "certifi>=2017.4.17", "chardet<3.1.0,>=3.0.2", "idna<2.8,>=2.5", "urllib3<1.24,>=1.21.1", ], ) actions.do_update(project) locked_candidates = project.get_locked_candidates() assert locked_candidates["requests"].version == "2.20.0" assert locked_candidates["chardet"].version == "3.0.5" assert locked_candidates["pytz"].version == "2019.6" out, _ = capsys.readouterr() assert "3 to update" in out actions.do_sync(project) out, _ = capsys.readouterr() assert "All packages are synced to date" in out
def test_add_dependency_from_multiple_parents(project, working_set, mocker): mocker.patch( "pdm.models.environment.get_pep508_environment", return_value={"platform_system": "Darwin"}, ) actions.do_add(project, packages=["requests", "chardet; platform_system!='Darwin'"]) assert "chardet" in working_set
def test_add_editable_package(project, working_set, is_dev): # Ensure that correct python version is used. project.environment.python_requires = PySpecSet(">=3.6") actions.do_add(project, is_dev, packages=["demo"]) actions.do_add( project, is_dev, editables=["git+https://github.com/test-root/demo.git#egg=demo"], ) group = ( project.tool_settings["dev-dependencies"]["dev"] if is_dev else project.meta["dependencies"] ) assert "demo" in group[0] assert "-e git+https://github.com/test-root/demo.git#egg=demo" in group[1] locked_candidates = project.locked_repository.all_candidates assert ( locked_candidates["demo"].prepare(project.environment).revision == "1234567890abcdef" ) assert locked_candidates["idna"].version == "2.7" assert "idna" in working_set actions.do_sync(project, no_editable=True) assert not working_set["demo"].link_file
def test_update_all_packages(project, repository, capsys, strategy): actions.do_add(project, packages=["requests", "pytz"]) repository.add_candidate("pytz", "2019.6") repository.add_candidate("chardet", "3.0.5") repository.add_candidate("requests", "2.20.0") repository.add_dependencies( "requests", "2.20.0", [ "certifi>=2017.4.17", "chardet<3.1.0,>=3.0.2", "idna<2.8,>=2.5", "urllib3<1.24,>=1.21.1", ], ) actions.do_update(project, strategy=strategy) locked_candidates = project.locked_repository.all_candidates assert locked_candidates["requests"].version == "2.20.0" assert locked_candidates["chardet"].version == ("3.0.5" if strategy == "all" else "3.0.4") assert locked_candidates["pytz"].version == "2019.6" out, _ = capsys.readouterr() update_num = 3 if strategy == "all" else 2 assert f"{update_num} to update" in out, out actions.do_sync(project) out, _ = capsys.readouterr() assert "All packages are synced to date" in out
def test_add_package_with_mismatch_marker(project, working_set, mocker): mocker.patch( "pdm.models.environment.get_pep508_environment", return_value={"platform_system": "Darwin"}, ) actions.do_add(project, packages=["requests", "pytz; platform_system!='Darwin'"]) assert "pytz" not in working_set
def test_update_with_package_and_sections_argument(project): actions.do_add(project, packages=["requests", "pytz"]) with pytest.raises(PdmUsageError): actions.do_update(project, sections=("default", "dev"), packages=("requests",)) with pytest.raises(PdmUsageError): actions.do_update(project, default=False, packages=("requests",))
def test_sync_in_sequential_mode(project, working_set, capsys): project.project_config["parallel_install"] = False actions.do_add(project, packages=["requests"]) out, _ = capsys.readouterr() assert "5 to add" in out assert "test-project" in working_set assert working_set["chardet"].version == "3.0.4"
def test_add_package_update_eager(project, repository): actions.do_add(project, sync=False, save="wildcard", packages=["requests", "pytz"]) locked_candidates = project.locked_repository.all_candidates assert locked_candidates["requests"].version == "2.19.1" assert locked_candidates["chardet"].version == "3.0.4" assert locked_candidates["pytz"].version == "2019.3" repository.add_candidate("pytz", "2019.6") repository.add_candidate("chardet", "3.0.5") repository.add_candidate("requests", "2.20.0") repository.add_dependencies( "requests", "2.20.0", [ "certifi>=2017.4.17", "chardet<3.1.0,>=3.0.2", "idna<2.8,>=2.5", "urllib3<1.24,>=1.21.1", ], ) actions.do_add(project, sync=False, save="wildcard", packages=["requests"], strategy="eager") locked_candidates = project.locked_repository.all_candidates assert locked_candidates["requests"].version == "2.20.0" assert locked_candidates["chardet"].version == "3.0.5" assert locked_candidates["pytz"].version == "2019.3"
def test_remove_package_exist_in_multi_section(project, working_set): actions.do_add(project, packages=["requests"]) actions.do_add(project, dev=True, packages=["urllib3"]) actions.do_remove(project, dev=True, packages=["urllib3"]) assert not any("urllib3" in line for line in project.meta["dev-dependencies"]) assert "urllib3" in working_set assert "requests" in working_set
def test_add_package_to_custom_package(project, repository, working_set): actions.do_add(project, section="test", packages=["requests"]) assert "requests" in project.tool_settings["test-dependencies"] locked_candidates = project.get_locked_candidates("test") assert locked_candidates["idna"].version == "2.7" for package in ("requests", "idna", "chardet", "urllib3", "certifi"): assert package in working_set
def test_remove_package_exist_in_multi_section(project, repository, working_set): actions.do_add(project, packages=["requests"]) actions.do_add(project, dev=True, packages=["urllib3"]) actions.do_remove(project, dev=True, packages=["urllib3"]) assert "urllib3" not in project.tool_settings["dev-dependencies"] assert "urllib3" in working_set assert "requests" in working_set
def test_add_package_to_custom_section(project, working_set): actions.do_add(project, section="test", packages=["requests"]) assert "requests" in project.meta.optional_dependencies["test"][0] locked_candidates = project.locked_repository.all_candidates assert locked_candidates["idna"].version == "2.7" for package in ("requests", "idna", "chardet", "urllib3", "certifi"): assert package in working_set
def test_remove_package_exist_in_multi_groups(project, working_set): actions.do_add(project, packages=["requests"]) actions.do_add(project, dev=True, packages=["urllib3"]) actions.do_remove(project, dev=True, packages=["urllib3"]) assert all("urllib3" not in line for line in project.tool_settings["dev-dependencies"]["dev"]) assert "urllib3" in working_set assert "requests" in working_set
def test_freeze_dependencies_list(project, capsys, mocker): actions.do_add(project, packages=["requests"]) capsys.readouterr() mocker.patch("pdm.cli.actions.frozen_requirement_from_dist", side_effect=lambda d: d.as_req()) actions.do_list(project, freeze=True) content, _ = capsys.readouterr() assert "requests==2.19.1" in content assert "urllib3==1.22" in content
def test_remove_package_with_dry_run(project, working_set, capsys): actions.do_add(project, packages=["requests"]) actions.do_remove(project, packages=["requests"], dry_run=True) out, _ = capsys.readouterr() project._lockfile = None locked_candidates = project.locked_repository.all_candidates assert "urllib3" in locked_candidates assert "urllib3" in working_set assert "- urllib3 1.22" in out
def test_add_package_to_custom_dev_section(project, working_set): actions.do_add(project, dev=True, section="test", packages=["requests"]) dependencies = project.tool_settings["dev-dependencies"]["test"] assert "requests" in dependencies[0] locked_candidates = project.locked_repository.all_candidates assert locked_candidates["idna"].version == "2.7" for package in ("requests", "idna", "chardet", "urllib3", "certifi"): assert package in working_set
def test_list_dependency_graph_with_circular(project, capsys, repository): repository.add_candidate("foo", "0.1.0") repository.add_candidate("foo-bar", "0.1.0") repository.add_dependencies("foo", "0.1.0", ["foo-bar"]) repository.add_dependencies("foo-bar", "0.1.0", ["foo"]) actions.do_add(project, packages=["foo"]) actions.do_list(project, True) content, _ = capsys.readouterr() assert "foo [circular]" in content
def test_add_package(project, working_set, is_dev): actions.do_add(project, is_dev, packages=["requests"]) section = (project.tool_settings["dev-dependencies"]["dev"] if is_dev else project.meta["dependencies"]) assert section[0] == "requests~=2.19" locked_candidates = project.locked_repository.all_candidates assert locked_candidates["idna"].version == "2.7" for package in ("requests", "idna", "chardet", "urllib3", "certifi"): assert package in working_set
def test_add_package(project, working_set, is_dev): actions.do_add(project, is_dev, packages=["requests"]) section = "dev-dependencies" if is_dev else "dependencies" assert project.meta[section][0] == "requests~=2.19" locked_candidates = project.get_locked_candidates( "dev" if is_dev else "default") assert locked_candidates["idna"].version == "2.7" for package in ("requests", "idna", "chardet", "urllib3", "certifi"): assert package in working_set
def test_editable_package_override_non_editable(project, working_set): project.environment.python_requires = PySpecSet(">=3.6") actions.do_add( project, packages=["git+https://github.com/test-root/demo.git#egg=demo"]) actions.do_add( project, editables=["git+https://github.com/test-root/demo.git#egg=demo"], ) assert working_set["demo"].editable
def test_sync_clean_packages(project, repository, working_set): for candidate in [ make_distribution("foo", "0.1.0"), make_distribution("chardet", "3.0.1"), make_distribution("idna", "2.7"), ]: working_set.add_distribution(candidate) actions.do_add(project, packages=["requests"], sync=False) actions.do_sync(project, clean=True) assert "foo" not in working_set
def test_update_with_package_and_sections_argument(project, repository, working_set): actions.do_add(project, packages=["requests", "pytz"]) with pytest.raises(click.BadParameter): actions.do_update(project, sections=("default", "dev"), packages=("requests", )) with pytest.raises(click.BadParameter): actions.do_update(project, default=False, packages=("requests", ))
def test_sync_only_different(project, working_set, capsys): working_set.add_distribution(make_distribution("foo", "0.1.0")) working_set.add_distribution(make_distribution("chardet", "3.0.1")) working_set.add_distribution(make_distribution("idna", "2.7")) actions.do_add(project, packages=["requests"]) out, _ = capsys.readouterr() assert "3 to add" in out assert "1 to update" in out assert "foo" in working_set assert "test-project" in working_set assert working_set["chardet"].version == "3.0.4"
def handle(self, project: Project, options: argparse.Namespace) -> None: actions.do_add( project, dev=options.dev, section=options.section, sync=options.sync, save=options.save_strategy, strategy=options.update_strategy, editables=options.editables, packages=options.packages, )
def test_sync_only_different(project, repository, working_set, capsys): working_set.add_candidate(make_candidate("foo", "0.1.0")) working_set.add_candidate(make_candidate("chardet", "3.0.1")) working_set.add_candidate(make_candidate("idna", "2.7")) actions.do_add(project, packages=["requests"]) out, _ = capsys.readouterr() assert "4 packages added" in out assert "1 package updated" in out assert "foo" in working_set assert "test-project" in working_set assert working_set["chardet"].version == "3.0.4"
def test_sync_dry_run(project, working_set): for candidate in [ make_distribution("foo", "0.1.0"), make_distribution("chardet", "3.0.1"), make_distribution("idna", "2.7"), ]: working_set.add_distribution(candidate) actions.do_add(project, packages=["requests"], sync=False) actions.do_sync(project, clean=True, dry_run=True) assert "foo" in working_set assert "requests" not in working_set assert working_set["chardet"].version == "3.0.1"
def test_update_ignore_constraints(project, repository): actions.do_add(project, packages=("pytz", )) assert project.meta.dependencies == ["pytz~=2019.3"] repository.add_candidate("pytz", "2020.2") actions.do_update(project, unconstrained=False, packages=("pytz", )) assert project.meta.dependencies == ["pytz~=2019.3"] assert project.get_locked_candidates()["pytz"].version == "2019.3" actions.do_update(project, unconstrained=True, packages=("pytz", )) assert project.meta.dependencies == ["pytz~=2020.2"] assert project.get_locked_candidates()["pytz"].version == "2020.2"
def test_add_remote_package_url(project, is_dev): actions.do_add( project, is_dev, packages=[ "http://fixtures.test/artifacts/demo-0.0.1-py2.py3-none-any.whl" ], ) section = "dev-dependencies" if is_dev else "dependencies" assert ( project.meta[section][0] == "demo @ http://fixtures.test/artifacts/demo-0.0.1-py2.py3-none-any.whl" )
def test_remove_both_normal_and_editable_packages(project, is_dev): project.environment.python_requires = PySpecSet(">=3.6") actions.do_add(project, is_dev, packages=["demo"]) actions.do_add( project, is_dev, editables=["git+https://github.com/test-root/demo.git#egg=demo"], ) section = "dev-dependencies" if is_dev else "dependencies" actions.do_remove(project, is_dev, packages=["demo"]) assert not project.meta[section] assert "demo" not in project.get_locked_candidates( "dev" if is_dev else "default")