diff --git a/tox_poetry_installer/constants.py b/tox_poetry_installer/constants.py index 3be4fd8..ccfc6f3 100644 --- a/tox_poetry_installer/constants.py +++ b/tox_poetry_installer/constants.py @@ -21,3 +21,6 @@ REPORTER_PREFIX: str = f"{__about__.__title__}:" # Internal list of packages that poetry has deemed unsafe and are excluded from the lockfile UNSAFE_PACKAGES: Set[str] = {"distribute", "pip", "setuptools", "wheel"} + +# Number of threads to use for installing dependencies by default +DEFAULT_INSTALL_THREADS: int = 10 diff --git a/tox_poetry_installer/hooks.py b/tox_poetry_installer/hooks.py index 7c880ee..871c9f6 100644 --- a/tox_poetry_installer/hooks.py +++ b/tox_poetry_installer/hooks.py @@ -12,6 +12,7 @@ from tox.config import Parser as ToxParser from tox.venv import VirtualEnv as ToxVirtualEnv from tox_poetry_installer import __about__ +from tox_poetry_installer import constants from tox_poetry_installer import exceptions from tox_poetry_installer import installer from tox_poetry_installer import logger @@ -31,7 +32,7 @@ def tox_addoption(parser: ToxParser): "--require-poetry", action="store_true", dest="require_poetry", - help="Trigger a failure if Poetry is not available to Tox", + help="(deprecated) Trigger a failure if Poetry is not available to Tox", ) parser.add_argument( @@ -39,7 +40,15 @@ def tox_addoption(parser: ToxParser): type=int, dest="parallelize_locked_install", default=None, - help="Number of worker threads to use for installing dependencies from the Poetry lockfile in parallel", + help="(deprecated) Number of worker threads to use for installing dependencies from the Poetry lockfile in parallel", + ) + + parser.add_argument( + "--parallel-install-threads", + type=int, + dest="parallel_install_threads", + default=constants.DEFAULT_INSTALL_THREADS, + help="Number of locked dependencies to install simultaneously; set to 0 to disable parallel installation", ) parser.add_testenv_attribute( @@ -82,13 +91,6 @@ def tox_testenv_install_deps(venv: ToxVirtualEnv, action: ToxAction) -> Optional :param action: Tox action object """ - if venv.envconfig.config.option.require_poetry: - logger.warning( - "DEPRECATION WARNING: The '--require-poetry' runtime option is deprecated and will be " - "removed in version 1.0.0. Please update test environments that require Poetry to " - "set the 'require_poetry = true' option in tox.ini" - ) - try: poetry = utilities.check_preconditions(venv, action) except exceptions.SkipEnvironment as err: @@ -158,11 +160,18 @@ def tox_testenv_install_deps(venv: ToxVirtualEnv, action: ToxAction) -> Optional raise err dependencies = dev_deps + env_deps + project_deps - log_parallel = ( - f" (using {venv.envconfig.config.option.parallelize_locked_install} threads)" - if venv.envconfig.config.option.parallelize_locked_install - else "" - ) + if ( + venv.envconfig.config.option.parallel_install_threads + != constants.DEFAULT_INSTALL_THREADS + ): + parallel_threads = venv.envconfig.config.option.parallel_install_threads + else: + parallel_threads = ( + venv.envconfig.config.option.parallelize_locked_install + if venv.envconfig.config.option.parallelize_locked_install is not None + else constants.DEFAULT_INSTALL_THREADS + ) + log_parallel = f" (using {parallel_threads} threads)" if parallel_threads else "" action.setactivity( __about__.__title__, @@ -172,7 +181,7 @@ def tox_testenv_install_deps(venv: ToxVirtualEnv, action: ToxAction) -> Optional poetry, venv, dependencies, - venv.envconfig.config.option.parallelize_locked_install, + parallel_threads, ) return venv.envconfig.require_locked_deps or None diff --git a/tox_poetry_installer/installer.py b/tox_poetry_installer/installer.py index 1685ea0..bbde07f 100644 --- a/tox_poetry_installer/installer.py +++ b/tox_poetry_installer/installer.py @@ -5,7 +5,6 @@ import concurrent.futures import contextlib import typing -from typing import Optional from typing import Sequence from typing import Set @@ -23,7 +22,7 @@ def install( poetry: "_poetry.Poetry", venv: ToxVirtualEnv, packages: Sequence[PoetryPackage], - parallels: Optional[int] = None, + parallels: int = 0, ): """Install a bunch of packages to a virtualenv @@ -55,7 +54,7 @@ def install( enables/disables the usage of the parallel thread pooler depending on the value of the ``parallels`` parameter. """ - if parallels: + if parallels > 0: with concurrent.futures.ThreadPoolExecutor( max_workers=parallels ) as executor: diff --git a/tox_poetry_installer/utilities.py b/tox_poetry_installer/utilities.py index 6f7ac80..87e1d98 100644 --- a/tox_poetry_installer/utilities.py +++ b/tox_poetry_installer/utilities.py @@ -43,6 +43,19 @@ def check_preconditions(venv: ToxVirtualEnv, action: ToxAction) -> "_poetry.Poet f"Skipping isolated packaging build env '{action.name}'" ) + if venv.envconfig.config.option.require_poetry: + logger.warning( + "DEPRECATION: The '--require-poetry' runtime option is deprecated and will be " + "removed in version 1.0.0. Please update test environments that require Poetry to " + "set the 'require_poetry = true' option in tox.ini" + ) + + if venv.envconfig.config.option.parallelize_locked_install is not None: + logger.warning( + "DEPRECATION: The '--parallelize-locked-install' option is deprecated and will " + "be removed in version 1.0.0. Please use the '--parallel-install-threads' option." + ) + from tox_poetry_installer import _poetry try: