m v%Gc @sdkZdklZdkZdkZdkZdkZdkZdkZdk Z dk Z dk Z dk Z dk lZdZdZdZdZdZdgZegZegZed gZed gZed gZd Zd ZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(eddddfe#dd fe"d!d"fe d#d$fe$d%d&d'fe%d(d)fe'd*d+fe(d,d-fe!d.d/fe&d0d1ff Z)d2Z*e+Z,e+Z-e, oe*e)\Z,Z-nd3Z.d4Z/d5Z0ei1d6Z2ei1d7Z3d8Z4ei1d9ei5Z6d:Z7d;Z8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@d<fd=YZAd>fd?YZBd@fdAYZCdBfdCYZDdDfdEYZEdFfdGYZFdHfdIYZGdJfdKYZHdLfdMYZIdNZJdOZKhdPeL<dQeM<dReL<dSeM<dTeL<dUeM<dVeL<dWeMs\[\[!s<%!s\[\[\\s<%\\s\[\[=s<%=s\[\[\.s<%\.s<%@s\[\[spys<%spys\[\[--s<%--s--\]\]s--%>s\[\[s<%s\]\]s%>cCsg}dg}xR|D]J}|d|d}}x,|D]$}|id||i|q8WqWt i |d}t i |t i |fS(Niis(%s)t|(tregexptNonet typelookupttokenstgroupttypet matchstringsRRRRtretcompiletM(RRRRRRR((Rt genTokensREcs cCsg}t|} d}d}} }} xr|| jodt i ||}y|i |i }}|||!|||!}}|o|it|||fnyt|i} WnRtj oF}d}x*|iD]}|oPn|d}qWt|} nX| tjo|d}t} n|i| |||f|}Wq-tj o=}||}|o|it||| fn| }q-Xq-Wd\}} g}x|D]\} }} }ti |d d}t|}||d}| } |djo d} n| t|d} |i| ||| f|| ff|ddjo|d}d} q|}| d} qW|S(Niiis (ii(#RtlenR tbuflentpostbrowtbcolterowtecolt RE_TOKENStsearchtmtstarttendtmstarttmendtotherttokenRtT_TEXTt TOKEN_TYPESt lastindexRtAttributeErrortetgroupstxtT_ESCttokens2ttexttbeginRtsplitRtnumlines(R R;R%R4R'R-R0R:R/RR<R&R(R#R$RR.R6R+R>R1R8R((Rt spyceTokenizessd           %  cCs]t|}y|d\}}}}Wn d}nX|itd||f|i|S(Niis(R?R Rt_R-RtT_EOFtreverse(R R-RR@((RtspyceTokenize4Parses   cCs;|d djo&titi|ddd}n|S(Nis#!s i(R RRR=(R ((Rt processMagics&s[a-zA-Z][-a-zA-Z0-9_:]*s]\s*([a-zA-Z_][-.:a-zA-Z_0-9]*)(\s*=\s*(\'[^\']*\'|"[^"]*"|[-a-zA-Z0-9./:;+*%?!&$\(\)_#=~]*))?cCsGh}ti|}|pdhfSnti||i }ti ||id}x|ot i|}|pPn|i ddd\}}}|p d}n^|d djo|djnp&|d djo|djno|dd!}n||ti|<||id}qcW||fS(s8Parse a Spyce directive into name and an attribute list.iiit'it"N(tattrstDIRECTIVE_NAMEtmatchR;RRtlowerR-tnametstriptDIRECTIVE_ATTRRtattrnametrestt attrvalue(R;RKRPRORNRGRI((RtparseDirectives( Ls< # beginning of tag (?P/?) # ending tag (?P[a-zA-Z][-.a-zA-Z0-9_]*): # lib name (?P[a-zA-Z][-.a-zA-Z0-9_]*) # tag name (?P(?:\s+ # attributes (?:[a-zA-Z_][-.:a-zA-Z0-9_]* # attribute name (?:\s*=\s* # value indicator (?:'[^']*' # LITA-enclosed value |"[^"]*" # LIT-enclosed value |[^'">\s]+ # bare value ) )? ) )*) \s* # trailing whitespace (?P/?) # single / unpaired tag >cCs|p dn|\}}d}|ddjo|d d}d}nti|d}|t|d}||jo d}n|t|dd}||d}}|od}|d}n||f||ffS(Ns empty stringiis t i( tstrR<tbeginrowtbegincolteolRR=RR"tendrowtendcol(R<RSRURRXRVRTRW((Rt calcEndPoss"     c Csd}d}||}h}x1|D])\} \} } \}} || || wscCs|\}}td||S(Ni(RtR tchr(t.0RtR ((RRxstii(RhRot replacelistRR=tmapRRyR%R&R'R(R;tfiletrowR tcbcolR"tcecoltrow2t classcodeRjRtCLASS_CODEPATH(RjRoRyRR'RRR&R(R RRR;RR%R((RtaddCodeIndentedos0     cCs |iitt||dS(N(RjR|RqRxtAST_TEXTR;Ry(RjR;Ry((RtaddTextscCs |iitt||dS(N(RjR|RqRxt AST_COMPACTtcompactRy(RjRRy((Rt addCompactscCs|ii|||fdS(N(RjR}Rtmodnametmodfromtmodas(RjRRR((Rt addModules(RvRwt__doc__RnRRRRRtTrueRRRRRRR(((RRz=s         t spyceParsecBstZdZdZdZdZdZdZdZdZ d Z d Z d Z d Z d ZdZdZdZdZddZdZdZdZdZdZRS(NcCs_|iitd|iid|iig|iit|iidt|iig|iit|od|}nd}|iidt|f|iidtdga |iit d d t |iit d d t |iit d |iid |iid |iit |iitd d t dS( NisXfrom spyceException import spyceDone, spyceRedirect, spyceRuntimeException, HandlerErrors class %s: {sself, Rjs def %s(%s): {stry:{tspymodiRs_handlers = {}s_forms_by_handler = {}(Rjt_astRtGLOBAL_CODEPATHRRt SPYCE_CLASStSPYCE_PROCESS_FUNCtsigtMODULES_CODEPATHtFalsetLOGIN_CODEPATHtHANDLER_CODEPATHtSPYCEPROCESS_CODEPATHtTAGLIB_CODEPATH(RjR((Rt initStandards* cCs|iit|iii}g|ii_|io6|iid|iid|i o|iid|iid|iid|iid|iid|iid|iid |iid |iid |iid |iid n|i oJ|iid|iid|iiii ||iid qnn|i or|iit |iid|iid|iid|iid|iid|iid|iid|iid|iid|iid|iid|iid|iid|iid|iid|iid|iid |iid!tio4|iid"|iid#|iid qn|iit|iid$|iid%|iid&|iid't|iid(|iid)|id*t|iid+|id*t|io4|iid,dd|iit|in|io|iid-ddndS(.Nsimport _coreutilsdrequest.login_id = lambda request=request, _coreutil=_coreutil: _coreutil.login_from_cookie(request)s%if _coreutil.login_pending(request):{s if self._login_validator:{s, from spyceCompile import _evalWithImports7 _validator = _evalWithImport(self._login_validator)s }else:{s import spyceConfigs3 _validator = spyceConfig.login_defaultvalidators }s: _login_id = _coreutil.login_perform(request, _validator)s: request.login_id = lambda _login_id=_login_id: _login_idt}sif not request.login_id():{s#taglib.load('core','core.py','spy')s_validation_error = {}sfor _key in request.getpost():{s! if _key.startswith('_submit'):{s _handlerid = _key[7:]s if _handlerid in _handlers:{s. from spyceCompile import _evalWithImports- for _handler in _handlers[_handlerid]:{s0 _f = _evalWithImport(_handler, locals())s. from spyceCompile import _marshallArgss3 _args, _kwargs = _marshallArgs(request, _f)s try:{s _f(*_args, **_kwargs)s# } except HandlerError, _e:{s2 _form_id = _forms_by_handler[_handlerid]s* _validation_error[_form_id] = _es }s breaks}}}}s!if '_handlerid' not in locals():{sH import spyce; spyce.DEBUG('(no active handlers to run for this form)')s} except spyceDone: passsexcept spyceRedirect: raisesexcept KeyboardInterrupt: raises*except:{ raise spyceRuntimeException(%s) }s}}s_has_parent = %rRms_login_validator = %rttaglibt spylambda(RjRRRR|Rltold_login_fragmentstfilenameRt_login_possiblet_login_requiredtextendt_call_handlersRtspycet DEBUG_ERRORRt SPYCE_WRAPPERt _has_parentRt_login_validatort _taglibs_usedRRRtaddLoadTaglibst_load_spylambda(RjR((RtfinishStandardsz       cCs'dga|iitddtdS(NRiR(RRjRRR(Rj((Rt initTaglibs cCs*|iidtdi|ifdS(Ns* class %s(spyceTagLibrary): tags = [%s] t,(RjRRt SPYCE_LIBNAMERt _tagsdefined(Rj((Rt finishTaglibscCs#|id7_|it|iS(Ni(Rjt _tagcountt _tagidprefixRS(Rj((Rt next_tagidscCsmxf|iD][}|ii|\}}|ii||ii dt |t |t |fq WdS(Nstaglib.load(%s, %s, %s)( RjRRRR~tlibnametlibfromt_tag_dependenciesRRtrepr(RjRRR((RRs  cCsyxd|_g|_d|_||_ti||_ t |_ t |_ t |_ t |_t |_t |_h|_g|_g|_ti|_||_tid|_|_titi|i!d |_"||_#|o"ti$i%|\|_|_n|ipti|_nti$i&|i|i|_'t(|_)xq|i*i+D]c}|i-|d|dd\} }| |i'joqfnt/|ddg} |i1| qfW|o|i2n|i3|t5t6||_7d|_8|i9|i:|io |id} t<d| n|o|i=n |i>|i i?WnYt<j oM}|iAo1|iA\}} }} || ||if|_An|nXdS(Nisiisunclosed opening brace '{'(FRRjt_current_form_idt _brace_stackRtservert_servertspyceTagtspyceTagCheckert _tagCheckerRRRRRRRRRRt spyceUtiltattrdictt _definingtagt gentaglibt _gentaglibtostgetcwdt_curdirt_curfiletbase64t encodestringtmd5R tdigestRRRmR=Rt_pathRzRtconfigt globaltagst tag_tuplet _findModuleRKRtargst addTaglibRRRRCRDt_tokenst _tokenTypetpopTokent processSpyceRytspyceSyntaxErrorRRtfinishR6tinfoR<R-R;R@(RjRR RRRR;R<RR-RyRRmR@RKR6((RRnsj              % "   #        cCsG|p |}n|ii|||||||f|ii |iR-tlibRKRGtsingleN(RjRRRthtmlR<R-Rt RE_LIB_TAGR*R+RtDEBUGR,tplainRYt plain_endt tag_beginRRRttagttag_endtprocessActiveTag( RjRR<RR-R+R RRR((RRs*$# & c Csp||||if}|io|i otd|n|i i i |p'|i |||d|ifdSntd|\}}|ii|i i |||} d} | idjo t|_no| idjot|_t} nL| idjo;|ip-|i|_|i id|i|qCn| id dgjo+t|_d |jo|d |_ qn|io|iotd n|p*|ii"|i i |||||n!|ii$|i i |||||i%i&|hjo t'}nt}t|i%||<| p| oA| i)djo4d} d |jotd ||f|qn||i} h} x1| i)i,D] \}}| |} || | n|i idt8|t8|t8| t8|t8|f|| |i id|| | i9o|i id|| n| i:o|i id|| n|i id|| | i;o|i id|| n| i<o|i id|| n| i=o8|i id|| |i iddd|| qn|p| o| i<o|i id|| n|i id|| | i;o|i id || n|i id!|| | i:o|i id|| n| i9o|i id"|| n|i id#|| ndS($s Process HTML and Spyce tags tagend: true if tag starts with s:active tag used outside of tag definition in tagcollections Nsx t tag_parentttag_login_requiredt form_forms_current_form_id = %rt tag_logint validators@login tags may not currently be used in user-defined Active TagsRshandler cannot apply to this "%s:%s" tag; handlers may only be assigned to tags that have a 'handlers' list, such as the form library's submit tagt=sPhandler attribute may not be evaluated at runtime (i.e., may not start with '=')Rs_handlers[%r] = %rRms_forms_by_handler[%r] = %ris,taglib.tagPush(%s, %s, %s, locals(), %s, %s)stry: {sif taglib.tagBegin(): {staglib.tagBegin()s while 1: {s _tagexports = taglib.tagExport()sfor _tagkey in _tagexports: {s3exec("%s = _tagexports['%s']" % (_tagkey, _tagkey))Rs if not taglib.tagBody(): break }staglib.tagBody()s} finally: taglib.tagEnd()staglib.tagEnd()s} except: taglib.tagCatch()s} finally: taglib.tagPop()(>R<R-RRjRRyRRRRR~thas_keyRRRQttagattrsR@Rt getTagClassttagnamettagclassRRRvRRRRRRRRRttagendtstartTagttagpairtendTagRt setdefaultRtfirstusethandlersttagidt allhandlerstitemstsubidt subhandlerstfullidR[R=RrRRRtcreftaddChunkRtcatchest conditionaltmustendtloopstexports(RjRR!RRRR#R<R-R R-R(RR)R.R,R&RrR@RyR+((RRs"    "     !         '  =          cCs|i}|id}xt|ittgjo]|itjo||i }n/|it jo||i }n |i |iqWt i|}|p|i n|ii|||id||ifdS(NRR(RjRR<RtexprRtT_ENDRAR2RtT_LAMBDAt processLambdaRRRLRRRR(RjR5R<((RRs   c sii\}}d}xittgjolit jo|i }n/it jo|i }n i i\} }iq"Wti|pi n|} ti|d}x|D]}| |jo |}nd}| | jo |} n t|} ti|}|o}| |f| | f|ifd} ytit|i| Wnti j onXi!i"|n| d} qWdS(NRs icst|tijo`|djoiiqp|djo.iptdnii qpndS(Nt{Rsextra close brace '}'( RR1tOPRRjRRRyRR(RRR<R-tline(RyRj(RtbraceTokenEaterEs   i(#RjRRRTRUtstmtRR6RAR2RR7R8RRRWRXRRLtcurrowR=RR t curcolbegint curcolendR"RRyR<R^R R t TokenErrorRR( RjRUR?RyRRXR=R RTR@R<RWR>((RjRyRR,sD     !icCs|i|i}d}x}|ittgjof|itjo||i }n/|it jo||i }n |i |i }|iqW|||i|if}|io<|iptd|n|o||i_dSqn|o|i|||ndS(NRs@tagcollection code chunks may only appear inside tag definitions(RjRRR<tchunkRR6RAR2RR7R8RRR-RLRRyRRRt classChunkRR/(RjRCR<R-RyRB((RRTs*        cCs|\}}} } ti|d}|\} }x;|o3ti |d o|d}| d} d}q3W| |f}|p|i nt |dt ti|d}xLtt |D]8}ti ||| od|||||||ii&d|||ii&d |||ii&d!|i7i<|d"|jo[t;|d"oJ|i7i<otd#|n|ii&d$||ii&d%|n'|ii&d$||ii&d&|d'|jot;|d'|i7_?|ii@|d(d)tAn|d*jo|i7ptd+|n|id ptd|n|d }d,|jo!|i7ii>||d,fqj |i7ii>|n|d-jo|id.ptd/|n|i7i<otd0|nd|jo|d}n |d.}|i7i9i>|d.|fnU|d1jo|i7ptd2|n|iCo#|ii%d3ddtA|_Cnd4} |i7iiE| g}xO|i7iD]A}|d5d5|d5jo|i>d6|q|i>|qW|i7i?o|i>d7ndiH|}|od|}n|iiJ|i7id(g|ii&d8|||i7i<o|ii&d9||ii&d:|x|i7iD]}|d5d5|d5jo|\}}|ii&d;||ii&d<||f||ii&d=||ii&d>||f||ii&d?|q|ii&d@||f|qWnx+tLiMD] }|ii&dA||fqh WxR|iiOD]D\}}}|ii&dB|tR|tR|tR|f|q W|iiSt,g|i_O|iTo*|ii&dC||iUh|_Tn|i7i8o*|ii&dD||ii&dE|n|iiJgx7|i7i9D])\} }|ii&dF| | f|q W|ii&d?||i7i9o|ii&dG||ii&dH|g}x1|i7i9D]#\} }|i>dI|| fq W|ii&dJdiH||ii&d?|n|i7i:o'|ii&dKtR|i7i:|n|ii&dLtR|i7i8||ii&d?|tWiX|_7n|dMjok|idNptdO|ntWiY|dNtZi4iH|i[|i}d}y9zt^|}|i_}Wd|o|ianXWn/tbj o ntdP||nX|i[|i|ic|i|i |i|i f} tZi4ie|||_[|_tftg||_c|i|ih| \|_[|_|_c|_|_ |_|_ ntdQ|dS(TNRRtmodetoffR;tspacetfulls&invalid compacting mode "%s" specifiedstmoduletimportRKtnamess name or names attribute requiredRs %s.init()tfromtasRs %s.init(%s)Rs0at least one of {name, from} attributes requiredsDCompiled active tag may not reference other tags in the same libraryt tagcollectionsKtagcollection directive may only be used in a dedicated tag collection fileR<sCbegin directive may only be used in a dedicated tag collection files9cannot nest begin directives; expected end for "%s" firstsname attribute requiredtbufferssclass %s(spyceTagPlus):{s name = '%s's buffer = %st singletons0Buffer option is exclusive with singleton optionsdef syntax(self):{sself.syntaxSingleOnly()}sself.syntaxPairOnly()}tkwattrstBeginRtattrs&attr found, but no corresponding begintdefaulttexporttvarsvar attribute requireds'buffering tags may not export variablesR-s%end found, but no corresponding beginRcCstt|tt|tS(N(tcmpRptattupletb(R\R^((Rtattrsortsis%s='%s's**kwargssdef begin(self%s):{spass}sdef body(self, _content):{stry:{s %s = self._attrs['%s']s} except KeyError: {s %s = '%s'Rs%s = self._attrs['%s']s%s = self._api.getModule('%s')s'%s = self._api._startModule(%s, %s, %s)s)taglib = self._api.getModules()['taglib']sif not self.getParent('form'):{sY raise 'active handlers may not be used without a parent form active tag, i.e., f:form'}s self.%s = %ss exports = 1sdef export(self):{s '%s': self.%ss return {%s}sclasscode = %ss handlers = %stincludeRsfile attribute missings unable to open included file: %ssinvalid spyce directive(smodulesimport(staglib(iRjRR<Rt directiveRR6RAR2RRRR-RRLRRyRQRKRGt COMPACT_FULLt compact_modeRRJRIt COMPACT_OFFt COMPACT_LINEt COMPACT_SPACERRRtfilterRRR=t mod_namestmod_nameRRtgettmod_fromtmod_astmod_argsttheNameRRt taglib_namet taglib_fromt taglib_asRRRRmRRRR'R4RRgtbufferRRRURRtexportasRR_tsortRrRWRRRRXRtDEFAULT_MODULESRR}RRRRRRRZRRturl2fileRRRR topentreadR tclosetKeyboardInterruptRtprevtdirnameRCRDR(!RjRpRGRWRRR-RaRkR_RlRiRZR{RyRoRsRhR<RrRmRcR RRKRmRR RXRRIRnRq((RRs             & "+  $ "!            # #    !    !          %  .       !   '# + 0  4cCs|i|i}d}d}x|itjo|itgjo'|d}|pPn||i }ni|it t t t ttgjo|d}||i }n,|itjo|in||i }|i}|iq"Wti|d}yV|d}d}|o%|ddjo|d}d}nti|dd}Wn%td||||ifnXt|_dti| | |f}|S(NRit:it!sinvalid spyce lambdasspylambda.define(%s,%s,%d)(RjRRR<tlambRsRRAR6RtT_EVALtT_STMTtT_CHUNKtT_CHUNKCtT_DIRECTR7tT_CMNTRRR-RR=tparamstmemoizeRRRRRRL(RjRRR-R<RsR((RR8[s@   "      " cCs2td|i|i|i|i|ifdS(Nsunexpected token: "%s"(RRjRRRR(Rj((RR}s (RvRwRRRRRRRnRRRRRRRRRRRR/RRR8R(((RRs. ! S     A        |  (    "t spyceOptimizecBs,tZdZdZdZdZRS(NcCs|i||i|dS(N(Rjt compactiontasttsideBySideWrites(RjR((RRns c Cs|i} d} x| t| jood}t| | to|i | | n3| | i t jo| | i o| | i }| | i \\}} \}} }}ti|d}|tjot|djo| | =|}x|D]}d}t|}||jo | }n||jo | } n| i| ||tt |||f||f||f|d}qWqn| |} qWdS(Niis (RRltnodesRGR"RRpRiRjtsplitCodeLinesRRRyRoR%R&R'R(RRR=RR;R RRtbecoltinsertRx(RjRRoRR%RRR'RRR&R(RRGRR ((RRs2 " %    <cCs|i}d}x|t|jot||to|i||nh|dt|joPt||dt o8||i ||i ||i }}} ||di ||di ||di } } } d}d}| o| \}}}}n| o| \}}}}n|tjo| tjov||joi|| }| \} }}}| \}}}}t t|| |||f||<||d=|d8}qn|d7}qWdS(Nii(RRlRRGR"RpRiRjRRxRRoRyttype1ttext1tref1ttype2ttext2tref2Rtfile1tfile2R@RR;R<torigR-(RjRRRR;RRR-RRR<RRRRR@RG((RRs. /)5' " cCs-|i}t}d}x|t|jot||to|i ||n||i ||i ||i }}} |tjo |}n|tjoY|tjp |tjoti|d}x5tt|dD]}ti||||ti|d}|o|d}n|ti|7}n| t#jo d}n|d8}qxW|pRti|d}|o#ti|d o|d}nti|d}n| \} \}} } }ti|d}|oti|d}n|}|} |d}x |t|jo| ot||to||i ||i ||i } }} | o| \\}} } } } n||jp || joPn| tjo>ti|d}|o|d}n|ti|7}n| t#jo d}n|d7}q7W|pJti|d}|oti|d|dConvert Python with braces into indented (normal) Python code.cCs.t||_d|_d|_d|_dS(Ni(RRRjtprevnamet prevstringt dictlevel(RjR((RRnxs  cCsF|tijoP|io|iidn|io|iidn|ii|n|ti jo?|io|iidnt | }|ii|nQ|ti jo2|io|iidn|ii|n|ti jo|djoJ|i o|i o|iiq|id|_|ii|q|djo?|ip|iiq|id|_|ii|q|ii|nH|tijo'|tdjo|iidn|ii||tij|_|ti j|_|ti jo |dj|_ dS(NRRR9iRiR}(RR1tNAMERjRRRRRRZRgtNUMBERR:t prevcolonRRRt ERRORTOKENR(RjRR((Rt emitToken}sB        #(RvRwRRnR(((RRvs  c Cst|}h}t|} || ||d}ytit|i |WnFti j o7}|\}\}}td||||fnX|S(Nc Csy|\} }|i} y|i||Wn#t d|t i fnX|i} |i| o,x)t| | D]} || ||