datasaur/site/surveyapp/graphs/forms.py
2026-01-25 15:56:01 +00:00

65 lines
3.5 KiB
Python

from flask_wtf import FlaskForm
# from flask_wtf.file import FileField, FileAllowed
from wtforms import Form, StringField, SubmitField, SelectField, BooleanField, IntegerField, FormField, FieldList
from wtforms.validators import DataRequired, NumberRange
# Form used for pie charts and bar charts
class BarPieForm(FlaskForm):
title = StringField(validators=[DataRequired()])
# We will append variables to x/y axis choices based on the data
x_axis = SelectField("Choose a variable:", choices=[("", " -- select an option -- ")])
# Bar chart will default to "Amount" on y axis. Will also append all numerical variable types from the data set.
y_axis = SelectField("Choose a variable:", choices=[("Amount", "Amount")])
y_axis_agg = SelectField("Aggregation:", choices=[("Average", "Average"), ("Highest", "Highest"), ("Lowest", "Lowest"), ("Sum", "Sum")])
submit = SubmitField("Save to dashboard")
# Scatter charts form needs x-axis and y-axis variables, as well as possible ranges
class ScatterchartForm(FlaskForm):
title = StringField(validators=[DataRequired()])
# We will append variables to x/y axis choices based on the data
x_axis = SelectField("Choose a variable:", choices=[("", " -- select an option -- ")])
x_axis_from = IntegerField("From")
x_axis_to = IntegerField("To")
# Bar chart will default to "Amount" on y axis. Will also append all numerical variable types from the data set.
y_axis = SelectField("Choose a variable:", choices=[("", " -- select an option -- ")])
y_axis_from = IntegerField("From")
y_axis_to = IntegerField("To")
line = BooleanField("Add connecting line: ")
submit = SubmitField("Save to dashboard")
# Histograms only need x-axis variable. However they also need a range and also group size
class HistogramForm(FlaskForm):
title = StringField(validators=[DataRequired()])
# We will append variables to x/y axis choices based on the data
x_axis = SelectField("Choose a variable:", choices=[("", " -- select an option -- ")])
x_axis_from = IntegerField("From")
x_axis_to = IntegerField("To")
group_count = IntegerField("Number of groups")
submit = SubmitField("Save to dashboard")
class MapForm(FlaskForm):
title = StringField(validators=[DataRequired()])
variable = SelectField("Choose a variable:", choices=[("", " -- select an option -- ")])
scope = SelectField("Choose a scope:", choices=[("World", "World"), ("Europe", "Europe"), ("Africa", "Africa"), ("South America", "South America"), ("Asia", "Asia"), ("Australia/Oceania", "Australia/Oceania"), ("North America", "North America"), ("United States of America", "United States of America")])
submit = SubmitField("Save to dashboard")
# Form used for box and whisker plots
class BoxForm(FlaskForm):
title = StringField(validators=[DataRequired()])
# We will append variables to x/y axis choices based on the data
# The x-axis is optional in a box-whisker plot. Users can select it if they want
# to see distribution over a particular group of respondents
x_axis = SelectField("Choose a variable:", choices=[("", " -- optional -- ")])
# Unlike with bar charts, the y-axis will not have an 'Amount'. It instead must
# be a numerical type data from the users data
y_axis = SelectField("Choose a variable:", choices=[("", " -- select an option -- ")])
submit = SubmitField("Save to dashboard")
# FileAllowed([".xls", ".xlt", ".xla", ".xlsx", ".xltx", ".xlsb", ".xlsm", ".xltm", ".xlam", ".csv"], message="Only CSV files or Excel Spreadsheets allowed.")