]> jfr.im git - erebus.git/blob - ctlmod.py
Modules!
[erebus.git] / ctlmod.py
1 import sys
2
3 modules = {}
4
5 def isloaded(modname): return modname in modules
6 def modhas(modname, attname): return getattr(self.modules[modname], attname, None) is not None
7
8 def load(parent, modname):
9 if not isloaded(modname):
10 mod = __import__(modname)
11 modules[modname] = mod
12 ret = mod.modstart(parent)
13 if not ret:
14 del modules[modname]
15 return ret
16 else:
17 return -1
18
19 def unload(parent, modname):
20 if isloaded(modname):
21 self.modules[modname].modstop(parent)
22 else:
23 return -1
24
25 def reloadmod(parent, modname):
26 if isloaded(modname):
27 if modhas(modname, 'modrestart'): self.modules[modname].modrestart(parent)
28 else: self.modules[modname].modstop(parent)
29
30 reload(self.modules[modname])
31
32 if modhas(modname, 'modrestarted'): self.modules[modname].modrestarted(parent)
33 else: self.modules[modname].modstart(parent)
34
35 else:
36 load(parent, modname)
37
38 def loadall(parent, modlist):
39 for m in modlist: load(parent, m)
40 def unloadall(parent, modlist):
41 for m in modlist: unload(parent, m)
42 def reloadall(parent, modlist):
43 for m in modlist: reloadmod(parent, m)
44
45 sys.path.append('modules')