Ejemplo n.º 1
0
    def interactively_manage_database(self):
        RESET_SEQ = "\033[0m"
        COLOR_SEQ = "\033[1;%dm"

        BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(30, 38)

        stored_files = self.state_recorder.get_stored_files()

        if(len(stored_files) <= 0):
            return

        print("This management tool will navigate you through a menu to" +
              " selectively remove file entries from the database so" +
              " that these files can be downloaded again.")

        download_course_ids = self.config_helper.get_download_course_ids()
        dont_download_course_ids = self.config_helper\
            .get_dont_download_course_ids()

        course_options = []
        courses = []
        for course in stored_files:
            if (not ResultsHandler._should_download_course(
                    course.id, download_course_ids, dont_download_course_ids)):
                continue

            for course_file in course.files:
                if(not os.path.exists(course_file.saved_to)):
                    course_options.append(COLOR_SEQ %
                                          BLUE + course.fullname + RESET_SEQ)
                    courses.append(course)
                    break

        print('Choose one of the courses:')
        print('[Confirm your selection with the Enter key]')
        print('')
        selected_course_id = cutie.select(options=course_options)

        selected_course = courses[selected_course_id]

        section_options = []
        sections = []
        for course_file in selected_course.files:
            if (not os.path.exists(course_file.saved_to)
                    and (course_file.section_name not in sections)):
                section_options.append(
                    COLOR_SEQ % MAGENTA + course_file.section_name + RESET_SEQ)
                sections.append(course_file.section_name)

        print('From which sections you want to select files.')
        print('[You can select with the space bar and confirm' +
              ' your selection with the enter key]')
        print('')

        selected_sections_ids = cutie.select_multiple(
            options=section_options, minimal_count=1)
        selected_sections = []
        for selected_sections_id in selected_sections_ids:
            if(selected_sections_id < len(sections)):
                selected_sections.append(sections[selected_sections_id])

        file_options = []
        files = []
        for course_file in selected_course.files:
            if (not os.path.exists(course_file.saved_to)
                    and (course_file.section_name in selected_sections)):
                file_options.append(COLOR_SEQ % CYAN +
                                    course_file.content_filename + RESET_SEQ)
                files.append(course_file)

        print('Which of the files should be removed form the database,' +
              ' so that they will be redownloaded?')
        print('[You can select with the space bar and confirm' +
              ' your selection with the enter key]')
        print('')
        selected_files = cutie.select_multiple(options=file_options)

        files_to_delete = []
        for file_index in selected_files:
            if(file_index < len(files)
               and isinstance(files[file_index], File)):
                files_to_delete.append(files[file_index])

        self.state_recorder.batch_delete_files_from_db(files_to_delete)
Ejemplo n.º 2
0
    def _set_options_of_courses(self, courses: [Course]):
        """
        Let the user set special options for every single course
        """
        download_course_ids = self.config_helper.get_download_course_ids()
        dont_download_course_ids = self.config_helper.get_dont_download_course_ids()

        print('')
        print('You can set special settings for every single course.' +
              ' You can set these options:\n' +
              '- A different name for the course\n' +
              '- If a directory structure should be created for the course' +
              ' [create_directory_structure (cfs)].')
        print('')

        while(True):

            choices = []
            choices_courses = []

            options_of_courses = self.config_helper.get_options_of_courses()

            choices.append('None')

            for course in courses:
                if(ResultsHandler._should_download_course(
                        course.id, download_course_ids,
                        dont_download_course_ids)):

                    current_course_settings = options_of_courses.get(
                        str(course.id), None)

                    # create default settings
                    if current_course_settings is None:
                        current_course_settings = {
                            'original_name': course.fullname,
                            'overwrite_name_with': None,
                            'create_directory_structure': True
                        }

                    # create list of options
                    overwrite_name_with = current_course_settings.get(
                        'overwrite_name_with', None)

                    create_directory_structure = current_course_settings.get(
                        'create_directory_structure', True)

                    if(overwrite_name_with is not None and
                            overwrite_name_with != course.fullname):
                        choices.append(('%5i\t%s (%s) cfs=%s' %
                                        (course.id, overwrite_name_with,
                                            course.fullname,
                                            create_directory_structure)))

                    else:
                        choices.append(('%5i\t%s  cfs=%s' %
                                        (course.id, course.fullname,
                                            create_directory_structure)))

                    choices_courses.append(course)

            print('')
            print('For which of the following course do you want to change' +
                  ' the settings?')
            print('[Confirm your selection with the Enter key]')
            print('')

            selected_course = cutie.select(options=choices)
            if(selected_course == 0):
                break
            else:
                self._change_settings_of(choices_courses[selected_course - 1],
                                         options_of_courses)