From a489fe2c53937716c7c263a4b36c1e09a48d1b6f Mon Sep 17 00:00:00 2001 From: Obeida Shamoun <2135622+oshmoun@users.noreply.github.com> Date: Thu, 4 May 2023 13:05:02 +0200 Subject: [PATCH] Move away from soon-to-be-removed PipInstaller --- tests/fixtures.py | 17 ++++++++--------- tests/test_installer.py | 4 ++-- tox_poetry_installer/_poetry.py | 6 +++++- tox_poetry_installer/installer.py | 12 ++++++------ 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/tests/fixtures.py b/tests/fixtures.py index 8ffa296..9bf3b72 100644 --- a/tests/fixtures.py +++ b/tests/fixtures.py @@ -1,13 +1,14 @@ # pylint: disable=missing-module-docstring, missing-function-docstring, unused-argument, too-few-public-methods import time from pathlib import Path +from typing import List import poetry.factory -import poetry.installation.pip_installer +import poetry.installation.executor import poetry.utils.env import pytest import tox.tox_env.python.virtual_env.runner -from poetry.core.packages.package import Package as PoetryPackage +from poetry.installation.operations.operation import Operation from tox_poetry_installer import utilities @@ -33,23 +34,21 @@ class MockVirtualEnv: return (1, 2, 3) -class MockPipInstaller: - """Mock class for the :class:`poetry.installation.pip_installer.PipInstaller`""" +class MockExecutor: + """Mock class for the :class:`poetry.installation.executor.Executor`""" def __init__(self, env: MockVirtualEnv, **kwargs): self.env = env - def install(self, package: PoetryPackage): - self.env.installed.append(package) + def execute(self, operations: List[Operation]): + self.env.installed.extend([operation.package for operation in operations]) time.sleep(1) @pytest.fixture def mock_venv(monkeypatch): monkeypatch.setattr(utilities, "convert_virtualenv", lambda venv: venv) - monkeypatch.setattr( - poetry.installation.pip_installer, "PipInstaller", MockPipInstaller - ) + monkeypatch.setattr(poetry.installation.executor, "Executor", MockExecutor) monkeypatch.setattr( tox.tox_env.python.virtual_env.runner, "VirtualEnvRunner", MockVirtualEnv ) diff --git a/tests/test_installer.py b/tests/test_installer.py index 4926893..517879c 100644 --- a/tests/test_installer.py +++ b/tests/test_installer.py @@ -81,8 +81,8 @@ def test_propagates_exceptions_during_installation( with mock.patch.object( _poetry, - "PipInstaller", - **{"return_value.install.side_effect": fake_exception}, + "Executor", + **{"return_value.execute.side_effect": fake_exception}, ): with pytest.raises(ValueError) as exc_info: installer.install(poetry, venv, to_install, num_threads) diff --git a/tox_poetry_installer/_poetry.py b/tox_poetry_installer/_poetry.py index 7aa7b50..0ee72e5 100644 --- a/tox_poetry_installer/_poetry.py +++ b/tox_poetry_installer/_poetry.py @@ -29,8 +29,12 @@ from tox_poetry_installer import exceptions try: from cleo.io.null_io import NullIO + from poetry.config.config import Config + from poetry.core.packages.dependency import Dependency as PoetryDependency + from poetry.core.packages.package import Package as PoetryPackage from poetry.factory import Factory - from poetry.installation.pip_installer import PipInstaller + from poetry.installation.executor import Executor + from poetry.installation.operations.install import Install from poetry.poetry import Poetry from poetry.utils.env import VirtualEnv except ImportError: diff --git a/tox_poetry_installer/installer.py b/tox_poetry_installer/installer.py index ed6f022..60d3a7b 100644 --- a/tox_poetry_installer/installer.py +++ b/tox_poetry_installer/installer.py @@ -9,7 +9,6 @@ from datetime import datetime from typing import Collection from typing import Set -from poetry.core.packages.package import Package as PoetryPackage from tox.tox_env.api import ToxEnv as ToxVirtualEnv from tox_poetry_installer import logger @@ -22,7 +21,7 @@ if typing.TYPE_CHECKING: def install( poetry: "_poetry.Poetry", venv: ToxVirtualEnv, - packages: Collection[PoetryPackage], + packages: Collection["_poetry.PoetryPackage"], parallels: int = 0, ): """Install a bunch of packages to a virtualenv @@ -37,18 +36,19 @@ def install( logger.info(f"Installing {len(packages)} packages to environment at {venv.env_dir}") - pip = _poetry.PipInstaller( + install_executor = _poetry.Executor( env=utilities.convert_virtualenv(venv), io=_poetry.NullIO(), pool=poetry.pool, + config=_poetry.Config(), ) - installed: Set[PoetryPackage] = set() + installed: Set[_poetry.PoetryPackage] = set() - def logged_install(dependency: PoetryPackage) -> None: + def logged_install(dependency: _poetry.PoetryPackage) -> None: start = datetime.now() logger.debug(f"Installing {dependency}") - pip.install(dependency) + install_executor.execute([_poetry.Install(package=dependency)]) end = datetime.now() logger.debug(f"Finished installing {dependency} in {end - start}")