aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--markdown/__init__.py42
-rw-r--r--markdown/blockprocessors.py5
-rw-r--r--markdown/commandline.py9
-rw-r--r--markdown/etree_loader.py12
-rw-r--r--markdown/extensions/__init__.py3
-rw-r--r--markdown/extensions/headerid.py4
-rw-r--r--markdown/md_logging.py36
7 files changed, 30 insertions, 81 deletions
diff --git a/markdown/__init__.py b/markdown/__init__.py
index 0774174..b397f1b 100644
--- a/markdown/__init__.py
+++ b/markdown/__init__.py
@@ -35,8 +35,7 @@ version_info = (2,1,0, "Dev")
import re
import codecs
-from logging import DEBUG, INFO, WARN, ERROR, CRITICAL
-from md_logging import message
+import logging
import util
from preprocessors import build_preprocessors
from blockprocessors import build_block_parser
@@ -49,7 +48,10 @@ import html4
# For backwards compatibility in the 2.0.x series
# The things defined in these modules started off in __init__.py so third
# party code might need to access them here.
-from util import *
+#from util import *
+
+
+logger = logging.getLogger('MARKDOWN')
class Markdown:
@@ -139,13 +141,10 @@ class Markdown:
if isinstance(ext, basestring):
ext = self.build_extension(ext, configs.get(ext, []))
if isinstance(ext, Extension):
- try:
- ext.extendMarkdown(self, globals())
- except NotImplementedError, e:
- message(ERROR, e)
+ # might raise NotImplementedError, but that's the extension author's problem
+ ext.extendMarkdown(self, globals())
else:
- message(ERROR,
- 'Extension "%s.%s" must be of type: "markdown.Extension".' \
+ raise ValueError('Extension "%s.%s" must be of type: "markdown.Extension".' \
% (ext.__class__.__module__, ext.__class__.__name__))
return self
@@ -179,17 +178,18 @@ class Markdown:
try: # Old style (mdx_<extension>)
module = __import__(module_name_old_style)
except ImportError:
- message(WARN, "Failed loading extension '%s' from '%s' or '%s'"
- % (ext_name, module_name_new_style, module_name_old_style))
- # Return None so we don't try to initiate none-existant extension
- return None
+ logger.warn("Failed loading extension '%s' from '%s' or '%s'"
+ % (ext_name, module_name_new_style, module_name_old_style))
+ # Return None so we don't try to initiate none-existant extension
+ return None
# If the module is loaded successfully, we expect it to define a
# function called makeExtension()
try:
return module.makeExtension(configs.items())
except AttributeError, e:
- message(CRITICAL, "Failed to initiate extension '%s': %s" % (ext_name, e))
+ logger.warn("Failed to initiate extension '%s': %s" % (ext_name, e))
+ return None
def registerExtension(self, extension):
""" This gets called by the extension """
@@ -214,8 +214,7 @@ class Markdown:
try:
self.serializer = self.output_formats[format.lower()]
except KeyError:
- message(CRITICAL,
- 'Invalid Output Format: "%s". Use one of %s.' \
+ raise KeyError('Invalid Output Format: "%s". Use one of %s.' \
% (format, self.output_formats.keys()))
return self
@@ -244,12 +243,9 @@ class Markdown:
# Fixup the source text
if not source.strip():
return u"" # a blank unicode string
- try:
- source = unicode(source)
- except UnicodeDecodeError:
- message(CRITICAL,
- 'UnicodeDecodeError: Markdown only accepts unicode or ascii input.')
- return u""
+
+ # if this raises UnicodeDecodeError, that's the caller's fault.
+ source = unicode(source)
source = source.replace(util.STX, "").replace(util.ETX, "")
source = source.replace("\r\n", "\n").replace("\r", "\n") + "\n\n"
@@ -283,7 +279,7 @@ class Markdown:
output = ''
else:
# We have a serious problem
- message(CRITICAL, 'Failed to strip top level tags.')
+ raise ValueError('Markdown failed to strip top-level tags. Document=%r' % output.strip())
# Run the text post-processors
for pp in self.postprocessors.values():
diff --git a/markdown/blockprocessors.py b/markdown/blockprocessors.py
index 77fbc71..10a0177 100644
--- a/markdown/blockprocessors.py
+++ b/markdown/blockprocessors.py
@@ -15,8 +15,7 @@ as they need to alter how markdown blocks are parsed.
import re
import util
from blockparser import BlockParser
-from logging import CRITICAL
-from md_logging import message
+from markdown import logger
def build_block_parser(md_instance, **kwargs):
@@ -408,7 +407,7 @@ class HashHeaderProcessor(BlockProcessor):
blocks.insert(0, after)
else:
# This should never happen, but just in case...
- message(CRITICAL, "We've got a problem header!")
+ logger.warn("We've got a problem header: %r" % block)
class SetextHeaderProcessor(BlockProcessor):
diff --git a/markdown/commandline.py b/markdown/commandline.py
index 049d2be..eab23bb 100644
--- a/markdown/commandline.py
+++ b/markdown/commandline.py
@@ -7,8 +7,9 @@ COMMAND-LINE SPECIFIC STUFF
import markdown
import sys
import optparse
-import logging
-from logging import DEBUG, INFO, WARN, ERROR, CRITICAL
+from logging import DEBUG, INFO, CRITICAL
+
+from markdown import logger
# default logging level for command-line use
COMMAND_LINE_LOGGING_LEVEL = CRITICAL
@@ -69,8 +70,8 @@ def run():
# Parse options and adjust logging level if necessary
options, logging_level = parse_options()
- if not options: sys.exit(0)
- if logging_level: logging.getLogger('MARKDOWN').setLevel(logging_level)
+ if not options: sys.exit(2)
+ if logging_level: logger.setLevel(logging_level)
# Run
markdown.markdownFromFile(**options)
diff --git a/markdown/etree_loader.py b/markdown/etree_loader.py
index 64966b5..60719d8 100644
--- a/markdown/etree_loader.py
+++ b/markdown/etree_loader.py
@@ -1,6 +1,3 @@
-from logging import CRITICAL
-from md_logging import message
-import sys
## Import
def importETree():
@@ -20,18 +17,15 @@ def importETree():
try: # An earlier version of Python with Python ElementTree?
import elementtree.ElementTree as etree
except ImportError:
- message(CRITICAL, "Failed to import ElementTree")
- sys.exit(1)
+ raise ImportError("Failed to import ElementTree")
if etree_in_c:
if etree_in_c.VERSION < "1.0":
- message(CRITICAL, "cElementTree version 1.0 or higher is required.")
- sys.exit(1)
+ raise RuntimeError("cElementTree version 1.0 or higher is required.")
# Third party serializers (including ours) test with non-c Comment
etree_in_c.test_comment = Comment
return etree_in_c
elif etree.VERSION < "1.1":
- message(CRITICAL, "ElementTree version 1.1 or higher is required")
- sys.exit(1)
+ raise RuntimeError("ElementTree version 1.1 or higher is required")
else:
return etree
diff --git a/markdown/extensions/__init__.py b/markdown/extensions/__init__.py
index 1cc4762..4c1dcba 100644
--- a/markdown/extensions/__init__.py
+++ b/markdown/extensions/__init__.py
@@ -1,6 +1,3 @@
-from markdown.md_logging import message
-from logging import DEBUG, INFO, WARN, ERROR, CRITICAL
-
"""
Extensions
-----------------------------------------------------------------------------
diff --git a/markdown/extensions/headerid.py b/markdown/extensions/headerid.py
index 5e9793e..6d64a43 100644
--- a/markdown/extensions/headerid.py
+++ b/markdown/extensions/headerid.py
@@ -67,8 +67,6 @@ Dependencies:
import markdown
from markdown.util import etree
-from logging import CRITICAL
-from markdown.md_logging import message
import re
from string import ascii_lowercase, digits, punctuation
@@ -121,7 +119,7 @@ class HeaderIdProcessor(markdown.blockprocessors.BlockProcessor):
blocks.insert(0, after)
else:
# This should never happen, but just in case...
- message(CRITICAL, "We've got a problem header!")
+ raise ValueError("Encountered a problem header: %r" % block)
def _get_meta(self):
""" Return meta data suported by this ext as a tuple """
diff --git a/markdown/md_logging.py b/markdown/md_logging.py
deleted file mode 100644
index 463be15..0000000
--- a/markdown/md_logging.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-import logging
-from logging import DEBUG, INFO, WARN, ERROR, CRITICAL
-import sys
-import warnings
-
-#
-# Exceptions
-#
-
-class MarkdownException(Exception):
- """ A Markdown Exception. """
- pass
-
-
-class MarkdownWarning(Warning):
- """ A Markdown Warning. """
- pass
-
-
-#
-# Global functions
-#
-
-def message(level, text):
- """ A wrapper method for logging debug messages. """
- logger = logging.getLogger('MARKDOWN')
- if logger.handlers:
- # The logger is configured
- logger.log(level, text)
- if level > WARN:
- sys.exit(0)
- elif level > WARN:
- raise MarkdownException, text
- else:
- warnings.warn(text, MarkdownWarning) \ No newline at end of file