Sophie

Sophie

distrib > Fedora > 17 > i386 > media > updates > by-pkgid > b50d8ee6d7871fcc13c0677a9364ed59 > files > 356

bcfg2-doc-1.3.0-1.fc17.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>Python Compatibility &mdash; Bcfg2 1.3.0 documentation</title>
    
    <link rel="stylesheet" href="../_static/default.css" type="text/css" />
    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
    
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '../',
        VERSION:     '1.3.0',
        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>
    <script type="text/javascript" src="../_static/sidebar.js"></script>
    <link rel="shortcut icon" href="../_static/favicon.ico"/>
    <link rel="top" title="Bcfg2 1.3.0 documentation" href="../index.html" />
    <link rel="up" title="Bcfg2 Development" href="index.html" />
    <link rel="next" title="Server Core Development" href="core.html" />
    <link rel="prev" title="Writing A Client Tool Driver" href="client-driver.html" />
 
<link rel="stylesheet" href="../_static/bcfg2.css" type=""/>

  </head>
  <body>

<div style="text-align: left; padding: 10px 10px 15px 15px">
<a href="../index.html"><img src="../_static/bcfg2_logo.png" border="0" alt="sampledoc"/></a>
</div>

    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="../py-modindex.html" title="Python Module Index"
             >modules</a> |</li>
        <li class="right" >
          <a href="core.html" title="Server Core Development"
             accesskey="N">next</a> |</li>
        <li class="right" >
          <a href="client-driver.html" title="Writing A Client Tool Driver"
             accesskey="P">previous</a> |</li>
	<li><a href="../index.html">home</a> |&nbsp;</li>
	<!--<li><a href="../search.html">search</a> |&nbsp;</li>-->
	<li><a href="../help/index.html">help</a> |&nbsp;</li>
	<li><a href="../contents.html">documentation </a> &raquo;</li>

          <li><a href="../contents.html" >Bcfg2 documentation 1.3.0</a> &raquo;</li>
          <li><a href="index.html" accesskey="U">Bcfg2 Development</a> &raquo;</li> 
      </ul>
    </div>
  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <div class="section" id="python-compatibility">
