Source code for zot.plugins

# zot/plugins.py
#
#

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

__copyright__ = "Copyright 2015, B.H.J Thate"

## IMPORTS

from zot.dispatcher import DISPATCHER
from zot.object import Object
from zot.utils import error

import importlib
import logging
import pkgutil

## PLUGINS

[docs]class PLUGINS(DISPATCHER): """ object to register plugins with. """
[docs] def load(zelf, modname): """ load plugins from the plugin directory. """ logging.warn("# load %s" % modname) mod = zelf.load_mod(modname) for pkg in pkgutil.walk_packages(mod.__path__, mod.__name__+'.'): name = pkg[1] zelf[name] = zelf.load_mod(name)
[docs] def init(zelf, mods): if not mods: return modnames = mods.split(",") for modname in sorted(modnames, reverse=True): if not modname: continue logging.warn("# init %s" % modname.upper()) objs = zelf.find(modname) for obj in objs: if modname == "xmpp": obj.init() ; continue try: zelf.put(obj.init) except AttributeError: continue except: error()
[docs] def stop(zelf, mods): modnames = mods.split(",") for name in sorted(modnames)[::-1]: modname = zelf.get_name(name) obj = zelf.get(modname) if not obj: continue try: obj.stop() except: pass
[docs] def load_mod(zelf, name, force=True): """ load module. """ logging.info("! module %s" % name) if name in zelf and not force: mod = zelf.reload(name) else: mod = importlib.import_module(name) return mod
[docs] def reload(zelf, *args, **kwargs): name = args[0] logging.warn("# reload %s" % name) zelf[name] = importlib.reload(zelf[name]) return zelf[name]
[docs] def get_name(zelf, *args, **kwargs): n = args[0] for name in zelf.names(): if n in name: yield name
[docs] def reload_name(zelf, *args, **kwargs): names = zelf.get_name(args[0]) for name in names: zelf.reload(name)