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 archive section:", validators=[validators.InputRequired(), Length(2, 100), _distribusiname], ) academicyear = SelectField( "Year", validate_choice=True, coerce=str, choices=[ (u'2017', u'2017'), (u'2018', u'2018'), (u'2019', u'2019'), (u'2020', u'2020'), (u'2021', u'2021'), (u'2022', u'2022'), (u'2023', u'2023'), (u'2024', u'2024'), (u'2025', u'2025'), ], option_widget=None, validators=[DataRequired()] ) term = SelectField( "Category:", validate_choice=True, coerce=str, choices=[ (u'event', u'event'), (u'gathering', u'gathering'), (u'work session', u'work session'), (u'workgroup', u'workgroup'), (u'performance', u'performance'), (u'music event', u'music event'), ], 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")