Sophie

Sophie

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

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.config</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.config</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot; command line options, ini-file and conftest.py processing. &quot;&quot;&quot;</span>

<span class="kn">import</span> <span class="nn">py</span>
<span class="kn">import</span> <span class="nn">sys</span><span class="o">,</span> <span class="nn">os</span>
<span class="kn">from</span> <span class="nn">_pytest.core</span> <span class="kn">import</span> <span class="n">PluginManager</span>
<span class="kn">import</span> <span class="nn">pytest</span>

<span class="k">def</span> <span class="nf">pytest_cmdline_parse</span><span class="p">(</span><span class="n">pluginmanager</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
    <span class="n">config</span> <span class="o">=</span> <span class="n">Config</span><span class="p">(</span><span class="n">pluginmanager</span><span class="p">)</span>
    <span class="n">config</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
    <span class="k">return</span> <span class="n">config</span>

<span class="k">def</span> <span class="nf">pytest_unconfigure</span><span class="p">(</span><span class="n">config</span><span class="p">):</span>
    <span class="k">while</span> <span class="mi">1</span><span class="p">:</span>
        <span class="k">try</span><span class="p">:</span>
            <span class="n">fin</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">_cleanup</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
        <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
            <span class="k">break</span>
        <span class="n">fin</span><span class="p">()</span>

<div class="viewcode-block" id="Parser"><a class="viewcode-back" href="../../plugins.html#_pytest.config.Parser">[docs]</a><span class="k">class</span> <span class="nc">Parser</span><span class="p">:</span>
    <span class="sd">&quot;&quot;&quot; Parser for command line arguments. &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">usage</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">processopt</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">_anonymous</span> <span class="o">=</span> <span class="n">OptionGroup</span><span class="p">(</span><span class="s">&quot;custom options&quot;</span><span class="p">,</span> <span class="n">parser</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_groups</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_processopt</span> <span class="o">=</span> <span class="n">processopt</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_usage</span> <span class="o">=</span> <span class="n">usage</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_inidict</span> <span class="o">=</span> <span class="p">{}</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_ininames</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">hints</span> <span class="o">=</span> <span class="p">[]</span>

    <span class="k">def</span> <span class="nf">processoption</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_processopt</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">option</span><span class="o">.</span><span class="n">dest</span><span class="p">:</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">_processopt</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">addnote</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">note</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_notes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">note</span><span class="p">)</span>

<div class="viewcode-block" id="Parser.getgroup"><a class="viewcode-back" href="../../plugins.html#_pytest.config.Parser.getgroup">[docs]</a>    <span class="k">def</span> <span class="nf">getgroup</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">description</span><span class="o">=</span><span class="s">&quot;&quot;</span><span class="p">,</span> <span class="n">after</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot; get (or create) a named option Group.</span>

<span class="sd">        :name: unique name of the option group.</span>
<span class="sd">        :description: long description for --help output.</span>
<span class="sd">        :after: name of other group, used for ordering --help output.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">for</span> <span class="n">group</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_groups</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">group</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="n">name</span><span class="p">:</span>
                <span class="k">return</span> <span class="n">group</span>
        <span class="n">group</span> <span class="o">=</span> <span class="n">OptionGroup</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span> <span class="n">parser</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
        <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">grp</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_groups</span><span class="p">):</span>
            <span class="k">if</span> <span class="n">grp</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="n">after</span><span class="p">:</span>
                <span class="k">break</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_groups</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">group</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">group</span>
</div>
<div class="viewcode-block" id="Parser.addoption"><a class="viewcode-back" href="../../plugins.html#_pytest.config.Parser.addoption">[docs]</a>    <span class="k">def</span> <span class="nf">addoption</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">opts</span><span class="p">,</span> <span class="o">**</span><span class="n">attrs</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot; add an optparse-style option. &quot;&quot;&quot;</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_anonymous</span><span class="o">.</span><span class="n">addoption</span><span class="p">(</span><span class="o">*</span><span class="n">opts</span><span class="p">,</span> <span class="o">**</span><span class="n">attrs</span><span class="p">)</span>
</div>
    <span class="k">def</span> <span class="nf">parse</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="bp">self</span><span class="o">.</span><span class="n">optparser</span> <span class="o">=</span> <span class="n">optparser</span> <span class="o">=</span> <span class="n">MyOptionParser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
        <span class="n">groups</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_groups</span> <span class="o">+</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_anonymous</span><span class="p">]</span>
        <span class="k">for</span> <span class="n">group</span> <span class="ow">in</span> <span class="n">groups</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">group</span><span class="o">.</span><span class="n">options</span><span class="p">:</span>
                <span class="n">desc</span> <span class="o">=</span> <span class="n">group</span><span class="o">.</span><span class="n">description</span> <span class="ow">or</span> <span class="n">group</span><span class="o">.</span><span class="n">name</span>
                <span class="n">optgroup</span> <span class="o">=</span> <span class="n">py</span><span class="o">.</span><span class="n">std</span><span class="o">.</span><span class="n">optparse</span><span class="o">.</span><span class="n">OptionGroup</span><span class="p">(</span><span class="n">optparser</span><span class="p">,</span> <span class="n">desc</span><span class="p">)</span>
                <span class="n">optgroup</span><span class="o">.</span><span class="n">add_options</span><span class="p">(</span><span class="n">group</span><span class="o">.</span><span class="n">options</span><span class="p">)</span>
                <span class="n">optparser</span><span class="o">.</span><span class="n">add_option_group</span><span class="p">(</span><span class="n">optgroup</span><span class="p">)</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">optparser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">args</span><span class="p">])</span>

    <span class="k">def</span> <span class="nf">parse_setoption</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">option</span><span class="p">):</span>
        <span class="n">parsedoption</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">parse</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
        <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">parsedoption</span><span class="o">.</span><span class="n">__dict__</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
            <span class="nb">setattr</span><span class="p">(</span><span class="n">option</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">args</span>

<div class="viewcode-block" id="Parser.addini"><a class="viewcode-back" href="../../plugins.html#_pytest.config.Parser.addini">[docs]</a>    <span class="k">def</span> <span class="nf">addini</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">help</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot; add an ini-file option with the given name and description. &quot;&quot;&quot;</span>
        <span class="k">assert</span> <span class="nb">type</span> <span class="ow">in</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="s">&quot;pathlist&quot;</span><span class="p">,</span> <span class="s">&quot;args&quot;</span><span class="p">,</span> <span class="s">&quot;linelist&quot;</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_inidict</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">help</span><span class="p">,</span> <span class="nb">type</span><span class="p">,</span> <span class="n">default</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_ininames</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>

</div></div>
<span class="k">class</span> <span class="nc">OptionGroup</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">name</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="s">&quot;&quot;</span><span class="p">,</span> <span class="n">parser</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">name</span> <span class="o">=</span> <span class="n">name</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="o">=</span> <span class="n">description</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">parser</span> <span class="o">=</span> <span class="n">parser</span>

    <span class="k">def</span> <span class="nf">addoption</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">optnames</span><span class="p">,</span> <span class="o">**</span><span class="n">attrs</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot; add an option to this group. &quot;&quot;&quot;</span>
        <span class="n">option</span> <span class="o">=</span> <span class="n">py</span><span class="o">.</span><span class="n">std</span><span class="o">.</span><span class="n">optparse</span><span class="o">.</span><span class="n">Option</span><span class="p">(</span><span class="o">*</span><span class="n">optnames</span><span class="p">,</span> <span class="o">**</span><span class="n">attrs</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_addoption_instance</span><span class="p">(</span><span class="n">option</span><span class="p">,</span> <span class="n">shortupper</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_addoption</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">optnames</span><span class="p">,</span> <span class="o">**</span><span class="n">attrs</span><span class="p">):</span>
        <span class="n">option</span> <span class="o">=</span> <span class="n">py</span><span class="o">.</span><span class="n">std</span><span class="o">.</span><span class="n">optparse</span><span class="o">.</span><span class="n">Option</span><span class="p">(</span><span class="o">*</span><span class="n">optnames</span><span class="p">,</span> <span class="o">**</span><span class="n">attrs</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_addoption_instance</span><span class="p">(</span><span class="n">option</span><span class="p">,</span> <span class="n">shortupper</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_addoption_instance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">,</span> <span class="n">shortupper</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">shortupper</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">opt</span> <span class="ow">in</span> <span class="n">option</span><span class="o">.</span><span class="n">_short_opts</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">opt</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;-&#39;</span> <span class="ow">and</span> <span class="n">opt</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">islower</span><span class="p">():</span>
                    <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&quot;lowercase shortoptions reserved&quot;</span><span class="p">)</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">parser</span><span class="o">.</span><span class="n">processoption</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>


<span class="k">class</span> <span class="nc">MyOptionParser</span><span class="p">(</span><span class="n">py</span><span class="o">.</span><span class="n">std</span><span class="o">.</span><span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</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">parser</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_parser</span> <span class="o">=</span> <span class="n">parser</span>
        <span class="n">py</span><span class="o">.</span><span class="n">std</span><span class="o">.</span><span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">usage</span><span class="o">=</span><span class="n">parser</span><span class="o">.</span><span class="n">_usage</span><span class="p">,</span>
            <span class="n">add_help_option</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
    <span class="k">def</span> <span class="nf">format_epilog</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">formatter</span><span class="p">):</span>
        <span class="n">hints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parser</span><span class="o">.</span><span class="n">hints</span>
        <span class="k">if</span> <span class="n">hints</span><span class="p">:</span>
            <span class="n">s</span> <span class="o">=</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s">&quot;hint: &quot;</span> <span class="o">+</span> <span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">hints</span><span class="p">])</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span>
            <span class="n">s</span> <span class="o">=</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">+</span> <span class="n">s</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span>
            <span class="k">return</span> <span class="n">s</span>
        <span class="k">return</span> <span class="s">&quot;&quot;</span>

<span class="k">class</span> <span class="nc">Conftest</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot; the single place for accessing values and interacting</span>
<span class="sd">        towards conftest modules from py.test objects.</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">onimport</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">confcutdir</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">_path2confmods</span> <span class="o">=</span> <span class="p">{}</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_onimport</span> <span class="o">=</span> <span class="n">onimport</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_conftestpath2mod</span> <span class="o">=</span> <span class="p">{}</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_confcutdir</span> <span class="o">=</span> <span class="n">confcutdir</span>

    <span class="k">def</span> <span class="nf">setinitial</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="sd">&quot;&quot;&quot; try to find a first anchor path for looking up global values</span>
<span class="sd">            from conftests. This function is usually called _before_</span>
<span class="sd">            argument parsing.  conftest files may add command line options</span>
<span class="sd">            and we thus have no completely safe way of determining</span>
<span class="sd">            which parts of the arguments are actually related to options</span>
<span class="sd">            and which are file system paths.  We just try here to get</span>
<span class="sd">            bootstrapped ...</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="n">current</span> <span class="o">=</span> <span class="n">py</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">local</span><span class="p">()</span>
        <span class="n">opt</span> <span class="o">=</span> <span class="s">&#39;--confcutdir&#39;</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)):</span>
            <span class="n">opt1</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
            <span class="k">if</span> <span class="n">opt1</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">opt</span><span class="p">):</span>
                <span class="k">if</span> <span class="n">opt1</span> <span class="o">==</span> <span class="n">opt</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">&gt;</span> <span class="n">i</span><span class="p">:</span>
                        <span class="n">p</span> <span class="o">=</span> <span class="n">current</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">],</span> <span class="nb">abs</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
                <span class="k">elif</span> <span class="n">opt1</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">opt</span> <span class="o">+</span> <span class="s">&quot;=&quot;</span><span class="p">):</span>
                    <span class="n">p</span> <span class="o">=</span> <span class="n">current</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">opt1</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">opt</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">:],</span> <span class="nb">abs</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">_confcutdir</span> <span class="o">=</span> <span class="n">p</span>
                <span class="k">break</span>
        <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span> <span class="o">+</span> <span class="p">[</span><span class="n">current</span><span class="p">]:</span>
            <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="s">&#39;startswith&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">arg</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&quot;--&quot;</span><span class="p">):</span>
                <span class="k">continue</span>
            <span class="n">anchor</span> <span class="o">=</span> <span class="n">current</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="nb">abs</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">anchor</span><span class="o">.</span><span class="n">check</span><span class="p">():</span> <span class="c"># we found some file object</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">_path2confmods</span><span class="p">[</span><span class="bp">None</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getconftestmodules</span><span class="p">(</span><span class="n">anchor</span><span class="p">)</span>
                <span class="c"># let&#39;s also consider test* dirs</span>
                <span class="k">if</span> <span class="n">anchor</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="nb">dir</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
                    <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">anchor</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="s">&quot;test*&quot;</span><span class="p">):</span>
                        <span class="k">if</span> <span class="n">x</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="nb">dir</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
                            <span class="bp">self</span><span class="o">.</span><span class="n">getconftestmodules</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
                <span class="k">break</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="k">assert</span> <span class="mi">0</span><span class="p">,</span> <span class="s">&quot;no root of filesystem?&quot;</span>

    <span class="k">def</span> <span class="nf">getconftestmodules</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot; return a list of imported conftest modules for the given path.  &quot;&quot;&quot;</span>
        <span class="k">try</span><span class="p">:</span>
            <span class="n">clist</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_path2confmods</span><span class="p">[</span><span class="n">path</span><span class="p">]</span>
        <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">path</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
                <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&quot;missing default confest.&quot;</span><span class="p">)</span>
            <span class="n">dp</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">dirpath</span><span class="p">()</span>
            <span class="n">clist</span> <span class="o">=</span> <span class="p">[]</span>
            <span class="k">if</span> <span class="n">dp</span> <span class="o">!=</span> <span class="n">path</span><span class="p">:</span>
                <span class="n">cutdir</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_confcutdir</span>
                <span class="k">if</span> <span class="n">cutdir</span> <span class="ow">and</span> <span class="n">path</span> <span class="o">!=</span> <span class="n">cutdir</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">path</span><span class="o">.</span><span class="n">relto</span><span class="p">(</span><span class="n">cutdir</span><span class="p">):</span>
                    <span class="k">pass</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="n">conftestpath</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="s">&quot;conftest.py&quot;</span><span class="p">)</span>
                    <span class="k">if</span> <span class="n">conftestpath</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="nb">file</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
                        <span class="n">clist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">importconftest</span><span class="p">(</span><span class="n">conftestpath</span><span class="p">))</span>
                <span class="n">clist</span><span class="p">[:</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getconftestmodules</span><span class="p">(</span><span class="n">dp</span><span class="p">)</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_path2confmods</span><span class="p">[</span><span class="n">path</span><span class="p">]</span> <span class="o">=</span> <span class="n">clist</span>
        <span class="c"># be defensive: avoid changes from caller side to</span>
        <span class="c"># affect us by always returning a copy of the actual list</span>
        <span class="k">return</span> <span class="n">clist</span><span class="p">[:]</span>

    <span class="k">def</span> <span class="nf">rget</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">path</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
        <span class="n">mod</span><span class="p">,</span> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rget_with_confmod</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">value</span>

    <span class="k">def</span> <span class="nf">rget_with_confmod</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">path</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
        <span class="n">modules</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getconftestmodules</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
        <span class="n">modules</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span>
        <span class="k">for</span> <span class="n">mod</span> <span class="ow">in</span> <span class="n">modules</span><span class="p">:</span>
            <span class="k">try</span><span class="p">:</span>
                <span class="k">return</span> <span class="n">mod</span><span class="p">,</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
            <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
                <span class="k">continue</span>
        <span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">importconftest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">conftestpath</span><span class="p">):</span>
        <span class="k">assert</span> <span class="n">conftestpath</span><span class="o">.</span><span class="n">check</span><span class="p">(),</span> <span class="n">conftestpath</span>
        <span class="k">try</span><span class="p">:</span>
            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_conftestpath2mod</span><span class="p">[</span><span class="n">conftestpath</span><span class="p">]</span>
        <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
            <span class="n">pkgpath</span> <span class="o">=</span> <span class="n">conftestpath</span><span class="o">.</span><span class="n">pypkgpath</span><span class="p">()</span>
            <span class="k">if</span> <span class="n">pkgpath</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
                <span class="n">_ensure_removed_sysmodule</span><span class="p">(</span><span class="n">conftestpath</span><span class="o">.</span><span class="n">purebasename</span><span class="p">)</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_conftestpath2mod</span><span class="p">[</span><span class="n">conftestpath</span><span class="p">]</span> <span class="o">=</span> <span class="n">mod</span> <span class="o">=</span> <span class="n">conftestpath</span><span class="o">.</span><span class="n">pyimport</span><span class="p">()</span>
            <span class="n">dirpath</span> <span class="o">=</span> <span class="n">conftestpath</span><span class="o">.</span><span class="n">dirpath</span><span class="p">()</span>
            <span class="k">if</span> <span class="n">dirpath</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_path2confmods</span><span class="p">:</span>
                <span class="k">for</span> <span class="n">path</span><span class="p">,</span> <span class="n">mods</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_path2confmods</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
                    <span class="k">if</span> <span class="n">path</span> <span class="ow">and</span> <span class="n">path</span><span class="o">.</span><span class="n">relto</span><span class="p">(</span><span class="n">dirpath</span><span class="p">)</span> <span class="ow">or</span> <span class="n">path</span> <span class="o">==</span> <span class="n">dirpath</span><span class="p">:</span>
                        <span class="k">assert</span> <span class="n">mod</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">mods</span>
                        <span class="n">mods</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">mod</span><span class="p">)</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_postimport</span><span class="p">(</span><span class="n">mod</span><span class="p">)</span>
            <span class="k">return</span> <span class="n">mod</span>

    <span class="k">def</span> <span class="nf">_postimport</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mod</span><span class="p">):</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_onimport</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_onimport</span><span class="p">(</span><span class="n">mod</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">mod</span>

<span class="k">def</span> <span class="nf">_ensure_removed_sysmodule</span><span class="p">(</span><span class="n">modname</span><span class="p">):</span>
    <span class="k">try</span><span class="p">:</span>
        <span class="k">del</span> <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">[</span><span class="n">modname</span><span class="p">]</span>
    <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
        <span class="k">pass</span>

<span class="k">class</span> <span class="nc">CmdOptions</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot; holds cmdline options as attributes.&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="o">**</span><span class="n">kwargs</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">__dict__</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="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;CmdOptions </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">__dict__</span><span class="p">,)</span>

<div class="viewcode-block" id="Config"><a class="viewcode-back" href="../../plugins.html#_pytest.config.Config">[docs]</a><span class="k">class</span> <span class="nc">Config</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot; access to configuration values, pluginmanager and plugin hooks.  &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">pluginmanager</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
        <span class="c">#: command line option values, usually added via parser.addoption(...)</span>
        <span class="c">#: or parser.getgroup(...).addoption(...) calls</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">option</span> <span class="o">=</span> <span class="n">CmdOptions</span><span class="p">()</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_parser</span> <span class="o">=</span> <span class="n">Parser</span><span class="p">(</span>
            <span class="n">usage</span><span class="o">=</span><span class="s">&quot;usage: %prog [options] [file_or_dir] [file_or_dir] [...]&quot;</span><span class="p">,</span>
            <span class="n">processopt</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_processopt</span><span class="p">,</span>
        <span class="p">)</span>
        <span class="c">#: a pluginmanager instance</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">pluginmanager</span> <span class="o">=</span> <span class="n">pluginmanager</span> <span class="ow">or</span> <span class="n">PluginManager</span><span class="p">(</span><span class="n">load</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">trace</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pluginmanager</span><span class="o">.</span><span class="n">trace</span><span class="o">.</span><span class="n">root</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;config&quot;</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_conftest</span> <span class="o">=</span> <span class="n">Conftest</span><span class="p">(</span><span class="n">onimport</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_onimportconftest</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">hook</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pluginmanager</span><span class="o">.</span><span class="n">hook</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_inicache</span> <span class="o">=</span> <span class="p">{}</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_cleanup</span> <span class="o">=</span> <span class="p">[]</span>

    <span class="nd">@classmethod</span>
<div class="viewcode-block" id="Config.fromdictargs"><a class="viewcode-back" href="../../plugins.html#_pytest.config.Config.fromdictargs">[docs]</a>    <span class="k">def</span> <span class="nf">fromdictargs</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">option_dict</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot; constructor useable for subprocesses. &quot;&quot;&quot;</span>
        <span class="n">config</span> <span class="o">=</span> <span class="n">cls</span><span class="p">()</span>
        <span class="c"># XXX slightly crude way to initialize capturing</span>
        <span class="kn">import</span> <span class="nn">_pytest.capture</span>
        <span class="n">_pytest</span><span class="o">.</span><span class="n">capture</span><span class="o">.</span><span class="n">pytest_cmdline_parse</span><span class="p">(</span><span class="n">config</span><span class="o">.</span><span class="n">pluginmanager</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
        <span class="n">config</span><span class="o">.</span><span class="n">_preparse</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">addopts</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
        <span class="n">config</span><span class="o">.</span><span class="n">option</span><span class="o">.</span><span class="n">__dict__</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">option_dict</span><span class="p">)</span>
        <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">config</span><span class="o">.</span><span class="n">option</span><span class="o">.</span><span class="n">plugins</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">consider_pluginarg</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">config</span>
</div>
    <span class="k">def</span> <span class="nf">_onimportconftest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">conftestmodule</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s">&quot;loaded conftestmodule </span><span class="si">%r</span><span class="s">&quot;</span> <span class="o">%</span><span class="p">(</span><span class="n">conftestmodule</span><span class="p">,))</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">pluginmanager</span><span class="o">.</span><span class="n">consider_conftest</span><span class="p">(</span><span class="n">conftestmodule</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_processopt</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">opt</span><span class="p">):</span>
        <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">opt</span><span class="p">,</span> <span class="s">&#39;default&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">opt</span><span class="o">.</span><span class="n">dest</span><span class="p">:</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">option</span><span class="p">,</span> <span class="n">opt</span><span class="o">.</span><span class="n">dest</span><span class="p">):</span>
                <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">option</span><span class="p">,</span> <span class="n">opt</span><span class="o">.</span><span class="n">dest</span><span class="p">,</span> <span class="n">opt</span><span class="o">.</span><span class="n">default</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_getmatchingplugins</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fspath</span><span class="p">):</span>
        <span class="n">allconftests</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_conftest</span><span class="o">.</span><span class="n">_conftestpath2mod</span><span class="o">.</span><span class="n">values</span><span class="p">()</span>
        <span class="n">plugins</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">pluginmanager</span><span class="o">.</span><span class="n">getplugins</span><span class="p">()</span>
                        <span class="k">if</span> <span class="n">x</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">allconftests</span><span class="p">]</span>
        <span class="n">plugins</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_conftest</span><span class="o">.</span><span class="n">getconftestmodules</span><span class="p">(</span><span class="n">fspath</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">plugins</span>

    <span class="k">def</span> <span class="nf">_setinitialconftest</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="c"># capture output during conftest init (#issue93)</span>
        <span class="c"># XXX introduce load_conftest hook to avoid needing to know</span>
        <span class="c"># about capturing plugin here</span>
        <span class="n">capman</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pluginmanager</span><span class="o">.</span><span class="n">getplugin</span><span class="p">(</span><span class="s">&quot;capturemanager&quot;</span><span class="p">)</span>
        <span class="n">capman</span><span class="o">.</span><span class="n">resumecapture</span><span class="p">()</span>
        <span class="k">try</span><span class="p">:</span>
            <span class="k">try</span><span class="p">:</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">_conftest</span><span class="o">.</span><span class="n">setinitial</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
            <span class="k">finally</span><span class="p">:</span>
                <span class="n">out</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="n">capman</span><span class="o">.</span><span class="n">suspendcapture</span><span class="p">()</span> <span class="c"># logging might have got it</span>
        <span class="k">except</span><span class="p">:</span>
            <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
            <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
            <span class="k">raise</span>

    <span class="k">def</span> <span class="nf">_initini</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="bp">self</span><span class="o">.</span><span class="n">inicfg</span> <span class="o">=</span> <span class="n">getcfg</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="p">[</span><span class="s">&quot;pytest.ini&quot;</span><span class="p">,</span> <span class="s">&quot;tox.ini&quot;</span><span class="p">,</span> <span class="s">&quot;setup.cfg&quot;</span><span class="p">])</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_parser</span><span class="o">.</span><span class="n">addini</span><span class="p">(</span><span class="s">&#39;addopts&#39;</span><span class="p">,</span> <span class="s">&#39;extra command line options&#39;</span><span class="p">,</span> <span class="s">&#39;args&#39;</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_parser</span><span class="o">.</span><span class="n">addini</span><span class="p">(</span><span class="s">&#39;minversion&#39;</span><span class="p">,</span> <span class="s">&#39;minimally required pytest version&#39;</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">_preparse</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">addopts</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_initini</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
        <span class="k">if</span> <span class="n">addopts</span><span class="p">:</span>
            <span class="n">args</span><span class="p">[:]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getini</span><span class="p">(</span><span class="s">&quot;addopts&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="n">args</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_checkversion</span><span class="p">()</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">pluginmanager</span><span class="o">.</span><span class="n">consider_preparse</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">pluginmanager</span><span class="o">.</span><span class="n">consider_setuptools_entrypoints</span><span class="p">()</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">pluginmanager</span><span class="o">.</span><span class="n">consider_env</span><span class="p">()</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_setinitialconftest</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">pluginmanager</span><span class="o">.</span><span class="n">do_addoption</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parser</span><span class="p">)</span>
        <span class="k">if</span> <span class="n">addopts</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">hook</span><span class="o">.</span><span class="n">pytest_cmdline_preparse</span><span class="p">(</span><span class="n">config</span><span class="o">=</span><span class="bp">self</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="k">def</span> <span class="nf">_checkversion</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="n">minver</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">inicfg</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;minversion&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
        <span class="k">if</span> <span class="n">minver</span><span class="p">:</span>
            <span class="n">ver</span> <span class="o">=</span> <span class="n">minver</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="n">myver</span> <span class="o">=</span> <span class="n">pytest</span><span class="o">.</span><span class="n">__version__</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">if</span> <span class="n">myver</span> <span class="o">&lt;</span> <span class="n">ver</span><span class="p">:</span>
                <span class="k">raise</span> <span class="n">pytest</span><span class="o">.</span><span class="n">UsageError</span><span class="p">(</span>
                    <span class="s">&quot;</span><span class="si">%s</span><span class="s">:</span><span class="si">%d</span><span class="s">: requires pytest-</span><span class="si">%s</span><span class="s">, actual pytest-</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span><span class="p">(</span>
                    <span class="bp">self</span><span class="o">.</span><span class="n">inicfg</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">inicfg</span><span class="o">.</span><span class="n">lineof</span><span class="p">(</span><span class="s">&#39;minversion&#39;</span><span class="p">),</span>
                    <span class="n">minver</span><span class="p">,</span> <span class="n">pytest</span><span class="o">.</span><span class="n">__version__</span><span class="p">))</span>

    <span class="k">def</span> <span class="nf">parse</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="c"># parse given cmdline arguments into this config object.</span>
        <span class="c"># Note that this can only be called once per testing process.</span>
        <span class="k">assert</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">&#39;args&#39;</span><span class="p">),</span> <span class="p">(</span>
                <span class="s">&quot;can only parse cmdline args at most once per Config object&quot;</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_origargs</span> <span class="o">=</span> <span class="n">args</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_preparse</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">_parser</span><span class="o">.</span><span class="n">hints</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pluginmanager</span><span class="o">.</span><span class="n">_hints</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">_parser</span><span class="o">.</span><span class="n">parse_setoption</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">option</span><span class="p">)</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">args</span><span class="p">:</span>
            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">py</span><span class="o">.</span><span class="n">std</span><span class="o">.</span><span class="n">os</span><span class="o">.</span><span class="n">getcwd</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>

<div class="viewcode-block" id="Config.addinivalue_line"><a class="viewcode-back" href="../../plugins.html#_pytest.config.Config.addinivalue_line">[docs]</a>    <span class="k">def</span> <span class="nf">addinivalue_line</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">line</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot; add a line to an ini-file option. The option must have been</span>
<span class="sd">        declared but might not yet be set in which case the line becomes the</span>
<span class="sd">        the first line in its value. &quot;&quot;&quot;</span>
        <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getini</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
        <span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span>
        <span class="n">x</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="c"># modifies the cached list inline</span>
</div>
<div class="viewcode-block" id="Config.getini"><a class="viewcode-back" href="../../plugins.html#_pytest.config.Config.getini">[docs]</a>    <span class="k">def</span> <span class="nf">getini</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="sd">&quot;&quot;&quot; return configuration value from an ini file. If the</span>
<span class="sd">        specified name hasn&#39;t been registered through a prior ``parse.addini``</span>
<span class="sd">        call (usually from a plugin), a ValueError is raised. &quot;&quot;&quot;</span>
        <span class="k">try</span><span class="p">:</span>
            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_inicache</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
        <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_inicache</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_getini</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
            <span class="k">return</span> <span class="n">val</span>
</div>
    <span class="k">def</span> <span class="nf">_getini</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="n">description</span><span class="p">,</span> <span class="nb">type</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parser</span><span class="o">.</span><span class="n">_inidict</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
        <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&quot;unknown configuration value: </span><span class="si">%r</span><span class="s">&quot;</span> <span class="o">%</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="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">inicfg</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
        <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">default</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
                <span class="k">return</span> <span class="n">default</span>
            <span class="k">if</span> <span class="nb">type</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
                <span class="k">return</span> <span class="s">&#39;&#39;</span>
            <span class="k">return</span> <span class="p">[]</span>
        <span class="k">if</span> <span class="nb">type</span> <span class="o">==</span> <span class="s">&quot;pathlist&quot;</span><span class="p">:</span>
            <span class="n">dp</span> <span class="o">=</span> <span class="n">py</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">local</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inicfg</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">path</span><span class="p">)</span><span class="o">.</span><span class="n">dirpath</span><span class="p">()</span>
            <span class="n">l</span> <span class="o">=</span> <span class="p">[]</span>
            <span class="k">for</span> <span class="n">relpath</span> <span class="ow">in</span> <span class="n">py</span><span class="o">.</span><span class="n">std</span><span class="o">.</span><span class="n">shlex</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">value</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="n">dp</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">relpath</span><span class="p">,</span> <span class="nb">abs</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
            <span class="k">return</span> <span class="n">l</span>
        <span class="k">elif</span> <span class="nb">type</span> <span class="o">==</span> <span class="s">&quot;args&quot;</span><span class="p">:</span>
            <span class="k">return</span> <span class="n">py</span><span class="o">.</span><span class="n">std</span><span class="o">.</span><span class="n">shlex</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
        <span class="k">elif</span> <span class="nb">type</span> <span class="o">==</span> <span class="s">&quot;linelist&quot;</span><span class="p">:</span>
            <span class="k">return</span> <span class="p">[</span><span class="n">t</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="nb">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="o">.</span><span class="n">strip</span><span class="p">(),</span> <span class="n">value</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">))</span> <span class="k">if</span> <span class="n">t</span><span class="p">]</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="k">assert</span> <span class="nb">type</span> <span class="ow">is</span> <span class="bp">None</span>
            <span class="k">return</span> <span class="n">value</span>

    <span class="k">def</span> <span class="nf">_getconftest_pathlist</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">path</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
        <span class="k">try</span><span class="p">:</span>
            <span class="n">mod</span><span class="p">,</span> <span class="n">relroots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_conftest</span><span class="o">.</span><span class="n">rget_with_confmod</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>
        <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
            <span class="k">return</span> <span class="bp">None</span>
        <span class="n">modpath</span> <span class="o">=</span> <span class="n">py</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">local</span><span class="p">(</span><span class="n">mod</span><span class="o">.</span><span class="n">__file__</span><span class="p">)</span><span class="o">.</span><span class="n">dirpath</span><span class="p">()</span>
        <span class="n">l</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">for</span> <span class="n">relroot</span> <span class="ow">in</span> <span class="n">relroots</span><span class="p">:</span>
            <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">relroot</span><span class="p">,</span> <span class="n">py</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">local</span><span class="p">):</span>
                <span class="n">relroot</span> <span class="o">=</span> <span class="n">relroot</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;/&quot;</span><span class="p">,</span> <span class="n">py</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">local</span><span class="o">.</span><span class="n">sep</span><span class="p">)</span>
                <span class="n">relroot</span> <span class="o">=</span> <span class="n">modpath</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">relroot</span><span class="p">,</span> <span class="nb">abs</span><span class="o">=</span><span class="bp">True</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="n">relroot</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">l</span>

    <span class="k">def</span> <span class="nf">_getconftest</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">path</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">check</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
        <span class="k">if</span> <span class="n">check</span><span class="p">:</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">_checkconftest</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_conftest</span><span class="o">.</span><span class="n">rget</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>

