* looking for nirs@freeshell.org--2005/moin--fix--1.3--patch-65 to compare with
* comparing to nirs@freeshell.org--2005/moin--fix--1.3--patch-65
M  MoinMoin/parser/rst.py
M  MoinMoin/wikiutil.py

* modified files

--- orig/MoinMoin/parser/rst.py
+++ mod/MoinMoin/parser/rst.py
@@ -40,7 +40,12 @@
     urlopen = staticmethod(urlopen)
 
 # # # All docutils imports must be contained below here
-import docutils
+try:
+    import docutils
+except ImportError, err:
+    from MoinMoin import wikiutil
+    raise wikiutil.PluginDependencyError(str(err))
+    
 from docutils.core import publish_parts
 from docutils.writers import html4css1
 from docutils.nodes import fully_normalize_name, reference


--- orig/MoinMoin/wikiutil.py
+++ mod/MoinMoin/wikiutil.py
@@ -544,6 +544,9 @@
 class PluginMissingError(PluginError):
     """ Raised when a plugin is not found """
 
+class PluginDependencyError(PluginMissingError):
+    """ Raised when plugin can't get a dependency """
+
 class PluginAttributeError(PluginError):
     """ Raised when plugin does not contain an attribtue """
 
@@ -583,8 +586,8 @@
     """
     if not name in wikiPlugins(kind, cfg):
         raise PluginMissingError
-    moduleName = '%s.plugin.%s.%s' % (cfg.siteid, kind, name)
-    return importNameFromPlugin(moduleName, function)
+    package = '%s.plugin.%s' % (cfg.siteid, kind)
+    return importNameFromPlugin(package, name, function)
 
 
 def importBuiltinPlugin(kind, name, function):
@@ -594,21 +597,38 @@
     """
     if not name in builtinPlugins(kind):
         raise PluginMissingError
-    moduleName = 'MoinMoin.%s.%s' % (kind, name)
-    return importNameFromPlugin(moduleName, function)
+    package = 'MoinMoin.%s' % kind
+    return importNameFromPlugin(package, name, function)
 
 
-def importNameFromPlugin(moduleName, name):
+def importNameFromPlugin(package, plugin, name):
     """ Return name from plugin module 
     
-    Raise PluginAttributeError if name does not exists.
+    Raise PluginDependencyError if the plugin raise it. Raise
+    PluginAttributeError if name does not exists.
     """
-    module = __import__(moduleName, globals(), {}, [name])
+    try:
+        qualifiedName = '%s.%s' % (package, plugin)
+        module = __import__(qualifiedName, globals, {}, [name])
+    except PluginDependencyError:
+        unregisterPlugin(package, plugin)
+        raise
+    try:
+        return getattr(module, name)
+    except AttributeError:
+        raise PluginAttributeError
+        
     try:
         return getattr(module, name)
     except AttributeError:
         raise PluginAttributeError
 
+
+def unregisterPlugin(package, plugin):
+    """ Remove a plugin from the plugin registry """
+    package = __import__(package, globals, {}, ['modules'])
+    package.modules.remove(plugin)
+    
 
 def builtinPlugins(kind):
     """ Gets a list of modules in MoinMoin.'kind'



