def schedule_task(task_id: int) -> Response: """Add a task to scheduler.""" submit_executor("enable_task", task_id) flash("Scheduling task.") return redirect(url_for("task_bp.one_task", task_id=task_id))
def delete_project(project_id: int) -> Response: """Delete a project.""" cache.clear() # get tasks tasks = [ x[0] for x in (db.session.query().select_from(Task).filter( Task.project_id == project_id).add_columns(text("task.id")).all()) ] submit_executor("disable_project", project_id) # delete logs db.session.query(TaskLog).filter(TaskLog.task_id.in_( tasks)).delete( # type: ignore[attr-defined, union-attr] synchronize_session=False) db.session.commit() # delete file links db.session.query(TaskFile).filter(TaskFile.task_id.in_( tasks)).delete( # type: ignore[attr-defined,union-attr] synchronize_session=False) # delete tasks db.session.query(Task).filter(Task.project_id == project_id).delete( synchronize_session=False) db.session.commit() # delete project Project.query.filter_by(id=project_id).delete(synchronize_session=False) db.session.commit() flash("Project deleted.") return redirect(url_for("project_bp.all_projects"))
def task_endretry(task_id: int) -> Response: """Stop a task from performing the scheduled retry. First, remove the redis key for reruns Then, force the task to reschedule, which will clear any scheduled jobs that do not belong to the primary schedule. """ task = Task.query.filter_by(id=task_id).first() if task: if task.enabled == 1: submit_executor("enable_task", task_id) else: submit_executor("disable_task", task_id) log = TaskLog( # type: ignore[call-arg] status_id=7, task_id=task_id, message="%s: Task retry canceled." % (current_user.full_name or "none"), ) db.session.add(log) db.session.commit() return redirect(url_for("task_bp.one_task", task_id=task_id)) flash("Task does not exist.") return redirect(url_for("task_bp.all_tasks"))
def delete_task(task_id: int) -> Response: """Delete a task.""" task = Task.query.filter_by(id=task_id).first() if task: project_id = task.project_id submit_executor("disable_task", task_id) TaskLog.query.filter_by(task_id=task_id).delete() db.session.commit() TaskFile.query.filter_by(task_id=task_id).delete() db.session.commit() Task.query.filter_by(id=task_id).delete() db.session.commit() log = TaskLog( # type: ignore[call-arg] status_id=7, message=(current_user.full_name or "none") + ": Task deleted. (" + str(task_id) + ")", ) db.session.add(log) db.session.commit() flash("Deleting task.") return redirect( url_for("project_bp.one_project", project_id=project_id)) flash("Task does not exist.") return redirect(url_for("task_bp.all_tasks"))
def edit_project(project_id: int) -> Response: """Save project edits.""" cache.clear() project = get_or_create(db.session, Project, id=project_id) # get filter query for update me = Project.query.filter_by(id=project.id) form = request.form me.update( dict( # noqa: C408 name=form.get("project_name", "undefined", type=str).strip(), description=form.get("project_desc", "", type=str), owner_id=(current_user.id if form.get("project_ownership", 0, type=int) == 1 else me.first().owner_id), updater_id=current_user.id, global_params=form.get("globalParams", "").strip(), sequence_tasks=form.get("run_tasks_in_sequence", 0, type=int), cron=form.get("project_cron", 0, type=int), cron_year=form.get("project_cron_year", None, type=int), cron_month=form.get("project_cron_mnth", None, type=int), cron_week=form.get("project_cron_week", None, type=int), cron_day=form.get("project_cron_day", None, type=int), cron_week_day=form.get("project_cron_wday", None, type=int), cron_hour=form.get("project_cron_hour", None, type=int), cron_min=form.get("project_cron_min", None, type=int), cron_sec=form.get("project_cron_sec", None, type=int), cron_start_date=form_to_date( form.get("project_cron_sdate", None, type=str)), cron_end_date=form_to_date( form.get("project_cron_edate", None, type=str)), intv=form.get("project_intv", 0, type=int), intv_value=form.get("project_intv_value", None, type=int), intv_type=form.get("project_intv_intv", None, type=str), intv_start_date=form_to_date( form.get("project_intv_sdate", None, type=str)), intv_end_date=form_to_date( form.get("project_intv_edate", None, type=str)), ooff=form.get("project_ooff", 0, type=int), ooff_date=form_to_date( form.get("project_ooff_date", None, type=str)), )) db.session.commit() # reschedule any jobs. submit_executor("schedule_project", project_id) flash("Changes saved.") return redirect(url_for("project_bp.one_project", project_id=project_id))
def reschedule_tasks() -> Response: """Emtpy scheduler and re-add all enabled jobs.""" try: output = json.loads(requests.get(app.config["SCHEDULER_HOST"] + "/delete").text) msg = output["message"] add_user_log(msg, 0) except requests.exceptions.ConnectionError: msg = "Failed to remove jobs from scheduler. Scheduler offline." add_user_log(msg, 1) submit_executor("schedule_enabled_tasks") flash(msg) return redirect(url_for("admin_bp.admin"))
def task_new(project_id: int) -> Union[str, Response]: """Create a new task.""" cache.clear() # create tasks form = request.form me = Task( name=form.get("name", "undefined").strip(), project_id=project_id, creator_id=current_user.id, updater_id=current_user.id, max_retries=form.get("task-retry", 0, type=int), order=form.get("task-rank", 0, type=int), source_type_id=form.get("sourceType", None, type=int), source_database_id=form.get("task-source-database", None, type=int), source_query_include_header=form.get( "task_include_query_headers", None, type=int ), source_smb_id=form.get("task-source-smb", None, type=int), source_smb_file=form.get("sourceSmbFile", None, type=str), source_smb_ignore_delimiter=form.get("task_smb_ignore_delimiter", 0, type=int), source_smb_delimiter=form.get("sourceSmbDelimiter", None, type=str), source_sftp_id=form.get("task-source-sftp", None, type=int), source_sftp_file=form.get("sourceSftpFile", None, type=str), source_sftp_ignore_delimiter=form.get( "task_sftp_ignore_delimiter", None, type=int ), enable_source_cache=form.get("task_enable_source_cache", None, type=int), source_require_sql_output=form.get("task_require_sql_output", None, type=int), source_sftp_delimiter=form.get("sourceSftpDelimiter", None, type=str), source_ftp_id=form.get("task-source-ftp", None, type=int), source_ftp_file=form.get("sourceFtpFile", None, type=str), source_ftp_ignore_delimiter=form.get( "task_ftp_ignore_delimiter", None, type=int ), source_ftp_delimiter=form.get("sourceFtpDelimiter", None, type=str), source_ssh_id=form.get("task-source-ssh", None, type=int), source_query_type_id=form.get("sourceQueryType", None, type=int), query_params=form.get("taskParams", "", type=str).strip(), source_git=form.get("sourceGit", None, type=str), query_smb_file=form.get("sourceQuerySmbFile", None, type=str), query_smb_id=form.get("task-query-smb", None, type=int), query_sftp_file=form.get("sourceQuerySftpFile", None, type=str), query_sftp_id=form.get("task-query-sftp", None, type=int), query_ftp_file=form.get("sourceQueryFtpFile", None, type=str), query_ftp_id=form.get("task-query-ftp", None, type=int), source_url=form.get("sourceURL", None, type=str), source_code=form.get("sourceCode", None, type=str), processing_type_id=form.get("processingType", None, type=int), processing_smb_file=form.get("processingSmbFile", None, type=str), processing_smb_id=form.get("task-processing-smb", None, type=int), processing_sftp_file=form.get("processingSftpFile", None, type=str), processing_sftp_id=form.get("task-processing-sftp", None, type=int), processing_ftp_file=form.get("processingFtpFile", None, type=str), processing_ftp_id=form.get("task-processing-ftp", None, type=int), processing_git=form.get("processingGit", None, type=str), processing_url=form.get("processingUrl", None, type=str), processing_code=form.get("processingCode", None, type=str), processing_command=form.get("processingCommand", None, type=str), destination_quote_level_id=form.get("quoteLevel", 3, type=int), destination_file_type_id=form.get("fileType", None, type=int), destination_file_name=form.get( "destinationFileName", form.get("name", "undefined", type=str), type=str ), destination_create_zip=form.get("task_create_zip", None, type=int), destination_zip_name=form.get( "destinationZipName", form.get("name", "undefined", type=str), type=str ), destination_file_delimiter=form.get("fileDelimiter", None, type=str), destination_file_line_terminator=form.get("fileTerminator", None, type=str), destination_ignore_delimiter=form.get( "task_ignore_file_delimiter", None, type=int ), file_gpg=form.get("task_file_gpg", 0, type=int), file_gpg_id=form.get("task-file-gpg", None, type=int), destination_sftp=form.get("task_save_sftp", 0, type=int), destination_sftp_id=form.get("task-destination-sftp", None, type=int), destination_sftp_overwrite=form.get("task_overwrite_sftp", None, type=int), destination_sftp_dont_send_empty_file=form.get( "task_sftp_dont_send_empty", 0, type=int ), destination_ftp=form.get("task_save_ftp", 0, type=int), destination_ftp_id=form.get("task-destination-ftp", None, type=int), destination_ftp_overwrite=form.get("task_overwrite_ftp", None, type=int), destination_ftp_dont_send_empty_file=form.get( "task_ftp_dont_send_empty", 0, type=int ), destination_smb=form.get("task_save_smb", 0, type=int), destination_smb_id=form.get("task-destination-smb", None, type=int), destination_smb_overwrite=form.get("task_overwrite_smb", None, type=int), destination_smb_dont_send_empty_file=form.get( "task_smb_dont_send_empty", 0, type=int ), email_completion=form.get("task_send_completion_email", 0, type=int), email_completion_recipients=form.get("completionEmailRecip", "", type=str), email_completion_message=form.get("completion_email_msg", "", type=str), email_completion_log=form.get("task_send_completion_email_log", 0, type=int), email_completion_file=form.get("task_send_output", 0, type=int), email_completion_dont_send_empty_file=form.get( "task_dont_send_empty", 0, type=int ), email_completion_file_embed=form.get("task_embed_output", 0, type=int), email_error=form.get("task_send_error_email", 0, type=int), email_error_recipients=form.get("errorEmailRecip", "", type=str), email_error_message=form.get("errorEmailMsg", "", type=str), enabled=form.get("task-ooff", 0, type=int), ) db.session.add(me) db.session.commit() log = TaskLog( task_id=me.id, status_id=7, message=(current_user.full_name or "none") + ": Task created.", ) db.session.add(log) db.session.commit() if me.enabled == 1: submit_executor("enable_task", me.id) return redirect(url_for("task_bp.one_task", task_id=me.id))
def task_edit_post(task_id: int) -> Response: """Save task edits.""" # pylint: disable=too-many-branches # pylint: disable=too-many-statements form = request.form task = get_or_create(db.session, Task, id=task_id) me = Task.query.filter_by(id=task.id) me.update( dict( # noqa: C408 name=form.get("name", "undefined").strip(), updater_id=current_user.id, max_retries=form.get("task-retry", 0, type=int), order=form.get("task-rank", 0, type=int), source_type_id=form.get("sourceType", None, type=int), source_database_id=form.get("task-source-database", None, type=int), source_query_include_header=form.get( "task_include_query_headers", None, type=int ), source_smb_id=form.get("task-source-smb", None, type=int), source_smb_file=form.get("sourceSmbFile", None, type=str), source_smb_ignore_delimiter=form.get( "task_smb_ignore_delimiter", 0, type=int ), source_smb_delimiter=form.get("sourceSmbDelimiter", None, type=str), source_sftp_id=form.get("task-source-sftp", None, type=int), source_sftp_file=form.get("sourceSftpFile", None, type=str), source_sftp_ignore_delimiter=form.get( "task_sftp_ignore_delimiter", None, type=int ), source_sftp_delimiter=form.get("sourceSftpDelimiter", None, type=str), source_ftp_id=form.get("task-source-ftp", None, type=int), source_ftp_file=form.get("sourceFtpFile", None, type=str), source_ftp_ignore_delimiter=form.get( "task_ftp_ignore_delimiter", None, type=int ), enable_source_cache=form.get("task_enable_source_cache", None, type=int), source_require_sql_output=form.get( "task_require_sql_output", None, type=int ), source_ftp_delimiter=form.get("sourceFtpDelimiter", None, type=str), source_ssh_id=form.get("task-source-ssh", None, type=int), source_query_type_id=form.get("sourceQueryType", None, type=int), query_params=form.get("taskParams", "", type=str).strip(), source_git=form.get("sourceGit", None, type=str), query_smb_file=form.get("sourceQuerySmbFile", None, type=str), query_smb_id=form.get("task-query-smb", None, type=int), query_sftp_file=form.get("sourceQuerySftpFile", None, type=str), query_sftp_id=form.get("task-query-sftp", None, type=int), query_ftp_file=form.get("sourceQueryFtpFile", None, type=str), query_ftp_id=form.get("task-query-ftp", None, type=int), source_url=form.get("sourceURL", None, type=str), source_code=form.get("sourceCode", None, type=str), processing_type_id=form.get("processingType", None, type=int), processing_smb_file=form.get("processingSmbFile", None, type=str), processing_smb_id=form.get("task-processing-smb", None, type=int), processing_sftp_file=form.get("processingSftpFile", None, type=str), processing_sftp_id=form.get("task-processing-sftp", None, type=int), processing_ftp_file=form.get("processingFtpFile", None, type=str), processing_ftp_id=form.get("task-processing-ftp", None, type=int), processing_git=form.get("processingGit", None, type=str), processing_url=form.get("processingUrl", None, type=str), processing_code=form.get("processingCode", None, type=str), processing_command=form.get("processingCommand", None, type=str), destination_quote_level_id=form.get("quoteLevel", 3, type=int), destination_file_type_id=form.get("fileType", None, type=int), destination_file_name=form.get( "destinationFileName", form.get("name", "undefined", type=str), type=str ), destination_create_zip=form.get("task_create_zip", None, type=int), destination_zip_name=form.get( "destinationZipName", form.get("name", "undefined", type=str), type=str ), destination_file_delimiter=form.get("fileDelimiter", None, type=str), destination_file_line_terminator=form.get("fileTerminator", None, type=str), destination_ignore_delimiter=form.get( "task_ignore_file_delimiter", None, type=int ), file_gpg=form.get("task_file_gpg", 0, type=int), file_gpg_id=form.get("task-file-gpg", None, type=int), destination_sftp=form.get("task_save_sftp", 0, type=int), destination_sftp_id=form.get("task-destination-sftp", None, type=int), destination_sftp_overwrite=form.get("task_overwrite_sftp", None, type=int), destination_sftp_dont_send_empty_file=form.get( "task_sftp_dont_send_empty", 0, type=int ), destination_ftp=form.get("task_save_ftp", 0, type=int), destination_ftp_id=form.get("task-destination-ftp", None, type=int), destination_ftp_overwrite=form.get("task_overwrite_ftp", None, type=int), destination_ftp_dont_send_empty_file=form.get( "task_ftp_dont_send_empty", 0, type=int ), destination_smb=form.get("task_save_smb", 0, type=int), destination_smb_id=form.get("task-destination-smb", None, type=int), destination_smb_overwrite=form.get("task_overwrite_smb", None, type=int), destination_smb_dont_send_empty_file=form.get( "task_smb_dont_send_empty", 0, type=int ), email_completion=form.get("task_send_completion_email", 0, type=int), email_completion_recipients=form.get("completionEmailRecip", "", type=str), email_completion_message=form.get("completion_email_msg", "", type=str), email_completion_log=form.get( "task_send_completion_email_log", 0, type=int ), email_completion_file=form.get("task_send_output", 0, type=int), email_completion_dont_send_empty_file=form.get( "task_dont_send_empty", 0, type=int ), email_completion_file_embed=form.get("task_embed_output", 0, type=int), email_error=form.get("task_send_error_email", 0, type=int), email_error_recipients=form.get("errorEmailRecip", "", type=str), email_error_message=form.get("errorEmailMsg", "", type=str), enabled=form.get("task-ooff", 0, type=int), ) ) db.session.commit() me = me.first() log = TaskLog( task_id=task_id, status_id=7, message=(current_user.full_name or "none") + ": Task edited.", ) db.session.add(log) db.session.commit() if me.enabled == 1: log = TaskLog( task_id=task_id, status_id=7, message=(current_user.full_name or "none") + ": Task enabled.", ) db.session.add(log) db.session.commit() submit_executor("enable_task", task_id) else: submit_executor("disable_task", task_id) return redirect(url_for("task_bp.one_task", task_id=task_id))
def run_all_project_tasks(project_id: int) -> Response: """Run all tasks in a project.""" submit_executor("run_project", project_id) return redirect(url_for("project_bp.one_project", project_id=project_id))
def enable_all_project_tasks(project_id: int) -> Response: """Enable all tasks in a project.""" submit_executor("enable_project", project_id) return redirect(url_for("project_bp.one_project", project_id=project_id))
def dash_scheduled_disable() -> Response: """Button to disable all scheduled tasks.""" submit_executor("disabled_scheduled_tasks") return redirect(url_for("dashboard_bp.dash"))
def dash_errored_run() -> Response: """Button to run all errored tasks.""" submit_executor("run_errored_tasks") return redirect(url_for("dashboard_bp.dash"))
def refresh_cache(task_id: int) -> Response: """Get source code for a task.""" submit_executor("refresh_cache", task_id) return redirect(url_for("task_bp.one_task", task_id=task_id))
def disable_task(task_id: int) -> str: """Disable a task.""" submit_executor("disable_task", task_id) return "disabling task"
def enable_task(task_id: int) -> str: """Enable a task.""" submit_executor("enable_task", task_id) return "enabling task"