from flask_wtf import FlaskForm from flask_wtf.file import FileField, FileRequired from werkzeug.utils import secure_filename from wtforms import ( StringField, SubmitField, ValidationError, IntegerField ) from wtforms.validators import DataRequired, InputRequired, Length class AddCorpusFileForm(FlaskForm): ''' Form to add a .vrt corpus file to the current corpus. ''' # Required fields author = StringField('Author', validators=[InputRequired(), Length(min=1, max=255)]) publishing_year = IntegerField('Publishing year', validators=[InputRequired(), Length(min=1, max=255)]) title = StringField('Title', validators=[InputRequired(), Length(min=1, max=255)]) vrt = FileField('File', validators=[FileRequired()]) # Optional fields address = StringField('Adress', validators=[Length(max=255)]) booktitle = StringField('Booktitle', validators=[Length(max=255)]) chapter = StringField('Chapter', validators=[Length(max=255)]) editor = StringField('Editor', validators=[Length(max=255)]) institution = StringField('Institution', validators=[Length(max=255)]) journal = StringField('Journal', validators=[Length(max=255)]) pages = StringField('Pages', validators=[Length(max=255)]) publisher = StringField('Publisher', validators=[Length(max=255)]) school = StringField('School', validators=[Length(max=255)]) submit = SubmitField() def validate_vrt(self, field): if not field.data.filename.lower().endswith('.vrt'): raise ValidationError('VRT files only!') class EditCorpusFileForm(FlaskForm): ''' Form to edit meta data of one corpus file. ''' # Required fields author = StringField('Author', validators=[DataRequired(), Length(1, 255)]) publishing_year = IntegerField('Publishing year', validators=[DataRequired()]) title = StringField('Title', validators=[DataRequired(), Length(1, 255)]) # Optional fields address = StringField('Adress', validators=[Length(0, 255)]) 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. ''' description = StringField('Description', validators=[DataRequired(), Length(1, 255)]) title = StringField('Title', validators=[DataRequired(), Length(1, 32)]) submit = SubmitField() class ImportCorpusForm(FlaskForm): ''' Form to import a corpus. ''' description = StringField('Description', validators=[DataRequired(), Length(1, 255)]) archive = FileField('File', validators=[DataRequired()]) title = StringField('Title', validators=[DataRequired(), Length(1, 32)]) submit = SubmitField() def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def validate_archive(self, field): if field.data.mimetype != 'application/zip': raise ValidationError('ZIP files only!')