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)
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)