New port numbers
[electrum-nvc.git] / lib / plugins.py
index e9e9916..e1ed3c3 100644 (file)
@@ -1,3 +1,63 @@
+from util import print_error
+import traceback, sys
+from util import *
+from i18n import _
+
+plugins = []
+
+
+def init_plugins(self):
+    import imp, pkgutil, __builtin__, os
+    global plugins
+
+    if __builtin__.use_local_modules:
+        fp, pathname, description = imp.find_module('plugins')
+        plugin_names = [name for a, name, b in pkgutil.iter_modules([pathname])]
+        plugin_names = filter( lambda name: os.path.exists(os.path.join(pathname,name+'.py')), plugin_names)
+        imp.load_module('electrum_nvc_plugins', fp, pathname, description)
+        plugin_modules = map(lambda name: imp.load_source('electrum_nvc_plugins.'+name, os.path.join(pathname,name+'.py')), plugin_names)
+    else:
+        import electrum_nvc_plugins
+        plugin_names = [name for a, name, b in pkgutil.iter_modules(electrum_nvc_plugins.__path__)]
+        plugin_modules = [ __import__('electrum_nvc_plugins.'+name, fromlist=['electrum_nvc_plugins']) for name in plugin_names]
+
+    for name, p in zip(plugin_names, plugin_modules):
+        try:
+            plugins.append( p.Plugin(self, name) )
+        except Exception:
+            print_msg(_("Error: cannot initialize plugin"),p)
+            traceback.print_exc(file=sys.stdout)
+
+
+
+def run_hook(name, *args):
+    
+    global plugins
+
+    results = []
+
+    for p in plugins:
+
+        if not p.is_enabled():
+            continue
+
+        f = getattr(p, name, None)
+        if not callable(f):
+            continue
+
+        try:
+            r = f(*args)
+        except Exception:
+            print_error("Plugin error")
+            traceback.print_exc(file=sys.stdout)
+
+        if r:
+            results.append(r)
+
+    if results:
+        assert len(results) == 1, results
+        return results[0]
+
 
 
 class BasePlugin: