from time import sleep from .. import db, logger from ..decorators import background from ..models import Job import os import shutil @background def delete_job(job_id, *args, **kwargs): app = kwargs['app'] with app.app_context(): job = Job.query.get(job_id) if job is None: return if job.status not in ['complete', 'failed']: job.status = 'canceling' db.session.commit() while job.status != 'canceled': # In case the daemon handled a job in any way if job.status != 'canceling': job.status = 'canceling' db.session.commit() sleep(1) db.session.refresh(job) path = os.path.join(app.config['NOPAQUE_STORAGE'], str(job.user_id), 'jobs', str(job.id)) shutil.rmtree(path, ignore_errors=True) job.delete() @background def restart_job(job_id, *args, **kwargs): app = kwargs['app'] with app.app_context(): job = Job.query.get(job_id) if job is None: logger.warning('Job not found') return if job.status != 'failed': logger.warning('Job not failed') return logger.warning('Restarted') job_dir = os.path.join(app.config['NOPAQUE_STORAGE'], str(job.user_id), 'jobs', str(job.id)) shutil.rmtree(os.path.join(job_dir, 'output'), ignore_errors=True) shutil.rmtree(os.path.join(job_dir, 'pyflow.data'), ignore_errors=True) job.restart()