def filter_courses( changes: [Course], config_helper: ConfigHelper, cookie_handler: CookieHandler = None, courses_list: [Course] = None, ) -> [Course]: """ Filters the changes course list from courses that should not get downloaded @param config_helper: ConfigHelper to obtain all the diffrent filter configs @param cookie_handler: CookieHandler to check if the cookie is valid @param courses_list: A list of all courses that are available online @return: filtered changes course list """ download_course_ids = config_helper.get_download_course_ids() download_public_course_ids = config_helper.get_download_public_course_ids() dont_download_course_ids = config_helper.get_dont_download_course_ids() download_submissions = config_helper.get_download_submissions() download_descriptions = config_helper.get_download_descriptions() download_links_in_descriptions = config_helper.get_download_links_in_descriptions() download_databases = config_helper.get_download_databases() download_quizzes = config_helper.get_download_quizzes() download_lessons = config_helper.get_download_lessons() download_workshops = config_helper.get_download_workshops() exclude_file_extensions = config_helper.get_exclude_file_extensions() download_also_with_cookie = config_helper.get_download_also_with_cookie() if cookie_handler is not None: download_also_with_cookie = cookie_handler.test_cookies() filtered_changes = [] for course in changes: if not ResultsHandler.should_download_course( course.id, download_course_ids + download_public_course_ids, dont_download_course_ids ): # Filter courses that should not be downloaded continue if courses_list is not None: not_online = True # Filter courses that are not available online for online_course in courses_list: if online_course.id == course.id: not_online = False break if not_online: Log.warning(f'The Moodle course with id {course.id} is no longer available online.') logging.warning('The Moodle course with id %d is no longer available online.', course.id) continue course_files = [] for file in course.files: # Filter Files based on options if ( # Filter Assignment Submission Files (download_submissions or (not (file.module_modname.endswith('assign') and file.deleted))) # Filter Description Files (except the forum posts) and ( download_descriptions or file.content_type != 'description' or (file.module_modname == 'forum' and file.content_type == 'description' and file.content_filename != 'Forum intro') ) # Filter Database Files and (download_databases or file.content_type != 'database_file') # Filter Quiz Files and (download_quizzes or (not (file.module_modname.endswith('quiz') and file.deleted))) # Filter Lesson Files and (download_lessons or (not (file.module_modname.endswith('lesson') and file.deleted))) # Filter Workshops Files and (download_workshops or (not (file.module_modname.endswith('workshop') and file.deleted))) # Filter Files that requiere a Cookie and (download_also_with_cookie or (not file.module_modname.startswith('cookie_mod-'))) # Exclude files whose file extension is blacklisted and (not (determine_ext(file.content_filename) in exclude_file_extensions)) # Exclude files that are in excluded sections and (ResultsHandler.should_download_section(file.section_id, course.excluded_sections)) ): course_files.append(file) course.files = course_files # Filter Description URLs course_files = [] for file in course.files: if not file.content_type == 'description-url': course_files.append(file) elif download_links_in_descriptions: add_description_url = True for test_file in course.files: if file.content_fileurl == test_file.content_fileurl: if test_file.content_type != 'description-url': # If a URL in a description also exists as a real link in the course, # then ignore this URL add_description_url = False break elif file.module_id > test_file.module_id: # Always use the link from the older description. add_description_url = False break if add_description_url: course_files.append(file) course.files = course_files if len(course.files) > 0: filtered_changes.append(course) return filtered_changes
def filter_courses(changes: [Course], config_helper: ConfigHelper, cookie_handler: CookieHandler = None) -> [Course]: """ Filters the changes course list from courses that should not get downloaded @param config_helper: ConfigHelper to obtain all the diffrent filter configs @param cookie_handler: CookieHandler to check if the cookie is valid @return: filtered changes course list """ download_course_ids = config_helper.get_download_course_ids() download_public_course_ids = config_helper.get_download_public_course_ids( ) dont_download_course_ids = config_helper.get_dont_download_course_ids() download_submissions = config_helper.get_download_submissions() download_descriptions = config_helper.get_download_descriptions() download_links_in_descriptions = config_helper.get_download_links_in_descriptions( ) download_databases = config_helper.get_download_databases() download_also_with_cookie = config_helper.get_download_also_with_cookie( ) if cookie_handler is not None: download_also_with_cookie = cookie_handler.test_cookies() filtered_changes = [] for course in changes: if not download_submissions: course_files = [] for file in course.files: if not (file.module_modname.endswith('assign') and file.deleted): course_files.append(file) course.files = course_files if not download_descriptions: course_files = [] for file in course.files: if file.content_type != 'description': course_files.append(file) course.files = course_files course_files = [] for file in course.files: if not file.content_type == 'description-url': course_files.append(file) elif download_links_in_descriptions: add_description_url = True for test_file in course.files: if file.content_fileurl == test_file.content_fileurl: if test_file.content_type != 'description-url': # If a URL in a description also exists as a real link in the course, # then ignore this URL add_description_url = False break elif file.module_id > test_file.module_id: # Always use the link from the older description. add_description_url = False break if add_description_url: course_files.append(file) course.files = course_files if not download_databases: course_files = [] for file in course.files: if file.content_type != 'database_file': course_files.append(file) course.files = course_files if not download_also_with_cookie: course_files = [] for file in course.files: if not file.module_modname.startswith('cookie_mod-'): course_files.append(file) course.files = course_files if (ResultsHandler.should_download_course( course.id, download_course_ids + download_public_course_ids, dont_download_course_ids) and len(course.files) > 0): filtered_changes.append(course) return filtered_changes