Source code for core.plugins

# core/plugs.py
#
#

""" Plugins package, loads all plugins available. """

__copyright__ = "Copyright 2014 B.H.J Thate"

## IMPORTS

from core.utils import error
from core import Object

import importlib
import logging
import pkgutil

## PLUGINS

[docs]class Plugins(Object): """ object to register plugins with. """ def __init__(zelf, *args, **kwargs): Object.__init__(zelf, *args, **kwargs) zelf.packages = []
[docs] def load_plugs(zelf, name): """ load plugins from the plugin directory. """ logging.warn("plugs %s" % name) package = zelf.load_mod(name) for pkg in pkgutil.walk_packages(package.__path__, package.__name__+'.'): zelf.load_mod(pkg[1]) zelf.packages.append(package)
load_package = load_plugs
[docs] def load_mod(zelf, plugname, force=True): """ load module. """ logging.info("load %s" % plugname) if plugname in zelf and not force: return zelf.reload(plugname) try: zelf[plugname] = importlib.import_module(plugname) except: error() return zelf[plugname]
def reload(zelf, *args, **kwargs): logging.warn("reload %s" % args[0]) zelf[args[0]] = importlib.reload(args[0]) return zelf[args[0]]
[docs] def plug_init(zelf, *args, **kwargs): """ initialize plugin. """ try: zelf[args[0]].init(*args, **kwargs) except KeyError: logging.info("no %s" % args[0]) except: error()
[docs] def plug_shutdown(zelf, plugname): """ call the shutdown() function, if provided. """ try: zelf[plugname].shutdown() except KeyError: logging.info("no %s" % plugname) except AttributeError: pass
[docs] def exit(zelf, *args, **kwargs): """ exit all plugins. """ for plugname in zelf: zelf.plug_shutdown(plugname)
[docs] def reload(zelf, plugname, force=False): """ reload a plugin. """ logging.warn("reload %s" % plugname) zelf.plug_shutdown(plugname) zelf.load_mod(plugname, force=force) return zelf[plugname]
[docs] def init(zelf, *args, **kwargs): """ init all plugins or a specific one if argument is given. """ for target in args[0].split(","): if not target: continue for package in zelf.packages: zelf.plug_init(package.__name__ + "." + target, *args, **kwargs) zelf.ready()