diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 30c31b8..4bfba85 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -40,7 +40,9 @@ jobs: - name: Setup:env run: .github/scripts/setup-env.sh - name: Run:${{ matrix.python.toxenv }} - run: $HOME/ci/bin/tox -e ${{ matrix.python.toxenv }} + run: $HOME/ci/bin/tox \ + -e ${{ matrix.python.toxenv }} \ + --require-poetry Check: runs-on: ubuntu-latest steps: @@ -63,8 +65,8 @@ jobs: - name: Setup:env run: .github/scripts/setup-env.sh - name: Run:static - run: $HOME/ci/bin/tox -e static + run: $HOME/ci/bin/tox -e static --require-poetry - name: Run:static-tests - run: $HOME/ci/bin/tox -e static-tests + run: $HOME/ci/bin/tox -e static-tests --require-poetry - name: Run:security - run: $HOME/ci/bin/tox -e security + run: $HOME/ci/bin/tox -e security --require-poetry diff --git a/tox_poetry_installer/_poetry.py b/tox_poetry_installer/_poetry.py index 357dfec..67fce38 100644 --- a/tox_poetry_installer/_poetry.py +++ b/tox_poetry_installer/_poetry.py @@ -36,6 +36,5 @@ try: from poetry.utils.env import VirtualEnv except ImportError: raise exceptions.PoetryNotInstalledError( - f"No version of Poetry could be imported under the current environment for '{sys.executable}'", - sys.path, + f"No version of Poetry could be imported under the current environment for '{sys.executable}'" ) from None diff --git a/tox_poetry_installer/hooks.py b/tox_poetry_installer/hooks.py index 6e30dfa..1cd0e76 100644 --- a/tox_poetry_installer/hooks.py +++ b/tox_poetry_installer/hooks.py @@ -29,6 +29,13 @@ def tox_addoption(parser: ToxParser): dependencies should be treated as locked or not. """ + parser.add_argument( + "--require-poetry", + action="store_true", + dest="require_poetry", + help="Trigger a failure if Poetry is not available to Tox", + ) + parser.add_testenv_attribute( name="install_dev_deps", type="bool", @@ -65,6 +72,13 @@ def tox_testenv_install_deps(venv: ToxVirtualEnv, action: ToxAction) -> Optional try: poetry = utilities.check_preconditions(venv, action) except exceptions.SkipEnvironment as err: + if ( + isinstance(err, exceptions.PoetryNotInstalledError) + and venv.envconfig.config.option.require_poetry + ): + venv.status = err.__class__.__name__ + reporter.error(str(err)) + return False reporter.verbosity1(str(err)) return None diff --git a/tox_poetry_installer/utilities.py b/tox_poetry_installer/utilities.py index 09e6439..c753a75 100644 --- a/tox_poetry_installer/utilities.py +++ b/tox_poetry_installer/utilities.py @@ -114,8 +114,6 @@ def find_transients(packages: PackageMap, dependency_name: str) -> Set[PoetryPac def check_preconditions(venv: ToxVirtualEnv, action: ToxAction) -> "_poetry.Poetry": """Check that the local project environment meets expectations""" - from tox_poetry_installer import _poetry - # Skip running the plugin for the packaging environment. PEP-517 front ends can handle # that better than we can, so let them do their thing. More to the point: if you're having # problems in the packaging env that this plugin would solve, god help you. @@ -124,6 +122,8 @@ def check_preconditions(venv: ToxVirtualEnv, action: ToxAction) -> "_poetry.Poet f"Skipping isolated packaging build env '{action.name}'" ) + from tox_poetry_installer import _poetry + try: return _poetry.Factory().create_poetry(venv.envconfig.config.toxinidir) # Support running the plugin when the current tox project does not use Poetry for its