From 5b3e724fb78da73ab87fb34e4ac9d9299773cfed Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Thu, 12 Jul 2012 08:02:02 -0400 Subject: Fixed #112 and cleaned up error reporting when loading extensions. --- markdown/__init__.py | 22 +++++++++++++--------- tests/test_apis.py | 6 +++--- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/markdown/__init__.py b/markdown/__init__.py index 64686c8..149ec30 100644 --- a/markdown/__init__.py +++ b/markdown/__init__.py @@ -37,6 +37,7 @@ import re import codecs import sys import logging +import warnings import util from preprocessors import build_preprocessors from blockprocessors import build_block_parser @@ -163,10 +164,10 @@ class Markdown: if isinstance(ext, basestring): ext = self.build_extension(ext, configs.get(ext, [])) if isinstance(ext, Extension): - # might raise NotImplementedError, but that's the extension author's problem ext.extendMarkdown(self, globals()) elif ext is not None: - raise ValueError('Extension "%s.%s" must be of type: "markdown.Extension".' \ + raise TypeError( + 'Extension "%s.%s" must be of type: "markdown.Extension"' % (ext.__class__.__module__, ext.__class__.__name__)) return self @@ -200,19 +201,22 @@ class Markdown: module_name_old_style = '_'.join(['mdx', ext_name]) try: # Old style (mdx_) module = __import__(module_name_old_style) - except ImportError: - logger.warn("Failed loading extension '%s' from '%s' or '%s'" - % (ext_name, module_name, module_name_old_style)) - # Return None so we don't try to initiate none-existant extension - return None + except ImportError, e: + message = "Failed loading extension '%s' from '%s' or '%s'" \ + % (ext_name, module_name, module_name_old_style) + e.args = (message,) + e.args[1:] + raise # If the module is loaded successfully, we expect it to define a # function called makeExtension() try: return module.makeExtension(configs.items()) except AttributeError, e: - logger.warn("Failed to initiate extension '%s': %s" % (ext_name, e)) - return None + message = e.args[0] + message = "Failed to initiate extension " \ + "'%s': %s" % (ext_name, message) + e.args = (message,) + e.args[1:] + raise def registerExtension(self, extension): """ This gets called by the extension """ diff --git a/tests/test_apis.py b/tests/test_apis.py index 0296f27..31a60e1 100644 --- a/tests/test_apis.py +++ b/tests/test_apis.py @@ -245,18 +245,18 @@ class TestErrors(unittest.TestCase): def testLoadExtensionFailure(self): """ Test failure of an extension to load. """ - self.assertRaises(ValueError, + self.assertRaises(ImportError, markdown.Markdown, extensions=['non_existant_ext']) def testLoadBadExtension(self): """ Test loading of an Extension with no makeExtension function. """ _create_fake_extension(name='fake', has_factory_func=False) - self.assertRaises(ValueError, markdown.Markdown, extensions=['fake']) + self.assertRaises(AttributeError, markdown.Markdown, extensions=['fake']) def testNonExtension(self): """ Test loading a non Extension object as an extension. """ _create_fake_extension(name='fake', is_wrong_type=True) - self.assertRaises(ValueError, markdown.Markdown, extensions=['fake']) + self.assertRaises(TypeError, markdown.Markdown, extensions=['fake']) def testBaseExtention(self): """ Test that the base Extension class will raise NotImplemented. """ -- cgit v1.2.3