3
<title>nose: Excluding Unwanted Packages</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: Excluding Unwanted Packages</h1>
18
<p>Normally, nose discovery descends into all packages. Plugins can
19
change this behavior by implementing <a class="reference" href="plugin_interface.html#wantDirectory">wantDirectory()</a>.</p>
20
<p>In this example, we have a wanted package called <tt class="docutils literal"><span class="pre">wanted_package</span></tt>
21
and an unwanted package called <tt class="docutils literal"><span class="pre">unwanted_package</span></tt>.</p>
23
<div class="highlight"><pre><span class="gp">>>> </span><span class="k">import</span> <span class="nn">os</span>
24
<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>
25
<span class="gp">>>> </span><span class="n">support_files</span> <span class="o">=</span> <span class="p">[</span><span class="n">d</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">support</span><span class="p">)</span>
26
<span class="gp">... </span> <span class="k">if</span> <span class="ow">not</span> <span class="n">d</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">'.'</span><span class="p">)]</span>
27
<span class="gp">>>> </span><span class="n">support_files</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
28
<span class="gp">>>> </span><span class="n">support_files</span>
29
<span class="go">['unwanted_package', 'wanted_package']</span>
32
<p>When we run nose normally, tests are loaded from both packages.</p>
34
<p class="first admonition-title">Note</p>
35
<p>The run() function in <a class="reference" href="module_nose.plugins.plugintest.html">nose.plugins.plugintest</a> reformats test result
36
output to remove timings, which will vary from run to run, and
37
redirects the output to stdout.</p>
38
<blockquote class="last">
39
<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>
45
<div class="highlight"><pre><span class="gp">>>> </span><span class="n">argv</span> <span class="o">=</span> <span class="p">[</span><span class="n">__file__</span><span class="p">,</span> <span class="s">'-v'</span><span class="p">,</span> <span class="n">support</span><span class="p">]</span>
46
<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="c"># doctest: +REPORT_NDIFF</span>
47
<span class="go">unwanted_package.test_spam.test_spam ... ok</span>
48
<span class="go">wanted_package.test_eggs.test_eggs ... ok</span>
49
<span class="go"><BLANKLINE></span>
50
<span class="go">----------------------------------------------------------------------</span>
51
<span class="go">Ran 2 tests in ...s</span>
52
<span class="go"><BLANKLINE></span>
53
<span class="go">OK</span>
56
<p>To exclude the tests in the unwanted package, we can write a simple
57
plugin that implements <a class="reference" href="plugin_interface.html#wantDirectory">wantDirectory()</a> and returns <tt class="docutils literal"><span class="pre">False</span></tt> if
58
the basename of the directory is <tt class="docutils literal"><span class="pre">"unwanted_package"</span></tt>. This will
59
prevent nose from descending into the unwanted package.</p>
61
<div class="highlight"><pre><span class="gp">>>> </span><span class="k">from</span> <span class="nn">nose.plugins</span> <span class="k">import</span> <span class="n">Plugin</span>
62
<span class="gp">>>> </span><span class="k">class</span> <span class="nc">UnwantedPackagePlugin</span><span class="p">(</span><span class="n">Plugin</span><span class="p">):</span>
63
<span class="gp">... </span> <span class="c"># no command line arg needed to activate plugin</span>
64
<span class="gp">... </span> <span class="n">enabled</span> <span class="o">=</span> <span class="bp">True</span>
65
<span class="gp">... </span> <span class="n">name</span> <span class="o">=</span> <span class="s">"unwanted-package"</span>
66
<span class="go">...</span>
67
<span class="gp">... </span> <span class="k">def</span> <span class="nf">configure</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="n">conf</span><span class="p">):</span>
68
<span class="gp">... </span> <span class="k">pass</span> <span class="c"># always on</span>
69
<span class="go">...</span>
70
<span class="gp">... </span> <span class="k">def</span> <span class="nf">wantDirectory</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dirname</span><span class="p">):</span>
71
<span class="gp">... </span> <span class="n">want</span> <span class="o">=</span> <span class="bp">None</span>
72
<span class="gp">... </span> <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">dirname</span><span class="p">)</span> <span class="o">==</span> <span class="s">"unwanted_package"</span><span class="p">:</span>
73
<span class="gp">... </span> <span class="n">want</span> <span class="o">=</span> <span class="bp">False</span>
74
<span class="gp">... </span> <span class="k">return</span> <span class="n">want</span>
77
<p>In the next test run we use the plugin, and the unwanted package is
80
<div class="highlight"><pre><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>
81
<span class="gp">... </span> <span class="n">plugins</span><span class="o">=</span><span class="p">[</span><span class="n">UnwantedPackagePlugin</span><span class="p">()])</span> <span class="c"># doctest: +REPORT_NDIFF</span>
82
<span class="go">wanted_package.test_eggs.test_eggs ... ok</span>
83
<span class="go"><BLANKLINE></span>
84
<span class="go">----------------------------------------------------------------------</span>
85
<span class="go">Ran 1 test in ...s</span>
86
<span class="go"><BLANKLINE></span>
87
<span class="go">OK</span>
93
<script src="http://www.google-analytics.com/urchin.js"
94
type="text/javascript">
96
<script type="text/javascript">
97
_uacct = "UA-2236166-1";