diff --git a/app/auth/forms.py b/app/auth/forms.py index 4a524cfaf224d7ddd509ac7119764a63b86af709..02658b62e6fd6e1c08e8920bef0c7b5fb0f0a1ae 100644 --- a/app/auth/forms.py +++ b/app/auth/forms.py @@ -1,5 +1,6 @@ from flask_wtf import FlaskForm -from wtforms import StringField, PasswordField, BooleanField, SubmitField, ValidationError, TextAreaField +from wtforms import (StringField, PasswordField, BooleanField, SubmitField, + ValidationError) from wtforms.validators import DataRequired, Length, Email, Regexp, EqualTo from ..models import User @@ -13,13 +14,20 @@ class LoginForm(FlaskForm): class RegistrationForm(FlaskForm): email = StringField('Email', validators=[DataRequired(), Email()]) - username = StringField('Username', validators=[ - DataRequired(), Length(1, 64), - Regexp('^[A-Za-z][A-Za-z0-9_.]*$', 0, - 'Usernames must have only letters, numbers, dots or ' - 'underscores')]) - password = PasswordField('Password', validators=[ - DataRequired(), EqualTo('password2', message='Passwords must match.')]) + username = StringField( + 'Username', + validators=[DataRequired(), + Length(1, 64), + Regexp('^[A-Za-z][A-Za-z0-9_.]*$', + 0, + 'Usernames must have only letters, numbers, dots ' + 'or underscores')] + ) + password = PasswordField( + 'Password', + validators=[DataRequired(), + EqualTo('password2', message='Passwords must match.')] + ) password2 = PasswordField('Confirm password', validators=[DataRequired()]) submit = SubmitField('Register') @@ -79,8 +87,8 @@ class ChangePasswordForm(FlaskForm): class EditProfileForm(FlaskForm): - email = StringField('Change Email', validators=[Length(0, 64), - DataRequired()]) + email = StringField('Change Email', + validators=[Length(0, 254), DataRequired()]) submit = SubmitField('Change Email') def __init__(self, user, *args, **kwargs): diff --git a/app/models.py b/app/models.py index 4474bf03b20f06dd6004a6c7aa65c5dbd3f5f73b..02c789a14f42a33dc9718b6005f1ddaa96c6df22 100644 --- a/app/models.py +++ b/app/models.py @@ -110,7 +110,7 @@ class User(UserMixin, db.Model): # Primary key id = db.Column(db.Integer, primary_key=True) confirmed = db.Column(db.Boolean, default=False) - email = db.Column(db.String(64), unique=True, index=True) + email = db.Column(db.String(254), unique=True, index=True) password_hash = db.Column(db.String(128)) registration_date = db.Column(db.DateTime(), default=datetime.utcnow) role_id = db.Column(db.Integer, db.ForeignKey('roles.id')) diff --git a/app/services/forms.py b/app/services/forms.py index 2f4a1b515cf99388715213439b2aa5eaa5cb0a7f..5de8af07825650e1011be38bd83060aee4ae57e6 100644 --- a/app/services/forms.py +++ b/app/services/forms.py @@ -1,5 +1,6 @@ from flask_wtf import FlaskForm -from wtforms import MultipleFileField, SelectField, StringField, SubmitField, ValidationError +from wtforms import (BooleanField, MultipleFileField, SelectField, StringField, + SubmitField, ValidationError) from wtforms.validators import DataRequired, Length @@ -34,6 +35,7 @@ class NewNLPJobForm(FlaskForm): class NewOCRJobForm(FlaskForm): + binarization = BooleanField('Binarazation') description = StringField('Description', validators=[DataRequired(), Length(1, 255)]) files = MultipleFileField('Files', validators=[DataRequired()]) @@ -49,6 +51,7 @@ class NewOCRJobForm(FlaskForm): ('por', 'Portuguese'), ('spa', 'Spanish; Castilian')], validators=[DataRequired()]) + split = BooleanField('Split') submit = SubmitField('Submit') title = StringField('Title', validators=[DataRequired(), Length(1, 32)]) version = SelectField('Version', diff --git a/app/services/views.py b/app/services/views.py index 7f624f7d5945a0d1322f2b9174e079932ab4dcb7..6d785bfbda01ab1cc8e5f9d4c6a99da0ddc64ab7 100644 --- a/app/services/views.py +++ b/app/services/views.py @@ -62,9 +62,13 @@ def ocr(): mem_mb=8192, n_cores=4, service='ocr', - service_args=json.dumps([ - '-l {}'.format(new_ocr_job_form.language.data), - '--skip-binarisation']), + service_args=json.dumps( + [ + '-l {}'.format(new_ocr_job_form.language.data), + '' if new_ocr_job_form.binarization.data + else '--skip-binarisation' + ] + ), service_version=new_ocr_job_form.version.data, status='preparing', title=new_ocr_job_form.title.data) diff --git a/app/templates/auth/register.html.j2 b/app/templates/auth/register.html.j2 index 19dbcd57a667794ecf65f0c909b572f09ae2ae7e..acbaa2bef4eb54b2dfae41d2f9b5e7ddf52a4509 100644 --- a/app/templates/auth/register.html.j2 +++ b/app/templates/auth/register.html.j2 @@ -13,7 +13,7 @@ {{ form.hidden_tag() }} <div class="input-field"> <i class="material-icons prefix">person</i> - {{ form.username(class='validate') }} + {{ form.username(class='validate', data_length='64') }} {{ form.username.label }} {% for error in form.username.errors %} <span class="helper-text red-text">{{ error }}</span> diff --git a/app/templates/main/dashboard.html.j2 b/app/templates/main/dashboard.html.j2 index c0f016e00a3f10830399b55fa44dadd9c76ff91c..625b0be6d492ae292df0427e6dd5167bd2cd963e 100644 --- a/app/templates/main/dashboard.html.j2 +++ b/app/templates/main/dashboard.html.j2 @@ -94,7 +94,7 @@ <div class="col s12 m4"> <div class="input-field"> <i class="material-icons prefix">title</i> - {{ create_corpus_form.title() }} + {{ create_corpus_form.title(data_length='32') }} {{ create_corpus_form.title.label }} {% for error in create_corpus_form.title.errors %} <span class="helper-text red-text">{{ error }}</span> @@ -104,7 +104,7 @@ <div class="col s12 m8"> <div class="input-field"> <i class="material-icons prefix">description</i> - {{ create_corpus_form.description() }} + {{ create_corpus_form.description(data_length='255') }} {{ create_corpus_form.description.label }} {% for error in create_corpus_form.description.errors %} <span class="helper-text red-text">{{ error }}</span> diff --git a/app/templates/services/ocr.html.j2 b/app/templates/services/ocr.html.j2 index 32f995d74028d5a46ee74af1e7999176b8d21238..5c3a542a6b4311f9a21d9fa02935609872eeadb2 100644 --- a/app/templates/services/ocr.html.j2 +++ b/app/templates/services/ocr.html.j2 @@ -88,8 +88,7 @@ {% endfor %} </div> </div> - </div> - <div class="row"> + <div class="col s12"></div> <div class="col s12 m6"> <div class="file-field input-field"> <div class="btn"> @@ -114,6 +113,23 @@ {% endfor %} </div> </div> + <div class="col s12"></div> + <div class="col s12"> + <div class="switch right-align"> + <label> + Perform binarization + {{ new_ocr_job_form.binarization() }} + <span class="lever"></span> + </label> + </div> + <div class="switch right-align"> + <label> + Split pages in half + <input type="checkbox" disabled> + <span class="lever"></span> + </label> + </div> + </div> </div> </div> <div class="card-action right-align"> diff --git a/migrations/versions/3ca96d906e29_.py b/migrations/versions/3ca96d906e29_.py index bece789414f1f396bb47b7fea4ea2da3737cc54f..608dde1e5e15cb0c42b2e2f0879d4bf8d0b1c677 100644 --- a/migrations/versions/3ca96d906e29_.py +++ b/migrations/versions/3ca96d906e29_.py @@ -1,7 +1,7 @@ """empty message Revision ID: 3ca96d906e29 -Revises: +Revises: Create Date: 2019-09-05 11:43:41.634109 """ @@ -30,7 +30,7 @@ def upgrade(): op.create_table('users', sa.Column('id', sa.Integer(), nullable=False), sa.Column('confirmed', sa.Boolean(), nullable=True), - sa.Column('email', sa.String(length=64), nullable=True), + sa.Column('email', sa.String(length=254), nullable=True), sa.Column('password_hash', sa.String(length=128), nullable=True), sa.Column('registration_date', sa.DateTime(), nullable=True), sa.Column('role_id', sa.Integer(), nullable=True),