<div class="viewcode-block" id="Config.getvalue"><a class="viewcode-back" href="../../plugins.html#_pytest.config.Config.getvalue">[docs]</a>    <span class="k">def</span> <span class="nf">getvalue</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">path</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot; return ``name`` value looked set from command line options.</span>

<span class="sd">        (deprecated) if we can&#39;t find the option also lookup</span>
<span class="sd">        the name in a matching conftest file.</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">try</span><span class="p">:</span>
            <span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">option</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
        <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_getconftest</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">check</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="Config.getvalueorskip"><a class="viewcode-back" href="../../plugins.html#_pytest.config.Config.getvalueorskip">[docs]</a>    <span class="k">def</span> <span class="nf">getvalueorskip</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">path</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot; (deprecated) return getvalue(name) or call</span>
<span class="sd">        py.test.skip if no value exists. &quot;&quot;&quot;</span>
        <span class="n">__tracebackhide__</span> <span class="o">=</span> <span class="bp">True</span>
        <span class="k">try</span><span class="p">:</span>
            <span class="n">val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getvalue</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">val</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
                <span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
            <span class="k">return</span> <span class="n">val</span>
        <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
            <span class="n">py</span><span class="o">.</span><span class="n">test</span><span class="o">.</span><span class="n">skip</span><span class="p">(</span><span class="s">&quot;no </span><span class="si">%r</span><span class="s"> value found&quot;</span> <span class="o">%</span><span class="p">(</span><span class="n">name</span><span class="p">,))</span>

