Add check_program for plugins
authorJack Miller <jack@codezen.org>
Fri, 5 Jun 2015 23:51:24 +0000 (18:51 -0500)
committerJack Miller <jack@codezen.org>
Fri, 5 Jun 2015 23:54:18 +0000 (18:54 -0500)
Stop execution with a silent exception if this plugin will have no
effect on the currently running program.

canto_next/canto_backend.py
canto_next/plugins.py
canto_next/remote.py

index b0f0ddc..6b00cb1 100644 (file)
@@ -19,7 +19,7 @@ from .fetch import CantoFetch
 from .hooks import on_hook, call_hook
 from .tag import alltags
 from .transform import eval_transform
-from .plugins import PluginHandler, Plugin, try_plugins
+from .plugins import PluginHandler, Plugin, try_plugins, set_program
 from .rwlock import alllocks, write_lock, read_lock
 from .locks import *
 
@@ -112,6 +112,7 @@ class CantoBackend(PluginHandler, CantoServer):
         log.info("conf_dir = %s" % self.conf_dir)
 
         # Evaluate any plugins
+        set_program("canto-daemon")
         try_plugins(self.conf_dir, self.plugin_default, self.disabled_plugins,
                 self.enabled_plugins)
 
index 7f39fe6..adf017b 100644 (file)
@@ -15,6 +15,20 @@ import os
 
 log = logging.getLogger("PLUGINS")
 
+class CantoWrongProgramException(Exception):
+    pass
+
+PROGRAM="unset"
+
+def set_program(program_name):
+    global PROGRAM
+    PROGRAM=program_name
+
+def check_program(*args):
+    global PROGRAM
+    if PROGRAM not in args:
+        raise CantoWrongProgramException
+
 def try_plugins(topdir, plugin_default=True, disabled_plugins=[], enabled_plugins=[]):
     p = topdir + "/plugins"
     pinit = p + "/__init__.py"
@@ -58,14 +72,16 @@ def try_plugins(topdir, plugin_default=True, disabled_plugins=[], enabled_plugin
                     if proper in disabled_plugins:
                         log.info("[plugin] %s - DISABLED" % proper)
                     else:
-                        log.info("[plugin] %s" % proper)
                         __import__("plugins." + proper)
+                        log.info("[plugin] %s" % proper)
                 else:
                     if proper in enabled_plugins:
-                        log.info("[plugin] %s - ENABLED" % proper)
                         __import__("plugins." + proper)
+                        log.info("[plugin] %s - ENABLED" % proper)
                     else:
                         log.info("[plugin] %s - DISABLED" % proper)
+            except CantoWrongProgramException:
+                pass
             except Exception as e:
                 tb = traceback.format_exc()
                 log.error("Exception importing file %s" % fname)
index 905768a..6f2e818 100644 (file)
@@ -6,7 +6,7 @@
 #   it under the terms of the GNU General Public License version 2 as 
 #   published by the Free Software Foundation.
 
-from .plugins import PluginHandler, Plugin, try_plugins
+from .plugins import PluginHandler, Plugin, try_plugins, set_program
 from .client import CantoClient
 from .encoding import encoder
 from .format import escsplit
@@ -75,6 +75,7 @@ class CantoRemote(PluginHandler, CantoClient):
         if self.args(optl) == -1:
             sys.exit(-1)
 
+        set_program("canto-remote")
         try_plugins(self.conf_dir, self.plugin_default, self.disabled_plugins,
                 self.enabled_plugins)