diff --git a/cms/djangoapps/contentstore/tests/test_contentstore.py b/cms/djangoapps/contentstore/tests/test_contentstore.py index c4f5f4ee61..ea7bb60b8e 100644 --- a/cms/djangoapps/contentstore/tests/test_contentstore.py +++ b/cms/djangoapps/contentstore/tests/test_contentstore.py @@ -351,7 +351,7 @@ class ContentStoreToyCourseTest(ModuleStoreTestCase): def test_create_static_tab_and_rename(self): module_store = modulestore('direct') CourseFactory.create(org='edX', course='999', display_name='Robot Super Course') - course_location = Location(['i4x', 'edX', '999', 'course', 'Robot_Super_Course', None]) + course_location = Location(['i4x', 'edX', '999', 'course', 'Robot_Super_Course', None]) item = ItemFactory.create(parent_location=course_location, category='static_tab', display_name="My Tab") @@ -733,7 +733,7 @@ class ContentStoreToyCourseTest(ModuleStoreTestCase): # we want to assert equality between the objects, but we know the locations # differ, so just make them equal for testing purposes - source_item.scope_ids = source_item.scope_ids._replace(def_id=new_loc, usage_id=new_loc) + source_item.location = new_loc if hasattr(source_item, 'data') and hasattr(lookup_item, 'data'): self.assertEqual(source_item.data, lookup_item.data) @@ -914,8 +914,7 @@ class ContentStoreToyCourseTest(ModuleStoreTestCase): depth=1 ) # We had a bug where orphaned draft nodes caused export to fail. This is here to cover that case. - draft_loc = mongo.draft.as_draft(vertical.location.replace(name='no_references')) - vertical.scope_ids = vertical.scope_ids._replace(def_id=draft_loc, usage_id=draft_loc) + vertical.location = mongo.draft.as_draft(vertical.location.replace(name='no_references')) draft_store.save_xmodule(vertical) orphan_vertical = draft_store.get_item(vertical.location) @@ -933,8 +932,7 @@ class ContentStoreToyCourseTest(ModuleStoreTestCase): root_dir = path(mkdtemp_clean()) # now create a new/different private (draft only) vertical - draft_loc = mongo.draft.as_draft(Location(['i4x', 'edX', 'toy', 'vertical', 'a_private_vertical', None])) - vertical.scope_ids = vertical.scope_ids._replace(def_id=draft_loc, usage_id=draft_loc) + vertical.location = mongo.draft.as_draft(Location(['i4x', 'edX', 'toy', 'vertical', 'a_private_vertical', None])) draft_store.save_xmodule(vertical) private_vertical = draft_store.get_item(vertical.location) vertical = None # blank out b/c i destructively manipulated its location 2 lines above @@ -983,7 +981,7 @@ class ContentStoreToyCourseTest(ModuleStoreTestCase): self.assertEqual(on_disk['course/2012_Fall'], own_metadata(course)) # remove old course - delete_course(module_store, content_store, location) + delete_course(module_store, content_store, location, commit=True) # reimport import_from_xml(module_store, root_dir, ['test_export'], draft_store=draft_store) diff --git a/common/lib/xmodule/xmodule/modulestore/mongo/draft.py b/common/lib/xmodule/xmodule/modulestore/mongo/draft.py index 610f7b1b8a..f79a8b0e58 100644 --- a/common/lib/xmodule/xmodule/modulestore/mongo/draft.py +++ b/common/lib/xmodule/xmodule/modulestore/mongo/draft.py @@ -42,7 +42,7 @@ def wrap_draft(item): non-draft location in either case """ setattr(item, 'is_draft', item.location.revision == DRAFT) - item.scope_ids = item.scope_ids._replace(usage_id=item.location.replace(revision=None)) + item.location = item.location.replace(revision=None) return item diff --git a/common/lib/xmodule/xmodule/modulestore/store_utilities.py b/common/lib/xmodule/xmodule/modulestore/store_utilities.py index a025eb7c82..a69ea32761 100644 --- a/common/lib/xmodule/xmodule/modulestore/store_utilities.py +++ b/common/lib/xmodule/xmodule/modulestore/store_utilities.py @@ -110,27 +110,19 @@ def _clone_modules(modulestore, modules, source_location, dest_location): original_loc = Location(module.location) if original_loc.category != 'course': - new_location = module.location._replace( + module.location = module.location._replace( tag=dest_location.tag, org=dest_location.org, course=dest_location.course ) - module.scope_ids = module.scope_ids._replace( - def_id=new_location, - usage_id=new_location - ) else: # on the course module we also have to update the module name - new_location = module.location._replace( + module.location = module.location._replace( tag=dest_location.tag, org=dest_location.org, course=dest_location.course, name=dest_location.name ) - module.scope_ids = module.scope_ids._replace( - def_id=new_location, - usage_id=new_location - ) print "Cloning module {0} to {1}....".format(original_loc, module.location) diff --git a/common/lib/xmodule/xmodule/modulestore/xml_importer.py b/common/lib/xmodule/xmodule/modulestore/xml_importer.py index a9a7601e33..9ee6fe66a3 100644 --- a/common/lib/xmodule/xmodule/modulestore/xml_importer.py +++ b/common/lib/xmodule/xmodule/modulestore/xml_importer.py @@ -375,30 +375,22 @@ def remap_namespace(module, target_location_namespace): # This looks a bit wonky as we need to also change the 'name' of the imported course to be what # the caller passed in if module.location.category != 'course': - new_location = module.location._replace( + module.location = module.location._replace( tag=target_location_namespace.tag, org=target_location_namespace.org, course=target_location_namespace.course ) - module.scope_ids = module.scope_ids._replace( - def_id=new_location, - usage_id=new_location - ) else: original_location = module.location # # module is a course module # - new_location = module.location._replace( + module.location = module.location._replace( tag=target_location_namespace.tag, org=target_location_namespace.org, course=target_location_namespace.course, name=target_location_namespace.name ) - module.scope_ids = module.scope_ids._replace( - def_id=new_location, - usage_id=new_location - ) # # There is more re-namespacing work we have to do when importing course modules # diff --git a/common/lib/xmodule/xmodule/x_module.py b/common/lib/xmodule/xmodule/x_module.py index 02feebea1b..d912dfaceb 100644 --- a/common/lib/xmodule/xmodule/x_module.py +++ b/common/lib/xmodule/xmodule/x_module.py @@ -146,6 +146,13 @@ class XModule(XModuleFields, HTMLSnippet, XBlock): else: return BlockUsageLocator(self.scope_ids.usage_id) + @location.setter + def location(self, value): + self.scope_ids = self.scope_ids._replace( + def_id=value, + usage_id=value, + ) + @property def url_name(self): if self.descriptor: @@ -457,6 +464,13 @@ class XModuleDescriptor(XModuleFields, HTMLSnippet, ResourceTemplates, XBlock): else: return BlockUsageLocator(self.scope_ids.usage_id) + @location.setter + def location(self, value): + self.scope_ids = self.scope_ids._replace( + def_id=value, + usage_id=value, + ) + @property def url_name(self): if isinstance(self.location, Location):