100 lines
3.5 KiB
Python
100 lines
3.5 KiB
Python
from typing import Dict, List
|
|
|
|
from dataclasses import dataclass
|
|
from flask_wtf import FlaskForm
|
|
from wtforms import (
|
|
DateField,
|
|
TimeField,
|
|
StringField,
|
|
SubmitField,
|
|
BooleanField,
|
|
DecimalField,
|
|
SelectField,
|
|
SelectMultipleField,
|
|
HiddenField,
|
|
FieldList,
|
|
FormField,
|
|
)
|
|
from wtforms.validators import DataRequired, Optional
|
|
|
|
from estusshots import choices
|
|
|
|
|
|
@dataclass
|
|
class GenericFormModel:
|
|
page_title: str
|
|
form_title: str
|
|
post_url: str
|
|
errors: Dict[str, List[str]] = None
|
|
|
|
|
|
class SeasonForm(FlaskForm):
|
|
season_id = HiddenField("Season ID", render_kw={"readonly": True})
|
|
code = StringField("Season Code", validators=[DataRequired()])
|
|
game_name = StringField("Game Name", validators=[DataRequired()])
|
|
description = StringField("Season Description")
|
|
start = DateField("Season Start", format="%Y-%m-%d", validators=[DataRequired()])
|
|
end = DateField("Season End", format="%Y-%m-%d", validators=[Optional()])
|
|
submit_button = SubmitField("Submit")
|
|
|
|
|
|
class EpisodeForm(FlaskForm):
|
|
season_id = HiddenField("Season ID", render_kw={"readonly": True})
|
|
episode_id = HiddenField("Episode ID", render_kw={"readonly": True})
|
|
code = StringField("Episode Code", validators=[DataRequired()])
|
|
title = StringField("Title", validators=[DataRequired()])
|
|
date = DateField("Episode Date", format="%Y-%m-%d", validators=[DataRequired()])
|
|
start = TimeField("Start Time", format="%H:%M", validators=[DataRequired()])
|
|
end = TimeField("End Time", format="%H:%M", validators=[DataRequired()])
|
|
players = SelectMultipleField(
|
|
"Players", coerce=int, choices=choices.PlayerChoiceIterable()
|
|
)
|
|
submit_button = SubmitField("Submit")
|
|
|
|
|
|
class PlayerForm(FlaskForm):
|
|
player_id = HiddenField("Player ID", render_kw={"readonly": True})
|
|
real_name = StringField("Real Name")
|
|
alias = StringField("Player Alias", validators=[DataRequired()])
|
|
hex_id = StringField("Hex ID")
|
|
anonymize = BooleanField("Anonymize (Show only player alias)")
|
|
submit_button = SubmitField("Submit")
|
|
|
|
|
|
class DrinkForm(FlaskForm):
|
|
drink_id = HiddenField("Drink ID", render_kw={"readonly": True})
|
|
name = StringField("Name", validators=[DataRequired()])
|
|
vol = DecimalField("Alcohol %", validators=[DataRequired()])
|
|
submit_button = SubmitField("Submit")
|
|
|
|
|
|
class EnemyForm(FlaskForm):
|
|
enemy_id = HiddenField("Enemy ID", render_kw={"readonly": True})
|
|
season_id = SelectField(
|
|
"Season", choices=choices.SeasonChoiceIterable(), coerce=int
|
|
)
|
|
name = StringField("Name", validators=[DataRequired()])
|
|
is_boss = BooleanField("Is Boss")
|
|
submit_button = SubmitField("Submit")
|
|
submit_continue_button = SubmitField("Submit and Continue")
|
|
|
|
|
|
class PenaltyFrom(FlaskForm):
|
|
penalty_id = HiddenField("Penalty ID")
|
|
player_id = HiddenField("Player ID")
|
|
player = HiddenField("Player")
|
|
drink = SelectField("Drink", choices=choices.DrinkChoiceIterable(), coerce=int)
|
|
|
|
|
|
class EventForm(FlaskForm):
|
|
event_id = HiddenField("Event ID")
|
|
episode_id = HiddenField("Episode ID")
|
|
event_type = SelectField(
|
|
"Type", choices=choices.EventChoiceIterable(), coerce=int)
|
|
time = TimeField("Time", format="%H:%M", validators=[DataRequired()])
|
|
player = SelectField("Player", choices=choices.PlayerChoiceIterable(), coerce=int)
|
|
enemy = SelectField("Enemy", coerce=int)
|
|
comment = StringField("Comment")
|
|
penalties = FieldList(FormField(PenaltyFrom))
|
|
submit_button = SubmitField("Submit")
|