def update_job_schedule(job_id): sched = get_scheduler() job_id = job_id.upper() job = sched.get_job(job_id) if not job: raise BadRequestError(f'No job found for job id: {job_id}') if request.method == 'DELETE': app.logger.warn( f'About to delete schedule definition for job id: {job_id}') sched.remove_job(job_id) return tolerant_jsonify([job_to_dict(job) for job in sched.get_jobs()]) else: # If JSON properties are present, they will be evaluated by APScheduler's cron trigger API. # https://apscheduler.readthedocs.io/en/latest/modules/triggers/cron.html#module-apscheduler.triggers.cron try: args = request.get_json(force=True) except Exception as e: raise BadRequestError(str(e)) if args: try: job.reschedule(trigger='cron', **args) except Exception as e: raise BadRequestError(f'Error rescheduling job: {e}') # Passing a empty JSON object will pause this job. else: job.pause() job = sched.get_job(job_id) return tolerant_jsonify(job_to_dict(job))
def update_scheduled_job_args(job_id): try: args = request.get_json(force=True) except Exception as e: raise BadRequestError(str(e)) if not args: raise BadRequestError(f'Could not parse args from request') sched = get_scheduler() job_id = job_id.upper() job = sched.get_job(job_id) if not job: raise BadRequestError(f'No job found for job id: {job_id}') try: existing_args = job.args if len(existing_args) > 2: new_args = dict(existing_args[2]) new_args.update(args) else: new_args = args job.modify(args=[existing_args[0], existing_args[1], new_args]) except Exception as e: raise BadRequestError(f'Error updating job args: {e}') job = sched.get_job(job_id) return tolerant_jsonify(job_to_dict(job))
def get_job_schedule(): sched = get_scheduler() return tolerant_jsonify([job_to_dict(job) for job in sched.get_jobs()])