<span id="development-compat"></span><h1>Python Compatibility<a class="headerlink" href="#python-compatibility" title="Permalink to this headline">¶</a></h1>
<p>Bcfg2 maintains compatibility with a wide range of Python versions &#8211;
currently 2.4 through 3.2  This requires some (often significant)
compatibility interfaces.  This page documents the compatibility
library, <tt class="docutils literal"><span class="pre">Bcfg2.Compat</span></tt>, and its contents.</p>
<p>Note that, due to limitations in Sphinx (the Bcfg2 documentation
tool), this documentation is <em>not</em> automatically generated.
<tt class="docutils literal"><span class="pre">Compat.py</span></tt> should always be considered the authoritative source.</p>
<p>There are several basic types of symbols found in <tt class="docutils literal"><span class="pre">Bcfg2.Compat</span></tt>:</p>
<ul class="simple">
<li>Symbols whose names have changed, e.g., <tt class="docutils literal"><span class="pre">MutableMapping</span></tt>.</li>
<li>Symbols whose modules have changed names, e.g., <tt class="docutils literal"><span class="pre">urljoin</span></tt>/<tt class="docutils literal"><span class="pre">urlparse</span></tt></li>
<li>Symbols that have been added or removed, e.g., <tt class="docutils literal"><span class="pre">any</span></tt>/<tt class="docutils literal"><span class="pre">all</span></tt>, <tt class="docutils literal"><span class="pre">reduce</span></tt>,
<tt class="docutils literal"><span class="pre">walk_packages</span></tt></li>
<li>Symbols that need some significant workaround to function
identically in all versions, e.g., <tt class="docutils literal"><span class="pre">b64encode</span></tt>/<tt class="docutils literal"><span class="pre">b64decode</span></tt>.</li>
<li>Helper functions and classes for compatibility, e.g., <tt class="docutils literal"><span class="pre">CmpMixin</span></tt>.</li>
</ul>
<div class="section" id="using-bcfg2-compat">
<h2>Using <tt class="docutils literal"><span class="pre">Bcfg2.Compat</span></tt><a class="headerlink" href="#using-bcfg2-compat" title="Permalink to this headline">¶</a></h2>
<p>To use the compatibility libraries, simply import them as such:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">Bcfg2.Compat</span> <span class="kn">import</span> <span class="n">StringIO</span><span class="p">,</span> <span class="nb">all</span>
</pre></div>
</div>
<p>The individual symbol import is preferred over just importing
<tt class="docutils literal"><span class="pre">Bcfg2.Compat</span></tt> as a whole, since in the future we will be able to
remove some items from the library and this makes that process
easier.  A wildcard import is definitely discouraged.</p>
</div>
<div class="section" id="bcfg2-compat-symbols">
<h2>Bcfg2.Compat symbols<a class="headerlink" href="#bcfg2-compat-symbols" title="Permalink to this headline">¶</a></h2>
<p><tt class="docutils literal"><span class="pre">Bcfg2.Compat</span></tt> defines the following symbols:</p>
<div class="section" id="py3k-compatibility-imports">
<h3>Py3K compatibility imports<a class="headerlink" href="#py3k-compatibility-imports" title="Permalink to this headline">¶</a></h3>
<p>The following symbols are imported to provide compatibility with
Python 3.  In cases where the newer symbols has also been backported
to Python 2, the older symbol will be used unless otherwise noted.
This is to ensure that functions or modules with radically different
behavior (e.g., <tt class="xref py py-func docutils literal"><span class="pre">input()</span></tt>) do not cause unexpected side-effects.</p>
<table border="1" class="docutils">
<colgroup>
<col width="24%" />
<col width="36%" />
<col width="41%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">Name</th>
<th class="head">Python 2</th>
<th class="head">Python 3</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td>urljoin</td>
<td><tt class="xref py py-func docutils literal"><span class="pre">urlparse.urljoin()</span></tt></td>
<td><tt class="xref py py-func docutils literal"><span class="pre">urllib.parse.urljoin()</span></tt></td>
</tr>
<tr class="row-odd"><td>urlparse</td>
<td><tt class="xref py py-func docutils literal"><span class="pre">urlparse.urlparse()</span></tt></td>
<td><tt class="xref py py-func docutils literal"><span class="pre">urllib.parse.urlparse()</span></tt></td>
</tr>
<tr class="row-even"><td>HTTPBasicAuthHandler</td>
<td><tt class="xref py py-class docutils literal"><span class="pre">urllib2.HTTPBasicAuthHandler</span></tt></td>
<td><tt class="xref py py-class docutils literal"><span class="pre">urllib.request.HTTPBasicAuthHandler</span></tt></td>
</tr>
<tr class="row-odd"><td>HTTPPasswordMgrWithDefaultRealm</td>
<td><tt class="xref py py-class docutils literal"><span class="pre">urllib2.HTTPPasswordMgrWithDefaultRealm</span></tt></td>
<td><tt class="xref py py-class docutils literal"><span class="pre">urllib.request.HTTPPasswordMgrWithDefaultRealm</span></tt></td>
</tr>
<tr class="row-even"><td>build_opener</td>
<td><tt class="xref py py-func docutils literal"><span class="pre">urllib2.build_opener()</span></tt></td>
<td><tt class="xref py py-func docutils literal"><span class="pre">urllib.request.build_opener()</span></tt></td>
</tr>
<tr class="row-odd"><td>install_opener</td>
<td><tt class="xref py py-func docutils literal"><span class="pre">urllib2.install_opener()</span></tt></td>
<td><tt class="xref py py-func docutils literal"><span class="pre">urllib.request.install_opener()</span></tt></td>
</tr>
<tr class="row-even"><td>urlopen</td>
<td><tt class="xref py py-func docutils literal"><span class="pre">urllib2.urlopen()</span></tt></td>
<td><tt class="xref py py-func docutils literal"><span class="pre">urllib.request.urlopen()</span></tt></td>
</tr>
<tr class="row-odd"><td>HTTPError</td>
<td><tt class="xref py py-exc docutils literal"><span class="pre">urllib2.HTTPError</span></tt></td>
<td><tt class="xref py py-exc docutils literal"><span class="pre">urllib.error.HTTPError</span></tt></td>
</tr>
<tr class="row-even"><td>URLError</td>
<td><tt class="xref py py-exc docutils literal"><span class="pre">urllib2.URLError</span></tt></td>
<td><tt class="xref py py-exc docutils literal"><span class="pre">urllib.error.URLError</span></tt></td>
</tr>
<tr class="row-odd"><td>StringIO</td>
<td><tt class="xref py py-func docutils literal"><span class="pre">cStringIO.StringIO()</span></tt></td>
<td><tt class="xref py py-class docutils literal"><span class="pre">io.StringIO</span></tt></td>
</tr>
<tr class="row-even"><td>ConfigParser</td>
<td><tt class="xref py py-mod docutils literal"><span class="pre">ConfigParser</span></tt></td>
<td><tt class="xref py py-mod docutils literal"><span class="pre">configparser</span></tt></td>
</tr>
<tr class="row-odd"><td>cPickle</td>
<td><tt class="xref py py-mod docutils literal"><span class="pre">cPickle</span></tt></td>
<td><tt class="xref py py-mod docutils literal"><span class="pre">pickle</span></tt></td>
</tr>
<tr class="row-even"><td>Queue</td>
<td><tt class="xref py py-class docutils literal"><span class="pre">Queue.Queue</span></tt></td>
<td><tt class="xref py py-class docutils literal"><span class="pre">queue.Queue</span></tt></td>
</tr>
<tr class="row-odd"><td>Empty</td>
<td><tt class="xref py py-exc docutils literal"><span class="pre">Queue.Empty</span></tt></td>
<td><tt class="xref py py-exc docutils literal"><span class="pre">queue.Empty</span></tt></td>
</tr>
<tr class="row-even"><td>Full</td>
<td><tt class="xref py py-exc docutils literal"><span class="pre">Queue.Full</span></tt></td>
<td><tt class="xref py py-exc docutils literal"><span class="pre">queue.Full</span></tt></td>
</tr>
<tr class="row-odd"><td>xmlrpclib</td>
<td><tt class="xref py py-mod docutils literal"><span class="pre">xmlrpclib</span></tt></td>
<td><tt class="xref py py-mod docutils literal"><span class="pre">xmlrpc.client</span></tt></td>
</tr>
<tr class="row-even"><td>SimpleXMLRPCServer</td>
<td><tt class="xref py py-mod docutils literal"><span class="pre">SimpleXMLRPCServer</span></tt></td>
<td><tt class="xref py py-mod docutils literal"><span class="pre">xmlrpc.server</span></tt></td>
</tr>
<tr class="row-odd"><td>SocketServer</td>
<td><tt class="xref py py-mod docutils literal"><span class="pre">SocketServer</span></tt></td>
<td><tt class="xref py py-mod docutils literal"><span class="pre">socketserver</span></tt></td>
</tr>
<tr class="row-even"><td>httplib</td>
<td><tt class="xref py py-mod docutils literal"><span class="pre">httplib</span></tt></td>
<td><tt class="xref py py-mod docutils literal"><span class="pre">http.client</span></tt></td>
</tr>
<tr class="row-odd"><td>input</td>
<td><tt class="xref py py-func docutils literal"><span class="pre">raw_input()</span></tt></td>
<td><tt class="xref py py-func docutils literal"><span class="pre">input()</span></tt></td>
</tr>
<tr class="row-even"><td>reduce</td>
<td><tt class="xref py py-func docutils literal"><span class="pre">reduce()</span></tt></td>
<td><tt class="xref py py-func docutils literal"><span class="pre">functools.reduce()</span></tt></td>
</tr>
<tr class="row-odd"><td>long</td>
<td><tt class="xref py py-func docutils literal"><span class="pre">long()</span></tt></td>
<td><tt class="xref py py-func docutils literal"><span class="pre">int()</span></tt></td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="python-2-4-compatibility">
<h3>Python 2.4 compatibility<a class="headerlink" href="#python-2-4-compatibility" title="Permalink to this headline">¶</a></h3>
<p>The following symbols are imported or defined to provide compatibility
with Python 2.4 (and occasionally 2.5).  Be sure to read the notes
below, since some of these implementations may be feature-incomplete.</p>
<table border="1" class="docutils">
<colgroup>
<col width="17%" />
<col width="35%" />
<col width="48%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">Name</th>
<th class="head">Python 2.4</th>
<th class="head">Python 2.4+</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td>formatdate</td>
<td><tt class="xref py py-func docutils literal"><span class="pre">email.Utils.formatdate()</span></tt></td>
<td><tt class="xref py py-func docutils literal"><span class="pre">email.utils.formatdate()</span></tt></td>
</tr>
<tr class="row-odd"><td>walk_packages</td>
<td>Not implemented</td>
<td><tt class="xref py py-func docutils literal"><span class="pre">pkgutil.walk_packages()</span></tt> (2.6+)</td>
</tr>
<tr class="row-even"><td>any</td>
<td>Not implemented</td>
<td><tt class="xref py py-func docutils literal"><span class="pre">any()</span></tt></td>
</tr>
<tr class="row-odd"><td>all</td>
<td>Not implemented</td>
<td><tt class="xref py py-func docutils literal"><span class="pre">all()</span></tt></td>
</tr>
<tr class="row-even"><td>wraps</td>
<td>Not implemented</td>
<td><tt class="xref py py-func docutils literal"><span class="pre">functools.wraps()</span></tt></td>
</tr>
<tr class="row-odd"><td>md5</td>
<td><tt class="xref py py-func docutils literal"><span class="pre">md5.md5()</span></tt></td>
<td><tt class="xref py py-class docutils literal"><span class="pre">hashlib.md5</span></tt></td>
</tr>
<tr class="row-even"><td>MutableMapping</td>
<td><tt class="xref py py-class docutils literal"><span class="pre">UserDict.DictMixin</span></tt></td>
<td><tt class="xref py py-class docutils literal"><span class="pre">collections.MutableMapping</span></tt> (2.6+)</td>
</tr>
</tbody>
</table>
<div class="section" id="walk-packages">
<h4>walk_packages<a class="headerlink" href="#walk-packages" title="Permalink to this headline">¶</a></h4>
<p>The <tt class="docutils literal"><span class="pre">walk_packages</span></tt> implementation for Python 2.5 is
feature-complete.  The implementation for Python 2.4 is <em>not</em>.
Differences:</p>
<ul class="simple">
<li>Requires a full path, not a path relative to something in sys.path.
Anywhere we care about that shouldn&#8217;t be an issue.</li>
<li>The first element of each tuple is None instead of an importer
object.</li>
</ul>
</div>
<div class="section" id="wraps">
<h4>wraps<a class="headerlink" href="#wraps" title="Permalink to this headline">¶</a></h4>
<p>The <tt class="docutils literal"><span class="pre">wraps</span></tt> implementation for Python 2.4 is a no-op.  It does not
attempt to copy the docstring or other details from the original
function to the wrapped function.</p>
</div>
<div class="section" id="md5">
<h4>md5<a class="headerlink" href="#md5" title="Permalink to this headline">¶</a></h4>
<p><tt class="xref py py-mod docutils literal"><span class="pre">hashlib</span></tt> is available for Python 2.4, but it is not part of the
standard base.  If it is installed, it will be used.  If you are doing
something fancy with MD5 sums, you may need to determine which object
is in use, since they are not equivalent.  For the majority of simple
cases &#8211; finding the MD5 sum of a string &#8211; they are equivalent
enough.</p>
</div>
<div class="section" id="mutablemapping">
<h4>MutableMapping<a class="headerlink" href="#mutablemapping" title="Permalink to this headline">¶</a></h4>
<p><tt class="xref py py-class docutils literal"><span class="pre">collections.MutableMapping</span></tt> provides a subset of the
functionality of <tt class="xref py py-class docutils literal"><span class="pre">UserDict.DictMixin</span></tt>; that is, any object that
is written to work with <tt class="docutils literal"><span class="pre">MutableMapping</span></tt> will also work with
<tt class="docutils literal"><span class="pre">DictMixin</span></tt>, so you should write classes with <tt class="docutils literal"><span class="pre">MutableMapping</span></tt> in
mind.</p>
<p><tt class="xref py py-class docutils literal"><span class="pre">collections.MutableMapping</span></tt> is available in Python 2.6+, and
will be used if available.</p>
</div>
</div>
<div class="section" id="other-symbols">
<h3>Other Symbols<a class="headerlink" href="#other-symbols" title="Permalink to this headline">¶</a></h3>
<p>The following functions, classes, and symbols are provided for other
miscellaneous reasons.</p>
<div class="section" id="u-str">
<h4>u_str<a class="headerlink" href="#u-str" title="Permalink to this headline">¶</a></h4>
<dl class="function">
<dt id="Bcfg2.Compat.u_str">
<tt class="descclassname">Bcfg2.Compat.</tt><tt class="descname">u_str</tt><big>(</big><em>string</em>, <em>encoding=None</em><big>)</big><a class="reference internal" href="../_modules/Bcfg2/Compat.html#u_str"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#Bcfg2.Compat.u_str" title="Permalink to this definition">¶</a></dt>
<dd><p>print to file compatibility</p>
</dd></dl>

</div>
<div class="section" id="b64encode-b64decode">
<h4>b64encode/b64decode<a class="headerlink" href="#b64encode-b64decode" title="Permalink to this headline">¶</a></h4>
<p>In Python 2, <tt class="xref py py-func docutils literal"><span class="pre">base64.b64encode()</span></tt> and <tt class="xref py py-func docutils literal"><span class="pre">base64.b64decode()</span></tt>
expect strings and return strings.  In Python 3, they expect bytes and
return bytes.  For Python 3, <tt class="docutils literal"><span class="pre">Bcfg2.Compat</span></tt> provides <tt class="docutils literal"><span class="pre">b64encode</span></tt>
and <tt class="docutils literal"><span class="pre">b64encode</span></tt> that transparently encode strings into bytes, then
decode bytes into strings, so that those functions can be used
identically to their use in Python 2.</p>
</div>
<div class="section" id="cmpmixin">
<h4>CmpMixin<a class="headerlink" href="#cmpmixin" title="Permalink to this headline">¶</a></h4>
<dl class="class">
<dt id="Bcfg2.Compat.CmpMixin">
<em class="property">class </em><tt class="descclassname">Bcfg2.Compat.</tt><tt class="descname">CmpMixin</tt><a class="reference internal" href="../_modules/Bcfg2/Compat.html#CmpMixin"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#Bcfg2.Compat.CmpMixin" title="Permalink to this definition">¶</a></dt>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p>
<p>In Py3K, <tt class="xref py py-meth docutils literal"><span class="pre">object.__cmp__()</span></tt> is no longer magical, so this
mixin can be used to define the rich comparison operators from
<tt class="docutils literal"><span class="pre">__cmp__</span></tt> &#8211; i.e., it makes <tt class="docutils literal"><span class="pre">__cmp__</span></tt> magical again.</p>
</dd></dl>

</div>
<div class="section" id="unicode">
<h4>unicode<a class="headerlink" href="#unicode" title="Permalink to this headline">¶</a></h4>
<p>In Py3k, the <tt class="xref py py-func docutils literal"><span class="pre">unicode()</span></tt> class is not defined, because all
strings are unicode.  <tt class="docutils literal"><span class="pre">Bcfg2.Compat</span></tt> defines <tt class="docutils literal"><span class="pre">unicode</span></tt> as
equivalent to <tt class="xref py py-func docutils literal"><span class="pre">str()</span></tt> in Python 3.</p>
</div>
<div class="section" id="oct-mode">
<h4>oct_mode<a class="headerlink" href="#oct-mode" title="Permalink to this headline">¶</a></h4>
<dl class="function">
<dt id="Bcfg2.Compat.oct_mode">
<tt class="descclassname">Bcfg2.Compat.</tt><tt class="descname">oct_mode</tt><big>(</big><em>mode</em><big>)</big><a class="reference internal" href="../_modules/Bcfg2/Compat.html#oct_mode"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#Bcfg2.Compat.oct_mode" title="Permalink to this definition">¶</a></dt>
<dd><p>Convert a decimal number describing a POSIX permissions mode
to a string giving the octal mode.  In Python 2, this is a synonym
for <tt class="xref py py-func docutils literal"><span class="pre">oct()</span></tt>, but in Python 3 the octal format has changed to
<tt class="docutils literal"><span class="pre">0o000</span></tt>, which cannot be used as an octal permissions mode, so
we need to strip the &#8216;o&#8217; from the output.  I.e., this function
acts like the Python 2 <tt class="xref py py-func docutils literal"><span class="pre">oct()</span></tt> regardless of what version of
Python is in use.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>mode</strong> (<em>int</em>) &#8211; The decimal mode to convert to octal</td>
</tr>
<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">string</td>
</tr>
</tbody>
</table>
</dd></dl>

</div>
</div>
</div>
</div>


          </div>
        </div>
      </div>
      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper">
  <h3><a href="../index.html">Table Of Contents</a></h3>
  <ul>
<li><a class="reference internal" href="#">Python Compatibility</a><ul>
<li><a class="reference internal" href="#using-bcfg2-compat">Using <tt class="docutils literal"><span class="pre">Bcfg2.Compat</span></tt></a></li>
<li><a class="reference internal" href="#bcfg2-compat-symbols">Bcfg2.Compat symbols</a><ul>
<li><a class="reference internal" href="#py3k-compatibility-imports">Py3K compatibility imports</a></li>
<li><a class="reference internal" href="#python-2-4-compatibility">Python 2.4 compatibility</a><ul>
<li><a class="reference internal" href="#walk-packages">walk_packages</a></li>
<li><a class="reference internal" href="#wraps">wraps</a></li>
<li><a class="reference internal" href="#md5">md5</a></li>
<li><a class="reference internal" href="#mutablemapping">MutableMapping</a></li>
</ul>
</li>
<li><a class="reference internal" href="#other-symbols">Other Symbols</a><ul>
<li><a class="reference internal" href="#u-str">u_str</a></li>
<li><a class="reference internal" href="#b64encode-b64decode">b64encode/b64decode</a></li>
<li><a class="reference internal" href="#cmpmixin">CmpMixin</a></li>
<li><a class="reference internal" href="#unicode">unicode</a></li>
<li><a class="reference internal" href="#oct-mode">oct_mode</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>

  <h4>Previous topic</h4>
  <p class="topless"><a href="client-driver.html"
                        title="previous chapter">Writing A Client Tool Driver</a></p>
  <h4>Next topic</h4>
  <p class="topless"><a href="core.html"
                        title="next chapter">Server Core Development</a></p>
  <h3>This Page</h3>
  <ul class="this-page-menu">
    <li><a href="../_sources/development/compat.txt"
           rel="nofollow">Show Source</a></li>
  </ul>
<div id="searchbox" style="display: none">
  <h3>Quick search</h3>
    <form class="search" action="../search.html" method="get">
      <input type="text" name="q" />
      <input type="submit" value="Go" />
      <input type="hidden" name="check_keywords" value="yes" />
      <input type="hidden" name="area" value="default" />
    </form>
    <p class="searchtip" style="font-size: 90%">
    Enter search terms or a module, class or function name.
    </p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             >index</a></li>
        <li class="right" >
          <a href="../py-modindex.html" title="Python Module Index"
             >modules</a> |</li>
        <li class="right" >
          <a href="core.html" title="Server Core Development"
             >next</a> |</li>
        <li class="right" >
          <a href="client-driver.html" title="Writing A Client Tool Driver"
             >previous</a> |</li>
	<li><a href="../index.html">home</a> |&nbsp;</li>
	<!--<li><a href="../search.html">search</a> |&nbsp;</li>-->
	<li><a href="../help/index.html">help</a> |&nbsp;</li>
	<li><a href="../contents.html">documentation </a> &raquo;</li>

          <li><a href="../contents.html" >Bcfg2 documentation 1.3.0</a> &raquo;</li>
          <li><a href="index.html" >Bcfg2 Development</a> &raquo;</li> 
      </ul>
    </div>
    <div class="footer">
        &copy; Copyright 2009-2013, Narayan Desai.
      Last updated on Mar 20, 2013.
      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
    </div>
  </body>
</html>