Skip to content

Instantly share code, notes, and snippets.

@aubricus
Created September 9, 2013 07:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aubricus/6492288 to your computer and use it in GitHub Desktop.
Save aubricus/6492288 to your computer and use it in GitHub Desktop.
Python plugin loader.
def load_plugin(target, invoke_on_load=True, invoke_args=(),
invoke_kwargs={}):
if ':' in target:
module_name, attr_name = target.rsplit(':', 1)
else:
module_name, attr_name = target.rsplit('.', 1)
try:
module = import_module(module_name)
attr = getattr(module, attr_name)
except (ImportError, AttributeError) as e:
exc = ResourceNotFound(Plugin, e, target=target)
log.warning(exc)
raise exc
log.info('Loaded plugin %s', target)
plugin = Plugin()
plugin.module = module_name
plugin.attr = attr_name
plugin.path = module.__file__
if invoke_on_load:
log.info('Invoking plugin %s with args %s and kwargs %s',
target, invoke_args, invoke_kwargs)
plugin.obj = attr(*invoke_args, **invoke_kwargs)
else:
plugin.obj = attr
return plugin
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment