diff --git a/common/lib/xmodule/xmodule/modulestore/mixed.py b/common/lib/xmodule/xmodule/modulestore/mixed.py index 9293570699..11f5bd88ab 100644 --- a/common/lib/xmodule/xmodule/modulestore/mixed.py +++ b/common/lib/xmodule/xmodule/modulestore/mixed.py @@ -40,7 +40,11 @@ class MixedModuleStore(ModuleStoreWriteBase): try: self.mappings[CourseKey.from_string(course_id)] = store_name except InvalidKeyError: - self.mappings[SlashSeparatedCourseKey.from_deprecated_string(course_id)] = store_name + try: + self.mappings[SlashSeparatedCourseKey.from_deprecated_string(course_id)] = store_name + except InvalidKeyError: + log.exception("Invalid MixedModuleStore configuration. Unable to parse course_id %r", course_id) + continue if 'default' not in stores: raise Exception('Missing a default modulestore in the MixedModuleStore __init__ method.') @@ -50,8 +54,8 @@ class MixedModuleStore(ModuleStoreWriteBase): if is_xml: # restrict xml to only load courses in mapping store['OPTIONS']['course_ids'] = [ - course_id - for course_id, store_key in mappings.iteritems() + course_key.to_deprecated_string() + for course_key, store_key in self.mappings.iteritems() if store_key == key ] self.modulestores[key] = create_modulestore_instance( diff --git a/common/lib/xmodule/xmodule/modulestore/tests/test_mixed_modulestore.py b/common/lib/xmodule/xmodule/modulestore/tests/test_mixed_modulestore.py index ca4daecc18..084fb7d91d 100644 --- a/common/lib/xmodule/xmodule/modulestore/tests/test_mixed_modulestore.py +++ b/common/lib/xmodule/xmodule/modulestore/tests/test_mixed_modulestore.py @@ -38,6 +38,7 @@ class TestMixedModuleStore(LocMapperSetupSansDjango): MONGO_COURSEID = 'MITx/999/2013_Spring' XML_COURSEID1 = 'edX/toy/2012_Fall' XML_COURSEID2 = 'edX/simple/2012_Fall' + BAD_COURSE_ID = 'edX/simple' modulestore_options = { 'default_class': DEFAULT_CLASS, @@ -53,7 +54,8 @@ class TestMixedModuleStore(LocMapperSetupSansDjango): 'mappings': { XML_COURSEID1: 'xml', XML_COURSEID2: 'xml', - MONGO_COURSEID: 'default' + BAD_COURSE_ID: 'xml', + MONGO_COURSEID: 'default', }, 'stores': { 'xml': {