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()