|
|
|
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")
|