Skip to content

magmax/python-pluginloader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VERSION DOWNLOADS TESTS COVERAGE
Latest PyPI version Number of PyPI downloads Travis results Coveralls results_

Goal and Philosophy

Pluginloader is a library to allow an easy way to load plugins. They can be managed by interfaces or just method validators.

Features

  • Each plugin can be instanciated several times.
  • Customizable filter to select if a class should be loaded as a plugin.
  • Sandboxed: plugins cannot access the main program or other plugins by default, because they are loaded in isolated environments.
  • Parameterizable context: Sometimes you need to pass some classes, functions or variables preloaded to the plugins. It is possible and easy.

Documentation

Installation

Two options: to install it in your system/project:

pip install pluginloader

Usage

You can load all plugins in a file, just doing:

loader = PluginLoader()
plugins = loader.load_file('plugins.py')

With those simple lines you will have in the variable plugins a dictionary with each class inside the plugins.py file as key and a factory as value.

Let's see an example. Using the plugins.py file:

class Foo(object):
    pass

We can have an object of that class just with:

loader = PluginLoader()
plugins = loader.load_file('plugins.py')
instance1 = plugins['Foo']()
instance2 = plugins['Foo']()

Simple and easy.

API

This is a simple module with a simple API. It just contains one class, PluginLoader, with these public methods:

load_file(filename, onlyif=None, context=None)

Loads all plugins in a file.

Parameters:

  • filename: File name to be loaded.
  • onlyif: Value or function that will be called with each class found. It will skip the plugin if this function returns False.
  • context: Dict with the context where the method should be loaded in. It usually will map a class, function or variable name to the class, function or value in the main program, so it can be used within the plugin.

load_directory(path, onlyif=None, recursive=False))

Loads all plugins in a directory.

Parameters:

  • path: Path where plugins are in.
  • onlyif: Value or function that will be called with each class found. It will skip the plugin if this function returns False.
  • recursive: Boolean value to allow recursive read of directories.
  • context: Dict with the context where the method should be loaded in.

Links will always be ignored.

The onlyif functions have this format:

def condition(obj_name, class_name, file_name)

where: - obj_name is the name of the object. It can be a variable, function, class or instance. - class_name is the class of the object. - file_name is the file where the object has been declared.

License

Copyright (c) 2014 Miguel Ángel García (@magmax9).

Licensed under the MIT license.

About

Library to manage python plugins/extensions

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages