from flask_wtf import FlaskForm from wtforms import (BooleanField, MultipleFileField, SelectField, StringField, SubmitField, ValidationError) from wtforms.validators import DataRequired, Length from . import SERVICES class AddJobForm(FlaskForm): description = StringField('Description', validators=[DataRequired(), Length(1, 255)]) submit = SubmitField() title = StringField('Title', validators=[DataRequired(), Length(1, 32)]) class AddNLPJobForm(AddJobForm): files = MultipleFileField('Files', validators=[DataRequired()]) model = SelectField('Model', validators=[DataRequired()]) version = SelectField('Version', choices=[(x, x) for x in SERVICES['nlp']['versions'] if x != 'latest'], # noqa default=SERVICES['nlp']['versions']['latest'], validators=[DataRequired()]) check_encoding = BooleanField('Check encoding') def validate_files(form, field): for file in field.data: if not file.filename.lower().endswith('.txt'): raise ValidationError('File does not have an approved ' 'extension: .txt') class AddOCRJobForm(AddJobForm): binarization = BooleanField('Binarazation') files = MultipleFileField('Files', validators=[DataRequired()]) model = SelectField('Model', validators=[DataRequired()]) version = SelectField('Version', choices=[(x, x) for x in SERVICES['ocr']['versions'] if x != 'latest'], # noqa default=SERVICES['ocr']['versions']['latest'], validators=[DataRequired()]) def validate_binarization(form, field): if field.data and 'binarization' not in SERVICES['ocr'][form.version.data]: # noqa raise ValidationError('Binarization is not available in this version') # noqa def validate_files(form, field): for file in field.data: if not file.filename.lower().endswith('.pdf'): raise ValidationError('File does not have an approved ' 'extension: .pdf') def validate_model(form, field): if field.data not in SERVICES['ocr'][form.versiondata]['models']: raise ValidationError('Model is not available in this version') class AddFileSetupJobForm(AddJobForm): files = MultipleFileField('Files', validators=[DataRequired()]) version = SelectField('Version', choices=[(x, x) for x in SERVICES['file-setup']['versions'] if x != 'latest'], # noqa default=SERVICES['file-setup']['versions']['latest'], validators=[DataRequired()]) def validate_files(form, field): for file in field.data: if not file.filename.lower().endswith(('.jpeg', '.jpg', '.png', '.tiff', '.tif')): raise ValidationError('File does not have an approved ' 'extension: .jpeg | .jpg | .png | .tiff ' '| .tif')