/usr/share/doc/python-yapsy-doc/html/index.html is in python-yapsy-doc 1.11.223-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 | <!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 — Yapsy 1.11.223 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.11.223',
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.11.223 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.11.223 documentation</a> »</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’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’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’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 “as is” 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">"path/to/myplugins"</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’s also where <strong>Yapsy</strong> ceases to guide you: it’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 'some action' 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 (‘;;’ 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">"path/to/myplugins"</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">"Playback"</span> <span class="p">:</span> <span class="n">IPlaybackPlugin</span><span class="p">,</span>
<span class="s">"SongInfo"</span> <span class="p">:</span> <span class="n">ISongInfoPlugin</span><span class="p">,</span>
<span class="s">"Visualization"</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 'some action' from the "Visualization" 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">"Visualization"</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’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 “template” 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
“info file” expected to have a ”.yapsy-plugin” extension.</p>
<p>You may want to use another way to describe and detect your
application’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> ‘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> : “an XEmacs-like editor in Python. Eventually. “</li>
<li><a class="reference external" href="http://trac.backslashat.org/MysteryMachine">MysteryMachine</a> : “an application for writing freeform games.”</li>
<li><a class="reference external" href="https://github.com/ralsina/aranduka">Aranduka</a> : “A simple e-book manager and reader”</li>
<li><a class="reference external" href="http://gbin.github.com/err/">err</a> : “a plugin based chatbot”</li>
<li><a class="reference external" href="http://nikola.ralsina.com.ar/">nikola</a> : “a Static Site and Blog Generator”</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’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://ralsina.me/weblog/posts/BB923.html">Making your app modular: Yapsy</a> (applied to Qt apps)</li>
<li><a class="reference external" href="https://github.com/MicahCarrick/yapsy-gtk-example">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’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 “code base” for their
own plugin system, which they evolved in a more or less incompatible
way with the “original” <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’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="?group_id=208383&type=5" /></p>
<p><strong>Any suggestion and help are much welcome !</strong></p>
<p>Yapsy is also tested on the continous integration service <a class="reference external" href="https://travis-ci.org/tibonihoo/yapsy">TravisCI</a>:
<img alt="Continuous integration tests" src="https://travis-ci.org/tibonihoo/yapsy.png?branch=master" /> <a class="reference external" href="https://coveralls.io/r/tibonihoo/yapsy?branch=master"><img alt="Code coverage from continuous integration tests." src="https://coveralls.io/repos/tibonihoo/yapsy/badge.png?branch=master" /></a></p>
<p>A few alternative sites are available:</p>
<blockquote>
<div><ul>
<li><p class="first">Yapsy’s sources are mirrored on <a class="reference external" href="https://github.com/tibonihoo/yapsy/">GitHub</a>.</p>
</li>
<li><p class="first">To use <a class="reference external" href="http://pip.readthedocs.org/en/latest/reference/pip_install.html#vcs-support">pip for a development install</a> you can do something like:</p>
<div class="highlight-python"><div class="highlight"><pre>pip install -e "git+https://github.com/tibonihoo/yapsy.git#egg=yapsy&subdirectory=package"
pip install -e "hg+http://hg.code.sf.net/p/yapsy/code#egg=yapsy&subdirectory=package"
</pre></div>
</div>
</li>
<li><p class="first">A development version of the documentation is available on <a class="reference external" href="https://yapsy.readthedocs.org">ReadTheDoc</a>.</p>
</li>
</ul>
</div></blockquote>
</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>‘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="https://pypi.python.org/pypi/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’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="https://pypi.python.org/pypi/stevedore">stevedor</a> looks quite promising and actually seems to make
setuptools relevant to build plugin systems.</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’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’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.11.223 documentation</a> »</li>
</ul>
</div>
<div class="footer">
© Copyright 2007-2015, Thibauld Nion.
Last updated on Jul 08, 2015.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
</div>
</body>
</html>
|