difficulty = RadioField('Difficulty:', \ choices=[('0', 'Beginner'), ('1', 'Easy'), ('2', 'Medium'), ('3', 'Challenging'), ('4', 'Hard'), ('5', 'Virtuoso')], \ validators = [DataRequired('Select one.')]) mtype = StringField('Musical Type[s]:', \ validators=[DataRequired('Comma-separated list of types. Must be in types list.'), type_val]) section = StringField('Section Name:', \ validators=[Optional('Optional. If present must start with a number, a period, and a space.'),section_val]) source = StringField('Source (name or library):', \ validators=[DataRequired('If a name, must be last name + 1st character of first name. If a library, must start with library siglum'), source_val]) document = StringField('Book or manuscript:', \ validators=[DataRequired('Should start with a call number, if any, then ":" then human readable name of document.'), Length(5, 40)]) volume = IntegerField('Volume # (if any):', \ validators = [Optional('1-99'), NumberRange(min=1, max=99)]) page = StringField('Page:', \ validators = [DataRequired('Where the piece starts, like p. 35, 35v, 35va, f. d3, d3v, d3vb'), page_val]) editor = StringField('Editor:', \ validators=[DataRequired(), Length(10, 40)]) encoder = StringField('Encoder:', \ validators=[DataRequired(), Length(10, 40)]) arranger = StringField('Arranger:', \ validators=[Optional(), Length(10, 40)]) contributor = StringField('Contributor:', \ validators=[Optional(), Length(10, 40)]) remarks = TextAreaField('Remarks:', \ validators=[Optional()]