]>
jfr.im git - erebus.git/blob - ctlmod.py
7 def isloaded(modname
): return modname
in modules
8 def modhas(modname
, attname
): return getattr(self
.modules
[modname
], attname
, None) is not None
10 def load(parent
, modname
):
11 if not isloaded(modname
):
12 mod
= __import__(modname
)
15 if 1 not in mod
.modinfo
['compatible']:
16 return modlib
.error('API-incompatible')
18 modules
[modname
] = mod
19 dependents
[modname
] = []
21 for dep
in mod
.modinfo
['depends']:
22 if dep
not in modules
:
23 depret
= load(parent
, dep
)
26 dependents
[dep
].append(modname
)
29 ret
= mod
.modstart(parent
)
30 if ret
is not None and not ret
:
32 del dependents
[modname
]
33 for dep
in mod
.modinfo
['depends']:
34 dependents
[dep
].remove(modname
)
36 else: #if not isloaded...else:
37 return modlib
.error('already loaded')
39 def unload(parent
, modname
):
41 for dependent
in dependents
[modname
]:
42 unload(parent
, dependent
)
43 for dep
in dependents
[modname
]:
44 dependents
[dep
].remove(modname
)
45 self
.modules
[modname
].modstop(parent
)
47 return modlib
.error('already unloaded')
49 def reloadmod(parent
, modname
):
51 if modhas(modname
, 'modrestart'): self
.modules
[modname
].modrestart(parent
)
52 else: self
.modules
[modname
].modstop(parent
)
54 reload(self
.modules
[modname
])
56 if modhas(modname
, 'modrestarted'): self
.modules
[modname
].modrestarted(parent
)
57 else: self
.modules
[modname
].modstart(parent
)
62 def loadall(parent
, modlist
):
63 for m
in modlist
: load(parent
, m
)
64 def unloadall(parent
, modlist
):
65 for m
in modlist
: unload(parent
, m
)
66 def reloadall(parent
, modlist
):
67 for m
in modlist
: reloadmod(parent
, m
)
69 sys
.path
.append('modules')