Commit 26b5062c by Randy Döring Committed by Bjorn Neergaard

refactor(solver): remove unnecessary parameter "provider" (was only used in…

refactor(solver): remove unnecessary parameter "provider" (was only used in tests and can cause inconsistencies between a solver and its provider)
parent 34fd6933
...@@ -40,7 +40,6 @@ class Solver: ...@@ -40,7 +40,6 @@ class Solver:
installed: list[Package], installed: list[Package],
locked: list[Package], locked: list[Package],
io: IO, io: IO,
provider: Provider | None = None,
) -> None: ) -> None:
self._package = package self._package = package
self._pool = pool self._pool = pool
...@@ -48,12 +47,9 @@ class Solver: ...@@ -48,12 +47,9 @@ class Solver:
self._locked_packages = locked self._locked_packages = locked
self._io = io self._io = io
if provider is None: self._provider = Provider(
provider = Provider(
self._package, self._pool, self._io, installed=installed self._package, self._pool, self._io, installed=installed
) )
self._provider = provider
self._overrides: list[dict[DependencyPackage, dict[str, Dependency]]] = [] self._overrides: list[dict[DependencyPackage, dict[str, Dependency]]] = []
@property @property
......
...@@ -18,7 +18,6 @@ from poetry.factory import Factory ...@@ -18,7 +18,6 @@ from poetry.factory import Factory
from poetry.packages import DependencyPackage from poetry.packages import DependencyPackage
from poetry.puzzle import Solver from poetry.puzzle import Solver
from poetry.puzzle.exceptions import SolverProblemError from poetry.puzzle.exceptions import SolverProblemError
from poetry.puzzle.provider import Provider as BaseProvider
from poetry.repositories.installed_repository import InstalledRepository from poetry.repositories.installed_repository import InstalledRepository
from poetry.repositories.pool import Pool from poetry.repositories.pool import Pool
from poetry.repositories.repository import Repository from poetry.repositories.repository import Repository
...@@ -36,6 +35,7 @@ if TYPE_CHECKING: ...@@ -36,6 +35,7 @@ if TYPE_CHECKING:
import httpretty import httpretty
from poetry.installation.operations.operation import Operation from poetry.installation.operations.operation import Operation
from poetry.puzzle.provider import Provider
from poetry.puzzle.transaction import Transaction from poetry.puzzle.transaction import Transaction
DEFAULT_SOURCE_REF = ( DEFAULT_SOURCE_REF = (
...@@ -44,10 +44,9 @@ DEFAULT_SOURCE_REF = ( ...@@ -44,10 +44,9 @@ DEFAULT_SOURCE_REF = (
) )
class Provider(BaseProvider): def set_package_python_versions(provider: Provider, python_versions: str) -> None:
def set_package_python_versions(self, python_versions: str) -> None: provider._package.python_versions = python_versions
self._package.python_versions = python_versions provider._python_constraint = provider._package.python_constraint
self._python_constraint = self._package.python_constraint
@pytest.fixture() @pytest.fixture()
...@@ -88,14 +87,7 @@ def solver( ...@@ -88,14 +87,7 @@ def solver(
locked: Repository, locked: Repository,
io: NullIO, io: NullIO,
) -> Solver: ) -> Solver:
return Solver( return Solver(package, pool, installed.packages, locked.packages, io)
package,
pool,
installed.packages,
locked.packages,
io,
provider=Provider(package, pool, io, installed=installed.packages),
)
def check_solver_result( def check_solver_result(
...@@ -404,7 +396,7 @@ def test_solver_sets_groups(solver: Solver, repo: Repository, package: ProjectPa ...@@ -404,7 +396,7 @@ def test_solver_sets_groups(solver: Solver, repo: Repository, package: ProjectPa
def test_solver_respects_root_package_python_versions( def test_solver_respects_root_package_python_versions(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ):
solver.provider.set_package_python_versions("~3.4") set_package_python_versions(solver.provider, "~3.4")
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package.add_dependency(Factory.create_dependency("B", "*")) package.add_dependency(Factory.create_dependency("B", "*"))
...@@ -437,7 +429,7 @@ def test_solver_respects_root_package_python_versions( ...@@ -437,7 +429,7 @@ def test_solver_respects_root_package_python_versions(
def test_solver_fails_if_mismatch_root_python_versions( def test_solver_fails_if_mismatch_root_python_versions(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ):
solver.provider.set_package_python_versions("^3.4") set_package_python_versions(solver.provider, "^3.4")
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package.add_dependency(Factory.create_dependency("B", "*")) package.add_dependency(Factory.create_dependency("B", "*"))
...@@ -459,7 +451,7 @@ def test_solver_fails_if_mismatch_root_python_versions( ...@@ -459,7 +451,7 @@ def test_solver_fails_if_mismatch_root_python_versions(
def test_solver_ignores_python_restricted_if_mismatch_root_package_python_versions( def test_solver_ignores_python_restricted_if_mismatch_root_package_python_versions(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ):
solver.provider.set_package_python_versions("~3.8") set_package_python_versions(solver.provider, "~3.8")
package.add_dependency( package.add_dependency(
Factory.create_dependency("A", {"version": "1.0", "python": "<3.8"}) Factory.create_dependency("A", {"version": "1.0", "python": "<3.8"})
) )
...@@ -483,7 +475,7 @@ def test_solver_ignores_python_restricted_if_mismatch_root_package_python_versio ...@@ -483,7 +475,7 @@ def test_solver_ignores_python_restricted_if_mismatch_root_package_python_versio
def test_solver_solves_optional_and_compatible_packages( def test_solver_solves_optional_and_compatible_packages(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ):
solver.provider.set_package_python_versions("~3.4") set_package_python_versions(solver.provider, "~3.4")
package.extras["foo"] = [get_dependency("B")] package.extras["foo"] = [get_dependency("B")]
package.add_dependency( package.add_dependency(
Factory.create_dependency("A", {"version": "*", "python": "^3.4"}) Factory.create_dependency("A", {"version": "*", "python": "^3.4"})
...@@ -987,7 +979,7 @@ def test_solver_sub_dependencies_with_requirements_complex( ...@@ -987,7 +979,7 @@ def test_solver_sub_dependencies_with_requirements_complex(
def test_solver_sub_dependencies_with_not_supported_python_version( def test_solver_sub_dependencies_with_not_supported_python_version(
solver: Solver, repo: Repository, package: Package solver: Solver, repo: Repository, package: Package
): ):
solver.provider.set_package_python_versions("^3.5") set_package_python_versions(solver.provider, "^3.5")
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
...@@ -1009,7 +1001,7 @@ def test_solver_sub_dependencies_with_not_supported_python_version( ...@@ -1009,7 +1001,7 @@ def test_solver_sub_dependencies_with_not_supported_python_version(
def test_solver_sub_dependencies_with_not_supported_python_version_transitive( def test_solver_sub_dependencies_with_not_supported_python_version_transitive(
solver: Solver, repo: Repository, package: Package solver: Solver, repo: Repository, package: Package
): ):
solver.provider.set_package_python_versions("^3.4") set_package_python_versions(solver.provider, "^3.4")
package.add_dependency( package.add_dependency(
Factory.create_dependency("httpx", {"version": "^0.17.1", "python": "^3.6"}) Factory.create_dependency("httpx", {"version": "^0.17.1", "python": "^3.6"})
...@@ -1053,7 +1045,7 @@ def test_solver_sub_dependencies_with_not_supported_python_version_transitive( ...@@ -1053,7 +1045,7 @@ def test_solver_sub_dependencies_with_not_supported_python_version_transitive(
def test_solver_with_dependency_in_both_main_and_dev_dependencies( def test_solver_with_dependency_in_both_main_and_dev_dependencies(
solver: Solver, repo: Repository, package: Package solver: Solver, repo: Repository, package: Package
): ):
solver.provider.set_package_python_versions("^3.5") set_package_python_versions(solver.provider, "^3.5")
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package.add_dependency( package.add_dependency(
Factory.create_dependency( Factory.create_dependency(
...@@ -1667,7 +1659,7 @@ def test_solver_duplicate_dependencies_sub_dependencies( ...@@ -1667,7 +1659,7 @@ def test_solver_duplicate_dependencies_sub_dependencies(
def test_duplicate_path_dependencies(solver: Solver, package: ProjectPackage) -> None: def test_duplicate_path_dependencies(solver: Solver, package: ProjectPackage) -> None:
solver.provider.set_package_python_versions("^3.7") set_package_python_versions(solver.provider, "^3.7")
fixtures = Path(__file__).parent.parent / "fixtures" fixtures = Path(__file__).parent.parent / "fixtures"
project_dir = fixtures / "with_conditional_path_deps" project_dir = fixtures / "with_conditional_path_deps"
...@@ -1701,7 +1693,7 @@ def test_duplicate_path_dependencies(solver: Solver, package: ProjectPackage) -> ...@@ -1701,7 +1693,7 @@ def test_duplicate_path_dependencies(solver: Solver, package: ProjectPackage) ->
def test_duplicate_path_dependencies_same_path( def test_duplicate_path_dependencies_same_path(
solver: Solver, package: ProjectPackage solver: Solver, package: ProjectPackage
) -> None: ) -> None:
solver.provider.set_package_python_versions("^3.7") set_package_python_versions(solver.provider, "^3.7")
fixtures = Path(__file__).parent.parent / "fixtures" fixtures = Path(__file__).parent.parent / "fixtures"
project_dir = fixtures / "with_conditional_path_deps" project_dir = fixtures / "with_conditional_path_deps"
...@@ -1877,7 +1869,7 @@ def test_solver_can_resolve_git_dependencies_with_ref( ...@@ -1877,7 +1869,7 @@ def test_solver_can_resolve_git_dependencies_with_ref(
def test_solver_does_not_trigger_conflict_for_python_constraint_if_python_requirement_is_compatible( # noqa: E501 def test_solver_does_not_trigger_conflict_for_python_constraint_if_python_requirement_is_compatible( # noqa: E501
solver: Solver, repo: Repository, package: Package solver: Solver, repo: Repository, package: Package
): ):
solver.provider.set_package_python_versions("~2.7 || ^3.4") set_package_python_versions(solver.provider, "~2.7 || ^3.4")
package.add_dependency( package.add_dependency(
Factory.create_dependency("A", {"version": "^1.0", "python": "^3.6"}) Factory.create_dependency("A", {"version": "^1.0", "python": "^3.6"})
) )
...@@ -1895,7 +1887,7 @@ def test_solver_does_not_trigger_conflict_for_python_constraint_if_python_requir ...@@ -1895,7 +1887,7 @@ def test_solver_does_not_trigger_conflict_for_python_constraint_if_python_requir
def test_solver_does_not_trigger_conflict_for_python_constraint_if_python_requirement_is_compatible_multiple( # noqa: E501 def test_solver_does_not_trigger_conflict_for_python_constraint_if_python_requirement_is_compatible_multiple( # noqa: E501
solver: Solver, repo: Repository, package: Package solver: Solver, repo: Repository, package: Package
): ):
solver.provider.set_package_python_versions("~2.7 || ^3.4") set_package_python_versions(solver.provider, "~2.7 || ^3.4")
package.add_dependency( package.add_dependency(
Factory.create_dependency("A", {"version": "^1.0", "python": "^3.6"}) Factory.create_dependency("A", {"version": "^1.0", "python": "^3.6"})
) )
...@@ -1927,7 +1919,7 @@ def test_solver_does_not_trigger_conflict_for_python_constraint_if_python_requir ...@@ -1927,7 +1919,7 @@ def test_solver_does_not_trigger_conflict_for_python_constraint_if_python_requir
def test_solver_triggers_conflict_for_dependency_python_not_fully_compatible_with_package_python( # noqa: E501 def test_solver_triggers_conflict_for_dependency_python_not_fully_compatible_with_package_python( # noqa: E501
solver: Solver, repo: Repository, package: Package solver: Solver, repo: Repository, package: Package
): ):
solver.provider.set_package_python_versions("~2.7 || ^3.4") set_package_python_versions(solver.provider, "~2.7 || ^3.4")
package.add_dependency( package.add_dependency(
Factory.create_dependency("A", {"version": "^1.0", "python": "^3.5"}) Factory.create_dependency("A", {"version": "^1.0", "python": "^3.5"})
) )
...@@ -1944,7 +1936,7 @@ def test_solver_triggers_conflict_for_dependency_python_not_fully_compatible_wit ...@@ -1944,7 +1936,7 @@ def test_solver_triggers_conflict_for_dependency_python_not_fully_compatible_wit
def test_solver_finds_compatible_package_for_dependency_python_not_fully_compatible_with_package_python( # noqa: E501 def test_solver_finds_compatible_package_for_dependency_python_not_fully_compatible_with_package_python( # noqa: E501
solver: Solver, repo: Repository, package: Package solver: Solver, repo: Repository, package: Package
): ):
solver.provider.set_package_python_versions("~2.7 || ^3.4") set_package_python_versions(solver.provider, "~2.7 || ^3.4")
package.add_dependency( package.add_dependency(
Factory.create_dependency("A", {"version": "^1.0", "python": "^3.5"}) Factory.create_dependency("A", {"version": "^1.0", "python": "^3.5"})
) )
...@@ -2004,7 +1996,7 @@ def test_solver_does_not_trigger_new_resolution_on_duplicate_dependencies_if_onl ...@@ -2004,7 +1996,7 @@ def test_solver_does_not_trigger_new_resolution_on_duplicate_dependencies_if_onl
def test_solver_does_not_raise_conflict_for_locked_conditional_dependencies( def test_solver_does_not_raise_conflict_for_locked_conditional_dependencies(
solver: Solver, repo: Repository, package: Package solver: Solver, repo: Repository, package: Package
): ):
solver.provider.set_package_python_versions("~2.7 || ^3.4") set_package_python_versions(solver.provider, "~2.7 || ^3.4")
package.add_dependency( package.add_dependency(
Factory.create_dependency("A", {"version": "^1.0", "python": "^3.6"}) Factory.create_dependency("A", {"version": "^1.0", "python": "^3.6"})
) )
...@@ -2094,7 +2086,7 @@ def test_solver_should_not_resolve_prerelease_version_if_not_requested( ...@@ -2094,7 +2086,7 @@ def test_solver_should_not_resolve_prerelease_version_if_not_requested(
def test_solver_ignores_dependencies_with_incompatible_python_full_version_marker( def test_solver_ignores_dependencies_with_incompatible_python_full_version_marker(
solver: Solver, repo: Repository, package: Package solver: Solver, repo: Repository, package: Package
): ):
solver.provider.set_package_python_versions("^3.6") set_package_python_versions(solver.provider, "^3.6")
package.add_dependency(Factory.create_dependency("A", "^1.0")) package.add_dependency(Factory.create_dependency("A", "^1.0"))
package.add_dependency(Factory.create_dependency("B", "^2.0")) package.add_dependency(Factory.create_dependency("B", "^2.0"))
...@@ -2297,14 +2289,7 @@ def test_solver_can_resolve_directory_dependencies_nested_editable( ...@@ -2297,14 +2289,7 @@ def test_solver_can_resolve_directory_dependencies_nested_editable(
poetry = Factory().create_poetry(cwd=base) poetry = Factory().create_poetry(cwd=base)
package = poetry.package package = poetry.package
solver = Solver( solver = Solver(package, pool, installed.packages, locked.packages, io)
package,
pool,
installed.packages,
locked.packages,
io,
provider=Provider(package, pool, io),
)
transaction = solver.solve() transaction = solver.solve()
...@@ -2904,7 +2889,7 @@ def test_solver_discards_packages_with_empty_markers( ...@@ -2904,7 +2889,7 @@ def test_solver_discards_packages_with_empty_markers(
def test_solver_does_not_raise_conflict_for_conditional_dev_dependencies( def test_solver_does_not_raise_conflict_for_conditional_dev_dependencies(
solver: Solver, repo: Repository, package: Package solver: Solver, repo: Repository, package: Package
): ):
solver.provider.set_package_python_versions("~2.7 || ^3.5") set_package_python_versions(solver.provider, "~2.7 || ^3.5")
package.add_dependency( package.add_dependency(
Factory.create_dependency( Factory.create_dependency(
"A", {"version": "^1.0", "python": "~2.7"}, groups=["dev"] "A", {"version": "^1.0", "python": "~2.7"}, groups=["dev"]
...@@ -2936,7 +2921,7 @@ def test_solver_does_not_raise_conflict_for_conditional_dev_dependencies( ...@@ -2936,7 +2921,7 @@ def test_solver_does_not_raise_conflict_for_conditional_dev_dependencies(
def test_solver_does_not_loop_indefinitely_on_duplicate_constraints_with_extras( def test_solver_does_not_loop_indefinitely_on_duplicate_constraints_with_extras(
solver: Solver, repo: Repository, package: Package solver: Solver, repo: Repository, package: Package
): ):
solver.provider.set_package_python_versions("~2.7 || ^3.5") set_package_python_versions(solver.provider, "~2.7 || ^3.5")
package.add_dependency( package.add_dependency(
Factory.create_dependency( Factory.create_dependency(
"requests", {"version": "^2.22.0", "extras": ["security"]} "requests", {"version": "^2.22.0", "extras": ["security"]}
...@@ -3035,7 +3020,7 @@ def test_ignore_python_constraint_no_overlap_dependencies( ...@@ -3035,7 +3020,7 @@ def test_ignore_python_constraint_no_overlap_dependencies(
def test_solver_should_not_go_into_an_infinite_loop_on_duplicate_dependencies( def test_solver_should_not_go_into_an_infinite_loop_on_duplicate_dependencies(
solver: Solver, repo: Repository, package: Package solver: Solver, repo: Repository, package: Package
): ):
solver.provider.set_package_python_versions("~2.7 || ^3.5") set_package_python_versions(solver.provider, "~2.7 || ^3.5")
package.add_dependency(Factory.create_dependency("A", "^1.0")) package.add_dependency(Factory.create_dependency("A", "^1.0"))
package_a = get_package("A", "1.0.0") package_a = get_package("A", "1.0.0")
...@@ -3244,7 +3229,7 @@ def test_solver_should_not_update_same_version_packages_if_installed_has_no_sour ...@@ -3244,7 +3229,7 @@ def test_solver_should_not_update_same_version_packages_if_installed_has_no_sour
def test_solver_should_use_the_python_constraint_from_the_environment_if_available( def test_solver_should_use_the_python_constraint_from_the_environment_if_available(
solver: Solver, repo: Repository, package: Package, installed: InstalledRepository solver: Solver, repo: Repository, package: Package, installed: InstalledRepository
): ):
solver.provider.set_package_python_versions("~2.7 || ^3.5") set_package_python_versions(solver.provider, "~2.7 || ^3.5")
package.add_dependency(Factory.create_dependency("A", "^1.0")) package.add_dependency(Factory.create_dependency("A", "^1.0"))
a = get_package("A", "1.0.0") a = get_package("A", "1.0.0")
...@@ -3320,7 +3305,7 @@ def test_solver_should_not_raise_errors_for_irrelevant_python_constraints( ...@@ -3320,7 +3305,7 @@ def test_solver_should_not_raise_errors_for_irrelevant_python_constraints(
solver: Solver, repo: Repository, package: Package solver: Solver, repo: Repository, package: Package
): ):
package.python_versions = "^3.6" package.python_versions = "^3.6"
solver.provider.set_package_python_versions("^3.6") set_package_python_versions(solver.provider, "^3.6")
package.add_dependency( package.add_dependency(
Factory.create_dependency("dataclasses", {"version": "^0.7", "python": "<3.7"}) Factory.create_dependency("dataclasses", {"version": "^0.7", "python": "<3.7"})
) )
...@@ -3446,7 +3431,7 @@ def test_solver_should_not_raise_errors_for_irrelevant_transitive_python_constra ...@@ -3446,7 +3431,7 @@ def test_solver_should_not_raise_errors_for_irrelevant_transitive_python_constra
solver: Solver, repo: Repository, package: Package solver: Solver, repo: Repository, package: Package
): ):
package.python_versions = "~2.7 || ^3.5" package.python_versions = "~2.7 || ^3.5"
solver.provider.set_package_python_versions("~2.7 || ^3.5") set_package_python_versions(solver.provider, "~2.7 || ^3.5")
package.add_dependency(Factory.create_dependency("virtualenv", "^20.4.3")) package.add_dependency(Factory.create_dependency("virtualenv", "^20.4.3"))
package.add_dependency( package.add_dependency(
Factory.create_dependency("pre-commit", {"version": "^2.6", "python": "^3.6.1"}) Factory.create_dependency("pre-commit", {"version": "^2.6", "python": "^3.6.1"})
...@@ -3500,7 +3485,7 @@ def test_solver_keeps_multiple_locked_dependencies_for_same_package( ...@@ -3500,7 +3485,7 @@ def test_solver_keeps_multiple_locked_dependencies_for_same_package(
locked: Repository, locked: Repository,
is_locked: bool, is_locked: bool,
): ):
solver.provider.set_package_python_versions("^3.6") set_package_python_versions(solver.provider, "^3.6")
package.add_dependency( package.add_dependency(
Factory.create_dependency("A", {"version": "~1.1", "python": "<3.7"}) Factory.create_dependency("A", {"version": "~1.1", "python": "<3.7"})
) )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment