Restricted Plugin ManagersΒΆ

In some cases, such as running under the python setup.py test command, nose is not able to use all available plugins. In those cases, a nose.plugins.manager.RestrictedPluginManager is used to exclude plugins that implement API methods that nose is unable to call.

Support files for this test are in the support directory.

>>> import os
>>> support = os.path.join(os.path.dirname(__file__), 'support')

For this test, we’ll use a simple plugin that implements the startTest method.

>>> from nose.plugins.base import Plugin
>>> from nose.plugins.manager import RestrictedPluginManager
>>> class StartPlugin(Plugin):
...     def startTest(self, test):
...         print "started %s" % test

Note

The run() function in nose.plugins.plugintest reformats test result output to remove timings, which will vary from run to run, and redirects the output to stdout.

>>> from nose.plugins.plugintest import run_buffered as run

When run with a normal plugin manager, the plugin executes.

>>> argv = ['plugintest', '-v', '--with-startplugin', support]
>>> run(argv=argv, plugins=[StartPlugin()]) 
started test.test
test.test ... ok

----------------------------------------------------------------------
Ran 1 test in ...s

OK

However, when run with a restricted plugin manager configured to exclude plugins implementing startTest, an exception is raised and nose exits.

>>> restricted = RestrictedPluginManager(
...     plugins=[StartPlugin()], exclude=('startTest',), load=False)
>>> run(argv=argv, plugins=restricted) 
Traceback (most recent call last):
...
SystemExit: 2

Errors are only raised when options defined by excluded plugins are used.

>>> argv = ['plugintest', '-v', support]
>>> run(argv=argv, plugins=restricted) 
test.test ... ok

----------------------------------------------------------------------
Ran 1 test in ...s

OK

When a disabled option appears in a configuration file, instead of on the command line, a warning is raised instead of an exception.

>>> argv = ['plugintest', '-v', '-c', os.path.join(support, 'start.cfg'),
...         support]
>>> run(argv=argv, plugins=restricted) 
RuntimeWarning: Option 'with-startplugin' in config file '...start.cfg' ignored: excluded by runtime environment
test.test ... ok

----------------------------------------------------------------------
Ran 1 test in ...s

OK

However, if an option appears in a configuration file that is not recognized either as an option defined by nose, or by an active or excluded plugin, an error is raised.

>>> argv = ['plugintest', '-v', '-c', os.path.join(support, 'bad.cfg'),
...         support]
>>> run(argv=argv, plugins=restricted) 
Traceback (most recent call last):
...
SystemExit: 2