from flask_wtf import FlaskForm from wtforms import StringField, FileField, validators from wtforms.validators import InputRequired, DataRequired from wtforms import FieldList from wtforms import Form as NoCsrfForm from wtforms.fields import StringField, FormField, SubmitField, SelectField, RadioField from app.models import Book, BookSchema, Author, Stack, StackSchema from wtforms.fields.html5 import DecimalRangeField # - - - Forms - - - class AuthorForm(NoCsrfForm): # this forms is never exposed so we can user the non CSRF version author_name = StringField('Author Name', validators=[DataRequired()]) class UploadForm(FlaskForm): title = StringField('title', validators=[InputRequired()]) author = FieldList(FormField(AuthorForm, default=lambda: Author()), min_entries=1) category = StringField('category', validators=[InputRequired()]) year_published = StringField('year published', [validators.Length(max=4)],default=None) file = FileField() upload = SubmitField(label='Upload') wish = SubmitField(label='''I don't have the file, but wish I did.''') message = StringField('message', default=None) sameness = DecimalRangeField('sameness', default=0) diversity = DecimalRangeField('diversity', default=0) gender = DecimalRangeField('gender', default=50) choices = [('Student', 'Student'), ('Librarian', 'Librarian'), ('Pirate', 'Pirate'), ('Teacher', 'Teacher'), ('Institution', 'Institution'), ('All of the above', 'All of the above'), ('None of the above', 'None of the above')] who = SelectField('', choices=choices, default='Student') class EditForm(FlaskForm): title = StringField('title', validators=[InputRequired()]) author = FieldList(FormField(AuthorForm, default=lambda: Author()), min_entries=1) category = StringField('category', validators=[InputRequired()]) year_published = StringField('year published', [validators.Length(max=4)],default=None) file = FileField() message = StringField('message') sameness = DecimalRangeField('sameness', default=0) diversity = DecimalRangeField('diversity', default=0) gender = DecimalRangeField('gender', default=50) choices = [('Student', 'Student'), ('Librarian', 'Librarian'), ('Pirate', 'Pirate'), ('Teacher', 'Teacher'), ('Institution', 'Institution'), ('All of the above', 'All of the above'), ('None of the above', 'None of the above')] who = SelectField('', choices=choices, default='Student') class ChatForm(FlaskForm): message = StringField('message', validators=[InputRequired()]) send = SubmitField(label='Send') class StackForm(FlaskForm): stack_name = StringField('Stack', validators=[InputRequired()]) stack_description = StringField('Description', validators=[InputRequired()]) stack_author = StringField('Who made this', validators=[InputRequired()]) create = SubmitField(label='Create') class AddtoStackForm(FlaskForm): select_stack = SelectField('Stacks', validators=[InputRequired()]) class EditStackForm(FlaskForm): edit_stack_name = StringField('Stack', validators=[InputRequired()]) edit_stack_description = StringField('Description', validators=[InputRequired()]) class SearchForm(FlaskForm): choices = [('All', 'All'), ('Title', 'Title'), ('Author', 'Author'), ('Category', 'Category'), ('Stack', 'Stack'), ('Outliers', 'Outliers')] select = SelectField('', choices=choices, default='All') search = StringField('', validators=[InputRequired()]) grid = SubmitField('Grid') listview = SubmitField('List') randomize = SubmitField('Order differently')