nopaque/app/corpora/forms.py

167 lines
6.8 KiB
Python
Raw Normal View History

from flask_wtf import FlaskForm
from werkzeug.utils import secure_filename
2020-04-06 12:09:41 +00:00
from wtforms import (BooleanField, FileField, StringField, SubmitField,
ValidationError, IntegerField, SelectField)
2020-04-15 12:55:29 +00:00
from wtforms.validators import DataRequired, Length, NumberRange
2020-04-06 12:09:41 +00:00
class AddCorpusFileForm(FlaskForm):
'''
Form to add a .vrt corpus file to the current corpus.
'''
2020-10-29 13:45:55 +00:00
# Required fields
2020-04-06 12:09:41 +00:00
author = StringField('Author', validators=[DataRequired(), Length(1, 255)])
2020-10-29 13:45:55 +00:00
file = FileField('File', validators=[DataRequired()])
publishing_year = IntegerField('Publishing year',
validators=[DataRequired()])
2020-10-29 13:45:55 +00:00
title = StringField('Title', validators=[DataRequired(), Length(1, 255)])
# Optional fields
address = StringField('Adress', validators=[Length(0, 255)])
2020-04-06 12:09:41 +00:00
booktitle = StringField('Booktitle', validators=[Length(0, 255)])
chapter = StringField('Chapter', validators=[Length(0, 255)])
editor = StringField('Editor', validators=[Length(0, 255)])
institution = StringField('Institution', validators=[Length(0, 255)])
journal = StringField('Journal', validators=[Length(0, 255)])
pages = StringField('Pages', validators=[Length(0, 255)])
publisher = StringField('Publisher', validators=[Length(0, 255)])
school = StringField('School', validators=[Length(0, 255)])
submit = SubmitField()
def __init__(self, corpus, *args, **kwargs):
2021-01-28 10:26:09 +00:00
super().__init__(*args, **kwargs)
self.corpus = corpus
def validate_file(self, field):
2020-04-06 12:09:41 +00:00
if not field.data.filename.lower().endswith('.vrt'):
raise ValidationError('File does not have an approved extension: '
'.vrt')
field.data.filename = secure_filename(field.data.filename)
for corpus_file in self.corpus.files:
if field.data.filename == corpus_file.filename:
raise ValidationError('File already registered to corpus.')
2020-04-06 12:09:41 +00:00
class EditCorpusFileForm(FlaskForm):
'''
Form to edit meta data of one corpus file.
'''
2020-10-29 13:45:55 +00:00
# Required fields
2020-04-06 12:09:41 +00:00
author = StringField('Author', validators=[DataRequired(), Length(1, 255)])
publishing_year = IntegerField('Publishing year',
validators=[DataRequired()])
2020-10-29 13:45:55 +00:00
title = StringField('Title', validators=[DataRequired(), Length(1, 255)])
# Optional fields
address = StringField('Adress', validators=[Length(0, 255)])
2020-04-06 12:09:41 +00:00
booktitle = StringField('Booktitle', validators=[Length(0, 255)])
chapter = StringField('Chapter', validators=[Length(0, 255)])
editor = StringField('Editor', validators=[Length(0, 255)])
institution = StringField('Institution', validators=[Length(0, 255)])
journal = StringField('Journal', validators=[Length(0, 255)])
pages = StringField('Pages', validators=[Length(0, 255)])
publisher = StringField('Publisher', validators=[Length(0, 255)])
school = StringField('School', validators=[Length(0, 255)])
submit = SubmitField()
class AddCorpusForm(FlaskForm):
'''
Form to add a a new corpus.
'''
2020-04-06 12:09:41 +00:00
description = StringField('Description',
validators=[DataRequired(), Length(1, 255)])
submit = SubmitField()
title = StringField('Title', validators=[DataRequired(), Length(1, 32)])
class ImportCorpusForm(FlaskForm):
'''
Form to import a corpus.
'''
description = StringField('Description',
validators=[DataRequired(), Length(1, 255)])
file = FileField('File', validators=[DataRequired()])
submit = SubmitField()
title = StringField('Title', validators=[DataRequired(), Length(1, 32)])
def __init__(self, *args, **kwargs):
2021-01-28 10:26:09 +00:00
super().__init__(*args, **kwargs)
def validate_file(self, field):
if not field.data.filename.lower().endswith('.zip'):
raise ValidationError('File does not have an approved extension: '
'.zip')
field.data.filename = secure_filename(field.data.filename)
2020-04-06 12:09:41 +00:00
class QueryForm(FlaskForm):
'''
Form to submit a query to the server which is executed via cqi-py.
'''
2020-04-01 11:44:06 +00:00
query = StringField('Query',
validators=[DataRequired(), Length(1, 1024)])
2020-06-19 10:30:05 +00:00
submit = SubmitField('Search')
2020-04-06 12:09:41 +00:00
class DisplayOptionsForm(FlaskForm):
'''
Form to alter how the matches are represented to the user by the user.
'''
expert_mode = BooleanField('Expert mode')
result_context = SelectField('Result context',
choices=[('', 'Choose your option'),
('10', '10'),
('20', '20'),
('30', '30'),
('40', '40'),
('50', '50')])
results_per_page = SelectField('Results per page',
choices=[('', 'Choose your option'),
('10', '10'),
('20', '20'),
('30', '30'),
('40', '40'),
('50', '50')])
2020-04-01 11:44:06 +00:00
2020-04-14 13:51:26 +00:00
class InspectDisplayOptionsForm(FlaskForm):
'''
Form for the inspect modal where the user can interact with how the current
match is being represented to him.
'''
2020-04-14 13:51:26 +00:00
expert_mode_inspect = BooleanField('Expert mode')
2020-04-21 08:41:08 +00:00
highlight_sentences = BooleanField('Split sentences')
2020-04-15 12:55:29 +00:00
context_sentences = IntegerField('Context sentences',
validators=[NumberRange(min=0, max=10)],
default=3)
2020-04-14 13:51:26 +00:00
2020-04-01 11:44:06 +00:00
class QueryDownloadForm(FlaskForm):
'''
Form to choose in what file format the analysis results are being
downloaded. WIP.
'''
2020-04-01 11:44:06 +00:00
file_type = SelectField('File type',
choices=[('', 'Choose file type'),
('csv', 'csv'),
('json', 'json'),
('excel', 'excel'),
('html', 'html-table')],
validators=[DataRequired()])
class AddQueryResultForm(FlaskForm):
'''
Form used to import one result json file.
'''
description = StringField('Description',
validators=[DataRequired(), Length(1, 255)])
file = FileField('File', validators=[DataRequired()])
title = StringField('Title', validators=[DataRequired(), Length(1, 32)])
submit = SubmitField()
def validate_file(self, field):
if not field.data.filename.lower().endswith('.json'):
raise ValidationError('File does not have an approved extension: '
'.json')
field.data.filename = secure_filename(field.data.filename)