from ..tools.forms import value from flask_wtf import FlaskForm from flask_wtf.file import FileAllowed, FileField, FileRequired from wtforms import BooleanField, IntegerField, PasswordField, SelectField, StringField from wtforms.fields import DateTimeLocalField from wtforms.validators import InputRequired, Email, EqualTo, Length, Optional class Login(FlaskForm): username = StringField('Username', validators=[InputRequired(), Length(min=4, max=15)]) password = PasswordField('Password', validators=[InputRequired(), Length(min=6, max=30, message='The password must be between 6 and 20 characters long.')]) remember = BooleanField('Remember Log In', render_kw={'checked': True}) class Register(FlaskForm): username = StringField('Username', validators=[InputRequired(), Length(min=4, max=15)]) email = StringField('Email Address', validators=[InputRequired(), Email(message='You must enter a valid email address.'), Length(max=50)]) password = PasswordField('Password', validators=[InputRequired(), Length(min=6, max=30, message='The password must be between 6 and 20 characters long.')]) password_reenter = PasswordField('Re-Enter Password', validators=[InputRequired(), Length(min=6, max=30, message='The password must be between 6 and 20 characters long.'), EqualTo('password', message='Passwords do not match.')]) class ResetPassword(FlaskForm): username = StringField('Username', validators=[InputRequired(), Length(min=4, max=15)]) email = StringField('Email Address', validators=[InputRequired(), Email(message='You must enter a valid email address.'), Length(max=50)]) class UpdatePassword(FlaskForm): password = PasswordField('Password', validators=[InputRequired(), Length(min=6, max=30, message='The password must be between 6 and 20 characters long.')]) password_reenter = PasswordField('Re-Enter Password', validators=[InputRequired(), Length(min=6, max=30, message='The password must be between 6 and 20 characters long.'), EqualTo('password', message='Passwords do not match.')]) class CreateUser(FlaskForm): username = StringField('Username', validators=[InputRequired(), Length(min=4, max=15)]) email = StringField('Email Address', validators=[InputRequired(), Email(message='You must enter a valid email address.'), Length(max=50)]) password = PasswordField('Password (Optional)', validators=[Optional(),Length(min=6, max=30, message='The password must be between 6 and 20 characters long.')]) notify = BooleanField('Notify accout creation by email', render_kw={'checked': True}) class DeleteUser(FlaskForm): password = PasswordField('Confirm Your Password', validators=[InputRequired(), Length(min=6, max=30, message='The password must be between 6 and 20 characters long.')]) notify = BooleanField('Notify deletion by email', render_kw={'checked': True}) class UpdateUser(FlaskForm): confirm_password = PasswordField('Confirm Your Password', validators=[InputRequired(), Length(min=6, max=30, message='The password must be between 6 and 20 characters long.')]) email = StringField('Email Address', validators=[Optional(), Email(message='You must enter a valid email address.'), Length(max=50)]) password = PasswordField('Change Password', validators=[Optional(),Length(min=6, max=30, message='The password must be between 6 and 20 characters long.')]) password_reenter = PasswordField('Re-Enter New Password', validators=[EqualTo('password', message='Passwords do not match.')]) notify = BooleanField('Notify changes by email', render_kw={'checked': True}) class UpdateAccount(FlaskForm): confirm_password = PasswordField('Current Password', validators=[InputRequired(), Length(min=6, max=30, message='The password must be between 6 and 20 characters long.')]) email = StringField('Email Address', validators=[Optional(), Email(message='You must enter a valid email address.'), Length(max=50)]) password = PasswordField('Change Password', validators=[Optional(),Length(min=6, max=30, message='The password must be between 6 and 20 characters long.')]) password_reenter = PasswordField('Re-Enter New Password', validators=[EqualTo('password', message='Passwords do not match.')]) class CreateTest(FlaskForm): start_date = DateTimeLocalField('Start Date', format='%Y-%m-%dT%H:%M', validators=[InputRequired()] ) expiry_date = DateTimeLocalField('Expiry Date', format='%Y-%m-%dT%H:%M', validators=[InputRequired()] ) time_limit = SelectField('Time Limit') dataset = SelectField('Question Dataset') class UploadData(FlaskForm): name = StringField('Name', validators=[InputRequired()]) data_file = FileField('Data File', validators=[FileRequired(), FileAllowed(['json'])]) default = BooleanField('Make Default', render_kw={'checked': True}) class AddTimeAdjustment(FlaskForm): time = IntegerField('Extra Time (Minutes)', validators=[InputRequired(), value(max=60)]) class EditDataset(FlaskForm): dataset = SelectField('Question Dataset')