Sophie

Sophie

distrib > Fedora > 18 > i386 > by-pkgid > 3510c9e686d39c4057250692cfa9ddee > files > 55

python-yapsy-doc-1.10.2-3.fc18.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>Yapsy: Yet Another Plugin SYstem &mdash; Yapsy 1.10.2 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.10.2',
        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="shortcut icon" href="_static/yapsy-favicon.ico"/>
    <link rel="top" title="Yapsy 1.10.2 documentation" href="#" />
    <link rel="next" title="IPlugin" href="IPlugin.html" /> 
  </head>
  <body>
    <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="IPlugin.html" title="IPlugin"
             accesskey="N">next</a> |</li>
        <li><a href="#">Yapsy 1.10.2 documentation</a> &raquo;</li> 
      </ul>
    </div>  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <div class="section" id="yapsy-yet-another-plugin-system">
<h1>Yapsy: Yet Another Plugin SYstem<a class="headerlink" href="#yapsy-yet-another-plugin-system" title="Permalink to this headline">¶</a></h1>
<p><em>A simple plugin system for Python applications</em></p>
<p>Quick links:</p>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="IPlugin.html">IPlugin</a></li>
<li class="toctree-l1"><a class="reference internal" href="PluginManager.html">PluginManager</a></li>
<li class="toctree-l1"><a class="reference internal" href="PluginInfo.html">PluginInfo</a></li>
<li class="toctree-l1"><a class="reference internal" href="Extensions.html">Built-in Extensions</a></li>
<li class="toctree-l1"><a class="reference internal" href="Advices.html">General advices and troubleshooting</a></li>
</ul>
</div>
<div class="contents local topic" id="on-this-page">
<p class="topic-title first">On this page</p>
<ul class="simple">
<li><a class="reference internal" href="#overview" id="id2">Overview</a></li>
<li><a class="reference internal" href="#getting-started" id="id3">Getting started</a></li>
<li><a class="reference internal" href="#make-it-your-own" id="id4">Make it your own</a><ul>
<li><a class="reference internal" href="#more-sophisticated-plugin-classes" id="id5">More sophisticated plugin classes</a></li>
<li><a class="reference internal" href="#enhance-the-plugin-manager-s-interface" id="id6">Enhance the plugin manager&#8217;s interface</a></li>
<li><a class="reference internal" href="#modify-plugin-descriptions-and-detections" id="id7">Modify plugin descriptions and detections</a></li>
<li><a class="reference internal" href="#modify-the-way-plugins-are-loaded" id="id8">Modify the way plugins are loaded</a></li>
</ul>
</li>
<li><a class="reference internal" href="#showcase-and-tutorials" id="id9">Showcase and tutorials</a></li>
<li><a class="reference internal" href="#development" id="id10">Development</a><ul>
<li><a class="reference internal" href="#contributing-or-forking" id="id11">Contributing or forking ?</a></li>
<li><a class="reference internal" href="#license" id="id12">License</a></li>
<li><a class="reference internal" href="#forge" id="id13">Forge</a></li>
<li><a class="reference internal" href="#references" id="id14">References</a></li>
</ul>
</li>
<li><a class="reference internal" href="#indices-and-tables" id="id15">Indices and tables</a></li>
</ul>
</div>
<span class="target" id="module-yapsy"></span><div class="section" id="overview">
<h2><a class="toc-backref" href="#id2">Overview</a><a class="headerlink" href="#overview" title="Permalink to this headline">¶</a></h2>
<p>Yapsy&#8217;s main purpose is to offer a way to easily design a plugin
system in Python, and motivated by the fact that many other Python
plugin system are either too complicated for a basic use or depend on
a lot of libraries. Yapsy only depends on Python&#8217;s standard library.</p>
<p><strong>Yapsy</strong> basically defines two core classes:</p>
<ul class="simple">
<li>a fully functional though very simple <tt class="docutils literal"><span class="pre">PluginManager</span></tt> class</li>
<li>an interface <tt class="docutils literal"><span class="pre">IPlugin</span></tt> which defines the interface of plugin
instances handled by the <tt class="docutils literal"><span class="pre">PluginManager</span></tt></li>
</ul>
</div>
<div class="section" id="getting-started">
<h2><a class="toc-backref" href="#id3">Getting started</a><a class="headerlink" href="#getting-started" title="Permalink to this headline">¶</a></h2>
<p>The basic classes defined by <strong>Yapsy</strong> should work &#8220;as is&#8221; and enable
you to load and activate your plugins. So that the following code
should get you a fully working plugin management system:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">yapsy.PluginManager</span> <span class="kn">import</span> <span class="n">PluginManager</span>

