sphinx-quickstart on Wed Dec 9 22:32:56 2015.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
.. testsetup:: quickstart
import os
from pluginmanager.tests.compat import tempfile
tempdirectory = tempfile.TemporaryDirectory()
plugin_directory_path = tempdirectory.name
path = os.path.join(tempdirectory.name, 'test.py')
with open(path, 'w+') as f:
f.write('from pluginmanager import IPlugin\nclass Test(IPlugin):\n pass')
pluginmanager
=============
|Build Status| |Coverage Status| |Code Climate|
python plugin management, simplified.
`Documentation <http://pluginmanager.readthedocs.org/en/latest/>`_
`Source Code <https://github.com/benhoff/pluginmanager>`_
Library under development. Contains rough edges/unfinished functionality. API subject to changes.
Installation
------------
::
pip install pluginmanager
-or- ::
pip install git+https://github.com/benhoff/pluginmanager.git
Quickstart
----------
::
from pluginmanager import PluginInterface
plugin_interface = PluginInterface()
plugin_interface.set_plugin_directories(plugin_directory_path)
plugin_interface.collect_plugins()
plugins = plugin_interface.get_instances()
Custom Plugins
--------------
The quickstart will only work if you subclass `IPlugin` for your custom plugins.
::
import pluginmanager
class MyCustomPlugin(pluginmanager.IPlugin):
def __init__(self):
self.name = 'custom_name'
super().__init__()
Or register your class as subclass of IPlugin.
::
import pluginmanager
pluginmanager.IPlugin.register(YourClassHere)
Add Plugins Manually
--------------------
Add classes.
::
import pluginmanager
class CustomClass(pluginmanager.IPlugin):
pass
plugin_interface = pluginmanager.PluginInterface()
plugin_interface.add_plugins(CustomClass)
plugins = plugin_interface.get_instances()
Alternatively, add instances.
::
import pluginmanager
class CustomClass(pluginmanager.IPlugin):
pass
custom_class_instance = CustomClass()
plugin_interface = pluginmanager.PluginInterface()
plugin_interface.add_plugins(custom_class_instance)
plugins = plugin_interface.get_instances()
pluginmanager is defaulted to automatically instantiate unique instances. Disable automatic instantiation.
::
import pluginmanager
plugin_interface = pluginmanager.PluginInterface()
plugin_manager = plugin_interface.plugin_manager
plugin_manager.instantiate_classes = False
Disable uniqueness (Only one instance of class per pluginmanager)
::
import pluginmanager
plugin_interface = pluginmanager.PluginInterface()
plugin_manager = plugin_interface.plugin_manager
plugin_manager.unique_instances = False
Filter Instances
----------------
Pass in a class to get back just the instances of a class
::
import pluginmanager
class MyPluginClass(pluginmanager.IPlugin):
pass
plugin_interface = pluginmanager.PluginInterface()
plugin_interface.add_plugins(MyPluginClass)
all_instances_of_class = plugin_interface.get_instances(MyPluginClass)
Alternatively, create and pass in your own custom filters. Either make a class based filter
::
# create a custom plugin class
class Plugin(pluginmanager.IPlugin):
def __init__(self, name):
self.name = name
# create a custom filter
class NameFilter(object):
def __init__(self, name):
self.stored_name = name
def __call__(self, plugins):
result = []
for plugin in plugins:
if plugin.name == self.stored_name:
result.append(plugin)
return result
# create an instance of our custom filter
mypluginclass_name_filter = NameFilter('good plugin')
plugin_interface = pluginmanager.PluginInterface()
plugin_interface.add_plugins([Plugin('good plugin'),
Plugin('bad plugin')])
filtered_plugins = plugin_interface.get_instances(mypluginclass_name_filter)
Or make a function based filter
::
# create a custom plugin class
class Plugin(pluginmanager.IPlugin):
def __init__(self, name):
self.name = name
# create a function based filter
def custom_filter(plugins):
result = []
for plugin in plugins:
if plugin.name == 'good plugin':
result.append(plugin)
return result
plugin_interface = pluginmanager.PluginInterface()
plugin_interface.add_plugins([Plugin('good plugin'),
Plugin('bad plugin')])
filtered_plugins = plugin_interface.get_instances(mypluginclass_name_filter)
Class Overview
--------------
.. currentmodule:: pluginmanager
.. autosummary::
:toctree: stubs
DirectoryManager
FileManager
ModuleManager
PluginManager
PluginInterface
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
.. |Build Status| image:: https://travis-ci.org/benhoff/pluginmanager.svg?branch=master
:target: https://travis-ci.org/benhoff/pluginmanager
.. |Coverage Status| image:: https://coveralls.io/repos/benhoff/pluginmanager/badge.svg?branch=master&service=github
:target: https://coveralls.io/github/benhoff/pluginmanager?branch=master
.. |Code Climate| image:: https://codeclimate.com/github/benhoff/pluginmanager/badges/gpa.svg
:target: https://codeclimate.com/github/benhoff/pluginmanager
.. testcleanup::
tempdirectory.cleanup()
Metadata
Release files for pluginmanager 0.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| pluginmanager-0.4.1.tar.gz | 16.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pluginmanager-0.4.1-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details |
Total release size: 42.8 kB
Release files / pluginmanager-0.4.1.tar.gz
| Download URL | pluginmanager-0.4.1.tar.gz |
|---|---|
| Size | 16.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e202d0bcebdb0edf7c2552eb20382a2c1df30718b4d37325e4207b5578dc083d
|
|
BLAKE2b-256 checksum How to use checksums |
12ec975740c40245082ef582041209191e1d0be3a02a754fe4f237c5251a2acc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / pluginmanager-0.4.1-py2.py3-none-any.whl
| Download URL | pluginmanager-0.4.1-py2.py3-none-any.whl |
|---|---|
| Size | 26.4 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
e2aa470af6f64c48f32af6a5e799a46dcc37dbf3307fed95da67273024595fed
|
|
BLAKE2b-256 checksum How to use checksums |
710d1fd65ddb9aa2616d5d6b16ce566d39fe838f1016775e9158b1ee7c0be3e1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for pluginmanager 0.4.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.