Sophie

Sophie

distrib > Mandriva > 2010.2 > i586 > media > contrib-backports > by-pkgid > 85556a06d0b40546e6bb4676359ced2e > files > 87

python-pytest-2.2.4-1mdv2010.1.noarch.rpm



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    <title>_pytest.mark</title>
    <link rel="stylesheet" href="../../_static/sphinxdoc.css" type="text/css" />
    <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '../../',
        VERSION:     '2.2.4',
        COLLAPSE_INDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true
      };
    </script>
    <script type="text/javascript" src="../../_static/jquery.js"></script>
    <script type="text/javascript" src="../../_static/underscore.js"></script>
    <script type="text/javascript" src="../../_static/doctools.js"></script>
    <link rel="top" title="None" href="../../index.html" />
    <link rel="up" title="Module code" href="../index.html" /> 
  </head>
  <body>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../../py-modindex.html" title="Python Module Index"
             >modules</a></li>
        <li><a href="../../contents.html">pytest-2.2.4</a> &raquo;</li>
          <li><a href="../index.html" accesskey="U">Module code</a> &raquo;</li>
 
<g:plusone></g:plusone>

      </ul>
    </div>
      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper">
<div id="searchbox" style="display: none">
    <form class="search" action="../../search.html" method="get">
      <input type="text" name="q" size="18" />
      <input type="submit" value="Search" />
      <input type="hidden" name="check_keywords" value="yes" />
      <input type="hidden" name="area" value="default" />
    </form>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>

<h3>quicklinks</h3>
<div style="text-align: left; font-size: 100%; vertical-align: middle;">
<table>
<tr>
<td>
        <a href="../../index.html">home</a>
</td><td>
        <a href="../../contents.html">TOC/contents</a>
</td></tr><tr><td>
        <a href="../../getting-started.html">install</a>
</td><td>
        <a href="../../changelog.html">changelog</a>
</td></tr><tr><td>
        <a href="../../example/index.html">examples</a>
</td><td>
        <a href="../../customize.html">customize</a>
</td></tr><tr><td>
        <a href="https://bitbucket.org/hpk42/pytest/issues?status=new&status=open">issues[bb]</a>
</td><td>
        <a href="../../contact.html">contact</a>
</td></tr></table>
</div>

        </div>
      </div>

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <h1>Source code for _pytest.mark</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot; generic mechanism for marking and selecting python functions. &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">pytest</span><span class="o">,</span> <span class="nn">py</span>

<span class="k">def</span> <span class="nf">pytest_namespace</span><span class="p">():</span>
    <span class="k">return</span> <span class="p">{</span><span class="s">&#39;mark&#39;</span><span class="p">:</span> <span class="n">MarkGenerator</span><span class="p">()}</span>

<span class="k">def</span> <span class="nf">pytest_addoption</span><span class="p">(</span><span class="n">parser</span><span class="p">):</span>
    <span class="n">group</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">getgroup</span><span class="p">(</span><span class="s">&quot;general&quot;</span><span class="p">)</span>
    <span class="n">group</span><span class="o">.</span><span class="n">_addoption</span><span class="p">(</span><span class="s">&#39;-k&#39;</span><span class="p">,</span>
        <span class="n">action</span><span class="o">=</span><span class="s">&quot;store&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">&quot;keyword&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s">&quot;KEYWORDEXPR&quot;</span><span class="p">,</span>
        <span class="n">help</span><span class="o">=</span><span class="s">&quot;only run tests which match given keyword expression.  &quot;</span>
             <span class="s">&quot;An expression consists of space-separated terms. &quot;</span>
             <span class="s">&quot;Each term must match. Precede a term with &#39;-&#39; to negate. &quot;</span>
             <span class="s">&quot;Terminate expression with &#39;:&#39; to make the first match match &quot;</span>
             <span class="s">&quot;all subsequent tests (usually file-order). &quot;</span><span class="p">)</span>

    <span class="n">group</span><span class="o">.</span><span class="n">_addoption</span><span class="p">(</span><span class="s">&quot;-m&quot;</span><span class="p">,</span>
        <span class="n">action</span><span class="o">=</span><span class="s">&quot;store&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">&quot;markexpr&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s">&quot;&quot;</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s">&quot;MARKEXPR&quot;</span><span class="p">,</span>
        <span class="n">help</span><span class="o">=</span><span class="s">&quot;only run tests matching given mark expression.  &quot;</span>
             <span class="s">&quot;example: -m &#39;mark1 and not mark2&#39;.&quot;</span>
             <span class="p">)</span>

    <span class="n">group</span><span class="o">.</span><span class="n">addoption</span><span class="p">(</span><span class="s">&quot;--markers&quot;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">&quot;store_true&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span>
        <span class="s">&quot;show markers (builtin, plugin and per-project ones).&quot;</span><span class="p">)</span>

    <span class="n">parser</span><span class="o">.</span><span class="n">addini</span><span class="p">(</span><span class="s">&quot;markers&quot;</span><span class="p">,</span> <span class="s">&quot;markers for test functions&quot;</span><span class="p">,</span> <span class="s">&#39;linelist&#39;</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">pytest_cmdline_main</span><span class="p">(</span><span class="n">config</span><span class="p">):</span>
    <span class="k">if</span> <span class="n">config</span><span class="o">.</span><span class="n">option</span><span class="o">.</span><span class="n">markers</span><span class="p">:</span>
        <span class="n">config</span><span class="o">.</span><span class="n">pluginmanager</span><span class="o">.</span><span class="n">do_configure</span><span class="p">(</span><span class="n">config</span><span class="p">)</span>
        <span class="n">tw</span> <span class="o">=</span> <span class="n">py</span><span class="o">.</span><span class="n">io</span><span class="o">.</span><span class="n">TerminalWriter</span><span class="p">()</span>
        <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">config</span><span class="o">.</span><span class="n">getini</span><span class="p">(</span><span class="s">&quot;markers&quot;</span><span class="p">):</span>
            <span class="n">name</span><span class="p">,</span> <span class="n">rest</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;:&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
            <span class="n">tw</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">&quot;@pytest.mark.</span><span class="si">%s</span><span class="s">:&quot;</span> <span class="o">%</span>  <span class="n">name</span><span class="p">,</span> <span class="n">bold</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
            <span class="n">tw</span><span class="o">.</span><span class="n">line</span><span class="p">(</span><span class="n">rest</span><span class="p">)</span>
            <span class="n">tw</span><span class="o">.</span><span class="n">line</span><span class="p">()</span>
        <span class="n">config</span><span class="o">.</span><span class="n">pluginmanager</span><span class="o">.</span><span class="n">do_unconfigure</span><span class="p">(</span><span class="n">config</span><span class="p">)</span>
        <span class="k">return</span> <span class="mi">0</span>
<span class="n">pytest_cmdline_main</span><span class="o">.</span><span class="n">tryfirst</span> <span class="o">=</span> <span class="bp">True</span>

<span class="k">def</span> <span class="nf">pytest_collection_modifyitems</span><span class="p">(</span><span class="n">items</span><span class="p">,</span> <span class="n">config</span><span class="p">):</span>
    <span class="n">keywordexpr</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">option</span><span class="o">.</span><span class="n">keyword</span>
    <span class="n">matchexpr</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">option</span><span class="o">.</span><span class="n">markexpr</span>
    <span class="k">if</span> <span class="ow">not</span> <span class="n">keywordexpr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">matchexpr</span><span class="p">:</span>
        <span class="k">return</span>
    <span class="n">selectuntil</span> <span class="o">=</span> <span class="bp">False</span>
    <span class="k">if</span> <span class="n">keywordexpr</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">:]</span> <span class="o">==</span> <span class="s">&quot;:&quot;</span><span class="p">:</span>
        <span class="n">selectuntil</span> <span class="o">=</span> <span class="bp">True</span>
        <span class="n">keywordexpr</span> <span class="o">=</span> <span class="n">keywordexpr</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>

    <span class="n">remaining</span> <span class="o">=</span> <span class="p">[]</span>
    <span class="n">deselected</span> <span class="o">=</span> <span class="p">[]</span>
    <span class="k">for</span> <span class="n">colitem</span> <span class="ow">in</span> <span class="n">items</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">keywordexpr</span> <span class="ow">and</span> <span class="n">skipbykeyword</span><span class="p">(</span><span class="n">colitem</span><span class="p">,</span> <span class="n">keywordexpr</span><span class="p">):</span>
            <span class="n">deselected</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">colitem</span><span class="p">)</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">selectuntil</span><span class="p">:</span>
                <span class="n">keywordexpr</span> <span class="o">=</span> <span class="bp">None</span>
            <span class="k">if</span> <span class="n">matchexpr</span><span class="p">:</span>
                <span class="k">if</span> <span class="ow">not</span> <span class="n">matchmark</span><span class="p">(</span><span class="n">colitem</span><span class="p">,</span> <span class="n">matchexpr</span><span class="p">):</span>
                    <span class="n">deselected</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">colitem</span><span class="p">)</span>
                    <span class="k">continue</span>
            <span class="n">remaining</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">colitem</span><span class="p">)</span>

    <span class="k">if</span> <span class="n">deselected</span><span class="p">:</span>
        <span class="n">config</span><span class="o">.</span><span class="n">hook</span><span class="o">.</span><span class="n">pytest_deselected</span><span class="p">(</span><span class="n">items</span><span class="o">=</span><span class="n">deselected</span><span class="p">)</span>
        <span class="n">items</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">remaining</span>

<span class="k">class</span> <span class="nc">BoolDict</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mydict</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_mydict</span> <span class="o">=</span> <span class="n">mydict</span>
    <span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
        <span class="k">return</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mydict</span>

<span class="k">def</span> <span class="nf">matchmark</span><span class="p">(</span><span class="n">colitem</span><span class="p">,</span> <span class="n">matchexpr</span><span class="p">):</span>
    <span class="k">return</span> <span class="nb">eval</span><span class="p">(</span><span class="n">matchexpr</span><span class="p">,</span> <span class="p">{},</span> <span class="n">BoolDict</span><span class="p">(</span><span class="n">colitem</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">__dict__</span><span class="p">))</span>

<span class="k">def</span> <span class="nf">pytest_configure</span><span class="p">(</span><span class="n">config</span><span class="p">):</span>
    <span class="k">if</span> <span class="n">config</span><span class="o">.</span><span class="n">option</span><span class="o">.</span><span class="n">strict</span><span class="p">:</span>
        <span class="n">pytest</span><span class="o">.</span><span class="n">mark</span><span class="o">.</span><span class="n">_config</span> <span class="o">=</span> <span class="n">config</span>

<span class="k">def</span> <span class="nf">skipbykeyword</span><span class="p">(</span><span class="n">colitem</span><span class="p">,</span> <span class="n">keywordexpr</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot; return True if they given keyword expression means to</span>
<span class="sd">        skip this collector/item.</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="k">if</span> <span class="ow">not</span> <span class="n">keywordexpr</span><span class="p">:</span>
        <span class="k">return</span>

    <span class="n">itemkeywords</span> <span class="o">=</span> <span class="n">getkeywords</span><span class="p">(</span><span class="n">colitem</span><span class="p">)</span>
    <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">filter</span><span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">keywordexpr</span><span class="o">.</span><span class="n">split</span><span class="p">()):</span>
        <span class="n">eor</span> <span class="o">=</span> <span class="n">key</span><span class="p">[:</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;-&#39;</span>
        <span class="k">if</span> <span class="n">eor</span><span class="p">:</span>
            <span class="n">key</span> <span class="o">=</span> <span class="n">key</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">eor</span> <span class="o">^</span> <span class="n">matchonekeyword</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">itemkeywords</span><span class="p">)):</span>
            <span class="k">return</span> <span class="bp">True</span>

<span class="k">def</span> <span class="nf">getkeywords</span><span class="p">(</span><span class="n">node</span><span class="p">):</span>
    <span class="n">keywords</span> <span class="o">=</span> <span class="p">{}</span>
    <span class="k">while</span> <span class="n">node</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
        <span class="n">keywords</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">keywords</span><span class="p">)</span>
        <span class="n">node</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">parent</span>
    <span class="k">return</span> <span class="n">keywords</span>


<span class="k">def</span> <span class="nf">matchonekeyword</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">itemkeywords</span><span class="p">):</span>
    <span class="k">for</span> <span class="n">elem</span> <span class="ow">in</span> <span class="n">key</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;.&quot;</span><span class="p">):</span>
        <span class="k">for</span> <span class="n">kw</span> <span class="ow">in</span> <span class="n">itemkeywords</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">elem</span> <span class="ow">in</span> <span class="n">kw</span><span class="p">:</span>
                <span class="k">break</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="k">return</span> <span class="bp">False</span>
    <span class="k">return</span> <span class="bp">True</span>

<div class="viewcode-block" id="MarkGenerator"><a class="viewcode-back" href="../../mark.html#_pytest.mark.MarkGenerator">[docs]</a><span class="k">class</span> <span class="nc">MarkGenerator</span><span class="p">:</span>
    <span class="sd">&quot;&quot;&quot; Factory for :class:`MarkDecorator` objects - exposed as</span>
<span class="sd">    a ``py.test.mark`` singleton instance.  Example::</span>

<span class="sd">         import py</span>
<span class="sd">         @py.test.mark.slowtest</span>
<span class="sd">         def test_function():</span>
<span class="sd">            pass</span>

<span class="sd">    will set a &#39;slowtest&#39; :class:`MarkInfo` object</span>
<span class="sd">    on the ``test_function`` object. &quot;&quot;&quot;</span>

    <span class="k">def</span> <span class="nf">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
        <span class="k">if</span> <span class="n">name</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&quot;_&quot;</span><span class="p">:</span>
            <span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
        <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">&#39;_config&#39;</span><span class="p">):</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_check</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">MarkDecorator</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_check</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
        <span class="k">try</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_markers</span><span class="p">:</span>
                <span class="k">return</span>
        <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
            <span class="k">pass</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_markers</span> <span class="o">=</span> <span class="n">l</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
        <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_config</span><span class="o">.</span><span class="n">getini</span><span class="p">(</span><span class="s">&quot;markers&quot;</span><span class="p">):</span>
            <span class="n">beginning</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;:&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
            <span class="n">x</span> <span class="o">=</span> <span class="n">beginning</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;(&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
            <span class="n">l</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
        <span class="k">if</span> <span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_markers</span><span class="p">:</span>
            <span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%r</span><span class="s"> not a registered marker&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="p">,))</span>
</div>
<div class="viewcode-block" id="MarkDecorator"><a class="viewcode-back" href="../../mark.html#_pytest.mark.MarkDecorator">[docs]</a><span class="k">class</span> <span class="nc">MarkDecorator</span><span class="p">:</span>
    <span class="sd">&quot;&quot;&quot; A decorator for test functions and test classes.  When applied</span>
<span class="sd">    it will create :class:`MarkInfo` objects which may be</span>
<span class="sd">    :ref:`retrieved by hooks as item keywords &lt;excontrolskip&gt;`.</span>
<span class="sd">    MarkDecorator instances are often created like this::</span>

<span class="sd">        mark1 = py.test.mark.NAME              # simple MarkDecorator</span>
<span class="sd">        mark2 = py.test.mark.NAME(name1=value) # parametrized MarkDecorator</span>

<span class="sd">    and can then be applied as decorators to test functions::</span>

<span class="sd">        @mark2</span>
<span class="sd">        def test_function():</span>
<span class="sd">            pass</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">kwargs</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">markname</span> <span class="o">=</span> <span class="n">name</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">args</span> <span class="o">=</span> <span class="n">args</span> <span class="ow">or</span> <span class="p">()</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span> <span class="o">=</span> <span class="n">kwargs</span> <span class="ow">or</span> <span class="p">{}</span>

    <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="n">d</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__dict__</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
        <span class="n">name</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;markname&#39;</span><span class="p">)</span>
        <span class="k">return</span> <span class="s">&quot;&lt;MarkDecorator </span><span class="si">%r</span><span class="s"> </span><span class="si">%r</span><span class="s">&gt;&quot;</span> <span class="o">%</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">d</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot; if passed a single callable argument: decorate it with mark info.</span>
<span class="sd">            otherwise add *args/**kwargs in-place to mark information. &quot;&quot;&quot;</span>
        <span class="k">if</span> <span class="n">args</span><span class="p">:</span>
            <span class="n">func</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="s">&#39;__call__&#39;</span><span class="p">)</span> <span class="ow">or</span> \
               <span class="nb">hasattr</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="s">&#39;__bases__&#39;</span><span class="p">):</span>
                <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="s">&#39;__bases__&#39;</span><span class="p">):</span>
                    <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="s">&#39;pytestmark&#39;</span><span class="p">):</span>
                        <span class="n">l</span> <span class="o">=</span> <span class="n">func</span><span class="o">.</span><span class="n">pytestmark</span>
                        <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">l</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
                           <span class="n">func</span><span class="o">.</span><span class="n">pytestmark</span> <span class="o">=</span> <span class="p">[</span><span class="n">l</span><span class="p">,</span> <span class="bp">self</span><span class="p">]</span>
                        <span class="k">else</span><span class="p">:</span>
                           <span class="n">l</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
                    <span class="k">else</span><span class="p">:</span>
                       <span class="n">func</span><span class="o">.</span><span class="n">pytestmark</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="p">]</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="n">holder</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">markname</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
                    <span class="k">if</span> <span class="n">holder</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
                        <span class="n">holder</span> <span class="o">=</span> <span class="n">MarkInfo</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">markname</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">)</span>
                        <span class="nb">setattr</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">markname</span><span class="p">,</span> <span class="n">holder</span><span class="p">)</span>
                    <span class="k">else</span><span class="p">:</span>
                        <span class="n">holder</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">)</span>
                <span class="k">return</span> <span class="n">func</span>
        <span class="n">kw</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
        <span class="n">kw</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
        <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span> <span class="o">+</span> <span class="n">args</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__class__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">markname</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="o">=</span><span class="n">kw</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="MarkInfo"><a class="viewcode-back" href="../../mark.html#_pytest.mark.MarkInfo">[docs]</a><span class="k">class</span> <span class="nc">MarkInfo</span><span class="p">:</span>
    <span class="sd">&quot;&quot;&quot; Marking object created by :class:`MarkDecorator` instances. &quot;&quot;&quot;</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span>
        <span class="c">#: name of attribute</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
        <span class="c">#: positional argument list, empty if none specified</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">args</span> <span class="o">=</span> <span class="n">args</span>
        <span class="c">#: keyword argument dictionary, empty if nothing specified</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span> <span class="o">=</span> <span class="n">kwargs</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_arglist</span> <span class="o">=</span> <span class="p">[(</span><span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">copy</span><span class="p">())]</span>

    <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="k">return</span> <span class="s">&quot;&lt;MarkInfo </span><span class="si">%r</span><span class="s"> args=</span><span class="si">%r</span><span class="s"> kwargs=</span><span class="si">%r</span><span class="s">&gt;&quot;</span> <span class="o">%</span> <span class="p">(</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">)</span>

<div class="viewcode-block" id="MarkInfo.add"><a class="viewcode-back" href="../../mark.html#_pytest.mark.MarkInfo.add">[docs]</a>    <span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot; add a MarkInfo with the given args and kwargs. &quot;&quot;&quot;</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_arglist</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">))</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">args</span> <span class="o">+=</span> <span class="n">args</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
</div>
    <span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot; yield MarkInfo objects each relating to a marking-call. &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_arglist</span><span class="p">:</span>
            <span class="k">yield</span> <span class="n">MarkInfo</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span>
</pre></div></div>

          </div>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../../py-modindex.html" title="Python Module Index"
             >modules</a></li>
        <li><a href="../../contents.html">pytest-2.2.4</a> &raquo;</li>
          <li><a href="../index.html" >Module code</a> &raquo;</li>
 
<g:plusone></g:plusone>

      </ul>
    </div>

    <div class="footer">
        &copy; Copyright 2011, holger krekel et alii.
      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
    </div>
<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-7597274-13']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>
<script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>

  </body>
</html>