from flask_wtf import FlaskForm from flask_wtf.file import FileField, FileAllowed, FileRequired, FileSize from wtforms import validators from wtforms.validators import ( Length, NumberRange, DataRequired, ValidationError, ) from wtforms import ( SubmitField, StringField, IntegerField, SelectField, ) class UploadForm(FlaskForm): """File upload class for a new site in distribusi-verse""" def distribusiname(form, field): if field.data.lower() == "new": raise ValidationError("Name has to be unique and not just new.") sitename = StringField( "Name of your website:", validators=[validators.InputRequired(), Length(2, 100), distribusiname], ) academicyear = SelectField( "Academic year:", validate_choice=True, coerce=str, choices=[ (u'2021-2022', u'2021-2022'), (u'2022-2023', u'2022-2023'), (u'2023-2024', u'2023-2024'), (u'2024-2025', u'2024-2025'), (u'2020-2021', u'past: 2020-2021'), ], option_widget=None, validators=[DataRequired()] ) term = SelectField( "Term:", validate_choice=True, coerce=str, choices=[ (u'1.2', u'1.2'), (u'2.3', u'2.3'), (u'3.1', u'3.1'), (u'4.1', u'4.1'), (u'4.2', u'4.2'), ], option_widget=None, validators=[DataRequired()] ) tags = StringField( "Add tags, seperated by commas. No need for the '#' sign:", validators=[validators.InputRequired(), Length(2, 500)], ) course = SelectField( u'Course:', validate_choice=True, coerce=str, choices=[ ('hacking', u'Autonomous - Hacking'), ('digitalcraft', u'Autonomous - Digital Craft'), ('criticalstudies', u'Autonomous - Critical Studies'), ('publicprivate', u'Autonomous - Public&Private'), ], option_widget=None, validators=[DataRequired()] ) zipfile = FileField( "Upload your zip file with content here:", validators=[ FileAllowed(["zip"], "Zip archives only!"), FileRequired(), FileSize( max_size=104857600, message="Zipfile size must be smaller than 100MB", ), ], ) submit = SubmitField("Upload")