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)