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

Add error handling

parent 74d91477
No related branches found
No related tags found
No related merge requests found
from flask import (abort, current_app, flash, redirect, request, from flask import (abort, current_app, flash, redirect, request,
render_template, url_for, send_from_directory) render_template, session, url_for, send_from_directory)
from flask_login import current_user, login_required from flask_login import current_user, login_required
from werkzeug import MultiDict
from werkzeug.utils import secure_filename
from . import corpora from . import corpora
from .forms import (AddCorpusFileForm, AddCorpusForm, QueryDownloadForm, from .forms import (AddCorpusFileForm, AddCorpusForm, QueryDownloadForm,
QueryForm) QueryForm)
from .. import db from .. import db
from ..models import Corpus, CorpusFile from ..models import Corpus, CorpusFile
from werkzeug.utils import secure_filename
import os import os
import threading import threading
import logging import logging
...@@ -17,32 +18,38 @@ import logging ...@@ -17,32 +18,38 @@ import logging
def add_corpus(): def add_corpus():
add_corpus_form = AddCorpusForm() add_corpus_form = AddCorpusForm()
if not add_corpus_form.validate_on_submit(): if not add_corpus_form.validate_on_submit():
abort(400) corpus = Corpus(creator=current_user,
corpus = Corpus(creator=current_user, description=add_corpus_form.description.data,
description=add_corpus_form.description.data, title=add_corpus_form.title.data)
title=add_corpus_form.title.data) db.session.add(corpus)
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() db.session.commit()
flash('Corpus created!') dir = os.path.join(current_app.config['OPAQUE_STORAGE_DIRECTORY'],
return redirect(url_for('corpora.corpus', corpus_id=corpus.id)) 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('corpora.corpus', corpus_id=corpus.id))
@corpora.route('/<int:corpus_id>') @corpora.route('/<int:corpus_id>')
@login_required @login_required
def corpus(corpus_id): def corpus(corpus_id):
add_corpus_file_form_data = session.pop('add_corpus_file_form_data',
default=None)
add_corpus_file_form = AddCorpusFileForm(
MultiDict(add_corpus_file_form_data)
)
if add_corpus_file_form_data is not None:
add_corpus_file_form.validate()
corpus = Corpus.query.get_or_404(corpus_id) corpus = Corpus.query.get_or_404(corpus_id)
if not (corpus.creator == current_user or current_user.is_administrator()): if not (corpus.creator == current_user or current_user.is_administrator()):
abort(403) abort(403)
return render_template('corpora/corpus.html.j2', return render_template('corpora/corpus.html.j2',
add_corpus_file_form=AddCorpusFileForm(), add_corpus_file_form=add_corpus_file_form,
corpus=corpus, title='Corpus') corpus=corpus, title='Corpus')
...@@ -96,27 +103,28 @@ def add_corpus_file(corpus_id): ...@@ -96,27 +103,28 @@ def add_corpus_file(corpus_id):
if not (corpus.creator == current_user or current_user.is_administrator()): if not (corpus.creator == current_user or current_user.is_administrator()):
abort(403) abort(403)
add_corpus_file_form = AddCorpusFileForm() add_corpus_file_form = AddCorpusFileForm()
if not add_corpus_file_form.validate_on_submit(): if add_corpus_file_form.validate_on_submit():
abort(400) file = add_corpus_file_form.file.data
file = add_corpus_file_form.file.data filename = secure_filename(file.filename)
filename = secure_filename(file.filename) for corpus_file in corpus.files:
for corpus_file in corpus.files: if filename == corpus_file.filename:
if filename == corpus_file.filename: flash('File already registered to this corpus.')
flash('File already registered to this corpus.') return redirect(url_for('corpora.corpus', corpus_id=corpus_id))
return redirect(url_for('corpora.corpus', corpus_id=corpus_id)) # Save the file
# Save the file dir = os.path.join(str(corpus.user_id), 'corpora', str(corpus.id))
dir = os.path.join(str(corpus.user_id), 'corpora', str(corpus.id)) file.save(os.path.join(current_app.config['OPAQUE_STORAGE_DIRECTORY'],
file.save(os.path.join(current_app.config['OPAQUE_STORAGE_DIRECTORY'], dir, dir, filename))
filename)) author = add_corpus_file_form.author.data
author = add_corpus_file_form.author.data publishing_year = add_corpus_file_form.publishing_year.data
publishing_year = add_corpus_file_form.publishing_year.data title = add_corpus_file_form.title.data
title = add_corpus_file_form.title.data corpus_file = CorpusFile(author=author, corpus=corpus, dir=dir,
corpus_file = CorpusFile(author=author, corpus=corpus, dir=dir, filename=filename,
filename=filename, publishing_year=publishing_year, title=title)
publishing_year=publishing_year, title=title) db.session.add(corpus_file)
db.session.add(corpus_file) db.session.commit()
db.session.commit() flash('Corpus file added!')
flash('Corpus file added!') else:
session['add_corpus_file_form_data'] = request.form
return redirect(url_for('corpora.corpus', corpus_id=corpus_id)) return redirect(url_for('corpora.corpus', corpus_id=corpus_id))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment