def remove_orphans_and_recalculate_progress(course_key, detached_categories): from contentstore.views.item import _delete_orphans from xmodule.modulestore import ModuleStoreEnum from .signals import is_valid_progress_module _delete_orphans(course_key, ModuleStoreEnum.UserID.mgmt_command, True) users = CourseEnrollment.objects.users_enrolled_in(course_key) detached_categories_list = [ Q(content_id__contains=item.strip()) for item in detached_categories ] detached_categories_list = reduce(lambda a, b: a | b, detached_categories_list) for user in users: completions = CourseModuleCompletion.objects.filter(course_id=course_key, user_id=user.id)\ .exclude(detached_categories_list).values_list('content_id', flat=True).distinct() num_completions = sum([ is_valid_progress_module(content_id=content_id) for content_id in completions ]) try: progress_record = StudentProgress.objects.get(user=user, course_id=course_key) if progress_record.completions != num_completions: progress_record.completions = num_completions progress_record.save() except StudentProgress.DoesNotExist: pass
def handle(self, *args, **options): if len(args) not in {1, 2}: raise CommandError("delete_orphans requires one or more arguments: <course_id> |commit|") try: course_key = CourseKey.from_string(args[0]) except InvalidKeyError: raise CommandError("Invalid course key.") commit = False if len(args) == 2: commit = args[1] == 'commit' if commit: print 'Deleting orphans from the course:' deleted_items = _delete_orphans( course_key, ModuleStoreEnum.UserID.mgmt_command, commit ) print "Success! Deleted the following orphans from the course:" print "\n".join(deleted_items) else: print 'Dry run. The following orphans would have been deleted from the course:' deleted_items = _delete_orphans( course_key, ModuleStoreEnum.UserID.mgmt_command, commit ) print "\n".join(deleted_items)
def remove_orphans(course_key, detached_categories): from contentstore.views.item import _delete_orphans from xmodule.modulestore import ModuleStoreEnum _delete_orphans( course_key, ModuleStoreEnum.UserID.mgmt_command, True )
def handle(self, *args, **options): try: course_key = CourseKey.from_string(options['course_id']) except InvalidKeyError: raise CommandError("Invalid course key.") if options['commit']: print 'Deleting orphans from the course:' deleted_items = _delete_orphans( course_key, ModuleStoreEnum.UserID.mgmt_command, options['commit'] ) print "Success! Deleted the following orphans from the course:" print "\n".join(deleted_items) else: print 'Dry run. The following orphans would have been deleted from the course:' deleted_items = _delete_orphans( course_key, ModuleStoreEnum.UserID.mgmt_command, options['commit'] ) print "\n".join(deleted_items)
def handle(self, *args, **options): try: course_key = CourseKey.from_string(options['course_id']) except InvalidKeyError: raise CommandError("Invalid course key.") if options['commit']: print 'Deleting orphans from the course:' deleted_items = _delete_orphans( course_key, ModuleStoreEnum.UserID.mgmt_command, options['commit']) print "Success! Deleted the following orphans from the course:" print "\n".join(deleted_items) else: print 'Dry run. The following orphans would have been deleted from the course:' deleted_items = _delete_orphans( course_key, ModuleStoreEnum.UserID.mgmt_command, options['commit']) print "\n".join(deleted_items)