</div></div>
<span class="k">def</span> <span class="nf">getcfg</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">inibasenames</span><span class="p">):</span>
    <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">args</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&quot;-&quot;</span><span class="p">)]</span>
    <span class="k">if</span> <span class="ow">not</span> <span class="n">args</span><span class="p">:</span>
        <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">py</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">local</span><span class="p">()]</span>
    <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
        <span class="n">arg</span> <span class="o">=</span> <span class="n">py</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">local</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
        <span class="k">for</span> <span class="n">base</span> <span class="ow">in</span> <span class="n">arg</span><span class="o">.</span><span class="n">parts</span><span class="p">(</span><span class="n">reverse</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span>
            <span class="k">for</span> <span class="n">inibasename</span> <span class="ow">in</span> <span class="n">inibasenames</span><span class="p">:</span>
                <span class="n">p</span> <span class="o">=</span> <span class="n">base</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">inibasename</span><span class="p">)</span>
                <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">check</span><span class="p">():</span>
                    <span class="n">iniconfig</span> <span class="o">=</span> <span class="n">py</span><span class="o">.</span><span class="n">iniconfig</span><span class="o">.</span><span class="n">IniConfig</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
                    <span class="k">if</span> <span class="s">&#39;pytest&#39;</span> <span class="ow">in</span> <span class="n">iniconfig</span><span class="o">.</span><span class="n">sections</span><span class="p">:</span>
                        <span class="k">return</span> <span class="n">iniconfig</span><span class="p">[</span><span class="s">&#39;pytest&#39;</span><span class="p">]</span>
    <span class="k">return</span> <span class="p">{}</span>

<span class="k">def</span> <span class="nf">findupwards</span><span class="p">(</span><span class="n">current</span><span class="p">,</span> <span class="n">basename</span><span class="p">):</span>
    <span class="n">current</span> <span class="o">=</span> <span class="n">py</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">local</span><span class="p">(</span><span class="n">current</span><span class="p">)</span>
    <span class="k">while</span> <span class="mi">1</span><span class="p">:</span>
        <span class="n">p</span> <span class="o">=</span> <span class="n">current</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">basename</span><span class="p">)</span>
        <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">check</span><span class="p">():</span>
            <span class="k">return</span> <span class="n">p</span>
        <span class="n">p</span> <span class="o">=</span> <span class="n">current</span><span class="o">.</span><span class="n">dirpath</span><span class="p">()</span>
        <span class="k">if</span> <span class="n">p</span> <span class="o">==</span> <span class="n">current</span><span class="p">:</span>
            <span class="k">return</span>
        <span class="n">current</span> <span class="o">=</span> <span class="n">p</span>
</pre></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>