Source code for core.plugs
# core/plugs.py
#
#
""" core plugins. """
__copyright__ = "Copyright 2015, B.H.J Thate"
## IMPORTS
from core.dispatcher import Dispatcher
from core.errors import error
from core.thing import Thing
import importlib
import logging
import pkgutil
## PLUGINS
[docs]class Plugs(Dispatcher):
""" register plugins. """
plugnames = ""
def __init__(zelf, *args, **kwargs): Dispatcher.__init__(zelf, *args, **kwargs)
## INIT
[docs] def init(zelf, *args, **kwargs):
""" initialize plugins, """
plugnames = args[0]
modnames = plugnames.split(",")
for modname in sorted(modnames, reverse=True):
if not modname: continue
objs = zelf.find(modname)
for obj in objs:
logging.warn("# init %s" % modname.upper())
if modname == "xmpp": obj.init() ; continue
try: obj.init()
except: error()
zelf.ready()
[docs] def boot(zelf, *args, **kwargs):
packages = args[0]
for package in packages:
mod = zelf.load(package)
init = getattr(mod, "init", None)
if init: init()
[docs] def shutdown(zelf, *args, **kwargs):
for name, obj in zelf.items():
logging.warn("stop %s" % str(name))
if "shutdown" in dir(obj): obj.shutdown()
## SEARCH
[docs] def search(zelf, *args, **kwargs):
""" find matching name. """
n = args[0]
for name in zelf.names():
if n in name: yield name
## LOAD
[docs] def load(zelf, *args, **kwargs):
""" load plugins from the plugin directory. """
from core.kernel import cfg
modname = args[0]
logging.warn("# plugs %s" % modname)
zelf[modname] = mod = zelf.loading(modname)
if "__path__" in dir(mod):
for pkg in pkgutil.walk_packages(mod.__path__, mod.__name__+'.'):
name = pkg[1]
zelf[name] = zelf.loading(name, modname)
return zelf[modname]
[docs] def loading(zelf, name, package=None, force=True):
""" load module. """
logging.info("! load %s" % ".".join(name.split(".")[1:]))
if name in zelf and not force: mod = zelf.reload(name)
else: mod = importlib.import_module(name, package)
return mod
## RELOAD
[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 reloading(zelf, *args, **kwargs):
names = zelf.find(args[0])
for name in names: zelf.reload(name)
## CMNDS
[docs]def plugs_stop(event):
from core.kernel import kernel
args = event.parsed.args
if args and kernel.stop(*args): event.ok()
[docs]def plugs_start(event):
from core.kernel import plugs
args = event.parsed.args
if args:
plugnames = plugs.search(*args)
for pname in plugnames:
plugs.load(pname)
plugs.init(event.parsed.args[0])
event.ok(pname)
[docs]def plugs_reload(event):
from core.kernel import plugs
args = event.parsed.args
if args:
result = plugs.reloading(*args)
if result: event.ok(named(result))
## HELPERS
[docs]def get_cfg(*args, **kwargs):
try: return getattr(cfg, "cfg_%s" % args[0])
except AttributeError: pass
[docs]def init(*args, **kwargs):
from core.kernel import kernel
kernel.register("plugs.stop", plugs_stop)
kernel.register("plugs.start", plugs_start)
kernel.register("plugs.reload", plugs_reload)