[Issue 466] Implement e-z plugin disabling
authorWill Kahn-Greene <willg@bluesock.org>
Wed, 18 Jul 2012 01:14:45 +0000 (21:14 -0400)
committerWill Kahn-Greene <willg@bluesock.org>
Wed, 18 Jul 2012 01:14:45 +0000 (21:14 -0400)
docs/source/siteadmin/plugins.rst
mediagoblin/init/plugins/__init__.py
mediagoblin/tests/test_pluginapi.py

index 41f2970f5e3806affc39a1fdbf534e311ffa912b..f5a78da7e87b90ee83b88e5e51ea6a670bab8033 100644 (file)
@@ -135,3 +135,35 @@ For plugins that you install with pip, you can upgrade them with pip::
     pip install -U <plugin-name>
 
 The ``-U`` tells pip to upgrade the package.
+
+
+Troubleshooting plugins
+=======================
+
+Sometimes plugins just don't work right. When you're having problems
+with plugins, think about the following:
+
+1. Check the log files.
+
+   Some plugins will log errors to the log files and you can use that
+   to diagnose the problem.
+
+2. Try running MediaGoblin without that plugin.
+
+   It's easy to disable a plugin from MediaGoblin. Add a ``-`` to the
+   name in your config file.
+
+   For example, change::
+
+       [[mediagoblin.plugins.flatpages]]
+
+   to::
+
+       [[-mediagoblin.plugins.flatpages]]
+
+   That'll prevent the ``mediagoblin.plugins.flatpages`` plugin from
+   loading.
+
+3. If it's a core plugin that comes with MediaGoblin, ask us for help!
+
+   If it's a plugin you got from somewhere else, ask them for help!
index 4ac7a1400605b4ad9934c82a9386df44342672b1..cdf9b5adc7db3a10f62d5862e8b2f7ed42426657 100644 (file)
@@ -42,6 +42,13 @@ def setup_plugins():
     # Go through and import all the modules that are subsections of
     # the [plugins] section and read in the hooks.
     for plugin_module, config in plugin_section.items():
+        # Skip any modules that start with -. This makes it easier for
+        # someone to tweak their configuration so as to not load a
+        # plugin without having to remove swaths of plugin
+        # configuration.
+        if plugin_module.startswith('-'):
+            continue
+
         _log.info("Importing plugin module: %s" % plugin_module)
         pman.register_plugin(plugin_module)
         # If this throws errors, that's ok--it'll halt mediagoblin
index 8c9c6a04960f4ba7a3718050e0550445901cb536..315a95daca9edd87906266fdd6ea8adeb8597169 100644 (file)
@@ -153,3 +153,23 @@ def test_same_plugin_twice():
     # Make sure _setup_plugin_called was called once
     import mediagoblin.plugins.sampleplugin
     eq_(mediagoblin.plugins.sampleplugin._setup_plugin_called, 1)
+
+
+@with_cleanup()
+def test_disabled_plugin():
+    """Run setup_plugins with a single working plugin twice"""
+    cfg = build_config([
+            ('mediagoblin', {}, []),
+            ('plugins', {}, [
+                    ('-mediagoblin.plugins.sampleplugin', {}, []),
+                    ])
+            ])
+
+    mg_globals.app_config = cfg['mediagoblin']
+    mg_globals.global_config = cfg
+
+    pman = pluginapi.PluginManager()
+    setup_plugins()
+
+    # Make sure we didn't load the plugin
+    eq_(len(pman.plugins), 0)