Merge pull request #3787 from hsoft/no-plugin-autoload
Add option to disable plugin auto-loading
This commit is contained in:
commit
5f97711377
1
AUTHORS
1
AUTHORS
|
@ -207,6 +207,7 @@ Tzu-ping Chung
|
||||||
Vasily Kuznetsov
|
Vasily Kuznetsov
|
||||||
Victor Uriarte
|
Victor Uriarte
|
||||||
Vidar T. Fauske
|
Vidar T. Fauske
|
||||||
|
Virgil Dupras
|
||||||
Vitaly Lashmanov
|
Vitaly Lashmanov
|
||||||
Vlad Dragos
|
Vlad Dragos
|
||||||
Wil Cooley
|
Wil Cooley
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Add option to disable plugin auto-loading.
|
|
@ -866,6 +866,11 @@ Contains comma-separated list of modules that should be loaded as plugins:
|
||||||
|
|
||||||
export PYTEST_PLUGINS=mymodule.plugin,xdist
|
export PYTEST_PLUGINS=mymodule.plugin,xdist
|
||||||
|
|
||||||
|
PYTEST_DISABLE_PLUGIN_AUTOLOAD
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
When set, disables plugin auto-loading through setuptools entrypoints. Only explicitly specified plugins will be
|
||||||
|
loaded.
|
||||||
|
|
||||||
PYTEST_CURRENT_TEST
|
PYTEST_CURRENT_TEST
|
||||||
~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
|
@ -701,6 +701,10 @@ class Config(object):
|
||||||
|
|
||||||
self.pluginmanager.rewrite_hook = hook
|
self.pluginmanager.rewrite_hook = hook
|
||||||
|
|
||||||
|
if os.environ.get("PYTEST_DISABLE_PLUGIN_AUTOLOAD"):
|
||||||
|
# We don't autoload from setuptools entry points, no need to continue.
|
||||||
|
return
|
||||||
|
|
||||||
# 'RECORD' available for plugins installed normally (pip install)
|
# 'RECORD' available for plugins installed normally (pip install)
|
||||||
# 'SOURCES.txt' available for plugins installed in dev mode (pip install -e)
|
# 'SOURCES.txt' available for plugins installed in dev mode (pip install -e)
|
||||||
# for installed plugins 'SOURCES.txt' returns an empty list, and vice-versa
|
# for installed plugins 'SOURCES.txt' returns an empty list, and vice-versa
|
||||||
|
@ -726,6 +730,9 @@ class Config(object):
|
||||||
self._checkversion()
|
self._checkversion()
|
||||||
self._consider_importhook(args)
|
self._consider_importhook(args)
|
||||||
self.pluginmanager.consider_preparse(args)
|
self.pluginmanager.consider_preparse(args)
|
||||||
|
if not os.environ.get("PYTEST_DISABLE_PLUGIN_AUTOLOAD"):
|
||||||
|
# Don't autoload from setuptools entry point. Only explicitly specified
|
||||||
|
# plugins are going to be loaded.
|
||||||
self.pluginmanager.load_setuptools_entrypoints("pytest11")
|
self.pluginmanager.load_setuptools_entrypoints("pytest11")
|
||||||
self.pluginmanager.consider_env()
|
self.pluginmanager.consider_env()
|
||||||
self.known_args_namespace = ns = self._parser.parse_known_args(
|
self.known_args_namespace = ns = self._parser.parse_known_args(
|
||||||
|
|
|
@ -156,6 +156,7 @@ def showhelp(config):
|
||||||
vars = [
|
vars = [
|
||||||
("PYTEST_ADDOPTS", "extra command line options"),
|
("PYTEST_ADDOPTS", "extra command line options"),
|
||||||
("PYTEST_PLUGINS", "comma-separated plugins to load during startup"),
|
("PYTEST_PLUGINS", "comma-separated plugins to load during startup"),
|
||||||
|
("PYTEST_DISABLE_PLUGIN_AUTOLOAD", "set to disable plugin auto-loading"),
|
||||||
("PYTEST_DEBUG", "set to enable debug tracing of pytest's internals"),
|
("PYTEST_DEBUG", "set to enable debug tracing of pytest's internals"),
|
||||||
]
|
]
|
||||||
for name, help in vars:
|
for name, help in vars:
|
||||||
|
|
|
@ -605,6 +605,26 @@ def test_plugin_preparse_prevents_setuptools_loading(testdir, monkeypatch, block
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"parse_args,should_load", [(("-p", "mytestplugin"), True), ((), False)]
|
||||||
|
)
|
||||||
|
def test_disable_plugin_autoload(testdir, monkeypatch, parse_args, should_load):
|
||||||
|
pkg_resources = pytest.importorskip("pkg_resources")
|
||||||
|
|
||||||
|
def my_iter(name):
|
||||||
|
raise AssertionError("Should not be called")
|
||||||
|
|
||||||
|
class PseudoPlugin(object):
|
||||||
|
x = 42
|
||||||
|
|
||||||
|
monkeypatch.setenv("PYTEST_DISABLE_PLUGIN_AUTOLOAD", "1")
|
||||||
|
monkeypatch.setattr(pkg_resources, "iter_entry_points", my_iter)
|
||||||
|
monkeypatch.setitem(sys.modules, "mytestplugin", PseudoPlugin())
|
||||||
|
config = testdir.parseconfig(*parse_args)
|
||||||
|
has_loaded = config.pluginmanager.get_plugin("mytestplugin") is not None
|
||||||
|
assert has_loaded == should_load
|
||||||
|
|
||||||
|
|
||||||
def test_cmdline_processargs_simple(testdir):
|
def test_cmdline_processargs_simple(testdir):
|
||||||
testdir.makeconftest(
|
testdir.makeconftest(
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue