Skip to content
Snippets Groups Projects
Commit 14f779d6 authored by Patrick Jentsch's avatar Patrick Jentsch
Browse files

Change url logic of job handlers

parent e9d17343
Branches
Tags
No related merge requests found
...@@ -17,6 +17,30 @@ def index(): ...@@ -17,6 +17,30 @@ def index():
return render_template('main/index.html.j2', title='Opaque') 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/<int:corpus_id>') @main.route('/corpora/<int:corpus_id>')
@login_required @login_required
def corpus(corpus_id): def corpus(corpus_id):
...@@ -54,30 +78,6 @@ def corpus_analysis(corpus_id): ...@@ -54,30 +78,6 @@ def corpus_analysis(corpus_id):
title='Corpus: ' + corpus.title) 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/<int:corpus_id>/delete') @main.route('/corpora/<int:corpus_id>/delete')
@login_required @login_required
def corpus_delete(corpus_id): def corpus_delete(corpus_id):
...@@ -194,29 +194,6 @@ def job(job_id): ...@@ -194,29 +194,6 @@ def job(job_id):
return render_template('main/jobs/job.html.j2', job=job, title='Job') return render_template('main/jobs/job.html.j2', job=job, title='Job')
@main.route('/jobs/<int:job_id>/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/<int:job_id>/delete') @main.route('/jobs/<int:job_id>/delete')
@login_required @login_required
def delete_job(job_id): def delete_job(job_id):
...@@ -227,3 +204,35 @@ def delete_job(job_id): ...@@ -227,3 +204,35 @@ def delete_job(job_id):
delete_thread.start() delete_thread.start()
flash('Job has been deleted!') flash('Job has been deleted!')
return redirect(url_for('main.dashboard')) return redirect(url_for('main.dashboard'))
@main.route('/jobs/<int:job_id>/inputs/<int:job_input_id>/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/<int:job_id>/results/<int:job_result_id>/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)
...@@ -4,6 +4,19 @@ ...@@ -4,6 +4,19 @@
<div class="col s12 m4"> <div class="col s12 m4">
<h3 id="title">{{ corpus.title }}</h3> <h3 id="title">{{ corpus.title }}</h3>
<p id="description">{{ corpus.description }}</p> <p id="description">{{ corpus.description }}</p>
<div class="position: relative; height: 70px;">
<div class="fixed-action-btn">
<a class="btn-floating btn-large red">
<i class="large material-icons">mode_edit</i>
</a>
<ul>
<li><a class="btn-floating red"><i class="material-icons">insert_chart</i></a></li>
<li><a class="btn-floating yellow darken-1"><i class="material-icons">format_quote</i></a></li>
<li><a class="btn-floating green"><i class="material-icons">publish</i></a></li>
<li><a class="btn-floating blue"><i class="material-icons">attach_file</i></a></li>
</ul>
</div>
</div>
</div> </div>
<div class="col s12 m8"> <div class="col s12 m8">
...@@ -69,6 +82,7 @@ ...@@ -69,6 +82,7 @@
</div> </div>
<div id="add-corpus-file-modal" class="modal"> <div id="add-corpus-file-modal" class="modal">
<div class="modal-content"> <div class="modal-content">
<h4>Add corpus file</h4> <h4>Add corpus file</h4>
......
...@@ -83,7 +83,7 @@ ...@@ -83,7 +83,7 @@
resultsElement = document.getElementById(`input-${result.job_input_id}-results`); resultsElement = document.getElementById(`input-${result.job_input_id}-results`);
resultDownloadButtonElement = document.createElement("a"); resultDownloadButtonElement = document.createElement("a");
resultDownloadButtonElement.classList.add("waves-effect", "waves-light", "btn-small"); resultDownloadButtonElement.classList.add("waves-effect", "waves-light", "btn-small");
resultDownloadButtonElement.href = `/jobs/${this.jobId}/download?ressource_id=${result.id}&ressource_type=result`; resultDownloadButtonElement.href = `/jobs/${this.jobId}/results/${result.id}/download`;
resultDownloadButtonElement.innerText = result.filename.split(".").reverse()[0]; resultDownloadButtonElement.innerText = result.filename.split(".").reverse()[0];
resultDownloadButtonElement.setAttribute("download", ""); resultDownloadButtonElement.setAttribute("download", "");
resultDownloadButtonIconElement = document.createElement("i"); resultDownloadButtonIconElement = document.createElement("i");
...@@ -207,7 +207,7 @@ ...@@ -207,7 +207,7 @@
<tr> <tr>
<td id="input-{{ input.id }}-filename">{{ input.filename }}</td> <td id="input-{{ input.id }}-filename">{{ input.filename }}</td>
<td id="input-{{ input.id }}-download"> <td id="input-{{ input.id }}-download">
<a class="waves-effect waves-light btn-small" download href="{{ url_for('main.job_download', job_id=job.id, ressource_id=input.id, ressource_type='input') }}"> <a class="waves-effect waves-light btn-small" download href="{{ url_for('main.job_input_download', job_id=job.id, job_input_id=input.id) }}">
<i class="material-icons">file_download</i> <i class="material-icons">file_download</i>
</a> </a>
</td> </td>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment