diff --git a/cms/djangoapps/contentstore/management/commands/tests/test_import.py b/cms/djangoapps/contentstore/management/commands/tests/test_import.py index d34c449f1c..055d132f12 100644 --- a/cms/djangoapps/contentstore/management/commands/tests/test_import.py +++ b/cms/djangoapps/contentstore/management/commands/tests/test_import.py @@ -23,7 +23,7 @@ class TestImport(ModuleStoreTestCase): """ COURSE_ID = ['EDx', '0.00x', '2013_Spring', ] - DIFF_TERM = ['EDx', '0.00x', '2014_Spring', ] + DIFF_RUN = ['EDx', '0.00x', '2014_Spring', ] def setUp(self): """ @@ -43,14 +43,14 @@ class TestImport(ModuleStoreTestCase): with open(os.path.join(self.good_dir, "course", "{0[2]}.xml".format(self.COURSE_ID)), "w+") as f: f.write('') - # Create term changed course xml + # Create run changed course xml self.dupe_dir = tempfile.mkdtemp(dir=self.content_dir) os.makedirs(os.path.join(self.dupe_dir, "course")) with open(os.path.join(self.dupe_dir, "course.xml"), "w+") as f: f.write(''.format(self.DIFF_TERM)) + 'course="{0[1]}"/>'.format(self.DIFF_RUN)) - with open(os.path.join(self.dupe_dir, "course", "{0[2]}.xml".format(self.DIFF_TERM)), "w+") as f: + with open(os.path.join(self.dupe_dir, "course", "{0[2]}.xml".format(self.DIFF_RUN)), "w+") as f: f.write('') def test_forum_seed(self): @@ -63,8 +63,9 @@ class TestImport(ModuleStoreTestCase): def test_duplicate_with_url(self): """ - Check to make sure an import doesn't import courses that will - create find one duplicates + Check to make sure an import doesn't import courses that have the + same org and course, but they have different runs in order to + prevent modulestore "findone" exceptions on deletion """ # Load up base course and verify it is available call_command('import', self.content_dir, self.good_dir) @@ -73,4 +74,4 @@ class TestImport(ModuleStoreTestCase): # Now load up duped course and verify it doesn't load call_command('import', self.content_dir, self.dupe_dir) - self.assertIsNone(store.get_course('/'.join(self.DIFF_TERM))) + self.assertIsNone(store.get_course('/'.join(self.DIFF_RUN))) diff --git a/common/lib/xmodule/xmodule/modulestore/xml_importer.py b/common/lib/xmodule/xmodule/modulestore/xml_importer.py index 74ad299523..cd4a694d2e 100644 --- a/common/lib/xmodule/xmodule/modulestore/xml_importer.py +++ b/common/lib/xmodule/xmodule/modulestore/xml_importer.py @@ -179,15 +179,15 @@ def import_from_xml( course_prefix = u'{0.org}/{0.course}'.format(course_location) # Check to see if a course with the same - # pseudo_course_id, but different term exists in + # pseudo_course_id, but different run exists in # the passed store to avoid broken courses courses = store.get_courses() - bad_term = False + bad_run = False for course in courses: if course.location.course_id.startswith(course_prefix): log.debug('Import is overwriting existing course') # Importing over existing course, check - # that terms match or fail + # that runs match or fail if course.location.name != module.location.name: log.error( 'A course with ID %s exists, and this ' @@ -197,8 +197,9 @@ def import_from_xml( course.location.course_id, module.location.course_id ) - bad_term = True - if bad_term: + bad_run = True + break + if bad_run: # Skip this course, but keep trying to import courses continue