changeset 59:59ecc742ab8e

Only use the default formatters for which we have a module to import.
author Ludovic Chabant <ludovic@chabant.com>
date Tue, 05 Feb 2013 14:48:26 -0800
parents 02150022e212
children 8250c977bc50
files wikked/wiki.py
diffstat 1 files changed, 19 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/wikked/wiki.py	Mon Feb 04 21:20:59 2013 -0800
+++ b/wikked/wiki.py	Tue Feb 05 14:48:26 2013 -0800
@@ -3,10 +3,8 @@
 import time
 import logging
 import itertools
+import importlib
 from ConfigParser import SafeConfigParser
-import markdown
-import textile
-import creole
 from page import Page, DatabasePage
 from fs import FileSystem
 from db import SQLiteDatabase, conn_scope
@@ -16,8 +14,7 @@
 
 
 def passthrough_formatter(text):
-    """ Passthrough formatter. Pretty simple stuff.
-    """
+    """ Passthrough formatter. Pretty simple stuff. """
     return text
 
 
@@ -35,13 +32,9 @@
         if root is None:
             root = os.getcwd()
         self.root = root
+        
+        self.formatters = self.getFormatters()
 
-        self.formatters = {
-            markdown.markdown: ['md', 'mdown', 'markdown'],
-            textile.textile: ['tl', 'text', 'textile'],
-            creole.creole2html: ['cr', 'creole'],
-            passthrough_formatter: ['txt', 'html']
-        }
         self.config_path = os.path.join(self.root, '.wikirc')
         self.index_path = os.path.join(self.root, '.wiki', 'index')
         self.db_path = os.path.join(self.root, '.wiki', 'wiki.db')
@@ -77,6 +70,21 @@
         yield self.config_path
         yield os.path.join(self.root, '.wiki')
 
+    def getFormatters(self):
+        formatters = {passthrough_formatter: ['txt', 'html']}
+        self.tryAddFormatter(formatters, 'markdown', 'markdown', ['md', 'mdown', 'markdown'])
+        self.tryAddFormatter(formatters, 'textile', 'textile', ['tl', 'text', 'textile'])
+        self.tryAddFormatter(formatters, 'creole', 'creole2html', ['cr', 'creole'])
+        return formatters
+
+    def tryAddFormatter(self, formatters, module_name, module_func, extensions):
+        try:
+            module = importlib.import_module(module_name)
+            func = getattr(module, module_func)
+            formatters[func] = extensions
+        except ImportError:
+            pass
+
 
 class Wiki(object):
     """ The wiki class! This is where the magic happens.