Skip to main content

Keep your plugins simple, stupid!

Project description

===========
Easy Plugins
===========

Module EasyPlugins provides easy way to manage plugins.

I was searching for some easy yet powerful plugin framework, but no
nothing suitable found. They are complicated, require implementation
of some weird interface or they are ugly in other way. This is way
I have decided to reinvent the wheel and create this module (well,
it's just one class and a few tests).

What does it do? It scans your python path and try to load anything that
looks like a python stuff with prefix you specify. That's all.

Let's show you some example. Let's say I have a python application called
image_resizer. Core functionality is in this package. Then I have some
plugins that know something about image formats and each is using some very
clever algorithm. These plugins are called with prefix 'image_resizer_',
so in regexp speech they match '^image_resizer_.*'. For example
image_resizer_png, image_resizer_jpg and image_resizer_gif.

In the described situation, one might use:

extensions = {}
plugins = EasyPlugins('image_resizer_')

# plugins are now lazy initialized, next time you
# call iteration, it will immediately return
# an iterator of plugin modules
for name, plugin in plugins:
extension = plugin.extension
resizer_class = plugin.Resizer
extensions[extension] = resizer_class

So in general usage is following:

plugins = EasyPlugins('desired_prefix_')

for name, plugin in plugins:
# do whatever you need with the module
# we have a duct typing, use it!
expected_class = plugin.Class
expected_function = plugin.function
custom_terminal_options = plugin.options

Actually you can provide multiple plugin names, for example
for backward compatibility:

plugins = EasyPlugins(['archiver_', 'archiver_plugin_'])

If you would like to add plugins from directory that is not on the path
for some reason, you could still use them by setting the additional path.
This situation usually happens during development of the plugins.

PYTHONPATH=/path/to/plugins /path/to/your/application.py

You can find this project on the bitbucket:
* https://bitbucket.org/prost87/easyplugins

Continuous integration is provided by the drone.io:
* https://drone.io/prost87/EasyPlugins

Project details


Release history Release notifications | RSS feed

This version

1.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

easy_plugins-1.0.zip (8.5 kB view details)

Uploaded Source

easy_plugins-1.0.tar.gz (4.1 kB view details)

Uploaded Source

File details

Details for the file easy_plugins-1.0.zip.

File metadata

  • Download URL: easy_plugins-1.0.zip
  • Upload date:
  • Size: 8.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for easy_plugins-1.0.zip
Algorithm Hash digest
SHA256 beb604665be82d88da11512d0ad27a95f19d2e6ba068db368376cfc254c17a23
MD5 0a40761ff766bfbc164e568ff824e13b
BLAKE2b-256 b37f6044ce914f371540e49d9384c3f7667b1302065073a543db8e8794c3a229

See more details on using hashes here.

File details

Details for the file easy_plugins-1.0.tar.gz.

File metadata

  • Download URL: easy_plugins-1.0.tar.gz
  • Upload date:
  • Size: 4.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for easy_plugins-1.0.tar.gz
Algorithm Hash digest
SHA256 236e94089616e40ce63cd8e521537c1bb34b6999a17bda1dc0b46b947f3b6e3b
MD5 3ac1503212e0c73fcb7a0aebf3e88fd5
BLAKE2b-256 6671b1acbdf2cd392ac5b505f914997d58a1abe32175dfa217975dea1f0b9ef6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page