def run_change_notification_telegram(storage_path): config = ConfigHelper(storage_path) config.load() TelegramService(config).interactively_configure() Log.success('Telegram Configuration successfully updated!')
def run_change_notification_xmpp(storage_path): config = ConfigHelper(storage_path) config.load() XmppService(config).interactively_configure() Log.success('XMPP Configuration successfully updated!')
def run_add_all_visible_courses(storage_path, skip_cert_verify): config = ConfigHelper(storage_path) config.load() # because we do not want to override the other settings ConfigService(config, storage_path, skip_cert_verify).interactively_add_all_visible_courses() Log.success('Configuration successfully updated!')
def run_configure(storage_path, skip_cert_verify=False): config = ConfigHelper(storage_path) config.load() # because we do not want to override the other settings ConfigService(config, storage_path, skip_cert_verify).interactively_acquire_config() Log.success('Configuration successfully updated!')
def run_manage_database(storage_path): config = ConfigHelper(storage_path) config.load() # because we want to only manage configured courses offline_service = OfflineService(config, storage_path) offline_service.interactively_manage_database() Log.success('All done.')
def run_delete_old_files(storage_path): config = ConfigHelper(storage_path) config.load() # Not really needed, we check all local courses offline_service = OfflineService(config, storage_path) offline_service.delete_old_files() Log.success('All done.')
def run_new_token(storage_path, use_sso=False, username: str = None, password: str = None, skip_cert_verify=False): config = ConfigHelper(storage_path) config.load() # because we do not want to override the other settings moodle = MoodleService(config, storage_path, skip_cert_verify) if use_sso: moodle.interactively_acquire_sso_token(use_stored_url=True) else: moodle.interactively_acquire_token(use_stored_url=True, username=username, password=password) Log.success('New Token successfully saved!')
def run_main( storage_path, verbose=False, skip_cert_verify=False, ignore_ytdl_errors=False, without_downloading_files=False, log_responses=False, ): log_formatter = logging.Formatter( '%(asctime)s %(levelname)s {%(module)s} %(message)s', '%Y-%m-%d %H:%M:%S') log_file = os.path.join(storage_path, 'MoodleDownloader.log') log_handler = RotatingFileHandler(log_file, mode='a', maxBytes=1 * 1024 * 1024, backupCount=2, encoding='utf-8', delay=0) log_handler.setFormatter(log_formatter) if verbose: log_handler.setLevel(logging.DEBUG) else: log_handler.setLevel(logging.INFO) app_log = logging.getLogger() if verbose: app_log.setLevel(logging.DEBUG) else: app_log.setLevel(logging.INFO) app_log.addHandler(log_handler) logging.info('--- moodle-dl started ---------------------') Log.info('Moodle Downloader starting...') if verbose: logging.debug('moodle-dl version: %s', __version__) logging.debug('python version: %s', ".".join(map(str, sys.version_info[:3]))) ffmpeg_available = which('ffmpeg') is not None logging.debug('Is ffmpeg available: %s', ffmpeg_available) if IS_DEBUG: logging.info('Debug-Mode detected. Errors will be re-risen.') app_log.addHandler(ReRaiseOnError()) try: msg_load_config = 'Loading config...' logging.debug(msg_load_config) Log.debug(msg_load_config) config = ConfigHelper(storage_path) config.load() except BaseException as e: logging.error( 'Error while trying to load the Configuration! %s Exiting...', e, extra={'exception': e}) Log.error('Error while trying to load the Configuration!') sys.exit(1) r_client = False try: sentry_dsn = config.get_property('sentry_dsn') if sentry_dsn: sentry_sdk.init(sentry_dsn) except BaseException: pass mail_service = MailService(config) tg_service = TelegramService(config) xmpp_service = XmppService(config) console_service = ConsoleService(config) PathTools.restricted_filenames = config.get_restricted_filenames() try: if not IS_DEBUG: process_lock.lock(storage_path) moodle = MoodleService(config, storage_path, skip_cert_verify, log_responses) msg_checking_for_changes = 'Checking for changes for the configured Moodle-Account....' logging.debug(msg_checking_for_changes) Log.debug(msg_checking_for_changes) changed_courses = moodle.fetch_state() if log_responses: msg_responses_logged = ( "All JSON-responses from Moodle have been written to the responses.log file. Exiting..." ) logging.debug(msg_responses_logged) Log.success(msg_responses_logged) process_lock.unlock(storage_path) return msg_start_downloading = 'Start downloading changed files...' logging.debug(msg_start_downloading) Log.debug(msg_start_downloading) if without_downloading_files: downloader = FakeDownloadService(changed_courses, moodle, storage_path) else: downloader = DownloadService(changed_courses, moodle, storage_path, skip_cert_verify, ignore_ytdl_errors) downloader.run() failed_downloads = downloader.get_failed_url_targets() changed_courses_to_notify = moodle.recorder.changes_to_notify() if len(changed_courses_to_notify) > 0: console_service.notify_about_changes_in_moodle( changed_courses_to_notify) mail_service.notify_about_changes_in_moodle( changed_courses_to_notify) tg_service.notify_about_changes_in_moodle( changed_courses_to_notify) xmpp_service.notify_about_changes_in_moodle( changed_courses_to_notify) moodle.recorder.notified(changed_courses_to_notify) else: msg_no_changes = 'No changes found for the configured Moodle-Account.' logging.info(msg_no_changes) Log.warning(msg_no_changes) if len(failed_downloads) > 0: console_service.notify_about_failed_downloads(failed_downloads) mail_service.notify_about_failed_downloads(failed_downloads) tg_service.notify_about_failed_downloads(failed_downloads) xmpp_service.notify_about_failed_downloads(failed_downloads) process_lock.unlock(storage_path) logging.debug('All done. Exiting...') Log.success('All done. Exiting..') except BaseException as e: print('\n') if not isinstance(e, process_lock.LockError): process_lock.unlock(storage_path) error_formatted = traceback.format_exc() logging.error(error_formatted, extra={'exception': e}) if r_client: sentry_sdk.capture_exception(e) if verbose: Log.critical('Exception:\n%s' % (error_formatted)) short_error = str(e) if not short_error or short_error.isspace(): short_error = traceback.format_exc(limit=1) console_service.notify_about_error(short_error) mail_service.notify_about_error(short_error) tg_service.notify_about_error(short_error) xmpp_service.notify_about_error(short_error) logging.debug('Exception-Handling completed. Exiting...') sys.exit(1)