From 14f779d66a572c9cc6345470ca94a009ebbc1b20 Mon Sep 17 00:00:00 2001 From: Patrick Jentsch Date: Wed, 30 Oct 2019 13:57:09 +0100 Subject: [PATCH] Change url logic of job handlers --- app/main/views.py | 103 ++++++++++++---------- app/templates/main/corpora/corpus.html.j2 | 14 +++ app/templates/main/jobs/job.html.j2 | 4 +- 3 files changed, 72 insertions(+), 49 deletions(-) diff --git a/app/main/views.py b/app/main/views.py index 25c9d28f..e5a24500 100644 --- a/app/main/views.py +++ b/app/main/views.py @@ -17,6 +17,30 @@ def index(): return render_template('main/index.html.j2', title='Opaque') +@main.route('/corpora/new', methods=['POST']) +@login_required +def corpus_new(): + create_corpus_form = CreateCorpusForm() + if create_corpus_form.validate_on_submit(): + corpus = Corpus(creator=current_user, + description=create_corpus_form.description.data, + title=create_corpus_form.title.data) + db.session.add(corpus) + db.session.commit() + dir = os.path.join(current_app.config['OPAQUE_STORAGE_DIRECTORY'], + str(corpus.user_id), + 'corpora', + str(corpus.id)) + try: + os.makedirs(dir) + except OSError: + flash('OSError!') + db.session.remove(corpus) + db.session.commit() + flash('Corpus created!') + return redirect(url_for('main.corpus', corpus_id=corpus.id)) + + @main.route('/corpora/') @login_required def corpus(corpus_id): @@ -54,30 +78,6 @@ def corpus_analysis(corpus_id): title='Corpus: ' + corpus.title) -@main.route('/corpora/new', methods=['POST']) -@login_required -def corpus_new(): - create_corpus_form = CreateCorpusForm() - if create_corpus_form.validate_on_submit(): - corpus = Corpus(creator=current_user, - description=create_corpus_form.description.data, - title=create_corpus_form.title.data) - db.session.add(corpus) - db.session.commit() - dir = os.path.join(current_app.config['OPAQUE_STORAGE_DIRECTORY'], - str(corpus.user_id), - 'corpora', - str(corpus.id)) - try: - os.makedirs(dir) - except OSError: - flash('OSError!') - db.session.remove(corpus) - db.session.commit() - flash('Corpus created!') - return redirect(url_for('main.corpus', corpus_id=corpus.id)) - - @main.route('/corpora//delete') @login_required def corpus_delete(corpus_id): @@ -194,29 +194,6 @@ def job(job_id): return render_template('main/jobs/job.html.j2', job=job, title='Job') -@main.route('/jobs//download') -@login_required -def job_download(job_id): - ressource_id = request.args.get('ressource_id') - ressource_type = request.args.get('ressource_type') - if ressource_type == 'input': - ressource = JobInput.query.get_or_404(ressource_id) - elif ressource_type == 'result': - ressource = JobResult.query.get_or_404(ressource_id) - else: - abort(400) - if not ressource.job_id == job_id: - abort(404) - if not (ressource.job.creator == current_user - or current_user.is_administrator()): - abort(403) - dir = os.path.join(current_app.config['OPAQUE_STORAGE_DIRECTORY'], - ressource.dir) - return send_from_directory(as_attachment=True, - directory=dir, - filename=ressource.filename) - - @main.route('/jobs//delete') @login_required def delete_job(job_id): @@ -227,3 +204,35 @@ def delete_job(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) diff --git a/app/templates/main/corpora/corpus.html.j2 b/app/templates/main/corpora/corpus.html.j2 index 47a6428f..65491341 100644 --- a/app/templates/main/corpora/corpus.html.j2 +++ b/app/templates/main/corpora/corpus.html.j2 @@ -4,6 +4,19 @@

{{ corpus.title }}

{{ corpus.description }}

+
@@ -69,6 +82,7 @@
+