o 1ce@sdddlmZmZmZmZddlmZddlmZm Z ddl Z ee Z e dZee _e e Zee ZddlmZmZmZmZmZddlmZmZmZmZmZGdd d Zd d Zd d Z ddZ!ddZ"ddZ#ddZ$GdddeZ%e j&dddgdddZ'ddZ(d d!Z)e *d"d#d$Z+e *d%d&d'Z,d(dZ"d)d*Z-e d+kre j.d,d-dSdS).)Flaskrender_templateredirecturl_for) Bootstrap5) FlaskForm CSRFProtectN) StringField SubmitField TextAreaField IntegerField RadioField) InputRequiredLength NumberRangeOptionalRegexpc@s eZdZdddZdddZdS)KeyValNcCs ||_dSN)message)selfrr/mnt/d/website/ft3form/fron.py__init__s zKeyVal.__init__cCst|js tddS)Nz2Key name must be [A-F] + [b#] + [Mm]. Eg EbM or Gm)is_a_keydataValidationError)rformfieldrrrr__call__s zKeyVal.__call__r)__name__ __module__ __qualname__rr rrrrrs rcCdSrrrrrrr ensemble_valr&cCr$rrr%rrrtype_valr'r(cCr$rrr%rrr source_valr'r)cCr$rrr%rrrname_valr'r*cCr$rrr%rrrpage_val"r'r+cCr$rrr%rrr section_val%r'r,c@seZdZedeegdZedeeddgdZede eddgdZ ed ee gdZ ed e gdZ ed eegdZed gd egdZedeegdZedegdZedeegdZedeeddgdZede edddgdZedeegdZedeeddgdZedeeddgdZede eddgdZ ede eddgdZ!e"de gdZ#e$dZ%dS) FronFormzKey:) validatorszTitle:(z Subtitle:<z Composer:zOriginal Composer:z Ensemble:z Difficulty:))0Beginner)1Easy)2Medium)3 Challenging)4Hard)5Virtuoso)choicesr.zMusical Type[s]:z Section Name:zSource (name or library):zBook or manuscript:zVolume # (if any):c)minmaxzPage:zEditor: zEncoder:z Arranger:z Contributor:zRemarks:SubmitN)&r!r"r#r rrmkeyrtitlersubtitler*composeroriginal_composerr&ensembler difficultyr(mtyper,sectionr)sourcedocumentr rvolumer+pageeditorencoderarranger contributorr remarksr submitrrrrr-+sr  r-/GETPOST)methodscCsLt}d|j_d}|rd}t|stdntstdtd||dS)Nz6-coursez"Data accepted for form.title.data.z#Cannot fill fronimo file from form.zCannot save fronimo file.zindex_fron.htmlrr)r-rKdefaultvalidate_on_submit fill_fronimoprint save_fronimorr^rrrindexTs rdcCdSNTr)rrrrracr'racCrerfrrrrrrcfr'rccC tddfS)Nz404.htmlrgrerrrpage_not_foundi rlcCrh)Nz500.htmlrnrirjrrrinternal_server_errormrmrocCsttdt|jdS)NzYour input is ) set_tracerbrr%rrrr*qscCsT|ddvrdStjddvrdStjddvr(ttjdks&tjdd vr(dSd S) Nr)ABCDEFFr1)b#Mm)rxrwr/)rzryT)rrlen)stInrrrrws r__main__T)debug)/flaskrrrrflask_bootstrapr flask_wtfrrsecretsr!app token_urlsafefoo secret_keycsrf bootstrapwtformsr r r r rwtforms.validatorsrrrrrrr&r(r)r*r+r,r-routerdrarc errorhandlerrlrorrunrrrrs@  )