Use a setter to make editing location possible

This commit is contained in:
Calen Pennington
2013-09-13 14:16:28 -04:00
parent 9d6c104f54
commit 3f8a2f03ee
5 changed files with 24 additions and 28 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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
#

View File

@@ -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):