def _get_course_keys(self, options): """ Return a list of courses that need scores computed. """ courses_mode = get_mutually_exclusive_required_option(options, 'courses', 'all_courses', 'from_settings') if courses_mode == 'all_courses': course_keys = [course.id for course in modulestore().get_course_summaries()] elif courses_mode == 'courses': course_keys = parse_course_keys(options['courses']) else: course_keys = parse_course_keys(self._latest_settings().course_ids.split()) return course_keys
def handle(self, *args, **options): courses_mode = get_mutually_exclusive_required_option( options, 'courses', 'all_courses') validate_dependent_option(options, 'routing_key', 'enqueue_task') validate_dependent_option(options, 'start_index', 'all_courses') validate_dependent_option(options, 'end_index', 'all_courses') if courses_mode == 'all_courses': course_keys = [ course.id for course in modulestore().get_course_summaries() ] if options.get('start_index'): end = options.get('end_index') or len(course_keys) course_keys = course_keys[options['start_index']:end] else: course_keys = parse_course_keys(options['courses']) self._set_log_levels(options) log.critical( u'BlockStructure: STARTED generating Course Blocks for %d courses.', len(course_keys)) self._generate_course_blocks(options, course_keys) log.critical( u'BlockStructure: FINISHED generating Course Blocks for %d courses.', len(course_keys))
def handle(self, *args, **options): course_keys = None modified_start = None modified_end = None run_mode = get_mutually_exclusive_required_option(options, 'delete', 'dry_run') courses_mode = get_mutually_exclusive_required_option(options, 'courses', 'all_courses') db_table = options.get('db_table') if db_table not in {'subsection', 'course', None}: raise CommandError('Invalid value for db_table. Valid options are "subsection" or "course" only.') if options.get('modified_start'): modified_start = utc.localize(datetime.strptime(options['modified_start'], DATE_FORMAT)) if options.get('modified_end'): if not modified_start: raise CommandError('Optional value for modified_end provided without a value for modified_start.') modified_end = utc.localize(datetime.strptime(options['modified_end'], DATE_FORMAT)) if courses_mode == 'courses': course_keys = parse_course_keys(options['courses']) log.info("reset_grade: Started in %s mode!", run_mode) operation = self._query_grades if run_mode == 'dry_run' else self._delete_grades if db_table == 'subsection' or db_table is None: operation(PersistentSubsectionGrade, course_keys, modified_start, modified_end) if db_table == 'course' or db_table is None: operation(PersistentCourseGrade, course_keys, modified_start, modified_end) log.info("reset_grade: Finished in %s mode!", run_mode)
def handle(self, *args, **options): course_keys = None modified_start = None modified_end = None run_mode = get_mutually_exclusive_required_option( options, 'delete', 'dry_run') courses_mode = get_mutually_exclusive_required_option( options, 'courses', 'all_courses') if options.get('modified_start'): modified_start = datetime.strptime(options['modified_start'], DATE_FORMAT) if options.get('modified_end'): if not modified_start: raise CommandError( 'Optional value for modified_end provided without a value for modified_start.' ) modified_end = datetime.strptime(options['modified_end'], DATE_FORMAT) if courses_mode == 'courses': course_keys = parse_course_keys(options['courses']) log.info("reset_grade: Started in %s mode!", run_mode) operation = self._query_grades if run_mode == 'dry_run' else self._delete_grades operation(PersistentSubsectionGrade, course_keys, modified_start, modified_end) operation(PersistentCourseGrade, course_keys, modified_start, modified_end) log.info("reset_grade: Finished in %s mode!", run_mode)
def _get_migration_options(self, options): """ Returns the command arguments configured via django admin. """ force_update = options['force_update'] commit = options['commit'] courses_mode = get_mutually_exclusive_required_option( options, 'course_ids', 'all_courses', 'from_settings') if courses_mode == 'all_courses': course_keys = [ course.id for course in modulestore().get_course_summaries() ] elif courses_mode == 'course_ids': course_keys = map(self._parse_course_key, options['course_ids']) else: if self._latest_settings().all_courses: course_keys = [ course.id for course in modulestore().get_course_summaries() ] else: course_keys = parse_course_keys( self._latest_settings().course_ids.split()) force_update = self._latest_settings().force_update commit = self._latest_settings().commit return course_keys, force_update, commit
def _get_migration_options(self, options): """ Returns the command arguments configured via django admin. """ force_update = options['force_update'] commit = options['commit'] courses_mode = get_mutually_exclusive_required_option( options, 'course_ids', 'all_courses', 'from_settings') if courses_mode == 'all_courses': course_keys = [ course.id for course in modulestore().get_course_summaries() ] elif courses_mode == 'course_ids': course_keys = list( map(self._parse_course_key, options['course_ids'])) else: migration_settings = self._latest_settings() if migration_settings.all_courses: all_courses = [ course.id for course in modulestore().get_course_summaries() ] # Following is to avoid re-rerunning migrations for the already enqueued courses. # Although the migrations job is idempotent, but we need to track if the transcript migration # job was initiated for specific course(s) in order to elevate load from the workers and for # the job to be able identify the past enqueued courses. migrated_courses = MigrationEnqueuedCourse.objects.all( ).values_list('course_id', flat=True) non_migrated_courses = [ course_key for course_key in all_courses if course_key not in migrated_courses ] # Course batch to be migrated. course_keys = non_migrated_courses[:migration_settings. batch_size] log.info( (u'[Transcript Migration] Courses(total): %s, ' u'Courses(migrated): %s, Courses(non-migrated): %s, ' u'Courses(migration-in-process): %s'), len(all_courses), len(migrated_courses), len(non_migrated_courses), len(course_keys), ) else: course_keys = parse_course_keys( migration_settings.course_ids.split()) force_update = migration_settings.force_update commit = migration_settings.commit return course_keys, force_update, commit
def _get_migration_options(self, options): """ Returns the command arguments configured via django admin. """ force_update = options['force_update'] commit = options['commit'] courses_mode = get_mutually_exclusive_required_option(options, 'course_ids', 'all_courses', 'from_settings') if courses_mode == 'all_courses': course_keys = [course.id for course in modulestore().get_course_summaries()] elif courses_mode == 'course_ids': course_keys = map(self._parse_course_key, options['course_ids']) else: migration_settings = self._latest_settings() if migration_settings.all_courses: all_courses = [course.id for course in modulestore().get_course_summaries()] # Following is to avoid re-rerunning migrations for the already enqueued courses. # Although the migrations job is idempotent, but we need to track if the transcript migration # job was initiated for specific course(s) in order to elevate load from the workers and for # the job to be able identify the past enqueued courses. migrated_courses = MigrationEnqueuedCourse.objects.all().values_list('course_id', flat=True) non_migrated_courses = [ course_key for course_key in all_courses if course_key not in migrated_courses ] # Course batch to be migrated. course_keys = non_migrated_courses[:migration_settings.batch_size] log.info( (u'[Transcript Migration] Courses(total): %s, ' u'Courses(migrated): %s, Courses(non-migrated): %s, ' u'Courses(migration-in-process): %s'), len(all_courses), len(migrated_courses), len(non_migrated_courses), len(course_keys), ) else: course_keys = parse_course_keys(migration_settings.course_ids.split()) force_update = migration_settings.force_update commit = migration_settings.commit return course_keys, force_update, commit
def _get_migration_options(self, options): """ Returns the command arguments configured via django admin. """ force_update = options['force_update'] commit = options['commit'] courses_mode = get_mutually_exclusive_required_option(options, 'course_ids', 'all_courses', 'from_settings') if courses_mode == 'all_courses': course_keys = [course.id for course in modulestore().get_course_summaries()] elif courses_mode == 'course_ids': course_keys = map(self._parse_course_key, options['course_ids']) else: if self._latest_settings().all_courses: course_keys = [course.id for course in modulestore().get_course_summaries()] else: course_keys = parse_course_keys(self._latest_settings().course_ids.split()) force_update = self._latest_settings().force_update commit = self._latest_settings().commit return course_keys, force_update, commit
def handle(self, *args, **options): courses_mode = get_mutually_exclusive_required_option(options, 'courses', 'all_courses') validate_dependent_option(options, 'routing_key', 'enqueue_task') validate_dependent_option(options, 'start_index', 'all_courses') validate_dependent_option(options, 'end_index', 'all_courses') if courses_mode == 'all_courses': course_keys = [course.id for course in modulestore().get_course_summaries()] if options.get('start_index'): end = options.get('end_index') or len(course_keys) course_keys = course_keys[options['start_index']:end] else: course_keys = parse_course_keys(options['courses']) self._set_log_levels(options) log.critical(u'BlockStructure: STARTED generating Course Blocks for %d courses.', len(course_keys)) self._generate_course_blocks(options, course_keys) log.critical(u'BlockStructure: FINISHED generating Course Blocks for %d courses.', len(course_keys))