Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
    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))
Esempio n. 4
0
    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)
Esempio n. 5
0
    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)
Esempio n. 6
0
    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)
Esempio n. 7
0
    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
Esempio n. 8
0
    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))