375ec11767c2fae4baaa2517378d514d0b1836db
[plcapi.git] / PLC / Plugins.py
1 import sys
2 import pkg_resources
3 import traceback
4
5 from PLC.Debug import log
6
7 """
8 from PLC.Plugins import PluginManager
9 pm = PluginManager(None, None)
10 pm.dump()
11 pm.notify("who", {"what": "this!"})
12 """
13
14 class PluginManager:
15     def __init__(self, api, auth):
16         self.api = api
17         self.auth = auth
18         self.plugins = []
19
20         for entrypoint in pkg_resources.iter_entry_points("plcapi.plugin","api_notify"):
21             save = sys.path
22             try:
23                 # pkg_resources looks for modules in sys.path. Make sure it can
24                 # find our plugins.
25                 sys.path.append("/usr/share/plc_api")
26
27                 try:
28                     pluginclass = entrypoint.load()
29                     plugin = pluginclass()
30                     self.plugins.append(plugin)
31                 except Exception, exc:
32                     print >>log, "WARNING: failed to load plugin %s" % str(entrypoint)
33                     traceback.print_exc(5,log)
34             finally:
35                 sys.path = save
36
37     def notify(self, action, info={}):
38         for plugin in self.plugins:
39             try:
40                 plugin.notify(self.api, self.auth, action, info)
41             except Exception, exc:
42                 print >>log, "WARNING: failed to run plugin during action %s" % str(action)
43                 traceback.print_exc(5,log)
44
45     def dump(self):
46         for plugin in self.plugins:
47             print plugin.__class__.__name__
48