From 43e931baa4b8140fe700b23af6758572a8835ce7 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Thu, 24 Feb 2011 05:15:04 +0000 Subject: [PATCH] Make readers with external dependencies optional. --- pelican/readers.py | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/pelican/readers.py b/pelican/readers.py index 35681ac1..4e1d7b2e 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -1,12 +1,18 @@ # -*- coding: utf-8 -*- -from docutils import core -from markdown import Markdown +try: + from docutils import core + + # import the directives to have pygments support + import rstdirectives +except ImportError: + core = False +try: + from markdown import Markdown +except ImportError: + Markdown = False import re import string -# import the directives to have pygments support -import rstdirectives - from pelican.utils import get_date, open @@ -17,7 +23,12 @@ _METADATAS_PROCESSORS = { } -class RstReader(object): +class Reader(object): + enabled = True + +class RstReader(Reader): + enabled = bool(core) + extension = "rst" def _parse_metadata(self, content): """Return the dict containing metadatas""" @@ -43,7 +54,9 @@ class RstReader(object): metadatas['title'] = title return content, metadatas -class MarkdownReader(object): +class MarkdownReader(Reader): + enabled = bool(Markdown) + extension = "md" def read(self, filename): """Parse content and metadata of markdown files""" @@ -60,7 +73,8 @@ class MarkdownReader(object): return content, metadatas -class HtmlReader(object): +class HtmlReader(Reader): + extension = "html" _re = re.compile('\<\!\-\-\#\s?[A-z0-9_-]*\s?\:s?[A-z0-9\s_-]*\s?\-\-\>') def read(self, filename): @@ -76,8 +90,7 @@ class HtmlReader(object): -_EXTENSIONS = {'rst': RstReader, 'md': MarkdownReader, 'html': HtmlReader} # supported formats - +_EXTENSIONS = dict((cls.extension, cls) for cls in Reader.__subclasses__()) def read_file(filename, fmt=None): """Return a reader object using the given format.""" @@ -86,4 +99,6 @@ def read_file(filename, fmt=None): if fmt not in _EXTENSIONS.keys(): raise TypeError('Pelican does not know how to parse %s' % filename) reader = _EXTENSIONS[fmt]() + if not reader.enabled: + raise ValueError("Missing dependencies for %s" % fmt) return reader.read(filename)