Change modulestore to use a logging error handler

* log errors, but don't fail
This commit is contained in:
Victor Shnayder
2012-07-27 15:58:55 -04:00
parent 9c92aef669
commit a8afe5ed17
2 changed files with 24 additions and 4 deletions

View File

@@ -1,5 +1,12 @@
import logging
import sys
log = logging.getLogger(__name__)
def in_exception_handler():
'''Is there an active exception?'''
return sys.exc_info() != (None, None, None)
def strict_error_handler(msg, exc_info=None):
'''
Do not let errors pass. If exc_info is not None, ignore msg, and just
@@ -11,13 +18,26 @@ def strict_error_handler(msg, exc_info=None):
if exc_info is not None:
raise exc_info[0], exc_info[1], exc_info[2]
# Check if there is an exception being handled somewhere up the stack
if sys.exc_info() != (None, None, None):
if in_exception_handler():
raise
raise Exception(msg)
def logging_error_handler(msg, exc_info=None):
'''Log all errors, but otherwise let them pass, relying on the caller to
workaround.'''
if exc_info is not None:
log.exception(msg, exc_info=exc_info)
return
if in_exception_handler():
log.exception(msg)
return
log.error(msg)
def ignore_errors_handler(msg, exc_info=None):
'''Ignore all errors, relying on the caller to workaround.
Meant for use in the LMS, where an error in one part of the course

View File

@@ -3,7 +3,7 @@ from fs.osfs import OSFS
from importlib import import_module
from lxml import etree
from path import path
from xmodule.errorhandlers import strict_error_handler
from xmodule.errorhandlers import logging_error_handler
from xmodule.x_module import XModuleDescriptor, XMLParsingSystem
from xmodule.mako_module import MakoDescriptorSystem
from cStringIO import StringIO
@@ -100,7 +100,7 @@ class XMLModuleStore(ModuleStore):
"""
def __init__(self, data_dir, default_class=None, eager=False,
course_dirs=None,
error_handler=strict_error_handler):
error_handler=logging_error_handler):
"""
Initialize an XMLModuleStore from data_dir