mirror of
https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
synced 2024-12-26 03:14:19 +00:00
91 lines
4.1 KiB
Python
91 lines
4.1 KiB
Python
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)])
|
|
version = SelectField('Version', validators=[DataRequired()])
|
|
|
|
|
|
class AddNLPJobForm(AddJobForm):
|
|
check_encoding = BooleanField('Check encoding')
|
|
files = MultipleFileField('Files', validators=[DataRequired()])
|
|
language = SelectField('Language', choices=[('', 'Choose your option')],
|
|
default='', validators=[DataRequired()])
|
|
|
|
def validate_check_encoding(self, field):
|
|
if field.data and 'check_encoding' not in SERVICES['nlp']['versions'][self.version.data]: # noqa
|
|
raise ValidationError('Check encoding is not available in this version') # noqa
|
|
|
|
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')
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
version = kwargs.pop('version', SERVICES['nlp']['versions']['latest'])
|
|
super().__init__(*args, **kwargs)
|
|
if 'check_encoding' not in SERVICES['nlp']['versions'][version]:
|
|
self.check_encoding.render_kw = {'disabled': True}
|
|
self.language.choices += [(x, y) for x, y in SERVICES['nlp']['versions'][version]['models'].items()] # noqa
|
|
self.version.choices = [(x, x) for x in SERVICES['nlp']['versions'] if x != 'latest'] # noqa
|
|
self.version.default = version
|
|
|
|
|
|
class AddOCRJobForm(AddJobForm):
|
|
binarization = BooleanField('Binarazation')
|
|
files = MultipleFileField('Files', validators=[DataRequired()])
|
|
language = SelectField('Language', choices=[('', 'Choose your option')],
|
|
default='', validators=[DataRequired()])
|
|
|
|
def validate_binarization(self, field):
|
|
if field.data and 'binarization' not in SERVICES['ocr']['versions'][self.version.data]: # noqa
|
|
raise ValidationError('Binarization is not available in this version') # noqa
|
|
|
|
def validate_files(self, field):
|
|
for file in field.data:
|
|
if not file.filename.lower().endswith('.pdf'):
|
|
raise ValidationError('File does not have an approved '
|
|
'extension: .pdf')
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
version = kwargs.pop('version', SERVICES['ocr']['versions']['latest'])
|
|
super().__init__(*args, **kwargs)
|
|
if 'binarization' not in SERVICES['ocr']['versions'][version]:
|
|
self.binarization.render_kw = {'disabled': True}
|
|
self.language.choices += [(x, y) for x, y in SERVICES['ocr']['versions'][version]['models'].items()] # noqa
|
|
self.version.choices = [(x, x) for x in SERVICES['ocr']['versions'] if x != 'latest'] # noqa
|
|
self.version.default = version
|
|
|
|
|
|
class AddFileSetupJobForm(AddJobForm):
|
|
files = MultipleFileField('Files', 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')
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
version = kwargs.pop('version', SERVICES['file-setup']['versions']['latest'])
|
|
super().__init__(*args, **kwargs)
|
|
self.version.choices = [(x, x) for x in SERVICES['file-setup']['versions'] if x != 'latest'] # noqa
|
|
self.version.default = version
|
|
|
|
|
|
AddJobForms = {
|
|
'file-setup': AddFileSetupJobForm,
|
|
'ocr': AddOCRJobForm,
|
|
'nlp': AddNLPJobForm
|
|
}
|