]> jfr.im git - irc/rizon/acid.git/blob - pyva/pyva/src/main/python/plugin.py
7931c401adb457a4cb3f3ac11e898a86b955275a
[irc/rizon/acid.git] / pyva / pyva / src / main / python / plugin.py
1 import traceback
2 import logging
3 import task
4 import importlib
5
6 from core import *
7
8 class AcidPlugin(object):
9 def __init__(self):
10 super(AcidPlugin, self).__init__()
11
12 self.prefix = config.get('control', 'prefix')
13 self.logchan = config.get('control', 'channel')
14 self.log = logging.getLogger(__name__)
15 self.config = config
16 self.dbp = dbx.cursor()
17
18 def start(self):
19 pass
20
21 def stop(self):
22 pass
23
24 def getCommands(self):
25 pass
26
27 modules = {}
28 plugin_to_modname = lambda x: '%s.%s' % (x, x)
29
30 def loadPlugin(plugin):
31 global modules
32
33 modname = plugin_to_modname(plugin)
34
35 mod = importlib.import_module(modname)
36 obj = getattr(mod, plugin)()
37
38 obj.start()
39
40 modules[plugin] = obj
41
42 def unloadPlugin(plugin):
43 global modules
44
45 modname = plugin_to_modname(plugin)
46
47 obj = modules[plugin]
48 obj.stop()
49
50 deps = [module for module in sys.modules if module.startswith(modname + '.')]
51 for dep in deps:
52 del sys.modules[dep]
53 if modname in sys.modules:
54 del sys.modules[modname]
55
56 del modules[plugin]
57
58 def getPlugins():
59 return modules.keys()
60
61 def call(name, *args):
62 task.Run()
63
64 for m in modules.itervalues():
65 try:
66 func = getattr(m, name)
67 except:
68 continue
69
70 try:
71 func(*args)
72 except:
73 traceback.print_exc()
74 raise