3
<title>nose: Restricted Plugin Managers</title>
4
<link rel="stylesheet" href="site.css" type="text/css"></link>
9
<p>This document covers nose version <b>0.10.3</b></p>
10
<p>Last update: <b>Tue Jun 3 11:50:26 2008</b></p>
11
<h2>Plugins</h2><ul><li><a href="plugin_attrib.html">Builtin Plugin: attrib</a></li><li><a href="plugin_capture.html">Builtin Plugin: capture</a></li><li><a href="plugin_cover.html">Builtin Plugin: cover</a></li><li><a href="plugin_debug.html">Builtin Plugin: debug</a></li><li><a href="plugin_deprecated.html">Builtin Plugin: deprecated</a></li><li><a href="plugin_doctests.html">Builtin Plugin: doctests</a></li><li><a href="plugin_failuredetail.html">Builtin Plugin: failuredetail</a></li><li><a href="plugin_isolate.html">Builtin Plugin: isolate</a></li><li><a href="plugin_prof.html">Builtin Plugin: prof</a></li><li><a href="plugin_skip.html">Builtin Plugin: skip</a></li><li><a href="plugin_testid.html">Builtin Plugin: testid</a></li><li><a href="error_class_plugin.html">ErrorClass Plugins</a></li><li><a href="plugin_interface.html">Plugin Interface</a></li><li><a href="writing_plugins.html">Writing Plugins</a></li></ul><h2>Modules</h2><ul><li><a href="module_nose.case.html">Module: nose.case</a></li><li><a href="module_nose.commands.html">Module: nose.commands</a></li><li><a href="module_nose.config.html">Module: nose.config</a></li><li><a href="module_nose.core.html">Module: nose.core</a></li><li><a href="module_nose.exc.html">Module: nose.exc</a></li><li><a href="module_nose.failure.html">Module: nose.failure</a></li><li><a href="module_nose.importer.html">Module: nose.importer</a></li><li><a href="module_nose.inspector.html">Module: nose.inspector</a></li><li><a href="module_nose.loader.html">Module: nose.loader</a></li><li><a href="module_nose.plugins.manager.html">Module: nose.plugins.manager</a></li><li><a href="module_nose.plugins.plugintest.html">Module: nose.plugins.plugintest</a></li><li><a href="module_nose.proxy.html">Module: nose.proxy</a></li><li><a href="module_nose.result.html">Module: nose.result</a></li><li><a href="module_nose.selector.html">Module: nose.selector</a></li><li><a href="module_nose.suite.html">Module: nose.suite</a></li><li><a href="module_nose.tools.html">Module: nose.tools</a></li><li><a href="module_nose.twistedtools.html">Module: nose.twistedtools</a></li><li><a href="module_nose.util.html">Module: nose.util</a></li></ul><h2>Plugin Examples</h2><ul><li><a href="unwanted_package.html">Excluding Unwanted Packages</a></li><li><a href="errorclass_failure.html">Failure of Errorclasses</a></li><li><a href="imported_tests.html">Importing Tests</a></li><li><a href="empty_plugin.html">Minimal plugin</a></li><li><a href="restricted_plugin_options.html">Restricted Plugin Managers</a></li><li><a href="init_plugin.html">Running Initialization Code Before the Test Run</a></li><li><a href="selector_plugin.html">Using a Custom Selector</a></li><li><a href="plugin_exceptions.html">When Plugins Fail</a></li><li><a href="plugintest_environment.html">nose.plugins.plugintest, os.environ and sys.argv</a></li></ul>
16
<h1>nose: Restricted Plugin Managers</h1>
18
<p>In some cases, such as running under the <tt class="docutils literal"><span class="pre">python</span> <span class="pre">setup.py</span> <span class="pre">test</span></tt> command,
19
nose is not able to use all available plugins. In those cases, a
20
<cite>nose.plugins.manager.RestrictedPluginManager</cite> is used to exclude plugins that
21
implement API methods that nose is unable to call.</p>
22
<p>Support files for this test are in the support directory.</p>
24
<div class="highlight"><pre><span class="gp">>>> </span><span class="k">import</span> <span class="nn">os</span>
25
<span class="gp">>>> </span><span class="n">support</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> <span class="s">'support'</span><span class="p">)</span>
28
<p>For this test, we'll use a simple plugin that implements the <tt class="docutils literal"><span class="pre">startTest</span></tt>
31
<div class="highlight"><pre><span class="gp">>>> </span><span class="k">from</span> <span class="nn">nose.plugins.base</span> <span class="k">import</span> <span class="n">Plugin</span>
32
<span class="gp">>>> </span><span class="k">from</span> <span class="nn">nose.plugins.manager</span> <span class="k">import</span> <span class="n">RestrictedPluginManager</span>
33
<span class="gp">>>> </span><span class="k">class</span> <span class="nc">StartPlugin</span><span class="p">(</span><span class="n">Plugin</span><span class="p">):</span>
34
<span class="gp">... </span> <span class="k">def</span> <span class="nf">startTest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">test</span><span class="p">):</span>
35
<span class="gp">... </span> <span class="k">print</span> <span class="s">"started </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="n">test</span>
39
<p class="first admonition-title">Note</p>
40
<p>The run() function in <a class="reference" href="module_nose.plugins.plugintest.html">nose.plugins.plugintest</a> reformats test result
41
output to remove timings, which will vary from run to run, and
42
redirects the output to stdout.</p>
43
<blockquote class="last">
44
<div class="highlight"><pre><span class="gp">>>> </span><span class="k">from</span> <span class="nn">nose.plugins.plugintest</span> <span class="k">import</span> <span class="n">run_buffered</span> <span class="k">as</span> <span class="n">run</span>
50
<p>When run with a normal plugin manager, the plugin executes.</p>
51
<div class="highlight"><pre><span class="gp">>>> </span><span class="n">argv</span> <span class="o">=</span> <span class="p">[</span><span class="s">'plugintest'</span><span class="p">,</span> <span class="s">'-v'</span><span class="p">,</span> <span class="s">'--with-startplugin'</span><span class="p">,</span> <span class="n">support</span><span class="p">]</span>
52
<span class="gp">>>> </span><span class="n">run</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="n">argv</span><span class="p">,</span> <span class="n">plugins</span><span class="o">=</span><span class="p">[</span><span class="n">StartPlugin</span><span class="p">()])</span> <span class="c"># doctest: +REPORT_NDIFF</span>
53
<span class="go">started test.test</span>
54
<span class="go">test.test ... ok</span>
55
<span class="go"><BLANKLINE></span>
56
<span class="go">----------------------------------------------------------------------</span>
57
<span class="go">Ran 1 test in ...s</span>
58
<span class="go"><BLANKLINE></span>
59
<span class="go">OK</span>
62
<p>However, when run with a restricted plugin manager configured to exclude
63
plugins implementing <cite>startTest</cite>, an exception is raised and nose exits.</p>
65
<div class="highlight"><pre><span class="gp">>>> </span><span class="n">restricted</span> <span class="o">=</span> <span class="n">RestrictedPluginManager</span><span class="p">(</span>
66
<span class="gp">... </span> <span class="n">plugins</span><span class="o">=</span><span class="p">[</span><span class="n">StartPlugin</span><span class="p">()],</span> <span class="n">exclude</span><span class="o">=</span><span class="p">(</span><span class="s">'startTest'</span><span class="p">,),</span> <span class="n">load</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
67
<span class="gp">>>> </span><span class="n">run</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="n">argv</span><span class="p">,</span> <span class="n">plugins</span><span class="o">=</span><span class="n">restricted</span><span class="p">)</span> <span class="c">#doctest: +REPORT_NDIFF +ELLIPSIS</span>
68
<span class="gt">Traceback (most recent call last):</span>
69
<span class="c">...</span>
70
<span class="nc">SystemExit</span>: <span class="n-Identifier">...</span>
73
<p>Errors are only raised when options defined by excluded plugins are used.</p>
75
<div class="highlight"><pre><span class="gp">>>> </span><span class="n">argv</span> <span class="o">=</span> <span class="p">[</span><span class="s">'plugintest'</span><span class="p">,</span> <span class="s">'-v'</span><span class="p">,</span> <span class="n">support</span><span class="p">]</span>
76
<span class="gp">>>> </span><span class="n">run</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="n">argv</span><span class="p">,</span> <span class="n">plugins</span><span class="o">=</span><span class="n">restricted</span><span class="p">)</span> <span class="c"># doctest: +REPORT_NDIFF</span>
77
<span class="go">test.test ... ok</span>
78
<span class="go"><BLANKLINE></span>
79
<span class="go">----------------------------------------------------------------------</span>
80
<span class="go">Ran 1 test in ...s</span>
81
<span class="go"><BLANKLINE></span>
82
<span class="go">OK</span>
85
<p>When a disabled option appears in a configuration file, instead of on the
86
command line, a warning is raised instead of an exception.</p>
88
<div class="highlight"><pre><span class="gp">>>> </span><span class="n">argv</span> <span class="o">=</span> <span class="p">[</span><span class="s">'plugintest'</span><span class="p">,</span> <span class="s">'-v'</span><span class="p">,</span> <span class="s">'-c'</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">support</span><span class="p">,</span> <span class="s">'start.cfg'</span><span class="p">),</span>
89
<span class="gp">... </span> <span class="n">support</span><span class="p">]</span>
90
<span class="gp">>>> </span><span class="n">run</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="n">argv</span><span class="p">,</span> <span class="n">plugins</span><span class="o">=</span><span class="n">restricted</span><span class="p">)</span> <span class="c"># doctest: +ELLIPSIS</span>
91
<span class="go">RuntimeWarning: Option 'with-startplugin' in config file '...start.cfg' ignored: excluded by runtime environment</span>
92
<span class="go">test.test ... ok</span>
93
<span class="go"><BLANKLINE></span>
94
<span class="go">----------------------------------------------------------------------</span>
95
<span class="go">Ran 1 test in ...s</span>
96
<span class="go"><BLANKLINE></span>
97
<span class="go">OK</span>
100
<p>However, if an option appears in a configuration file that is not recognized
101
either as an option defined by nose, or by an active or excluded plugin, an
104
<div class="highlight"><pre><span class="gp">>>> </span><span class="n">argv</span> <span class="o">=</span> <span class="p">[</span><span class="s">'plugintest'</span><span class="p">,</span> <span class="s">'-v'</span><span class="p">,</span> <span class="s">'-c'</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">support</span><span class="p">,</span> <span class="s">'bad.cfg'</span><span class="p">),</span>
105
<span class="gp">... </span> <span class="n">support</span><span class="p">]</span>
106
<span class="gp">>>> </span><span class="n">run</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="n">argv</span><span class="p">,</span> <span class="n">plugins</span><span class="o">=</span><span class="n">restricted</span><span class="p">)</span> <span class="c"># doctest: +ELLIPSIS</span>
107
<span class="gt">Traceback (most recent call last):</span>
108
<span class="c">...</span>
109
<span class="nc">ConfigError: Error reading config file '...bad.cfg'</span>: <span class="n-Identifier">no such option 'with-meltedcheese'</span>
115
<script src="http://www.google-analytics.com/urchin.js"
116
type="text/javascript">
118
<script type="text/javascript">
119
_uacct = "UA-2236166-1";