<span class="c"># Build the manager</span>
<span class="n">simplePluginManager</span> <span class="o">=</span> <span class="n">PluginManager</span><span class="p">()</span>
<span class="c"># Tell it the default place(s) where to find plugins</span>
<span class="n">simplePluginManager</span><span class="o">.</span><span class="n">setPluginPlaces</span><span class="p">([</span><span class="s">&quot;path/to/myplugins&quot;</span><span class="p">])</span>
<span class="c"># Load all plugins</span>
<span class="n">simplePluginManager</span><span class="o">.</span><span class="n">collectPlugins</span><span class="p">()</span>

<span class="c"># Activate all loaded plugins</span>
<span class="k">for</span> <span class="n">pluginInfo</span> <span class="ow">in</span> <span class="n">simplePluginManager</span><span class="o">.</span><span class="n">getAllPlugins</span><span class="p">():</span>
   <span class="n">simplePluginManager</span><span class="o">.</span><span class="n">activatePluginByName</span><span class="p">(</span><span class="n">pluginInfo</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p>The <tt class="docutils literal"><span class="pre">plugin_info</span></tt> object (typically an instance of
<tt class="docutils literal"><span class="pre">IPlugin</span></tt>) plays as <em>the entry point of each
plugin</em>. That&#8217;s also where <strong>Yapsy</strong> ceases to guide you: it&#8217;s
up to you to define what your plugins can do and how you
want to talk to them ! Talking to your plugin will then look
very much like the following:</p>
<div class="last highlight-python"><div class="highlight"><pre><span class="c"># Trigger &#39;some action&#39; from the loaded plugins</span>
<span class="k">for</span> <span class="n">pluginInfo</span> <span class="ow">in</span> <span class="n">simplePluginManager</span><span class="o">.</span><span class="n">getAllPlugins</span><span class="p">():</span>
   <span class="n">pluginInfo</span><span class="o">.</span><span class="n">plugin_object</span><span class="o">.</span><span class="n">doSomething</span><span class="p">(</span><span class="o">...</span><span class="p">)</span>
</pre></div>
</div>
</div>
<dl class="function">
<dt id="yapsy.NormalizePluginNameForModuleName">
<tt class="descclassname">yapsy.</tt><tt class="descname">NormalizePluginNameForModuleName</tt><big>(</big><em>pluginName</em><big>)</big><a class="headerlink" href="#yapsy.NormalizePluginNameForModuleName" title="Permalink to this definition">¶</a></dt>
<dd><p>Normalize a plugin name into a safer name for a module name.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">may do a little more modifications than strictly
necessary and is not optimized for speed.</p>
</div>
</dd></dl>

<dl class="data">
<dt id="yapsy.PLUGIN_NAME_FORBIDEN_STRING">
<tt class="descclassname">yapsy.</tt><tt class="descname">PLUGIN_NAME_FORBIDEN_STRING</tt><em class="property"> = ';;'</em><a class="headerlink" href="#yapsy.PLUGIN_NAME_FORBIDEN_STRING" title="Permalink to this definition">¶</a></dt>
<dd><div class="admonition warning">
<p class="first admonition-title">Warning</p>
<p class="last">This string (&#8216;;;&#8217; by default) is forbidden in plugin
names, and will be usable to describe lists of plugins
for instance (see <a class="reference internal" href="ConfigurablePluginManager.html"><em>ConfigurablePluginManager</em></a>)</p>
</div>
</dd></dl>

</div>
<div class="section" id="make-it-your-own">
<span id="extend"></span><h2><a class="toc-backref" href="#id4">Make it your own</a><a class="headerlink" href="#make-it-your-own" title="Permalink to this headline">¶</a></h2>
<p>For applications that require the plugins and their managers to be
more sophisticated, several techniques make such enhancement easy. The
following sections detail the most frequent needs for extensions
and what you can do about it.</p>
<div class="section" id="more-sophisticated-plugin-classes">
<h3><a class="toc-backref" href="#id5">More sophisticated plugin classes</a><a class="headerlink" href="#more-sophisticated-plugin-classes" title="Permalink to this headline">¶</a></h3>
<p>You can define a plugin class with a richer interface than
<tt class="docutils literal"><span class="pre">IPlugin</span></tt>, so long as it inherits from IPlugin, it should work the
same. The only thing you need to know is that the plugin instance is
accessible via the <tt class="docutils literal"><span class="pre">PluginInfo</span></tt> instance from its
<tt class="docutils literal"><span class="pre">PluginInfo.plugin_object</span></tt>.</p>
<p>It is also possible to define a wider variety of plugins, by defining
as much subclasses of IPlugin. But in such a case you have to inform
the manager about that before collecting plugins:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="c"># Build the manager</span>
<span class="n">simplePluginManager</span> <span class="o">=</span> <span class="n">PluginManager</span><span class="p">()</span>
<span class="c"># Tell it the default place(s) where to find plugins</span>
<span class="n">simplePluginManager</span><span class="o">.</span><span class="n">setPluginPlaces</span><span class="p">([</span><span class="s">&quot;path/to/myplugins&quot;</span><span class="p">])</span>
<span class="c"># Define the various categories corresponding to the different</span>
<span class="c"># kinds of plugins you have defined</span>
<span class="n">simplePluginManager</span><span class="o">.</span><span class="n">setCategoriesFilter</span><span class="p">({</span>
   <span class="s">&quot;Playback&quot;</span> <span class="p">:</span> <span class="n">IPlaybackPlugin</span><span class="p">,</span>
   <span class="s">&quot;SongInfo&quot;</span> <span class="p">:</span> <span class="n">ISongInfoPlugin</span><span class="p">,</span>
   <span class="s">&quot;Visualization&quot;</span> <span class="p">:</span> <span class="n">IVisualisation</span><span class="p">,</span>
   <span class="p">})</span>
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p>Communicating with the plugins belonging to a given category
might then be achieved with some code looking like the
following:</p>
<div class="last highlight-python"><div class="highlight"><pre><span class="c"># Trigger &#39;some action&#39; from the &quot;Visualization&quot; plugins</span>
<span class="k">for</span> <span class="n">pluginInfo</span> <span class="ow">in</span> <span class="n">simplePluginManager</span><span class="o">.</span><span class="n">getPluginsOfCategory</span><span class="p">(</span><span class="s">&quot;Visualization&quot;</span><span class="p">):</span>
   <span class="n">pluginInfo</span><span class="o">.</span><span class="n">plugin_object</span><span class="o">.</span><span class="n">doSomething</span><span class="p">(</span><span class="o">...</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="section" id="enhance-the-plugin-manager-s-interface">
<h3><a class="toc-backref" href="#id6">Enhance the plugin manager&#8217;s interface</a><a class="headerlink" href="#enhance-the-plugin-manager-s-interface" title="Permalink to this headline">¶</a></h3>
<p>To make the plugin manager more helpful to the other components of an
application, you should consider decorating it.</p>
<p>Actually a &#8220;template&#8221; for such decoration is provided as
<a class="reference internal" href="PluginManagerDecorator.html"><em>PluginManagerDecorator</em></a>, which must be inherited in order to
implement the right decorator for your application.</p>
<p>Such decorators can be chained, so that you can take advantage of the ready-made decorators such as:</p>
<p><a class="reference internal" href="ConfigurablePluginManager.html"><em>ConfigurablePluginManager</em></a></p>
<blockquote>
<div>Implements a <tt class="docutils literal"><span class="pre">PluginManager</span></tt> that uses a configuration file to
save the plugins to be activated by default and also grants access
to this file to the plugins.</div></blockquote>
<p><a class="reference internal" href="AutoInstallPluginManager.html"><em>AutoInstallPluginManager</em></a></p>
<blockquote>
<div>Automatically copy the plugin files to the right plugin directory.</div></blockquote>
<p>A full list of pre-implemented decorators is available at <a class="reference internal" href="Extensions.html"><em>Built-in Extensions</em></a>.</p>
</div>
<div class="section" id="modify-plugin-descriptions-and-detections">
<h3><a class="toc-backref" href="#id7">Modify plugin descriptions and detections</a><a class="headerlink" href="#modify-plugin-descriptions-and-detections" title="Permalink to this headline">¶</a></h3>
<p>By default, plugins are described by a text file called the plugin
&#8220;info file&#8221; expected to have a &#8221;.yapsy-plugin&#8221; extension.</p>
<p>You may want to use another way to describe and detect your
application&#8217;s plugin and happily yapsy (since version 1.10) makes it
possible to provide the <tt class="docutils literal"><span class="pre">PluginManager</span></tt> with a custom strategy for
plugin detection.</p>
<p>See <a class="reference internal" href="IPluginLocator.html"><em>IPluginLocator</em></a> for the required interface of such
strategies and <a class="reference internal" href="PluginFileLocator.html"><em>PluginFileLocator</em></a> for a working example of such
a detection strategy.</p>
</div>
<div class="section" id="modify-the-way-plugins-are-loaded">
<h3><a class="toc-backref" href="#id8">Modify the way plugins are loaded</a><a class="headerlink" href="#modify-the-way-plugins-are-loaded" title="Permalink to this headline">¶</a></h3>
<p>To tweak the plugin loading phase it is highly advised to re-implement
your own manager class.</p>
<p>The nice thing is, if your new manager  inherits <tt class="docutils literal"><span class="pre">PluginManager</span></tt>, then it will naturally fit as the start point of any decoration chain. You just have to provide an instance of this new manager to the first decorators, like in the following:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="c"># build and configure a specific manager</span>
<span class="n">baseManager</span> <span class="o">=</span> <span class="n">MyNewManager</span><span class="p">()</span>
<span class="c"># start decorating this manager to add some more responsibilities</span>
<span class="n">myFirstDecorator</span> <span class="o">=</span> <span class="n">AFirstPluginManagerDecorator</span><span class="p">(</span><span class="n">baseManager</span><span class="p">)</span>
<span class="c"># add even more stuff</span>
<span class="n">mySecondDecorator</span> <span class="o">=</span> <span class="n">ASecondPluginManagerDecorator</span><span class="p">(</span><span class="n">myFirstDecorator</span><span class="p">)</span>
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Some decorators have been implemented that modify the way
plugins are loaded, this is however not the easiest way to
do it and it makes it harder to build a chain of decoration
that would include these decorators.  Among those are
<a class="reference internal" href="VersionedPluginManager.html"><em>VersionedPluginManager</em></a> and
<a class="reference internal" href="FilteredPluginManager.html"><em>FilteredPluginManager</em></a></p>
</div>
</div>
</div>
<div class="section" id="showcase-and-tutorials">
<h2><a class="toc-backref" href="#id9">Showcase and tutorials</a><a class="headerlink" href="#showcase-and-tutorials" title="Permalink to this headline">¶</a></h2>
<p><strong>Yapsy</strong> &#8216;s development has been originally motivated by the <a class="reference external" href="http://mathbench.sourceforge.net">MathBench</a>
project but it is now used in other (more advanced) projects like:</p>
<ul class="simple">
<li><a class="reference external" href="http://www.flipturn.org/peppy/">peppy</a> : &#8220;an XEmacs-like editor in Python. Eventually. &#8220;</li>
<li><a class="reference external" href="http://trac.backslashat.org/MysteryMachine">MysteryMachine</a> : &#8220;an application for writing freeform games.&#8221;</li>
<li><a class="reference external" href="http://code.google.com/p/aranduka/">Aranduka</a> : &#8220;A simple e-book manager and reader&#8221;</li>
<li><a class="reference external" href="http://gbin.github.com/err/">err</a> : &#8220;a plugin based chatbot&#8221;</li>
<li><a class="reference external" href="http://nikola.ralsina.com.ar/">nikola</a> : &#8220;a Static Site and Blog Generator&#8221;</li>
</ul>
<p>Nowadays, the development is clearly motivated by such external projects and the enthusiast developpers who use the library.</p>
<p>If you&#8217;re interested in using yapsy, feel free to look into the following links:</p>
<ul class="simple">
<li><a class="reference internal" href="Advices.html"><em>General advices and troubleshooting</em></a></li>
<li><a class="reference external" href="http://stackoverflow.com/questions/5333128/yapsy-minimal-example">A minimal example on stackoverflow</a></li>
<li><a class="reference external" href="http://lateral.netmanagers.com.ar/weblog/posts/BB923.html">Making your app modular: Yapsy</a> (applied to Qt apps)</li>
<li><a class="reference external" href="http://www.micahcarrick.com/python-gtk-plugins-with-yapsy.html">Python plugins with yapsy</a> (applied to GTK apps)</li>
</ul>
</div>
<div class="section" id="development">
<h2><a class="toc-backref" href="#id10">Development</a><a class="headerlink" href="#development" title="Permalink to this headline">¶</a></h2>
<div class="section" id="contributing-or-forking">
<h3><a class="toc-backref" href="#id11">Contributing or forking ?</a><a class="headerlink" href="#contributing-or-forking" title="Permalink to this headline">¶</a></h3>
<p>You&#8217;re always welcome if you suggest any kind of enhancements, any new
decorators or any new pluginmanager. Even more if there is some code
coming with it though this is absolutely not compulsory.</p>
<p>It is also really fine to <em>fork</em> the code ! In the past, some people
found <strong>Yapsy</strong> just good enough to be used as a &#8220;code base&#8221; for their
own plugin system, which they evolved in a more or less incompatible
way with the &#8220;original&#8221; <strong>Yapsy</strong>, if you think about it, with such a
small library this is actually a clever thing to do.</p>
<p>In any case, please remember that just providing some feedback on where
you&#8217;re using <strong>Yapsy</strong> (original or forked) and how it is useful to you,
is in itself a appreciable contribution :)</p>
</div>
<div class="section" id="license">
<h3><a class="toc-backref" href="#id12">License</a><a class="headerlink" href="#license" title="Permalink to this headline">¶</a></h3>
<p>The work is placed under the simplified <a class="reference external" href="http://www.opensource.org/licenses/bsd-license.php">BSD</a> license in order to make
it as easy as possible to be reused in other projects.</p>
<p>Please note that the icon is not under the same license but under the
<a class="reference external" href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Common Attribution-ShareAlike</a> license.</p>
</div>
<div class="section" id="forge">
<h3><a class="toc-backref" href="#id13">Forge</a><a class="headerlink" href="#forge" title="Permalink to this headline">¶</a></h3>
<p>The project is hosted by <a class="reference external" href="http://sourceforge.net/projects/yapsy/">Sourceforge</a> where you can access the code, documentation and a tracker to share your feedback and ask for support.</p>
<p><img alt="SourceForge.net" src="http://sflogo.sourceforge.net/sflogo.php?group_id=208383&amp;type=5" /></p>
<p><strong>Any suggestion and help are much welcome !</strong></p>
<dl class="docutils">
<dt>Yapsy is also tested on the continous integration service <a class="reference external" href="https://travis-ci.org/tibonihoo/yapsy">TravisCI</a>:</dt>
<dd><ul class="first last simple">
<li>with Python-2.x: <img alt="Tests with Python2" src="https://travis-ci.org/tibonihoo/yapsy.png?branch=master" /></li>
<li>with Python-3.x: <img alt="Tests with Python3" src="https://travis-ci.org/tibonihoo/yapsy.png?branch=python3" /></li>
</ul>
</dd>
</dl>
<p>And if you&#8217;re looking for the development version of the
documentation, it is continuously updated on <a class="reference external" href="https://yapsy.readthedocs.org">ReadTheDoc</a>.</p>
<p>Last but not least, Yapsy&#8217;s sources are mirrored on <a class="reference external" href="https://github.com/tibonihoo/yapsy/">GitHub</a>.</p>
</div>
<div class="section" id="references">
<h3><a class="toc-backref" href="#id14">References</a><a class="headerlink" href="#references" title="Permalink to this headline">¶</a></h3>
<p>Other Python plugin systems already existed before <strong>Yapsy</strong> and some
have appeared after that. <strong>Yapsy</strong>&#8216;s creation is by no mean a sign that
these others plugin systems sucks :) It is just the results of me
being slighlty lazy and as I had already a good idea of how a simple
plugin system should look like, I wanted to implement my own
<a class="footnote-reference" href="#older-systems" id="id1">[1]</a>.</p>
<ul class="simple">
<li><a class="reference external" href="http://cheeseshop.python.org/pypi/setuptools">setuptools</a> seems to be designed to allow applications to have a
plugin system.</li>
</ul>
<ul class="simple">
<li><a class="reference external" href="http://termie.pbwiki.com/SprinklesPy">Sprinkles</a> seems to be also quite lightweight and simple but just
maybe too far away from the design I had in mind.</li>
</ul>
<ul class="simple">
<li><a class="reference external" href="http://developer.berlios.de/projects/plugboard/">PlugBoard</a> is certainly quite good also but too complex for me. It also
depends on zope which considered what I want to do here is way too
much.</li>
</ul>
<ul class="simple">
<li><a class="reference external" href="http://martyalchin.com/2008/jan/10/simple-plugin-framework/">Marty Alchin&#8217;s simple plugin framework</a> is a quite interesting
description of a plugin architecture with code snippets as
illustrations.</li>
</ul>
<ul class="simple">
<li><a class="reference external" href="http://stevedore.readthedocs.org">stevedor</a> looks quite promising and actually seems to make
setuptools relevant to build plugin systems.</li>
</ul>
<ul class="simple">
<li><a class="reference external" href="http://www.evanfosmark.com/2009/07/simple-event-driven-plugin-system-in-python/">Evan Fosmark&#8217;s A simple event-driven plugin system in Python</a> where &#8220;plugins are just functions that get registered through the use of a decorator&#8221;.</li>
</ul>
<ul class="simple">
<li>You can look up more example on a <a class="reference external" href="http://stackoverflow.com/questions/932069/building-a-minimal-plugin-architecture-in-python">stackoverflow&#8217;s discution about minimal plugin systems in Python</a></li>
</ul>
<table class="docutils footnote" frame="void" id="older-systems" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>All the more because it seems that my modest
design ideas slightly differ from what has been done in other
libraries.</td></tr>
</tbody>
</table>
</div>
</div>
<div class="section" id="indices-and-tables">
<h2><a class="toc-backref" href="#id15">Indices and tables</a><a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
<li><a class="reference internal" href="genindex.html"><em>Index</em></a></li>
<li><a class="reference internal" href="py-modindex.html"><em>Module Index</em></a></li>
<li><a class="reference internal" href="search.html"><em>Search Page</em></a></li>
</ul>
</div>
</div>


          </div>
        </div>
      </div>
      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper">
            <p class="logo"><a href="#">
              <img class="logo" src="_static/yapsy-big.png" alt="Logo"/>
            </a></p>
  <h3><a href="#">Table Of Contents</a></h3>
  <ul>
<li><a class="reference internal" href="#">Yapsy: Yet Another Plugin SYstem</a><ul>
<li><a class="reference internal" href="#overview">Overview</a></li>
<li><a class="reference internal" href="#getting-started">Getting started</a></li>
<li><a class="reference internal" href="#make-it-your-own">Make it your own</a><ul>
<li><a class="reference internal" href="#more-sophisticated-plugin-classes">More sophisticated plugin classes</a></li>
<li><a class="reference internal" href="#enhance-the-plugin-manager-s-interface">Enhance the plugin manager&#8217;s interface</a></li>
<li><a class="reference internal" href="#modify-plugin-descriptions-and-detections">Modify plugin descriptions and detections</a></li>
<li><a class="reference internal" href="#modify-the-way-plugins-are-loaded">Modify the way plugins are loaded</a></li>
</ul>
</li>
<li><a class="reference internal" href="#showcase-and-tutorials">Showcase and tutorials</a></li>
<li><a class="reference internal" href="#development">Development</a><ul>
<li><a class="reference internal" href="#contributing-or-forking">Contributing or forking ?</a></li>
<li><a class="reference internal" href="#license">License</a></li>
<li><a class="reference internal" href="#forge">Forge</a></li>
<li><a class="reference internal" href="#references">References</a></li>
</ul>
</li>
<li><a class="reference internal" href="#indices-and-tables">Indices and tables</a></li>
</ul>
</li>
</ul>

  <h4>Next topic</h4>
  <p class="topless"><a href="IPlugin.html"
                        title="next chapter">IPlugin</a></p>
  <h3>This Page</h3>
  <ul class="this-page-menu">
    <li><a href="_sources/index.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="IPlugin.html" title="IPlugin"
             >next</a> |</li>
        <li><a href="#">Yapsy 1.10.2 documentation</a> &raquo;</li> 
      </ul>
    </div>
    <div class="footer">
        &copy; Copyright 2010-2013, Thibauld Nion.
      Last updated on Oct 05, 2013.
      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
    </div>
  </body>
</html>