mirror of
				https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
				synced 2025-11-04 04:12:45 +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