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 from datetime import date, datetime, timedelta 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()], default = datetime.now() ) expiry_date = DateTimeLocalField('Expiry Date', format='%Y-%m-%dT%H:%M', validators=[InputRequired()], default = date.today() + timedelta(days=1) ) time_limit = SelectField('Time Limit') dataset = SelectField('Question Dataset') class UploadData(FlaskForm): 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)])