from flask_wtf import FlaskForm from flask_wtf.file import FileAllowed, FileField, FileRequired, FileSize from wtforms import (IntegerField, SelectField, StringField, SubmitField, validators) from wtforms.validators import (DataRequired, Length, NumberRange, ValidationError) from app import settings 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.") def category_choices(): APP = settings() config_categories = APP.config["categories"] categories = [] for config_category in config_categories: categories.append((config_category, config_category)) return categories sitename = StringField( "Name of your archive section:", validators=[ validators.InputRequired(), Length(2, 100), distribusiname, ], ) year = SelectField( "Year:", validate_choice=True, coerce=str, choices=[ ("2017", "2017"), ("2018", "2018"), ("2019", "2019"), ("2020", "2020"), ("2021", "2021"), ("2022", "2022"), ("2023", "2023"), ("2024", "2024"), ("2025", "2025"), ], option_widget=None, validators=[DataRequired()], ) category = SelectField( "Category:", validate_choice=True, coerce=str, choices=category_choices, option_widget=None, validators=[DataRequired()], ) tags = StringField( "Add tags, seperated by commas. No need for the '#' sign:", validators=[validators.InputRequired(), Length(2, 500)], ) 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")