nopaque/web/app/jobs/tasks.py

51 lines
1.6 KiB
Python
Raw Normal View History

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()