Skip to content
Snippets Groups Projects
Commit f586518e authored by Stephan Porada's avatar Stephan Porada :speech_balloon:
Browse files

Merge branch 'development' of gitlab.ub.uni-bielefeld.de:sfb1288inf/opaque into development

parents 31c015f7 7dcc8c48
No related branches found
No related tags found
No related merge requests found
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import (MultipleFileField, StringField, SubmitField, from wtforms import (FileField, StringField, SubmitField,
ValidationError, IntegerField, SelectField) ValidationError, IntegerField, SelectField)
from wtforms.validators import DataRequired, Length, NumberRange from wtforms.validators import DataRequired, Length
class CreateCorpusForm(FlaskForm):
description = StringField('Description',
validators=[DataRequired(), Length(1, 64)])
submit = SubmitField('Create corpus')
title = StringField('Title', validators=[DataRequired(), Length(1, 32)])
class AddCorpusFileForm(FlaskForm): class AddCorpusFileForm(FlaskForm):
author = StringField('Author', validators=[DataRequired(), Length(1, 64)]) author = StringField('Author', validators=[DataRequired(), Length(1, 64)])
files = MultipleFileField('Files', validators=[DataRequired()]) file = FileField('File', validators=[DataRequired()])
publishing_year = IntegerField('Publishing year', validators=[DataRequired()]) publishing_year = IntegerField('Publishing year',
validators=[DataRequired()])
submit = SubmitField() submit = SubmitField()
title = StringField('Title', validators=[DataRequired(), Length(1, 64)]) title = StringField('Title', validators=[DataRequired(), Length(1, 64)])
def validate_files(form, field): def validate_file(form, field):
for file in field.data: if not field.data.filename.lower().endswith('.vrt'):
if not file.filename.lower().endswith('.vrt'): raise ValidationError('File does not have an approved extension: '
raise ValidationError('File does not have an approved ' '.vrt')
'extension: .vrt')
class CreateCorpusForm(FlaskForm):
description = StringField('Description',
validators=[DataRequired(), Length(1, 64)])
submit = SubmitField('Create corpus')
title = StringField('Title', validators=[DataRequired(), Length(1, 32)])
class QueryForm(FlaskForm): class QueryForm(FlaskForm):
......
...@@ -17,7 +17,7 @@ def index(): ...@@ -17,7 +17,7 @@ def index():
return render_template('main/index.html.j2', title='Opaque') return render_template('main/index.html.j2', title='Opaque')
@main.route('/corpora/<int:corpus_id>') @main.route('/corpora/<int:corpus_id>', methods=['GET', 'POST'])
@login_required @login_required
def corpus(corpus_id): def corpus(corpus_id):
corpus = Corpus.query.get_or_404(corpus_id) corpus = Corpus.query.get_or_404(corpus_id)
...@@ -26,6 +26,29 @@ def corpus(corpus_id): ...@@ -26,6 +26,29 @@ def corpus(corpus_id):
abort(403) abort(403)
add_corpus_file_form = AddCorpusFileForm() add_corpus_file_form = AddCorpusFileForm()
if add_corpus_file_form.validate_on_submit(): if add_corpus_file_form.validate_on_submit():
filename = secure_filename(add_corpus_file_form.file.data.filename)
for corpus_file in corpus.files:
if filename == corpus_file.filename:
flash('File already registered to this corpus.')
return redirect(url_for('main.corpus', corpus_id=corpus_id))
# Gather information to create new corpus file database entry
author = add_corpus_file_form.author.data
dir = os.path.join(str(corpus.user_id), 'corpora', str(corpus.id))
file = add_corpus_file_form.file.data
publishing_year = add_corpus_file_form.publishing_year.data
title = add_corpus_file_form.title.data
# Save the file
file_dir = os.path.join(current_app.config['OPAQUE_STORAGE_DIRECTORY'],
dir)
file.save(os.path.join(file_dir, filename))
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!') flash('Corpus file added!')
return redirect(url_for('main.corpus', corpus_id=corpus_id)) return redirect(url_for('main.corpus', corpus_id=corpus_id))
return render_template('main/corpora/corpus.html.j2', return render_template('main/corpora/corpus.html.j2',
......
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
<td>{{ file.publishing_year }}</td> <td>{{ file.publishing_year }}</td>
<td class="right-align"> <td class="right-align">
<a class="waves-effect waves-light btn-small"><i class="material-icons">edit</i></a> <a class="waves-effect waves-light btn-small"><i class="material-icons">edit</i></a>
<a class="waves-effect waves-light btn-small"><i class="material-icons">file_download</i></a> <a class="waves-effect waves-light btn-small" href="{{ url_for('main.corpus_download', corpus_file_id=file.id, corpus_id=corpus.id) }}"><i class="material-icons">file_download</i></a>
<a class="waves-effect waves-light btn-small red"><i class="material-icons">delete</i></a> <a class="waves-effect waves-light btn-small red"><i class="material-icons">delete</i></a>
</td> </td>
</tr> </tr>
...@@ -87,7 +87,7 @@ ...@@ -87,7 +87,7 @@
<form method="POST" enctype="multipart/form-data"> <form method="POST" enctype="multipart/form-data">
{{ add_corpus_file_form.hidden_tag() }} {{ add_corpus_file_form.hidden_tag() }}
<div class="row"> <div class="row">
<div class="col s12 m8"> <div class="col s12 m4">
<div class="input-field"> <div class="input-field">
<i class="material-icons prefix">person</i> <i class="material-icons prefix">person</i>
{{ add_corpus_file_form.author(data_length='64') }} {{ add_corpus_file_form.author(data_length='64') }}
...@@ -107,16 +107,26 @@ ...@@ -107,16 +107,26 @@
{% endfor %} {% endfor %}
</div> </div>
</div> </div>
<div class="col s12 m4">
<div class="input-field">
<i class="material-icons prefix">access_time</i>
{{ add_corpus_file_form.publishing_year() }}
{{ add_corpus_file_form.publishing_year.label }}
{% for error in add_corpus_file_form.publishing_year.errors %}
<span class="helper-text red-text">{{ error }}</span>
{% endfor %}
</div>
</div>
<div class="col s12"> <div class="col s12">
<div class="file-field input-field"> <div class="file-field input-field">
<div class="btn"> <div class="btn">
<span>{{ add_corpus_file_form.files.label.text }}</span> <span>{{ add_corpus_file_form.file.label.text }}</span>
{{ add_corpus_file_form.files(accept='.vrt') }} {{ add_corpus_file_form.file(accept='.vrt') }}
</div> </div>
<div class="file-path-wrapper"> <div class="file-path-wrapper">
<input class="file-path validate" type="text"> <input class="file-path validate" type="text">
</div> </div>
{% for error in add_corpus_file_form.files.errors %} {% for error in add_corpus_file_form.file.errors %}
<span class="helper-text red-text">{{ error }}</span> <span class="helper-text red-text">{{ error }}</span>
{% endfor %} {% endfor %}
</div> </div>
......
...@@ -63,5 +63,7 @@ def background_delete_corpus(app, corpus_id): ...@@ -63,5 +63,7 @@ def background_delete_corpus(app, corpus_id):
logger.warning('Called by delete_thread.') logger.warning('Called by delete_thread.')
logger.warning('Corpus id is: {}.'.format(corpus_id)) logger.warning('Corpus id is: {}.'.format(corpus_id))
corpus = Corpus.query.filter_by(id=corpus_id).first() corpus = Corpus.query.filter_by(id=corpus_id).first()
logger.warning('Corpus object is: {}'.format(corpus)) for corpus_file in corpus.files:
db.session.delete(corpus_file)
logger.warning('Corpus object is: {}'.format(corpus))
corpus.delete_corpus() corpus.delete_corpus()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment