def interactively_acquire_config(self): """ Guides the user through the process of configuring the downloader for the courses to be downloaded and in what way """ token = self.get_token() moodle_domain = self.get_moodle_domain() moodle_path = self.get_moodle_path() request_helper = RequestHelper(moodle_domain, moodle_path, token) results_handler = ResultsHandler(request_helper) courses = [] try: userid, version = results_handler.fetch_userid_and_version() results_handler.setVersion(version) courses = results_handler.fetch_courses(userid) except (RequestRejectedError, ValueError, RuntimeError) as error: raise RuntimeError( 'Error while communicating with the Moodle System! (%s)' % (error)) self._select_courses_to_download(courses) self._select_should_download_submissions()
def fetch_state(self) -> [Course]: """ Gets the current status of the configured Moodle account and compares it with the last known status for changes. It does not change the known state, nor does it download the files. @return: List with detected changes """ logging.debug('Fetching current Moodle State...') token = self.config_helper.get_token() moodle_domain = self.config_helper.get_moodle_domain() moodle_path = self.config_helper.get_moodle_path() request_helper = RequestHelper(moodle_domain, moodle_path, token, self.skip_cert_verify) results_handler = ResultsHandler(request_helper) download_course_ids = self.config_helper.get_download_course_ids() dont_download_course_ids = self.config_helper\ .get_dont_download_course_ids() download_submissions = self.config_helper.get_download_submissions() download_descriptions = self.config_helper.get_download_descriptions() courses = [] filtered_courses = [] try: sys.stdout.write('\rDownload account information') sys.stdout.flush() userid, version = results_handler.fetch_userid_and_version() results_handler.setVersion(version) courses_list = results_handler.fetch_courses(userid) courses = [] # Filter unselected courses for course in courses_list: if (ResultsHandler._should_download_course( course.id, download_course_ids, dont_download_course_ids)): courses.append(course) assignments = results_handler.fetch_assignments(courses) if(download_submissions): assignments = results_handler.fetch_submissions( userid, assignments, download_course_ids, dont_download_course_ids) index = 0 for course in courses: index += 1 # to limit the output to one line limits = shutil.get_terminal_size() shorted_course_name = course.fullname if (len(course.fullname) > 17): shorted_course_name = course.fullname[:15] + '..' into = '\rDownload course information' status_message = (into + ' %3d/%3d [%17s|%6s]' % (index, len(courses), shorted_course_name, course.id)) if (len(status_message) > limits.columns): status_message = status_message[0:limits.columns] sys.stdout.write(status_message) sys.stdout.flush() course_assignments = assignments.get(course.id, []) course.files = results_handler.fetch_files( course.id, course_assignments, download_descriptions) filtered_courses.append(course) print("") except (RequestRejectedError, ValueError, RuntimeError) as error: raise RuntimeError( 'Error while communicating with the Moodle System! (%s)' % ( error)) logging.debug('Checking for changes...') changes = self.recorder.changes_of_new_version(filtered_courses) # Filter changes changes = self._filter_courses(changes, download_course_ids, dont_download_course_ids, download_submissions, download_descriptions) changes = self.add_options_to_courses(changes) return changes