1
0
mirror of https://github.com/fedora-python/tox-current-env.git synced 2024-12-25 17:46:14 +01:00
github.com_fedora-python_to.../src/tox_current_env/hooks.py

79 lines
2.4 KiB
Python
Raw Normal View History

2019-07-17 15:42:23 +02:00
import os
import shutil
import sys
2019-07-17 13:54:09 +02:00
import tox
2019-07-17 15:42:23 +02:00
@tox.hookimpl
def tox_addoption(parser):
parser.add_argument(
"--current-env",
action="store_true",
dest="current_env",
default=False,
help="Run tests in current environment, not creating any virtual environment",
)
parser.add_argument(
"--print-deps-only",
action="store_true",
dest="print_deps_only",
default=False,
help="Don't run tests, only print the dependencies",
)
@tox.hookimpl
def tox_configure(config):
2019-07-17 16:04:55 +02:00
"""Stores options in the config. Makes all commands external"""
2019-07-17 15:42:23 +02:00
if config.option.print_deps_only:
config.skipsdist = True
elif config.option.current_env:
config.option.recreate = True
config.skipsdist = True
for testenv in config.envconfigs:
config.envconfigs[testenv].whitelist_externals = "*"
return config
class InterpreterMismatch(tox.exception.InterpreterNotFound):
"""Interpreter version in current env does not match requested version"""
2019-07-17 15:42:23 +02:00
2019-07-17 13:54:09 +02:00
@tox.hookimpl
def tox_testenv_create(venv, action):
2019-07-17 15:42:23 +02:00
"""We don't create anything"""
config = venv.envconfig.config
if config.option.current_env or config.option.print_deps_only:
version_info = venv.envconfig.python_info.version_info
if version_info[:2] != sys.version_info[:2]:
raise InterpreterMismatch(
f'tox_current_env: interpreter versions do not match:\n'
+ f' in current env: {tuple(sys.version_info)}\n'
+ f' requested: {version_info}',
)
2019-07-17 16:04:55 +02:00
# Make sure the `python` command on path is sys.executable.
# (We might have e.g. /usr/bin/python3, not `python`.)
# Remove the rest of the virtualenv.
2019-07-17 15:42:23 +02:00
link = venv.envconfig.get_envpython()
target = sys.executable
shutil.rmtree(os.path.dirname(link), ignore_errors=True)
os.makedirs(os.path.dirname(link))
os.symlink(target, link)
return True
@tox.hookimpl
def tox_testenv_install_deps(venv, action):
"""We don't install anything"""
config = venv.envconfig.config
if config.option.current_env or config.option.print_deps_only:
return True
@tox.hookimpl
def tox_runtest(venv, redirect):
if venv.envconfig.config.option.print_deps_only:
2019-07-17 16:04:55 +02:00
for dependency in venv.get_resolved_dependencies():
print(dependency)
2019-07-17 15:42:23 +02:00
return True