;ò ¢„fCc@sŒdklZlZlZlZdkZdklZdkZdeifd„ƒYZ dei fd„ƒYZ de fd„ƒYZ d e fd „ƒYZ d eie fd „ƒYZd eie fd„ƒYZdeie fd„ƒYZdeie fd„ƒYZdeie fd„ƒYZdeifd„ƒYZdeie fd„ƒYZdeie fd„ƒYZdeie fd„ƒYZdeie fd„ƒYZdeie fd „ƒYZd!eie fd"„ƒYZd#eifd$„ƒYZ d%ei!e fd&„ƒYZ"d'ei#e fd(„ƒYZ$d)ei%fd*„ƒYZ&d+ei%fd,„ƒYZ'd-ei(e fd.„ƒYZ(dS(/(sparsersformsfieldsstagsN(sMembers MemberMixincBs tZeiZeZd„ZRS(NcCsti|ƒSdS(N(sMembersloadskey(sselfshandlerskey((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pys getRecord s(s__name__s __module__sMembersIDKEYsKEYs datamodels DATAMODELs getRecord(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pys MemberMixin s s MemberFormcBstZd„ZRS(NcCs|iƒidƒdS(Nstest.cgi(shandlersreqsredirect(sselfshandlerscdata((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pysgoNexts(s__name__s __module__sgoNext(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pys MemberFormssNewFormcBstZd„ZRS(NcCsC|i|ƒ}t|}|iƒtiƒi ||dƒdS(NsmemberId( sselfs prepareDatashandlersdatasMembersmemberssaveslogins LoginLogoutslogIn(sselfshandlerscdatasmembersdata((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pyssubmits  (s__name__s __module__ssubmit(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pysNewFormssEditFormcBstZd„ZRS(NcCsI|i|ƒ}ti|tiƒ}|i|i|ƒƒ|i ƒdS(N( sselfs prepareDatashandlersdatasMembersloadsIDKEYsmembersupdatessave(sselfshandlerscdatasmembersdata((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pyssubmits(s__name__s __module__ssubmit(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pysEditFormss NameInputcBstZRS(N(s__name__s __module__(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pys NameInput%ss EmailInputcBstZRS(N(s__name__s __module__(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pys EmailInput&ss StateSelectcBstZRS(N(s__name__s __module__(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pys StateSelect'ssZipInputcBstZRS(N(s__name__s __module__(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pysZipInput(ss MemberIdInputcBstZRS(N(s__name__s __module__(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pys MemberIdInput)ss PasswordGroupcBstZRS(N(s__name__s __module__(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pys PasswordGroup*ss PasswordInputcBstZRS(N(s__name__s __module__(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pys PasswordInput+ssPasswordConfirmInputcBstZRS(N(s__name__s __module__(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pysPasswordConfirmInput,ssOscBstZRS(N(s__name__s __module__(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pysOs-ss OsCheckBoxcBstZRS(N(s__name__s __module__(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pys OsCheckBox.ssSpamcBstZRS(N(s__name__s __module__(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pysSpam/ss SpamRadiocBstZRS(N(s__name__s __module__(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pys SpamRadio0ss JoinUpSubmitcBstZRS(N(s__name__s __module__(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pys JoinUpSubmit1ssMessageTextAreacBstZRS(N(s__name__s __module__(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pysMessageTextArea2ss PhotoFilecBstZRS(N(s__name__s __module__(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pys PhotoFile3ss MyAccountcBs tZdZdZdd„ZRS(s5 if user is logged in shows welcome with link to editsWelcomescCsQtiƒi|ƒ}|o-|iƒid|iƒ}d||fSndSdS(Nswelcomes1%ss( slogins LoginLogoutsgetLoginshandlersusersselfsgetAttrssgetsWELCOMEswelcome(sselfshandlerscdataswelcomesuser((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pys__call__9s (s__name__s __module__s__doc__sWELCOMEs__call__(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pys MyAccount6s sSecuritycBstZd„Zd„ZRS(NcCs/|i|ƒodSn|iƒidƒdS(Nsstest.cgi?action=login(sselfscheckshandlersreqsredirect(sselfshandlerscdata((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pys__call__AscCs2tiƒi|ƒ}||iƒidƒjSdS(NsmemberId(slogins LoginLogoutsgetLoginshandlersusersreqsgetInput(sselfshandlersuser((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pyscheckGs(s__name__s __module__s__call__scheck(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pysSecurity@s sListcBstZd„Zd„ZRS(NcCstiiƒSdS(s! must return a list of somethingsN(sMembersLOADERsfetch(sselfshandlerslinespageSize((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pysfetchOsc Cs¶|iƒiddddd|dƒ|d%sslistszipsstates"%(memberId)sN(shandlersreqs serviceUrisrecord(sselfshandlersrecord((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pys prepareRowSs ,::(s__name__s __module__sfetchs prepareRow(((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pysListNs ()spsosparsersformsfieldsstagsslogins datamodelsMembers DataMixins MemberMixinsForms MemberFormsNewFormsEditFormsInputs NameInputs EmailInputs StateSelectsZipInputs UserIdInputs MemberIdInputs PasswordGroups PasswordInputsPasswordConfirmInputsOptionssOssCheckBoxs OsCheckBoxsSpamsRadios SpamRadiosSubmits JoinUpSubmitsTextAreasMessageTextAreasFiles PhotoFilesTags MyAccountsSecuritysList(sSpamsparsers PhotoFilesMembers OsCheckBoxsMessageTextAreas PasswordGroupsNewForms MemberMixins NameInputs JoinUpSubmits StateSelectsformstagssLists EmailInputs MemberIdInputsZipInputs PasswordInputsSecuritysOssEditFormsfieldss MyAccounts MemberFormsPasswordConfirmInputs SpamRadioslogins datamodel((s5/home/groups/p/ps/pso/htdocs/tutorial/Lists/member.pys?s2