Mc@sdZddlmZddlmZmZddlZejrkeddddgZej d Z n$edddgZej d Z y)ddl Z ej e ddl Z Wn7ek rdZ dd lmZdd lmZnXd dZe rhde jfdYZde jfdYZde jfdYZdefdYZnqdefdYZdefdYZdefdYZdefdYZdejfdYZdS(syHandles parsing of Python code. Parsing to AST is done via _ast on Python > 2.5, otherwise the compiler module is used. i(tStringIO(t exceptionstutilNtTruetFalsetNonetprinttargtid(tparse(tvisitortexeccKsyNtrtj|d|St|tr@|jdd}nt||SWn?tk r}tj d|j j ||dd!f|nXdS(sParse an expression into ASTs tasciitbackslashreplaces (%s) %s (%r)ii2N( t_astt _ast_utilR t isinstancetunicodetencodetcompiler_parset ExceptionRtSyntaxExceptiont __class__t__name__(tcodetmodetexception_kwargste((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyR +s tFindIdentifierscBseZdZdZdZdZejr?dZndZ dZ dZ dZ d Z d Zd ZRS( cKs1t|_t|_i|_||_||_dS(N(Rt in_functiontin_assign_targetstlocal_ident_stacktlistenerR(tselfR R((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt__init__Bs     cCs#|js|jjj|ndS(N(RR tdeclared_identifierstadd(R!tname((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt _add_declaredIs cCs|j|jdS(N(R&R%(R!tnode((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pytvisit_ClassDefMscCsP|j|j|j}t|_x|jD]}|j|q,W||_dS(N(tvisittvalueRRttargets(R!R'tin_atn((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visit_AssignPs   cCsr|jdk r"|j|jn|jdk rM|jjj|jjnx|jD]}|j |qWWdS(N( R%RR&ttypeR tundeclared_identifiersR$RtbodyR)(R!R't statement((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pytvisit_ExceptHandlerbs cGs|j|tdS(N(t_visit_functionR(R!R'targs((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visit_LambdajscCs$|j|j|j|tdS(N(R&R%R4R(R!R'((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pytvisit_FunctionDefmscCsi}|j}t|_xO|jjD]A}t||jkrSt|t| import , , ...' instead.(RERFRR&R%RtCompileExceptionR(R!R'R%((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pytvisit_ImportFroms(Rt __module__R"R&R(R.Rtpy3kR3R6R7R4R?RCRHRK(((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyR@s          t FindTuplecBseZdZdZRS(cKs||_||_||_dS(N(R Rt code_factory(R!R ROR((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyR"s  cCsx|jD]}|j||j}|jjj||jjjt|j|jj j |j |j_ |jj j |j |j_ q WdS(N( teltsRORR tcodeargstappendR5tExpressionGeneratorR*R#tunionR0(R!R'R-tp((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visit_Tuples  (RRLR"RV(((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyRNs t ParseFunccBseZdZdZRS(cKs||_||_dS(N(R R(R!R R((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyR"s cCs|j|j_g|jjD]}t|^q}|jjrV|j|jjn|jjrx|j|jjn||j_|jj |j_ |jj|j_ |jj|j_ dS(N( R%R tfuncnameR5R8tvarargRRtkwargtargnamestdefaultstvarargstkwargs(R!R'RR[((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyR7s%   (RRLR"R7(((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyRWs RScBseZdZdZRS(cCs&tjd|_|jj|dS(Nt is (RtSourceGeneratort generatorR)(R!tastnode((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyR"scCsdj|jjS(Nt(tjoinRatresult(R!((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyR*s(RRLR"R*(((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyRSs cBs}eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d ZRS( cKs(t|_i|_||_||_dS(N(RRRR R(R!R R((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyR"s   cCs#|js|jjj|ndS(N(RR R#R$(R!R%((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyR&s cGs|j|jdS(N(R&R%(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visitClassscGs|j|jdS(N(R&R%(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visitAssNamescGs;|j|j|x!|jD]}|j||qWdS(N(R)texprtnodes(R!R'R5R-((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visitAssignscGs|j||dS(N(R4(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visitLambdascGs$|j|j|j||dS(N(R&R%R4(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visitFunctionscCsi}|j}t|_x:|jD]/}||jkrDt|| import , , ...' instead.(RERR&RRJR(R!R'R5RrRs((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visitFrom2s  cCstj||dS(N(R twalk(R!Rh((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyR)?s(RRLR"R&RfRgRjRkRlR4RpRqRtRuR)(((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyRs           cBs#eZdZdZdZRS(cKs||_||_||_dS(N(R RRO(R!R ROR((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyR"Es  cGsx|jD]}|j||j}|jjj||jjjt|j|jj j |j |j_ |jj j |j |j_ q WdS(N( RiRORR RQRRR5RSR*R#RTR0(R!R'R5R-RU((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visitTupleJs cCstj||dS(N(R Rv(R!Rh((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyR)Ts(RRLR"RwR)(((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyRNCs  cBs#eZdZdZdZRS(cKs||_||_dS(N(R R(R!R R((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyR"Zs cGsO|j|j_|j|j_|j|j_|j|j_|j|j_dS(N(R%R RXR[R\R]R^(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyRl^s cCstj||dS(N(R Rv(R!Rh((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyR)es(RRLR"RlR)(((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyRWXs  cBs%eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!RS( sMgiven an AST node, generates an equivalent literal Python expression.cCs t|_tj||dS(N(RtbufR Rv(R!Rb((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyR"ns cCs |jjS(N(Rxtgetvalue(R!((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyR*rscGs^|jjd|j|j||jjd||j|j||jjddS(Nt(s %s t)(RxtwriteR)tlefttright(R!topR'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pytoperatorus cGsX|j|jdx=|jdD].}|jjd|d|j||q"WdS(NiiR_(R)RiRxR|(R!RR'R5R-((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt booleanop|scGs|jjt|jdS(N(RxR|treprR*(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visitConstscGs|jj|jdS(N(RxR|R%(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyRgscGs|jj|jdS(N(RxR|R%(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyRqscGs|jd||dS(NRI(R(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pytvisitMulscGs|jd||dS(Ntand(R(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pytvisitAndscGs|jd||dS(Ntor(R(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pytvisitOrscGs|jd||dS(Nt&(R(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visitBitandscGs|jd||dS(Nt|(R(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visitBitorscGs|jd||dS(Nt^(R(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visitBitxorscGs|jd||dS(Nt+(R(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pytvisitAddscGs.|j|j||jjd|jdS(Ns.%s(R)RhRxR|tattrname(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visitGetattrscGs|jd||dS(Nt-(R(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pytvisitSubscGs$|jjd|j|jdS(Nsnot (RxR|R)Rh(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pytvisitNotscGs|jd||dS(Nt/(R(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pytvisitDivscGs|jd||dS(Ns//(R(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visitFloorDivscGsW|j|j|jjdg|jD]}|j|^q*|jjddS(Nt[t](R)RhRxR|tsubs(R!R'R5tx((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pytvisitSubscripts#cGs$|jjd|j|jdS(NR(RxR|R)Rh(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visitUnarySubscGs$|jjd|j|jdS(NR(RxR|R)Rh(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visitUnaryAddscGs|j|j|jjd|jdk rB|j|jn|jjd|jdk rt|j|jn|jjddS(NRt:R(R)RhRxR|tlowerRtupper(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visitSlicescCs|jjd|j}xtdt|dD]e}|j|||jjd|j||d|t|dkr5|jjdq5q5W|jjddS(Nt{iis: is, t}(RxR|t getChildrentrangetlenR)(R!R'tcti((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visitDicts cCs|jjd|j}xWtdt|D]@}|j|||t|dkr2|jjdq2q2W|jjddS(NRziis, R{(RxR|RRRR)(R!R'RR((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyRws cCs|jjd|j}xWtdt|D]@}|j|||t|dkr2|jjdq2q2W|jjddS(NRiis, R(RxR|RRRR)(R!R'RR((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visitLists cCse|jjd|j|j|jjdx|jD]}|j|q:W|jjddS(NRR_R(RxR|R)Rhtquals(R!R'R-((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visitListComps cCse|jjd|j|j|jjd|j|jx|jD]}|j|qJWdS(Ns for s in (RxR|R)RoRntifs(R!R'R-((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pytvisitListCompFors cCs$|jjd|j|jdS(Ns if (RxR|R)ttest(R!R'((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pytvisitListCompIfscCsM|j|jx6|jD]+}|jj|d|j|dqWdS(Nii(R)RhtopsRxR|(R!R'ttup((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visitComparescGs|j|j|jjdt|jr{|j|jdx5|jdD]#}|jjd|j|qQWn|jjddS(NRziis, R{(R)R'RxR|RR5(R!R'R5ta((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt visitCallFuncs("RRLt__doc__R"R*RRRRgRqRRRRRRRRRRRRRRRRRRwRRRRRR(((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyRSis@                          twalkercBseZdZRS(cGs%dGt|GHtjj|||S(NsNode:(tstrR t ASTVisitortdispatch(R!R'R5((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyRs(RRLR(((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyRs(RRtmakoRRRRMtsetRBt attrgetterR8Rt restore__astRt ImportErrorRtcompilerR RR t NodeVisitorRRNRWtobjectRSRR(((s3/usr/lib/python2.7/vendor-packages/mako/pyparser.pyt s6      s `