from flask import Flask, render_template, redirect, url_for from flask_bootstrap import Bootstrap5 from flask_wtf import FlaskForm, CSRFProtect from wtforms import (StringField, SubmitField, TextAreaField, IntegerField, RadioField) from wtforms.validators import InputRequired, Length, NumberRange, Optional, Regexp, ValidationError, InputRequired, DataRequired from vals import * import secrets # these will come from account data my_enc_first = 'Sarge' my_enc_last = 'Gerbode' my_ed_first = 'Sarge' my_ed_last = 'Gerbode' myeditor = my_ed_first + ' ' + my_ed_last myencoder = my_enc_first + ' ' + my_enc_last my_dir = my_enc_last.lower() + my_enc_first.upper() class FronForm(FlaskForm): myname = TextAreaField('Your full name (first and last names)', \ default = 'template', validators=[Length(2, 40), name_val]) inputfile = TextAreaField('File to edit (.ft3 ending optional):', \ default = '', validators=[Length(0, 60), input_val]) title = StringField('Title:',\ default = 'my title', validators=[InputRequired(), Length(3, 40)]) subtitle = StringField('Subtitle:',\ default = 'my subtitle', validators=[Optional(), Length(3, 40)]) composer = StringField('Composer:',\ default = 'Thomas Robinson', validators=[InputRequired(), Length(2,40)]) orig_composer = StringField('Original composer (optional):', \ default = 'John Dowland', validators=[Optional(), Length(2,40)]) ensemble = StringField('Ensemble (comma-separated list of instruments or voices):', \ default = '6-course, soprano', validators=[InputRequired(), ensemble_val]) part = StringField('Part ("score", or comma-separated list of instruments or voices):', \ default = 'score', validators=[InputRequired(), ensemble_val]) mkey = StringField('Comma-separated list of keys, like Abm, EM:', \ default = 'Fm', validators=[InputRequired(), key_val]) difficulty = RadioField('Difficulty (choose one):', \ choices=[('0', 'Beginner'), ('1', 'Easy'), ('2', 'Medium'), ('3', 'Challenging'), ('4', 'Hard'), ('5', 'Virtuoso')], \ default = 2, validators = [InputRequired()]) mtype = StringField('Musical Type[s]: Comma separated list, like pavane, galliard', \ default = 'pavane, galliard', validators=[InputRequired(), type_val]) source = StringField('Source: Name, or if a MS, library siglum + : + library name[s]', \ default = 'GB-Lbl: British Library',validators=[InputRequired(), source_val]) document = StringField('Document: If a book, the title; if a ms, call sign (if any) + : + ms name', \ default = "ms.4.5:Foo MS", validators=[InputRequired(), Length(5, 40)]) volume = IntegerField('Volume # (if any):', \ default = 2, validators = [Optional(), NumberRange(min=1, max=99)]) page = StringField('Comma-separated list of pages, like 13, 14v, b3v, 15b (2nd piece starting on p. 15)', \ default = 'cc4vb', validators = [InputRequired(), page_val]) section = StringField('Section Name (optional): Must start with a number + . + space, like 12. Galliard', \ default = "123. Section", validators=[ Optional(), section_val]) editor = StringField('Editor:', \ default = myeditor, validators=[InputRequired(), Length(10, 40)]) encoder = StringField('Encoder:', \ default = myencoder, validators=[InputRequired(), Length(10, 40)]) intabulator = StringField('Intabulator:', \ default = 'my intabulator', validators=[InputRequired(), Length(10, 40)]) arranger = StringField('Arranger (optional):', \ default = 'my arranger', validators=[Optional(), Length(10, 40)]) contributor = StringField('Contributor (optional):', \ default = 'my contributor', validators=[Optional(), Length(10, 40)]) remarks = TextAreaField('Remarks: (optional)', \ default = 'my remarks', validators=[Optional()]) outputfile = StringField('File to write this to:', \ default = '', validators=[Length(0, 60), output_val]) submit = SubmitField('Submit') btn_cancel = SubmitField(label='Cancel', render_kw={'formnovalidate': True})