mirror of
https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
synced 2025-06-12 00:50:40 +00:00
Create and use a decorator for background functions
This commit is contained in:
@ -1,9 +0,0 @@
|
||||
from ..models import Job
|
||||
|
||||
|
||||
def delete_job_(app, job_id):
|
||||
with app.app_context():
|
||||
job = Job.query.get(job_id)
|
||||
if job is None:
|
||||
raise Exception('Job {} not found!'.format(job_id))
|
||||
job.delete()
|
28
app/jobs/tasks.py
Normal file
28
app/jobs/tasks.py
Normal file
@ -0,0 +1,28 @@
|
||||
from time import sleep
|
||||
from .. import db
|
||||
from ..decorators import background
|
||||
from ..models import Job
|
||||
import os
|
||||
import shutil
|
||||
|
||||
|
||||
@background
|
||||
def delete_job(app, job_id):
|
||||
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()
|
@ -1,9 +1,8 @@
|
||||
from flask import (abort, current_app, flash, redirect, render_template,
|
||||
send_from_directory, url_for)
|
||||
from flask_login import current_user, login_required
|
||||
from threading import Thread
|
||||
from . import jobs
|
||||
from .background_functions import delete_job_
|
||||
from . import tasks
|
||||
from ..models import Job, JobInput, JobResult
|
||||
import os
|
||||
|
||||
@ -23,9 +22,7 @@ def delete_job(job_id):
|
||||
job = Job.query.get_or_404(job_id)
|
||||
if not (job.creator == current_user or current_user.is_administrator()):
|
||||
abort(403)
|
||||
thread = Thread(target=delete_job_,
|
||||
args=(current_app._get_current_object(), job_id))
|
||||
thread.start()
|
||||
tasks.delete_job(job_id)
|
||||
flash('Job has been deleted!')
|
||||
return redirect(url_for('main.dashboard'))
|
||||
|
||||
|
Reference in New Issue
Block a user