diff --git a/app/__init__.py b/app/__init__.py index b77e6a1b..c08a4cf3 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -32,6 +32,9 @@ def create_app(config_name): from .corpora import corpora as corpora_blueprint app.register_blueprint(corpora_blueprint, url_prefix='/corpora') + from .jobs import jobs as jobs_blueprint + app.register_blueprint(jobs_blueprint, url_prefix='/jobs') + from .main import main as main_blueprint app.register_blueprint(main_blueprint) diff --git a/app/jobs/__init__.py b/app/jobs/__init__.py new file mode 100644 index 00000000..3e73643d --- /dev/null +++ b/app/jobs/__init__.py @@ -0,0 +1,6 @@ +from flask import Blueprint + +jobs = Blueprint('jobs', __name__) + + +from . import views diff --git a/app/jobs/views.py b/app/jobs/views.py new file mode 100644 index 00000000..e713fb71 --- /dev/null +++ b/app/jobs/views.py @@ -0,0 +1,61 @@ +from app.utils import background_delete_job +from flask import (abort, current_app, flash, redirect, render_template, + send_from_directory, url_for) +from flask_login import current_user, login_required +from . import jobs +from ..models import Job, JobInput, JobResult +import os +import threading + + +@jobs.route('/') +@login_required +def job(job_id): + job = Job.query.get_or_404(job_id) + if not (job.creator == current_user or current_user.is_administrator()): + abort(403) + return render_template('jobs/job.html.j2', job=job, title='Job') + + +@jobs.route('//delete') +@login_required +def delete_job(job_id): + delete_thread = threading.Thread( + target=background_delete_job, + args=(current_app._get_current_object(), job_id) + ) + delete_thread.start() + flash('Job has been deleted!') + return redirect(url_for('main.dashboard')) + + +@jobs.route('//inputs//download') +@login_required +def download_job_input(job_id, job_input_id): + job_input = JobInput.query.get_or_404(job_input_id) + if not job_input.job_id == job_id: + abort(404) + if not (job_input.job.creator == current_user + or current_user.is_administrator()): + abort(403) + dir = os.path.join(current_app.config['OPAQUE_STORAGE_DIRECTORY'], + job_input.dir) + return send_from_directory(as_attachment=True, + directory=dir, + filename=job_input.filename) + + +@jobs.route('//results//download') +@login_required +def download_job_result(job_id, job_result_id): + job_result = JobResult.query.get_or_404(job_result_id) + if not job_result.job_id == job_id: + abort(404) + if not (job_result.job.creator == current_user + or current_user.is_administrator()): + abort(403) + dir = os.path.join(current_app.config['OPAQUE_STORAGE_DIRECTORY'], + job_result.dir) + return send_from_directory(as_attachment=True, + directory=dir, + filename=job_result.filename) diff --git a/app/main/views.py b/app/main/views.py index 8631c0f7..fe8ec583 100644 --- a/app/main/views.py +++ b/app/main/views.py @@ -1,12 +1,6 @@ -from app.utils import background_delete_job -from flask import (abort, current_app, flash, redirect, render_template, - send_from_directory, url_for) -from flask_login import current_user, login_required +from flask import render_template +from flask_login import login_required from . import main -from ..corpora.forms import AddCorpusForm -from ..models import Job, JobInput, JobResult -import os -import threading @main.route('/') @@ -17,58 +11,4 @@ def index(): @main.route('/dashboard') @login_required def dashboard(): - return render_template('main/dashboard.html.j2', - add_corpus_form=AddCorpusForm(), title='Dashboard') - - -@main.route('/jobs/') -@login_required -def job(job_id): - job = Job.query.get_or_404(job_id) - if not (job.creator == current_user or current_user.is_administrator()): - abort(403) - return render_template('main/jobs/job.html.j2', job=job, title='Job') - - -@main.route('/jobs//delete') -@login_required -def delete_job(job_id): - delete_thread = threading.Thread( - target=background_delete_job, - args=(current_app._get_current_object(), job_id) - ) - delete_thread.start() - flash('Job has been deleted!') - return redirect(url_for('main.dashboard')) - - -@main.route('/jobs//inputs//download') -@login_required -def job_input_download(job_id, job_input_id): - job_input = JobInput.query.get_or_404(job_input_id) - if not job_input.job_id == job_id: - abort(404) - if not (job_input.job.creator == current_user - or current_user.is_administrator()): - abort(403) - dir = os.path.join(current_app.config['OPAQUE_STORAGE_DIRECTORY'], - job_input.dir) - return send_from_directory(as_attachment=True, - directory=dir, - filename=job_input.filename) - - -@main.route('/jobs//results//download') -@login_required -def job_result_download(job_id, job_result_id): - job_result = JobResult.query.get_or_404(job_result_id) - if not job_result.job_id == job_id: - abort(404) - if not (job_result.job.creator == current_user - or current_user.is_administrator()): - abort(403) - dir = os.path.join(current_app.config['OPAQUE_STORAGE_DIRECTORY'], - job_result.dir) - return send_from_directory(as_attachment=True, - directory=dir, - filename=job_result.filename) + return render_template('main/dashboard.html.j2', title='Dashboard') diff --git a/app/templates/main/jobs/job.html.j2 b/app/templates/jobs/job.html.j2 similarity index 98% rename from app/templates/main/jobs/job.html.j2 rename to app/templates/jobs/job.html.j2 index 86257257..2c7d064a 100644 --- a/app/templates/main/jobs/job.html.j2 +++ b/app/templates/jobs/job.html.j2 @@ -123,7 +123,7 @@ All iput and output files will be permanently deleted.

@@ -207,7 +207,7 @@ {{ input.filename }} - + file_download