diff --git a/app/corpora/views.py b/app/corpora/views.py index 8e5da6df..bd7793eb 100644 --- a/app/corpora/views.py +++ b/app/corpora/views.py @@ -1,12 +1,13 @@ 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 werkzeug import MultiDict +from werkzeug.utils import secure_filename from . import corpora from .forms import (AddCorpusFileForm, AddCorpusForm, QueryDownloadForm, QueryForm) from .. import db from ..models import Corpus, CorpusFile -from werkzeug.utils import secure_filename import os import threading import logging @@ -17,32 +18,38 @@ import logging def add_corpus(): add_corpus_form = AddCorpusForm() if not add_corpus_form.validate_on_submit(): - abort(400) - corpus = Corpus(creator=current_user, - description=add_corpus_form.description.data, - title=add_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) + corpus = Corpus(creator=current_user, + description=add_corpus_form.description.data, + title=add_corpus_form.title.data) + db.session.add(corpus) db.session.commit() - flash('Corpus created!') - return redirect(url_for('corpora.corpus', corpus_id=corpus.id)) + 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('corpora.corpus', corpus_id=corpus.id)) @corpora.route('/') @login_required 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) if not (corpus.creator == current_user or current_user.is_administrator()): abort(403) return render_template('corpora/corpus.html.j2', - add_corpus_file_form=AddCorpusFileForm(), + add_corpus_file_form=add_corpus_file_form, corpus=corpus, title='Corpus') @@ -96,27 +103,28 @@ def add_corpus_file(corpus_id): if not (corpus.creator == current_user or current_user.is_administrator()): abort(403) add_corpus_file_form = AddCorpusFileForm() - if not add_corpus_file_form.validate_on_submit(): - abort(400) - file = add_corpus_file_form.file.data - filename = secure_filename(file.filename) - for corpus_file in corpus.files: - if filename == corpus_file.filename: - flash('File already registered to this corpus.') - return redirect(url_for('corpora.corpus', corpus_id=corpus_id)) - # Save the file - dir = os.path.join(str(corpus.user_id), 'corpora', str(corpus.id)) - file.save(os.path.join(current_app.config['OPAQUE_STORAGE_DIRECTORY'], dir, - filename)) - author = add_corpus_file_form.author.data - publishing_year = add_corpus_file_form.publishing_year.data - title = add_corpus_file_form.title.data - corpus_file = CorpusFile(author=author, corpus=corpus, dir=dir, - filename=filename, - publishing_year=publishing_year, title=title) - db.session.add(corpus_file) - db.session.commit() - flash('Corpus file added!') + if add_corpus_file_form.validate_on_submit(): + file = add_corpus_file_form.file.data + filename = secure_filename(file.filename) + for corpus_file in corpus.files: + if filename == corpus_file.filename: + flash('File already registered to this corpus.') + return redirect(url_for('corpora.corpus', corpus_id=corpus_id)) + # Save the file + dir = os.path.join(str(corpus.user_id), 'corpora', str(corpus.id)) + file.save(os.path.join(current_app.config['OPAQUE_STORAGE_DIRECTORY'], + dir, filename)) + author = add_corpus_file_form.author.data + publishing_year = add_corpus_file_form.publishing_year.data + title = add_corpus_file_form.title.data + corpus_file = CorpusFile(author=author, corpus=corpus, dir=dir, + filename=filename, + publishing_year=publishing_year, title=title) + db.session.add(corpus_file) + db.session.commit() + flash('Corpus file added!') + else: + session['add_corpus_file_form_data'] = request.form return redirect(url_for('corpora.corpus', corpus_id=corpus_id))