Commit e884f17d by chrisndodge

Merge pull request #1272 from MITx/feature/cale/course-loading-errors

Feature/cale/course loading errors
parents fc2d5c43 330a2eac
...@@ -228,7 +228,11 @@ class CourseDescriptor(SequenceDescriptor): ...@@ -228,7 +228,11 @@ class CourseDescriptor(SequenceDescriptor):
if policy_dir: if policy_dir:
paths = [policy_dir + '/grading_policy.json'] + paths paths = [policy_dir + '/grading_policy.json'] + paths
try:
policy = json.loads(cls.read_grading_policy(paths, system)) policy = json.loads(cls.read_grading_policy(paths, system))
except ValueError:
system.error_tracker("Unable to decode grading policy as json")
policy = None
# cdodge: import the grading policy information that is on disk and put into the # cdodge: import the grading policy information that is on disk and put into the
# descriptor 'definition' bucket as a dictionary so that it is persisted in the DB # descriptor 'definition' bucket as a dictionary so that it is persisted in the DB
......
...@@ -13,6 +13,7 @@ from importlib import import_module ...@@ -13,6 +13,7 @@ from importlib import import_module
from lxml import etree from lxml import etree
from path import path from path import path
from xmodule.error_module import ErrorDescriptor
from xmodule.errortracker import make_error_tracker, exc_info_to_str from xmodule.errortracker import make_error_tracker, exc_info_to_str
from xmodule.course_module import CourseDescriptor from xmodule.course_module import CourseDescriptor
from xmodule.mako_module import MakoDescriptorSystem from xmodule.mako_module import MakoDescriptorSystem
...@@ -167,8 +168,6 @@ class ImportSystem(XMLParsingSystem, MakoDescriptorSystem): ...@@ -167,8 +168,6 @@ class ImportSystem(XMLParsingSystem, MakoDescriptorSystem):
# Didn't load properly. Fall back on loading as an error # Didn't load properly. Fall back on loading as an error
# descriptor. This should never error due to formatting. # descriptor. This should never error due to formatting.
# Put import here to avoid circular import errors
from xmodule.error_module import ErrorDescriptor
msg = "Error loading from xml. " + str(err)[:200] msg = "Error loading from xml. " + str(err)[:200]
log.warning(msg) log.warning(msg)
...@@ -311,7 +310,7 @@ class XMLModuleStore(ModuleStoreBase): ...@@ -311,7 +310,7 @@ class XMLModuleStore(ModuleStoreBase):
log.exception(msg) log.exception(msg)
errorlog.tracker(msg) errorlog.tracker(msg)
if course_descriptor is not None: if course_descriptor is not None and not isinstance(course_descriptor, ErrorDescriptor):
self.courses[course_dir] = course_descriptor self.courses[course_dir] = course_descriptor
self._location_errors[course_descriptor.location] = errorlog self._location_errors[course_descriptor.location] = errorlog
self.parent_trackers[course_descriptor.id].make_known(course_descriptor.location) self.parent_trackers[course_descriptor.id].make_known(course_descriptor.location)
...@@ -423,6 +422,10 @@ class XMLModuleStore(ModuleStoreBase): ...@@ -423,6 +422,10 @@ class XMLModuleStore(ModuleStoreBase):
course_descriptor = system.process_xml(etree.tostring(course_data, encoding='unicode')) course_descriptor = system.process_xml(etree.tostring(course_data, encoding='unicode'))
# If we fail to load the course, then skip the rest of the loading steps
if isinstance(course_descriptor, ErrorDescriptor):
return course_descriptor
# NOTE: The descriptors end up loading somewhat bottom up, which # NOTE: The descriptors end up loading somewhat bottom up, which
# breaks metadata inheritance via get_children(). Instead # breaks metadata inheritance via get_children(). Instead
# (actually, in addition to, for now), we do a final inheritance pass # (actually, in addition to, for now), we do a final inheritance pass
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment