From b8fd4a1233c858fca678ebf4b0c06cc42f5b554b Mon Sep 17 00:00:00 2001 From: David Hotham Date: Sun, 3 Mar 2024 19:18:51 +0000 Subject: [PATCH] remove unwanted generated files from fixtures (#9103) --- .gitignore | 22 -- .../demo/demo/demo.egg-info/PKG-INFO | 10 - .../demo/demo/demo.egg-info/SOURCES.txt | 7 - .../demo/demo.egg-info/dependency_links.txt | 1 - .../demo/demo/demo.egg-info/requires.txt | 7 - .../demo/demo/demo.egg-info/top_level.txt | 1 - .../no-dependencies/demo.egg-info/PKG-INFO | 12 - .../no-dependencies/demo.egg-info/SOURCES.txt | 6 - .../demo.egg-info/dependency_links.txt | 1 - .../demo.egg-info/top_level.txt | 1 - .../non-canonical-name/Demo.egg-info/PKG-INFO | 14 - .../Demo.egg-info/SOURCES.txt | 7 - .../Demo.egg-info/dependency_links.txt | 1 - .../Demo.egg-info/requires.txt | 7 - .../Demo.egg-info/top_level.txt | 1 - .../project_with_setup.egg-info/PKG-INFO | 10 - .../project_with_setup.egg-info/SOURCES.txt | 7 - .../dependency_links.txt | 0 .../project_with_setup.egg-info/requires.txt | 2 - .../project_with_setup.egg-info/top_level.txt | 1 - tests/helpers.py | 21 +- .../with-directory-dependency-setuptools.test | 2 +- tests/installation/test_chef.py | 5 +- tests/installation/test_installer.py | 7 +- tests/puzzle/test_provider.py | 242 +++++++++--------- tests/puzzle/test_solver.py | 91 +++++-- 26 files changed, 217 insertions(+), 269 deletions(-) delete mode 100644 tests/fixtures/git/github.com/demo/demo/demo.egg-info/PKG-INFO delete mode 100644 tests/fixtures/git/github.com/demo/demo/demo.egg-info/SOURCES.txt delete mode 100644 tests/fixtures/git/github.com/demo/demo/demo.egg-info/dependency_links.txt delete mode 100644 tests/fixtures/git/github.com/demo/demo/demo.egg-info/requires.txt delete mode 100644 tests/fixtures/git/github.com/demo/demo/demo.egg-info/top_level.txt delete mode 100644 tests/fixtures/git/github.com/demo/no-dependencies/demo.egg-info/PKG-INFO delete mode 100644 tests/fixtures/git/github.com/demo/no-dependencies/demo.egg-info/SOURCES.txt delete mode 100644 tests/fixtures/git/github.com/demo/no-dependencies/demo.egg-info/dependency_links.txt delete mode 100644 tests/fixtures/git/github.com/demo/no-dependencies/demo.egg-info/top_level.txt delete mode 100644 tests/fixtures/git/github.com/demo/non-canonical-name/Demo.egg-info/PKG-INFO delete mode 100644 tests/fixtures/git/github.com/demo/non-canonical-name/Demo.egg-info/SOURCES.txt delete mode 100644 tests/fixtures/git/github.com/demo/non-canonical-name/Demo.egg-info/dependency_links.txt delete mode 100644 tests/fixtures/git/github.com/demo/non-canonical-name/Demo.egg-info/requires.txt delete mode 100644 tests/fixtures/git/github.com/demo/non-canonical-name/Demo.egg-info/top_level.txt delete mode 100644 tests/fixtures/project_with_setup/project_with_setup.egg-info/PKG-INFO delete mode 100644 tests/fixtures/project_with_setup/project_with_setup.egg-info/SOURCES.txt delete mode 100644 tests/fixtures/project_with_setup/project_with_setup.egg-info/dependency_links.txt delete mode 100644 tests/fixtures/project_with_setup/project_with_setup.egg-info/requires.txt delete mode 100644 tests/fixtures/project_with_setup/project_with_setup.egg-info/top_level.txt diff --git a/.gitignore b/.gitignore index a5900a679ce..5c00c6abd23 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,7 @@ *.pyc # Packages -*.egg -!/tests/**/*.egg -/*.egg-info /dist/* -build -_build -.cache -*.so - -# Installer logs -pip-log.txt # Unit test / coverage reports .coverage @@ -22,20 +12,8 @@ pip-log.txt .python-version .vscode/* -/test.py -/test_*.* - -/setup.cfg -MANIFEST.in -/setup.py /docs/site/* -/tests/fixtures/simple_project/setup.py -/tests/fixtures/project_with_extras/setup.py .mypy_cache .venv -/releases/* -pip-wheel-metadata /poetry.toml - -poetry/core/* diff --git a/tests/fixtures/git/github.com/demo/demo/demo.egg-info/PKG-INFO b/tests/fixtures/git/github.com/demo/demo/demo.egg-info/PKG-INFO deleted file mode 100644 index c6d97810e1b..00000000000 --- a/tests/fixtures/git/github.com/demo/demo/demo.egg-info/PKG-INFO +++ /dev/null @@ -1,10 +0,0 @@ -Metadata-Version: 2.1 -Name: demo -Version: 0.1.2 -Summary: Demo project. -Home-page: https://github.com/demo/demo -Author: Sébastien Eustace -Author-email: sebastien@eustace.io -License: MIT -Provides-Extra: foo -Provides-Extra: bar diff --git a/tests/fixtures/git/github.com/demo/demo/demo.egg-info/SOURCES.txt b/tests/fixtures/git/github.com/demo/demo/demo.egg-info/SOURCES.txt deleted file mode 100644 index 3c0a858a0ae..00000000000 --- a/tests/fixtures/git/github.com/demo/demo/demo.egg-info/SOURCES.txt +++ /dev/null @@ -1,7 +0,0 @@ -setup.py -demo/__init__.py -demo.egg-info/PKG-INFO -demo.egg-info/SOURCES.txt -demo.egg-info/dependency_links.txt -demo.egg-info/requires.txt -demo.egg-info/top_level.txt \ No newline at end of file diff --git a/tests/fixtures/git/github.com/demo/demo/demo.egg-info/dependency_links.txt b/tests/fixtures/git/github.com/demo/demo/demo.egg-info/dependency_links.txt deleted file mode 100644 index 8b137891791..00000000000 --- a/tests/fixtures/git/github.com/demo/demo/demo.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/fixtures/git/github.com/demo/demo/demo.egg-info/requires.txt b/tests/fixtures/git/github.com/demo/demo/demo.egg-info/requires.txt deleted file mode 100644 index e05a65d3c93..00000000000 --- a/tests/fixtures/git/github.com/demo/demo/demo.egg-info/requires.txt +++ /dev/null @@ -1,7 +0,0 @@ -pendulum>=1.4.4 - -[bar] -tomlkit - -[foo] -cleo diff --git a/tests/fixtures/git/github.com/demo/demo/demo.egg-info/top_level.txt b/tests/fixtures/git/github.com/demo/demo/demo.egg-info/top_level.txt deleted file mode 100644 index 1549b67ca59..00000000000 --- a/tests/fixtures/git/github.com/demo/demo/demo.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -demo diff --git a/tests/fixtures/git/github.com/demo/no-dependencies/demo.egg-info/PKG-INFO b/tests/fixtures/git/github.com/demo/no-dependencies/demo.egg-info/PKG-INFO deleted file mode 100644 index f25539da155..00000000000 --- a/tests/fixtures/git/github.com/demo/no-dependencies/demo.egg-info/PKG-INFO +++ /dev/null @@ -1,12 +0,0 @@ -Metadata-Version: 1.0 -Name: demo -Version: 0.1.2 -Summary: Demo project. -Home-page: https://github.com/demo/demo -Author: Sébastien Eustace -Author-email: sebastien@eustace.io -License: MIT -Platform: UNKNOWN - -UNKNOWN - diff --git a/tests/fixtures/git/github.com/demo/no-dependencies/demo.egg-info/SOURCES.txt b/tests/fixtures/git/github.com/demo/no-dependencies/demo.egg-info/SOURCES.txt deleted file mode 100644 index 82ad011189b..00000000000 --- a/tests/fixtures/git/github.com/demo/no-dependencies/demo.egg-info/SOURCES.txt +++ /dev/null @@ -1,6 +0,0 @@ -setup.py -demo/__init__.py -demo.egg-info/PKG-INFO -demo.egg-info/SOURCES.txt -demo.egg-info/dependency_links.txt -demo.egg-info/top_level.txt \ No newline at end of file diff --git a/tests/fixtures/git/github.com/demo/no-dependencies/demo.egg-info/dependency_links.txt b/tests/fixtures/git/github.com/demo/no-dependencies/demo.egg-info/dependency_links.txt deleted file mode 100644 index 8b137891791..00000000000 --- a/tests/fixtures/git/github.com/demo/no-dependencies/demo.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/fixtures/git/github.com/demo/no-dependencies/demo.egg-info/top_level.txt b/tests/fixtures/git/github.com/demo/no-dependencies/demo.egg-info/top_level.txt deleted file mode 100644 index 1549b67ca59..00000000000 --- a/tests/fixtures/git/github.com/demo/no-dependencies/demo.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -demo diff --git a/tests/fixtures/git/github.com/demo/non-canonical-name/Demo.egg-info/PKG-INFO b/tests/fixtures/git/github.com/demo/non-canonical-name/Demo.egg-info/PKG-INFO deleted file mode 100644 index 662e914105a..00000000000 --- a/tests/fixtures/git/github.com/demo/non-canonical-name/Demo.egg-info/PKG-INFO +++ /dev/null @@ -1,14 +0,0 @@ -Metadata-Version: 2.1 -Name: Demo -Version: 0.1.2 -Summary: Demo project. -Home-page: https://github.com/demo/demo -Author: Sébastien Eustace -Author-email: sebastien@eustace.io -License: MIT -Platform: UNKNOWN -Provides-Extra: foo -Provides-Extra: bar - -UNKNOWN - diff --git a/tests/fixtures/git/github.com/demo/non-canonical-name/Demo.egg-info/SOURCES.txt b/tests/fixtures/git/github.com/demo/non-canonical-name/Demo.egg-info/SOURCES.txt deleted file mode 100644 index a435a7172a7..00000000000 --- a/tests/fixtures/git/github.com/demo/non-canonical-name/Demo.egg-info/SOURCES.txt +++ /dev/null @@ -1,7 +0,0 @@ -setup.py -Demo.egg-info/PKG-INFO -Demo.egg-info/SOURCES.txt -Demo.egg-info/dependency_links.txt -Demo.egg-info/requires.txt -Demo.egg-info/top_level.txt -demo/__init__.py \ No newline at end of file diff --git a/tests/fixtures/git/github.com/demo/non-canonical-name/Demo.egg-info/dependency_links.txt b/tests/fixtures/git/github.com/demo/non-canonical-name/Demo.egg-info/dependency_links.txt deleted file mode 100644 index 8b137891791..00000000000 --- a/tests/fixtures/git/github.com/demo/non-canonical-name/Demo.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/fixtures/git/github.com/demo/non-canonical-name/Demo.egg-info/requires.txt b/tests/fixtures/git/github.com/demo/non-canonical-name/Demo.egg-info/requires.txt deleted file mode 100644 index e05a65d3c93..00000000000 --- a/tests/fixtures/git/github.com/demo/non-canonical-name/Demo.egg-info/requires.txt +++ /dev/null @@ -1,7 +0,0 @@ -pendulum>=1.4.4 - -[bar] -tomlkit - -[foo] -cleo diff --git a/tests/fixtures/git/github.com/demo/non-canonical-name/Demo.egg-info/top_level.txt b/tests/fixtures/git/github.com/demo/non-canonical-name/Demo.egg-info/top_level.txt deleted file mode 100644 index 1549b67ca59..00000000000 --- a/tests/fixtures/git/github.com/demo/non-canonical-name/Demo.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -demo diff --git a/tests/fixtures/project_with_setup/project_with_setup.egg-info/PKG-INFO b/tests/fixtures/project_with_setup/project_with_setup.egg-info/PKG-INFO deleted file mode 100644 index 1204da0c96c..00000000000 --- a/tests/fixtures/project_with_setup/project_with_setup.egg-info/PKG-INFO +++ /dev/null @@ -1,10 +0,0 @@ -Metadata-Version: 1.0 -Name: project-with-setup -Version: 0.1.2 -Summary: Demo project. -Home-page: https://github.com/demo/demo -Author: Sébastien Eustace -Author-email: sebastien@eustace.io -License: MIT -Description: UNKNOWN -Platform: UNKNOWN diff --git a/tests/fixtures/project_with_setup/project_with_setup.egg-info/SOURCES.txt b/tests/fixtures/project_with_setup/project_with_setup.egg-info/SOURCES.txt deleted file mode 100644 index f5255dc9dad..00000000000 --- a/tests/fixtures/project_with_setup/project_with_setup.egg-info/SOURCES.txt +++ /dev/null @@ -1,7 +0,0 @@ -setup.py -my_package/__init__.py -my_package.egg-info/PKG-INFO -my_package.egg-info/SOURCES.txt -my_package.egg-info/dependency_links.txt -my_package.egg-info/requires.txt -my_package.egg-info/top_level.txt diff --git a/tests/fixtures/project_with_setup/project_with_setup.egg-info/dependency_links.txt b/tests/fixtures/project_with_setup/project_with_setup.egg-info/dependency_links.txt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/tests/fixtures/project_with_setup/project_with_setup.egg-info/requires.txt b/tests/fixtures/project_with_setup/project_with_setup.egg-info/requires.txt deleted file mode 100644 index eeb0a4815ce..00000000000 --- a/tests/fixtures/project_with_setup/project_with_setup.egg-info/requires.txt +++ /dev/null @@ -1,2 +0,0 @@ -pendulum>=1.4.4 -cachy[msgpack]>=0.2.0 diff --git a/tests/fixtures/project_with_setup/project_with_setup.egg-info/top_level.txt b/tests/fixtures/project_with_setup/project_with_setup.egg-info/top_level.txt deleted file mode 100644 index 5d04b540bc9..00000000000 --- a/tests/fixtures/project_with_setup/project_with_setup.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -my_package diff --git a/tests/helpers.py b/tests/helpers.py index d222a7be0b5..cb15db558f6 100644 --- a/tests/helpers.py +++ b/tests/helpers.py @@ -4,7 +4,6 @@ import os import re import shutil -import sys import urllib.parse from pathlib import Path @@ -74,24 +73,16 @@ def get_dependency( return Factory.create_dependency(name, constraint or "*", groups=groups) -def copy_or_symlink(source: Path, dest: Path) -> None: +def copy_path(source: Path, dest: Path) -> None: if dest.is_symlink() or dest.is_file(): dest.unlink() # missing_ok is only available in Python >= 3.8 elif dest.is_dir(): shutil.rmtree(dest) - # os.symlink requires either administrative privileges or developer mode on Win10, - # throwing an OSError if neither is active. - if sys.platform == "win32": - try: - os.symlink(str(source), str(dest), target_is_directory=source.is_dir()) - except OSError: - if source.is_dir(): - shutil.copytree(str(source), str(dest)) - else: - shutil.copyfile(str(source), str(dest)) + if source.is_dir(): + shutil.copytree(source, dest) else: - os.symlink(str(source), str(dest)) + shutil.copyfile(source, dest) class MockDulwichRepo: @@ -122,7 +113,7 @@ def mock_clone( dest = source_root / path dest.parent.mkdir(parents=True, exist_ok=True) - copy_or_symlink(folder, dest) + copy_path(folder, dest) return MockDulwichRepo(dest) @@ -138,7 +129,7 @@ def mock_download( fixture = FIXTURE_PATH / parts.path.lstrip("/") - copy_or_symlink(fixture, dest) + copy_path(fixture, dest) class TestExecutor(Executor): diff --git a/tests/installation/fixtures/with-directory-dependency-setuptools.test b/tests/installation/fixtures/with-directory-dependency-setuptools.test index 8557b067dd3..ed396a7cdc3 100644 --- a/tests/installation/fixtures/with-directory-dependency-setuptools.test +++ b/tests/installation/fixtures/with-directory-dependency-setuptools.test @@ -25,7 +25,7 @@ files = [] [package.source] type = "directory" -url = "tests/fixtures/project_with_setup" +url = "project" [package.dependencies] cachy = {version = ">=0.2.0", extras = ["msgpack"]} diff --git a/tests/installation/test_chef.py b/tests/installation/test_chef.py index 30c5c380550..1df347982d6 100644 --- a/tests/installation/test_chef.py +++ b/tests/installation/test_chef.py @@ -133,10 +133,13 @@ def test_prepare_directory_with_extensions( config_cache_dir: Path, artifact_cache: ArtifactCache, fixture_dir: FixtureDirGetter, + tmp_path: Path, ) -> None: env = EnvManager.get_system_env() chef = Chef(artifact_cache, env, Factory.create_pool(config)) - archive = fixture_dir("extended_with_no_setup").resolve() + archive = shutil.copytree( + fixture_dir("extended_with_no_setup").resolve(), tmp_path / "project" + ) wheel = chef.prepare(archive) diff --git a/tests/installation/test_installer.py b/tests/installation/test_installer.py index 0d7a898ceb6..d27d2166162 100644 --- a/tests/installation/test_installer.py +++ b/tests/installation/test_installer.py @@ -2,6 +2,7 @@ import json import re +import shutil from pathlib import Path from typing import TYPE_CHECKING @@ -1298,13 +1299,13 @@ def test_run_installs_with_local_setuptools_directory( locker: Locker, repo: Repository, package: ProjectPackage, - tmpdir: Path, + tmp_path: Path, fixture_dir: FixtureDirGetter, ) -> None: - root_dir = Path(__file__).parent.parent.parent + root_dir = tmp_path / "root" package.root_dir = root_dir locker.set_lock_path(root_dir) - file_path = fixture_dir("project_with_setup/") + file_path = shutil.copytree(fixture_dir("project_with_setup"), root_dir / "project") package.add_dependency( Factory.create_dependency( "project-with-setup", diff --git a/tests/puzzle/test_provider.py b/tests/puzzle/test_provider.py index 1e1b03acc42..d79ecdba92d 100644 --- a/tests/puzzle/test_provider.py +++ b/tests/puzzle/test_provider.py @@ -1,5 +1,8 @@ from __future__ import annotations +import shutil + +from pathlib import Path from subprocess import CalledProcessError from typing import TYPE_CHECKING from typing import Any @@ -31,6 +34,8 @@ if TYPE_CHECKING: + from pathlib import Path + from pytest_mock import MockerFixture from tests.types import FixtureDirGetter @@ -179,10 +184,10 @@ def test_search_for_vcs_setup_egg_info(provider: Provider) -> None: assert package.name == "demo" assert package.version.text == "0.1.2" - required = [r for r in package.requires if not r.is_optional()] - optional = [r for r in package.requires if r.is_optional()] - assert required == [get_dependency("pendulum", ">=1.4.4")] - assert optional == [get_dependency("tomlkit"), get_dependency("cleo")] + required = {r for r in package.requires if not r.is_optional()} + optional = {r for r in package.requires if r.is_optional()} + assert required == {get_dependency("pendulum", ">=1.4.4")} + assert optional == {get_dependency("tomlkit"), get_dependency("cleo")} assert package.extras == { "foo": [get_dependency("cleo")], "bar": [get_dependency("tomlkit")], @@ -199,10 +204,10 @@ def test_search_for_vcs_setup_egg_info_with_extras(provider: Provider) -> None: assert package.name == "demo" assert package.version.text == "0.1.2" - required = [r for r in package.requires if not r.is_optional()] - optional = [r for r in package.requires if r.is_optional()] - assert required == [get_dependency("pendulum", ">=1.4.4")] - assert optional == [get_dependency("tomlkit"), get_dependency("cleo")] + required = {r for r in package.requires if not r.is_optional()} + optional = {r for r in package.requires if r.is_optional()} + assert required == {get_dependency("pendulum", ">=1.4.4")} + assert optional == {get_dependency("tomlkit"), get_dependency("cleo")} assert package.extras == { "foo": [get_dependency("cleo")], "bar": [get_dependency("tomlkit")], @@ -219,10 +224,10 @@ def test_search_for_vcs_read_setup(provider: Provider, mocker: MockerFixture) -> assert package.name == "demo" assert package.version.text == "0.1.2" - required = [r for r in package.requires if not r.is_optional()] - optional = [r for r in package.requires if r.is_optional()] - assert required == [get_dependency("pendulum", ">=1.4.4")] - assert optional == [get_dependency("tomlkit"), get_dependency("cleo")] + required = {r for r in package.requires if not r.is_optional()} + optional = {r for r in package.requires if r.is_optional()} + assert required == {get_dependency("pendulum", ">=1.4.4")} + assert optional == {get_dependency("tomlkit"), get_dependency("cleo")} assert package.extras == { "foo": [get_dependency("cleo")], "bar": [get_dependency("tomlkit")], @@ -243,10 +248,10 @@ def test_search_for_vcs_read_setup_with_extras( assert package.name == "demo" assert package.version.text == "0.1.2" - required = [r for r in package.requires if not r.is_optional()] - optional = [r for r in package.requires if r.is_optional()] - assert required == [get_dependency("pendulum", ">=1.4.4")] - assert optional == [get_dependency("tomlkit"), get_dependency("cleo")] + required = {r for r in package.requires if not r.is_optional()} + optional = {r for r in package.requires if r.is_optional()} + assert required == {get_dependency("pendulum", ">=1.4.4")} + assert optional == {get_dependency("tomlkit"), get_dependency("cleo")} def test_search_for_vcs_read_setup_raises_error_if_no_version( @@ -265,22 +270,22 @@ def test_search_for_vcs_read_setup_raises_error_if_no_version( @pytest.mark.parametrize("directory", ["demo", "non-canonical-name"]) def test_search_for_directory_setup_egg_info( - provider: Provider, directory: str, fixture_dir: FixtureDirGetter + provider: Provider, directory: str, fixture_dir: FixtureDirGetter, tmp_path: Path ) -> None: - dependency = DirectoryDependency( - "demo", - fixture_dir("git") / "github.com" / "demo" / directory, + path = shutil.copytree( + fixture_dir("git") / "github.com" / "demo" / directory, tmp_path / "project" ) + dependency = DirectoryDependency("demo", path) package = provider.search_for_direct_origin_dependency(dependency) assert package.name == "demo" assert package.version.text == "0.1.2" - required = [r for r in package.requires if not r.is_optional()] - optional = [r for r in package.requires if r.is_optional()] - assert required == [get_dependency("pendulum", ">=1.4.4")] - assert optional == [get_dependency("tomlkit"), get_dependency("cleo")] + required = {r for r in package.requires if not r.is_optional()} + optional = {r for r in package.requires if r.is_optional()} + assert required == {get_dependency("pendulum", ">=1.4.4")} + assert optional == {get_dependency("tomlkit"), get_dependency("cleo")} assert package.extras == { "foo": [get_dependency("cleo")], "bar": [get_dependency("tomlkit")], @@ -288,23 +293,23 @@ def test_search_for_directory_setup_egg_info( def test_search_for_directory_setup_egg_info_with_extras( - provider: Provider, fixture_dir: FixtureDirGetter + provider: Provider, fixture_dir: FixtureDirGetter, tmp_path: Path ) -> None: - dependency = DirectoryDependency( - "demo", - fixture_dir("git") / "github.com" / "demo" / "demo", - extras=["foo"], + path = shutil.copytree( + fixture_dir("git") / "github.com" / "demo" / "demo", tmp_path / "project" ) + dependency = DirectoryDependency("demo", path, extras=["foo"]) + package = provider.search_for_direct_origin_dependency(dependency) assert package.name == "demo" assert package.version.text == "0.1.2" - required = [r for r in package.requires if not r.is_optional()] - optional = [r for r in package.requires if r.is_optional()] - assert required == [get_dependency("pendulum", ">=1.4.4")] - assert optional == [get_dependency("tomlkit"), get_dependency("cleo")] + required = {r for r in package.requires if not r.is_optional()} + optional = {r for r in package.requires if r.is_optional()} + assert required == {get_dependency("pendulum", ">=1.4.4")} + assert optional == {get_dependency("tomlkit"), get_dependency("cleo")} assert package.extras == { "foo": [get_dependency("cleo")], "bar": [get_dependency("tomlkit")], @@ -313,49 +318,52 @@ def test_search_for_directory_setup_egg_info_with_extras( @pytest.mark.parametrize("directory", ["demo", "non-canonical-name"]) def test_search_for_directory_setup_with_base( - provider: Provider, directory: str, fixture_dir: FixtureDirGetter + provider: Provider, directory: str, fixture_dir: FixtureDirGetter, tmp_path: Path ) -> None: - dependency = DirectoryDependency( - "demo", - fixture_dir("git") / "github.com" / "demo" / directory, - base=fixture_dir("git") / "github.com" / "demo" / directory, + path = shutil.copytree( + fixture_dir("git") / "github.com" / "demo" / directory, tmp_path / "project" ) + dependency = DirectoryDependency("demo", path, base=path) + package = provider.search_for_direct_origin_dependency(dependency) assert package.name == "demo" assert package.version.text == "0.1.2" - required = [r for r in package.requires if not r.is_optional()] - optional = [r for r in package.requires if r.is_optional()] - assert required == [get_dependency("pendulum", ">=1.4.4")] - assert optional == [get_dependency("tomlkit"), get_dependency("cleo")] + required = {r for r in package.requires if not r.is_optional()} + optional = {r for r in package.requires if r.is_optional()} + assert required == {get_dependency("pendulum", ">=1.4.4")} + assert optional == {get_dependency("tomlkit"), get_dependency("cleo")} assert package.extras == { "foo": [get_dependency("cleo")], "bar": [get_dependency("tomlkit")], } - assert package.root_dir == (fixture_dir("git") / "github.com" / "demo" / directory) + assert package.root_dir == path def test_search_for_directory_setup_read_setup( - provider: Provider, mocker: MockerFixture, fixture_dir: FixtureDirGetter + provider: Provider, + mocker: MockerFixture, + fixture_dir: FixtureDirGetter, + tmp_path: Path, ) -> None: mocker.patch("poetry.utils.env.EnvManager.get", return_value=MockEnv()) - dependency = DirectoryDependency( - "demo", - fixture_dir("git") / "github.com" / "demo" / "demo", + path = shutil.copytree( + fixture_dir("git") / "github.com" / "demo" / "demo", tmp_path / "project" ) + dependency = DirectoryDependency("demo", path) package = provider.search_for_direct_origin_dependency(dependency) assert package.name == "demo" assert package.version.text == "0.1.2" - required = [r for r in package.requires if not r.is_optional()] - optional = [r for r in package.requires if r.is_optional()] - assert required == [get_dependency("pendulum", ">=1.4.4")] - assert optional == [get_dependency("tomlkit"), get_dependency("cleo")] + required = {r for r in package.requires if not r.is_optional()} + optional = {r for r in package.requires if r.is_optional()} + assert required == {get_dependency("pendulum", ">=1.4.4")} + assert optional == {get_dependency("tomlkit"), get_dependency("cleo")} assert package.extras == { "foo": [get_dependency("cleo")], "bar": [get_dependency("tomlkit")], @@ -363,25 +371,28 @@ def test_search_for_directory_setup_read_setup( def test_search_for_directory_setup_read_setup_with_extras( - provider: Provider, mocker: MockerFixture, fixture_dir: FixtureDirGetter + provider: Provider, + mocker: MockerFixture, + fixture_dir: FixtureDirGetter, + tmp_path: Path, ) -> None: mocker.patch("poetry.utils.env.EnvManager.get", return_value=MockEnv()) - dependency = DirectoryDependency( - "demo", - fixture_dir("git") / "github.com" / "demo" / "demo", - extras=["foo"], + path = shutil.copytree( + fixture_dir("git") / "github.com" / "demo" / "demo", tmp_path / "project" ) + dependency = DirectoryDependency("demo", path, extras=["foo"]) + package = provider.search_for_direct_origin_dependency(dependency) assert package.name == "demo" assert package.version.text == "0.1.2" - required = [r for r in package.requires if not r.is_optional()] - optional = [r for r in package.requires if r.is_optional()] - assert required == [get_dependency("pendulum", ">=1.4.4")] - assert optional == [get_dependency("tomlkit"), get_dependency("cleo")] + required = {r for r in package.requires if not r.is_optional()} + optional = {r for r in package.requires if r.is_optional()} + assert required == {get_dependency("pendulum", ">=1.4.4")} + assert optional == {get_dependency("tomlkit"), get_dependency("cleo")} assert package.extras == { "foo": [get_dependency("cleo")], "bar": [get_dependency("tomlkit")], @@ -389,13 +400,15 @@ def test_search_for_directory_setup_read_setup_with_extras( def test_search_for_directory_setup_read_setup_with_no_dependencies( - provider: Provider, fixture_dir: FixtureDirGetter + provider: Provider, fixture_dir: FixtureDirGetter, tmp_path: Path ) -> None: - dependency = DirectoryDependency( - "demo", + path = shutil.copytree( fixture_dir("git") / "github.com" / "demo" / "no-dependencies", + tmp_path / "project", ) + dependency = DirectoryDependency("demo", path) + package = provider.search_for_direct_origin_dependency(dependency) assert package.name == "demo" @@ -405,29 +418,28 @@ def test_search_for_directory_setup_read_setup_with_no_dependencies( def test_search_for_directory_poetry( - provider: Provider, fixture_dir: FixtureDirGetter + provider: Provider, fixture_dir: FixtureDirGetter, tmp_path: Path ) -> None: - dependency = DirectoryDependency( - "project-with-extras", - fixture_dir("project_with_extras"), - ) + path = shutil.copytree(fixture_dir("project_with_extras"), tmp_path / "project") + + dependency = DirectoryDependency("project-with-extras", path) package = provider.search_for_direct_origin_dependency(dependency) assert package.name == "project-with-extras" assert package.version.text == "1.2.3" - required = [ + required = { r for r in sorted(package.requires, key=lambda r: r.name) if not r.is_optional() - ] - optional = [ + } + optional = { r for r in sorted(package.requires, key=lambda r: r.name) if r.is_optional() - ] - assert required == [] - assert optional == [ + } + assert not required + assert optional == { get_dependency("cachy", ">=0.2.0"), get_dependency("pendulum", ">=1.4.4"), - ] + } extras_a = canonicalize_name("extras-a") extras_b = canonicalize_name("extras-b") assert set(package.extras) == {extras_a, extras_b} @@ -436,30 +448,28 @@ def test_search_for_directory_poetry( def test_search_for_directory_poetry_with_extras( - provider: Provider, fixture_dir: FixtureDirGetter + provider: Provider, fixture_dir: FixtureDirGetter, tmp_path: Path ) -> None: - dependency = DirectoryDependency( - "project-with-extras", - fixture_dir("project_with_extras"), - extras=["extras_a"], - ) + path = shutil.copytree(fixture_dir("project_with_extras"), tmp_path / "project") + + dependency = DirectoryDependency("project-with-extras", path, extras=["extras_a"]) package = provider.search_for_direct_origin_dependency(dependency) assert package.name == "project-with-extras" assert package.version.text == "1.2.3" - required = [ + required = { r for r in sorted(package.requires, key=lambda r: r.name) if not r.is_optional() - ] - optional = [ + } + optional = { r for r in sorted(package.requires, key=lambda r: r.name) if r.is_optional() - ] - assert required == [] - assert optional == [ + } + assert not required + assert optional == { get_dependency("cachy", ">=0.2.0"), get_dependency("pendulum", ">=1.4.4"), - ] + } extras_a = canonicalize_name("extras-a") extras_b = canonicalize_name("extras-b") assert set(package.extras) == {extras_a, extras_b} @@ -480,17 +490,17 @@ def test_search_for_file_sdist( assert package.name == "demo" assert package.version.text == "0.1.0" - required = [ + required = { r for r in sorted(package.requires, key=lambda r: r.name) if not r.is_optional() - ] - optional = [ + } + optional = { r for r in sorted(package.requires, key=lambda r: r.name) if r.is_optional() - ] - assert required == [get_dependency("pendulum", ">=1.4.4")] - assert optional == [ + } + assert required == {get_dependency("pendulum", ">=1.4.4")} + assert optional == { get_dependency("cleo"), get_dependency("tomlkit"), - ] + } assert package.extras == { "foo": [get_dependency("cleo")], "bar": [get_dependency("tomlkit")], @@ -511,17 +521,17 @@ def test_search_for_file_sdist_with_extras( assert package.name == "demo" assert package.version.text == "0.1.0" - required = [ + required = { r for r in sorted(package.requires, key=lambda r: r.name) if not r.is_optional() - ] - optional = [ + } + optional = { r for r in sorted(package.requires, key=lambda r: r.name) if r.is_optional() - ] - assert required == [get_dependency("pendulum", ">=1.4.4")] - assert optional == [ + } + assert required == {get_dependency("pendulum", ">=1.4.4")} + assert optional == { get_dependency("cleo"), get_dependency("tomlkit"), - ] + } assert package.extras == { "foo": [get_dependency("cleo")], "bar": [get_dependency("tomlkit")], @@ -541,17 +551,17 @@ def test_search_for_file_wheel( assert package.name == "demo" assert package.version.text == "0.1.0" - required = [ + required = { r for r in sorted(package.requires, key=lambda r: r.name) if not r.is_optional() - ] - optional = [ + } + optional = { r for r in sorted(package.requires, key=lambda r: r.name) if r.is_optional() - ] - assert required == [get_dependency("pendulum", ">=1.4.4")] - assert optional == [ + } + assert required == {get_dependency("pendulum", ">=1.4.4")} + assert optional == { get_dependency("cleo"), get_dependency("tomlkit"), - ] + } assert package.extras == { "foo": [get_dependency("cleo")], "bar": [get_dependency("tomlkit")], @@ -572,17 +582,17 @@ def test_search_for_file_wheel_with_extras( assert package.name == "demo" assert package.version.text == "0.1.0" - required = [ + required = { r for r in sorted(package.requires, key=lambda r: r.name) if not r.is_optional() - ] - optional = [ + } + optional = { r for r in sorted(package.requires, key=lambda r: r.name) if r.is_optional() - ] - assert required == [get_dependency("pendulum", ">=1.4.4")] - assert optional == [ + } + assert required == {get_dependency("pendulum", ">=1.4.4")} + assert optional == { get_dependency("cleo"), get_dependency("tomlkit"), - ] + } assert package.extras == { "foo": [get_dependency("cleo")], "bar": [get_dependency("tomlkit")], diff --git a/tests/puzzle/test_solver.py b/tests/puzzle/test_solver.py index a04032de1d5..c9e4c6db7a0 100644 --- a/tests/puzzle/test_solver.py +++ b/tests/puzzle/test_solver.py @@ -1,7 +1,9 @@ from __future__ import annotations import re +import shutil +from pathlib import Path from typing import TYPE_CHECKING from typing import Any @@ -2046,10 +2048,15 @@ def test_solver_duplicate_dependencies_with_overlapping_markers_complex( def test_duplicate_path_dependencies( - solver: Solver, package: ProjectPackage, fixture_dir: FixtureDirGetter + solver: Solver, + package: ProjectPackage, + fixture_dir: FixtureDirGetter, + tmp_path: Path, ) -> None: set_package_python_versions(solver.provider, "^3.7") - project_dir = fixture_dir("with_conditional_path_deps") + project_dir = shutil.copytree( + fixture_dir("with_conditional_path_deps"), tmp_path / "project" + ) path1 = (project_dir / "demo_one").as_posix() demo1 = Package("demo", "1.2.3", source_type="directory", source_url=path1) @@ -2079,10 +2086,15 @@ def test_duplicate_path_dependencies( def test_duplicate_path_dependencies_same_path( - solver: Solver, package: ProjectPackage, fixture_dir: FixtureDirGetter + solver: Solver, + package: ProjectPackage, + fixture_dir: FixtureDirGetter, + tmp_path: Path, ) -> None: set_package_python_versions(solver.provider, "^3.7") - project_dir = fixture_dir("with_conditional_path_deps") + project_dir = shutil.copytree( + fixture_dir("with_conditional_path_deps"), tmp_path / "project" + ) path1 = (project_dir / "demo_one").as_posix() demo1 = Package("demo", "1.2.3", source_type="directory", source_url=path1) @@ -2647,11 +2659,16 @@ def test_solver_can_resolve_directory_dependencies( repo: Repository, package: ProjectPackage, fixture_dir: FixtureDirGetter, + tmp_path: Path, ) -> None: pendulum = get_package("pendulum", "2.0.3") repo.add_package(pendulum) - path = (fixture_dir("git") / "github.com" / "demo" / "demo").as_posix() + project_dir = shutil.copytree( + fixture_dir("git") / "github.com" / "demo" / "demo", + tmp_path / "project", + ) + path = project_dir.as_posix() package.add_dependency(Factory.create_dependency("demo", {"path": path})) @@ -2732,13 +2749,18 @@ def test_solver_can_resolve_directory_dependencies_with_extras( repo: Repository, package: ProjectPackage, fixture_dir: FixtureDirGetter, + tmp_path: Path, ) -> None: pendulum = get_package("pendulum", "2.0.3") cleo = get_package("cleo", "1.0.0") repo.add_package(pendulum) repo.add_package(cleo) - path = (fixture_dir("git") / "github.com" / "demo" / "demo").as_posix() + project_dir = shutil.copytree( + fixture_dir("git") / "github.com" / "demo" / "demo", + tmp_path / "project", + ) + path = project_dir.as_posix() package.add_dependency( Factory.create_dependency("demo", {"path": path, "extras": ["foo"]}) @@ -2770,11 +2792,15 @@ def test_solver_can_resolve_sdist_dependencies( repo: Repository, package: ProjectPackage, fixture_dir: FixtureDirGetter, + tmp_path: Path, ) -> None: pendulum = get_package("pendulum", "2.0.3") repo.add_package(pendulum) - path = (fixture_dir("distributions") / "demo-0.1.0.tar.gz").as_posix() + project_dir = tmp_path / "project" + project_dir.mkdir() + path = shutil.copy(fixture_dir("distributions") / "demo-0.1.0.tar.gz", project_dir) + path = Path(path).as_posix() package.add_dependency(Factory.create_dependency("demo", {"path": path})) @@ -2800,13 +2826,17 @@ def test_solver_can_resolve_sdist_dependencies_with_extras( repo: Repository, package: ProjectPackage, fixture_dir: FixtureDirGetter, + tmp_path: Path, ) -> None: pendulum = get_package("pendulum", "2.0.3") cleo = get_package("cleo", "1.0.0") repo.add_package(pendulum) repo.add_package(cleo) - path = (fixture_dir("distributions") / "demo-0.1.0.tar.gz").as_posix() + project_dir = tmp_path / "project" + project_dir.mkdir() + path = shutil.copy(fixture_dir("distributions") / "demo-0.1.0.tar.gz", project_dir) + path = Path(path).as_posix() package.add_dependency( Factory.create_dependency("demo", {"path": path, "extras": ["foo"]}) @@ -2838,11 +2868,17 @@ def test_solver_can_resolve_wheel_dependencies( repo: Repository, package: ProjectPackage, fixture_dir: FixtureDirGetter, + tmp_path: Path, ) -> None: pendulum = get_package("pendulum", "2.0.3") repo.add_package(pendulum) - path = (fixture_dir("distributions") / "demo-0.1.0-py2.py3-none-any.whl").as_posix() + project_dir = tmp_path / "project" + project_dir.mkdir() + path = shutil.copy( + fixture_dir("distributions") / "demo-0.1.0-py2.py3-none-any.whl", project_dir + ) + path = Path(path).as_posix() package.add_dependency(Factory.create_dependency("demo", {"path": path})) @@ -2868,13 +2904,19 @@ def test_solver_can_resolve_wheel_dependencies_with_extras( repo: Repository, package: ProjectPackage, fixture_dir: FixtureDirGetter, + tmp_path: Path, ) -> None: pendulum = get_package("pendulum", "2.0.3") cleo = get_package("cleo", "1.0.0") repo.add_package(pendulum) repo.add_package(cleo) - path = (fixture_dir("distributions") / "demo-0.1.0-py2.py3-none-any.whl").as_posix() + project_dir = tmp_path / "project" + project_dir.mkdir() + path = shutil.copy( + fixture_dir("distributions") / "demo-0.1.0-py2.py3-none-any.whl", project_dir + ) + path = Path(path).as_posix() package.add_dependency( Factory.create_dependency("demo", {"path": path, "extras": ["foo"]}) @@ -3753,6 +3795,7 @@ def test_solver_cannot_choose_another_version_for_directory_dependencies( repo: Repository, package: ProjectPackage, fixture_dir: FixtureDirGetter, + tmp_path: Path, ) -> None: pendulum = get_package("pendulum", "2.0.3") demo = get_package("demo", "0.1.0") @@ -3762,7 +3805,10 @@ def test_solver_cannot_choose_another_version_for_directory_dependencies( repo.add_package(demo) repo.add_package(pendulum) - path = (fixture_dir("git") / "github.com" / "demo" / "demo").as_posix() + project_dir = shutil.copytree( + fixture_dir("git") / "github.com" / "demo" / "demo", tmp_path / "project" + ) + path = project_dir.as_posix() package.add_dependency(Factory.create_dependency("demo", {"path": path})) package.add_dependency(Factory.create_dependency("foo", "^1.2.3")) @@ -3778,6 +3824,7 @@ def test_solver_cannot_choose_another_version_for_file_dependencies( repo: Repository, package: ProjectPackage, fixture_dir: FixtureDirGetter, + tmp_path: Path, ) -> None: pendulum = get_package("pendulum", "2.0.3") demo = get_package("demo", "0.0.8") @@ -3787,7 +3834,11 @@ def test_solver_cannot_choose_another_version_for_file_dependencies( repo.add_package(demo) repo.add_package(pendulum) - path = (fixture_dir("distributions") / "demo-0.1.0-py2.py3-none-any.whl").as_posix() + project_dir = tmp_path / "project" + project_dir.mkdir() + path = shutil.copy( + fixture_dir("distributions") / "demo-0.1.0-py2.py3-none-any.whl", project_dir + ) package.add_dependency(Factory.create_dependency("demo", {"path": path})) package.add_dependency(Factory.create_dependency("foo", "^1.2.3")) @@ -3826,13 +3877,18 @@ def test_solver_cannot_choose_another_version_for_url_dependencies( package: ProjectPackage, http: type[httpretty.httpretty], fixture_dir: FixtureDirGetter, + tmp_path: Path, ) -> None: - path = fixture_dir("distributions") / "demo-0.1.0-py2.py3-none-any.whl" + project_dir = tmp_path / "project" + project_dir.mkdir() + path = shutil.copy( + fixture_dir("distributions") / "demo-0.1.0-py2.py3-none-any.whl", project_dir + ) http.register_uri( "GET", "https://foo.bar/demo-0.1.0-py2.py3-none-any.whl", - body=path.read_bytes(), + body=Path(path).read_bytes(), streaming=True, ) pendulum = get_package("pendulum", "2.0.3") @@ -4343,6 +4399,7 @@ def test_solver_direct_origin_dependency_with_extras_requested_by_other_package( repo: Repository, package: ProjectPackage, fixture_dir: FixtureDirGetter, + tmp_path: Path, ) -> None: """ Another package requires the same dependency with extras that is required @@ -4358,7 +4415,11 @@ def test_solver_direct_origin_dependency_with_extras_requested_by_other_package( repo.add_package(pendulum) repo.add_package(cleo) - path = (fixture_dir("git") / "github.com" / "demo" / "demo").as_posix() + project_dir = shutil.copytree( + fixture_dir("git") / "github.com" / "demo" / "demo", + tmp_path / "project", + ) + path = project_dir.as_posix() # project requires path dependency of demo while demo-foo requires demo[foo] package.add_dependency(Factory.create_dependency("demo", {"path": path}))