diff --git a/cms/djangoapps/contentstore/management/commands/clone.py b/cms/djangoapps/contentstore/management/commands/clone_course.py similarity index 54% rename from cms/djangoapps/contentstore/management/commands/clone.py rename to cms/djangoapps/contentstore/management/commands/clone_course.py index f20625d7f2..5fffe29543 100644 --- a/cms/djangoapps/contentstore/management/commands/clone.py +++ b/cms/djangoapps/contentstore/management/commands/clone_course.py @@ -12,7 +12,14 @@ from auth.authz import _copy_course_group # # To run from command line: rake cms:clone SOURCE_LOC=MITx/111/Foo1 DEST_LOC=MITx/135/Foo3 # +from request_cache.middleware import RequestCache +from django.core.cache import get_cache +# +# To run from command line: rake cms:delete_course LOC=MITx/111/Foo1 +# + +CACHE = get_cache('mongo_metadata_inheritance') class Command(BaseCommand): """Clone a MongoDB-backed course to another location""" @@ -21,19 +28,27 @@ class Command(BaseCommand): def handle(self, *args, **options): "Execute the command" if len(args) != 2: - raise CommandError("clone requires two arguments: ") + raise CommandError("clone requires two arguments: ") - source_location_str = args[0] - dest_location_str = args[1] + source_course_id = args[0] + dest_course_id = args[1] mstore = modulestore('direct') cstore = contentstore() - print("Cloning course {0} to {1}".format(source_location_str, dest_location_str)) + mstore.metadata_inheritance_cache_subsystem = CACHE + mstore.request_cache = RequestCache.get_request_cache() + org, course_num, run = dest_course_id.split("/") + mstore.ignore_write_events_on_courses.append('{0}/{1}'.format(org, course_num)) - source_location = CourseDescriptor.id_to_location(source_location_str) - dest_location = CourseDescriptor.id_to_location(dest_location_str) + print("Cloning course {0} to {1}".format(source_course_id, dest_course_id)) + + source_location = CourseDescriptor.id_to_location(source_course_id) + dest_location = CourseDescriptor.id_to_location(dest_course_id) if clone_course(mstore, cstore, source_location, dest_location): + # be sure to recompute metadata inheritance after all those updates + mstore.refresh_cached_metadata_inheritance_tree(dest_location) + print("copying User permissions...") _copy_course_group(source_location, dest_location) diff --git a/cms/djangoapps/contentstore/management/commands/delete_course.py b/cms/djangoapps/contentstore/management/commands/delete_course.py index 5aafe9f8a6..4d8c4eda55 100644 --- a/cms/djangoapps/contentstore/management/commands/delete_course.py +++ b/cms/djangoapps/contentstore/management/commands/delete_course.py @@ -9,12 +9,14 @@ from xmodule.course_module import CourseDescriptor from .prompt import query_yes_no from auth.authz import _delete_course_group +from request_cache.middleware import RequestCache +from django.core.cache import get_cache # # To run from command line: rake cms:delete_course LOC=MITx/111/Foo1 # - +CACHE = get_cache('mongo_metadata_inheritance') class Command(BaseCommand): help = '''Delete a MongoDB backed course''' @@ -22,7 +24,7 @@ class Command(BaseCommand): if len(args) != 1 and len(args) != 2: raise CommandError("delete_course requires one or more arguments: |commit|") - loc_str = args[0] + course_id = args[0] commit = False if len(args) == 2: @@ -34,9 +36,14 @@ class Command(BaseCommand): ms = modulestore('direct') cs = contentstore() - if query_yes_no("Deleting course {0}. Confirm?".format(loc_str), default="no"): + ms.metadata_inheritance_cache_subsystem = CACHE + ms.request_cache = RequestCache.get_request_cache() + org, course_num, run = course_id.split("/") + ms.ignore_write_events_on_courses.append('{0}/{1}'.format(org, course_num)) + + if query_yes_no("Deleting course {0}. Confirm?".format(course_id), default="no"): if query_yes_no("Are you sure. This action cannot be undone!", default="no"): - loc = CourseDescriptor.id_to_location(loc_str) + loc = CourseDescriptor.id_to_location(course_id) if delete_course(ms, cs, loc, commit): print 'removing User permissions from course....' # in the django layer, we need to remove all the user permissions groups associated with this course