diff options
author | Waylan Limberg <waylan@gmail.com> | 2012-07-12 08:02:02 -0400 |
---|---|---|
committer | Waylan Limberg <waylan@gmail.com> | 2012-07-12 08:02:02 -0400 |
commit | 5b3e724fb78da73ab87fb34e4ac9d9299773cfed (patch) | |
tree | 8db6aa7750974d1086eeeae9b53aa9e1d4205924 | |
parent | 32d57ffdee6eae3e7dbe0a7ccc08c5d4aa27728e (diff) | |
download | markdown-5b3e724fb78da73ab87fb34e4ac9d9299773cfed.tar.gz markdown-5b3e724fb78da73ab87fb34e4ac9d9299773cfed.tar.bz2 markdown-5b3e724fb78da73ab87fb34e4ac9d9299773cfed.zip |
Fixed #112 and cleaned up error reporting when loading extensions.
-rw-r--r-- | markdown/__init__.py | 22 | ||||
-rw-r--r-- | 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_<extension>) 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. """ |