Add delete corpora function and function to view an delete foreign jobs and corpora.

This commit is contained in:
Stephan Porada
2019-09-24 14:04:49 +02:00
parent 4858f36d76
commit ed288598cd
5 changed files with 121 additions and 19 deletions

View File

@ -1,11 +1,11 @@
from app.utils import background_delete_job
from app.utils import background_delete_job, background_delete_corpus
from flask import (abort, current_app, flash, redirect, request,
render_template, url_for, send_from_directory)
from flask_login import current_user, login_required
from . import main
from .forms import CreateCorpusForm
from .. import db
from ..models import Corpus
from ..models import Corpus, Job
import os
import threading
@ -18,13 +18,16 @@ def index():
@main.route('/corpora/<int:corpus_id>')
@login_required
def corpus(corpus_id):
corpus = current_user.corpora.filter_by(id=corpus_id).first()
if (current_user.is_administrator()):
corpus = Corpus.query.get_or_404(corpus_id)
else:
corpus = current_user.corpora.filter_by(id=corpus_id).first()
if not corpus:
print('Corpus not found.')
abort(404)
dir = os.path.join(current_app.config['OPAQUE_STORAGE_DIRECTORY'],
str(current_user.id),
str(corpus.user_id),
'corpora',
str(corpus.id))
files = {}
@ -42,12 +45,15 @@ def corpus(corpus_id):
@login_required
def corpus_download(corpus_id):
file = request.args.get('file')
corpus = current_user.corpora.filter_by(id=corpus_id).first()
if (current_user.is_administrator()):
corpus = Corpus.query.get_or_404(corpus_id)
else:
corpus = current_user.corpora.filter_by(id=corpus_id).first()
if not file or not corpus:
print('File not found.')
abort(404)
dir = os.path.join(current_app.config['OPAQUE_STORAGE_DIRECTORY'],
str(current_user.id),
str(corpus.user_id),
'corpora',
str(corpus.id))
return send_from_directory(as_attachment=True,
@ -91,13 +97,16 @@ def dashboard():
@main.route('/jobs/<int:job_id>')
@login_required
def job(job_id):
job = current_user.jobs.filter_by(id=job_id).first()
if (current_user.is_administrator()):
job = Job.query.get_or_404(job_id)
else:
job = current_user.jobs.filter_by(id=job_id).first()
if not job:
print('Job not found.')
abort(404)
dir = os.path.join(current_app.config['OPAQUE_STORAGE_DIRECTORY'],
str(current_user.id),
str(job.user_id),
'jobs',
str(job.id))
files = {}
@ -126,12 +135,15 @@ def job(job_id):
@login_required
def job_download(job_id):
file = request.args.get('file')
job = current_user.jobs.filter_by(id=job_id).first()
if (current_user.is_administrator()):
job = Job.query.get_or_404(job_id)
else:
job = current_user.jobs.filter_by(id=job_id).first()
if not file or not job:
print('File not found.')
abort(404)
dir = os.path.join(current_app.config['OPAQUE_STORAGE_DIRECTORY'],
str(current_user.id),
str(job.user_id),
'jobs',
str(job.id))
return send_from_directory(as_attachment=True,
@ -149,3 +161,15 @@ def delete_job(job_id):
delete_thread.start()
flash('Job has been deleted!')
return redirect(url_for('main.dashboard'))
@main.route('/corpora/<int:corpus_id>/delete')
@login_required
def delete_corpus(corpus_id):
delete_thread = threading.Thread(
target=background_delete_corpus,
args=(current_app._get_current_object(), corpus_id)
)
delete_thread.start()
flash('Corpus has been deleted!')
return redirect(url_for('main.dashboard'))