distribusi-verse/verse/forms/uploadform.py

75 lines
2.2 KiB
Python

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)
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,
],
)
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=[
("event", "event"),
("gathering", "gathering"),
("work session", "work session"),
("workgroup", "workgroup"),
("performance", "performance"),
("music event", "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)],
)
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")