This file is indexed.

/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 &mdash; 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> &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="https://github.com/ralsina/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://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&#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="?group_id=208383&amp;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&#8217;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 &quot;git+https://github.com/tibonihoo/yapsy.git#egg=yapsy&amp;subdirectory=package&quot;
pip install -e &quot;hg+http://hg.code.sf.net/p/yapsy/code#egg=yapsy&amp;subdirectory=package&quot;
</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>&#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="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&#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="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&#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.11.223 documentation</a> &raquo;</li> 
      </ul>
    </div>
    <div class="footer">
        &copy; 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>