Rc @sKdZddlmZddlmZmZddlmZmZm Z m Z m Z m Z m Z ddlmZmZmZddlmZmZmZmZmZmZmZmZddd d d d d ddddddg ZeZdZeZdZ dZ!d(d(d(d(dZ#defdYZ$defdYZ%y!ddl&m'Z'e'j(e%Wne)k rnXdefdYZ*defdYZ+edefd YZ,d efd!YZ-ed"efd#YZ.ed$e.fd%YZ/ed&e.fd'YZ0e.`1e/`1e0`1d(S()s} jinja2.runtime ~~~~~~~~~~~~~~ Runtime helpers. :copyright: (c) 2010 by the Jinja Team. :license: BSD. i(tchain(t EvalContextt_context_function_types(tMarkupt soft_unicodetescapetmissingtconcatt internalcodetobject_type_repr(tUndefinedErrortTemplateRuntimeErrortTemplateNotFound(tnexttimapt text_typet iteritemstimplements_iteratortimplements_to_stringt string_typestPY2t LoopContexttTemplateReferencetMacroRR RRRt markup_joint unicode_joint to_stringtidentityR cCs|S(N((tx((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyt scCshg}tt|}xF|D]>}|j|t|drtdjt||SqWt|S(s@Concatenation that escapes if necessary and converts to unicode.t__html__u(RRtappendthasattrRtjoinRR(tseqtbuftiteratortarg((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR%s   cCsttt|S(s4Simple args to unicode conversion and concatenation.(RRR(R"((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR0sc Cs|dkri}n|r$|}nt|p0d|}|r|rTt|}nxJt|D]9\}} |d dkra| tk ra| ||d(t __class__t__name__R5R:(R6((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyt__repr__Ss (R=t __module__t__doc__R8R;R>(((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyRIs  R)cBseZdZdZd Zd Zdd Zd Zd Z dZ e dZ ddZ dZedZedZedZeredZedZedZn[dZdZdZRS(sThe template context holds the variables of a template. It stores the values passed to the template and also the names the template exports. Creating instances is neither supported nor useful as it's created automatically at various stages of the template evaluation and should not be created by hand. The context is immutable. Modifications on :attr:`parent` **must not** happen and modifications on :attr:`vars` are allowed from generated template code only. Template filters and global functions marked as :func:`contextfunction`\s get the active context passed as first argument and are allowed to access the context read-only. The template context supports read only dict operations (`get`, `keys`, `values`, `items`, `iterkeys`, `itervalues`, `iteritems`, `__getitem__`, `__contains__`). Additionally there is a :meth:`resolve` method that doesn't fail with a `KeyError` but returns an :class:`Undefined` object for missing variables. R1R-R*teval_ctxt exported_varsR:R,t __weakref__cCsh||_i|_||_t|j||_t|_||_tdt |D|_ dS(Ncss$|]\}}||gfVqdS(N((t.0tktv((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pys {s( R1R-R*RRAtsetRBR:R(RR,(R6R*R1R:R,((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR8ps     cCsjy,|j|}|j|d}||Wn(tk rV|jjd|ddSXt||||S(sRender a parent block.is#there is no parent block called %r.R:tsuper(R,tindext LookupErrorR*t undefinedR9(R6R:tcurrentR,RI((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyRH}s    cCs%y ||SWntk r |SXdS(sfReturns an item from the template context, if it doesn't exist `default` is returned. N(tKeyError(R6R2tdefault((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pytgets  cCsG||jkr|j|S||jkr4|j|S|jjd|S(sLooks up a variable like `__getitem__` or `get` but returns an :class:`Undefined` object with the name of the name looked up. R:(R-R1R*RK(R6R2((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pytresolves   cstfdjDS(s+Get a new dict with the exported variables.c3s"|]}|j|fVqdS(N(R-(RDRE(R6(s2/usr/lib/python2.7/site-packages/jinja2/runtime.pys s(R(RB(R6((R6s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyt get_exportedscCst|j|jS(s`Return a copy of the complete context as dict including the exported variables. (R(R1R-(R6((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pytget_allscOs|j}x'dD]}t||r|}PqqWt|trt|ddrd|f|}qt|ddr|jf|}qt|ddr|jf|}qny|||SWntk r|jjdSXdS(sCall the callable with the arguments and keyword arguments provided but inject the active context or environment as first argument if the callable is a :func:`contextfunction` or :func:`environmentfunction`. tcontextfunctiontevalcontextfunctiontenvironmentfunctionisGvalue was undefined because a callable raised a StopIteration exceptionN(RSRTRU( t__call__R t isinstanceRtgetattrRAR*t StopIterationRK(t_Context__selft _Context__objtargstkwargstfntfn_type((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pytcalls$   cCsmt|j|ji|jtd|}|jj|j|j|_|j jdt |j D|S(s5Internal helper function to create a derived context.css'|]\}}|t|fVqdS(N(tlist(RDRERF((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pys sN( R4R*R:R1tTrueR'R-tupdateRAR,R(R6R0R7((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pytderiveds  #cs1fd}ttj|_|_|S(Ncst|jS(N(RXRR(R6(tmeth(s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyRs(RXR(R@R=(Retproxy((Res2/usr/lib/python2.7/site-packages/jinja2/runtime.pyt_alls tkeystvaluestitemstiterkeyst itervaluesRcCs||jkp||jkS(N(R-R1(R6R:((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyt __contains__scCs1|j|}t|tr-t|n|S(sTLookup a variable or raise `KeyError` if the variable is undefined. (RPRWt UndefinedRM(R6R2titem((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR;scCs&d|jjt|j|jfS(Ns <%s %s of %r>(R<R=treprRRR:(R6((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR>s (sparentsvarss environmentseval_ctxs exported_varssnamesblockss __weakref__N(R=R?R@t __slots__R8RHR'RORPRQRRRR`RdRgRhRiRjRRkRlRRmR;R>(((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR)Zs.  !        (tMappingR9cBs5eZdZdZedZedZRS(s"One block on a template reference.cCs(||_||_||_||_dS(N(R:t_contextt_stackt_depth(R6R:R7tstacktdepth((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR8s   cCs_|jdt|jkr<|jjjd|jddSt|j|j|j|jdS(sSuper the block.is#there is no parent block called %r.R:RH(RutlenRtRsR*RKR:R9(R6((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyRHs  cCsAt|j|j|j}|jjjr=t|}n|S(N(RRtRuRsRAt autoescapeR(R6trv((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyRVs(R=R?R@R8tpropertyRHRRV(((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR9s  cBseZdZdddZdZedZedZedZ edZ edZ ed Z d Z d Zd Zed ZeZ[edZdZRS(s%A loop context for dynamic iteration.icCsst||_||_|j|_d|_||_yt||_Wn t t fk rnd|_nXdS(Ni( titert _iteratort_recurset _safe_nextt_aftertindex0tdepth0Rxt_lengtht TypeErrortAttributeErrorR'(R6titerabletrecurseR((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR8s   cGs*|stdn||jt|S(s7Cycles among the arguments with the current loop index.sno items for cycling given(RRRx(R6R\((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pytcycle+scCs |jdkS(Ni(R(R((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR1scCs |jtkS(N(Rt_last_iteration(R((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR2scCs |jdS(Ni(R(R((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR3scCs|j|jS(N(tlengthR(R((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR4scCs|j|jS(N(RRI(R((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR5scCs |jdS(Ni(R(R((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR6scCs|jS(N(R(R6((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyt__len__8scCs t|S(N(tLoopContextIterator(R6((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyt__iter__;scCs*yt|jSWntk r%tSXdS(N(R R}RYR(R6((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR>s cCs;|jdkrtdn|j||j|jdS(NsMTried to call non recursive loop. Maybe you forgot the 'recursive' modifier.i(R~R'RR(R6R((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pytloopDscCsQ|jdkrJt|j}t||_t||jd|_n|jS(Ni(RR'ttupleR}R|RxR(R6R((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyRPs cCsd|jj|j|jfS(Ns <%s %r/%r>(R<R=RIR(R6((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR>\s N(R=R?R@R'R8RR{tfirsttlastRItrevindext revindex0RwRRRRRRVRR>(((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyRs"      RcBs/eZdZdZdZdZdZRS(s The iterator for a loop context.R7cCs ||_dS(N(R7(R6R7((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR8iscCs|S(N((R6((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyRlscCsU|j}|jd7_|jtkr3tn|j}|j|_||fS(Ni(R7RRRRYR(R6tctxt next_elem((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyt__next__os   (scontext(R=R?R@RqR8RR(((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyRds   cBs/eZdZdZedZdZRS(sWraps a macro function.c Cs[||_||_t||_||_||_||_||_||_||_ dS(N( t _environmentt_funcRxt_argument_countR:t argumentstdefaultst catch_kwargst catch_varargstcaller( R6R*tfuncR:RRRRR((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR8|s       c Ost||j }t|}||jkrxt|jt|D]\}}y|j|}Wn]tk ry|j||j|}Wqtk r|j j d|d|}qXnX|j |qHWn|j r-|jdd}|dkr|j j ddd}n|j |n|jrF|j |n.|rttd|jtt|fn|jr|j ||jn:t||jkrtd|jt|jfn|j|S(Nsparameter %r was not providedR:RsNo caller defineds%macro %r takes no keyword argument %rs+macro %r takes not more than %d argument(s)(RaRRxt enumerateRtpopRMRt IndexErrorRRKRRR'RRR:R R|RR( R6R\R]RtofftidxR:R3R((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyRVs< &       " cCs2d|jj|jdkr!dp-t|jfS(Ns<%s %s>t anonymous(R<R=R:R'Rp(R6((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR>s (R=R?R@R8RRVR>(((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyRys *RncBseZdZdZdededZedZ edZ e Z Z Z ZZZZZZZZZZZZZZZZZZZ Z!Z"Z#dZ$d Z%d Z&d Z'd Z(d Z)dZ*dZ+RS(sVThe default undefined type. This undefined type can be printed and iterated over, but every other access will raise an :exc:`UndefinedError`: >>> foo = Undefined(name='foo') >>> str(foo) '' >>> not foo True >>> foo + 42 Traceback (most recent call last): ... UndefinedError: 'foo' is undefined t_undefined_hintt_undefined_objt_undefined_namet_undefined_exceptioncCs(||_||_||_||_dS(N(RRRR(R6thinttobjR:texc((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR8s   cOs|jdkr~|jtkr.d|j}qt|jts_dt|j|jf}qdt|j|jf}n |j}|j|dS(siRegular callback function for undefined objects that raises an `UndefinedError` on call. s%r is undefineds%s has no element %rs%r has no attribute %rN( RR'RRRRWRR R(R6R\R]R((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyt_fail_with_undefined_errors   cCs)|d dkrt|n|jS(Nit__(RR(R6R:((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyt __getattr__scCst|t|kS(N(ttype(R6tother((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyt__eq__scCs|j| S(N(R(R6R((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyt__ne__scCstt|S(N(tidR(R6((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyt__hash__scCsdS(Nu((R6((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyt__str__scCsdS(Ni((R6((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyRsccsdS(N((R6((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyRscCstS(N(tFalse(R6((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyt __nonzero__scCsdS(NRn((R6((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR> s(s_undefined_hints_undefined_objs_undefined_names_undefined_exceptionN(,R=R?R@RqR'RR R8RRRt__add__t__radd__t__mul__t__rmul__t__div__t__rdiv__t __truediv__t __rtruediv__t __floordiv__t __rfloordiv__t__mod__t__rmod__t__pos__t__neg__RVR;t__lt__t__le__t__gt__t__ge__t__int__t __float__t __complex__t__pow__t__rpow__RRRRRRRR>(((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyRns f       tDebugUndefinedcBseZdZdZdZRS(sAn undefined that returns the debug info when printed. >>> foo = DebugUndefined(name='foo') >>> str(foo) '{{ foo }}' >>> not foo True >>> foo + 42 Traceback (most recent call last): ... UndefinedError: 'foo' is undefined cCsN|jdkrC|jtkr)d|jSdt|j|jfSd|jS(Nu{{ %s }}s{{ no such element: %s[%r] }}u!{{ undefined value printed: %s }}(RR'RRRR (R6((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyRs   ((R=R?R@RqR(((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyRs tStrictUndefinedcBs9eZdZdZejZZZZ Z Z Z Z RS(s=An undefined that barks on print and iteration as well as boolean tests and all kinds of comparisons. In other words: you can do nothing with it except checking if it's defined using the `defined` test. >>> foo = StrictUndefined(name='foo') >>> str(foo) Traceback (most recent call last): ... UndefinedError: 'foo' is undefined >>> not foo Traceback (most recent call last): ... UndefinedError: 'foo' is undefined >>> foo + 42 Traceback (most recent call last): ... UndefinedError: 'foo' is undefined ((R=R?R@RqRnRRRRRRRt__bool__R(((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyR)sN(2R@t itertoolsRt jinja2.nodesRRt jinja2.utilsRRRRRRR tjinja2.exceptionsR R R tjinja2._compatR RRRRRRRt__all__RRtobjectRRRR'R4RR)t collectionsRrtregistert ImportErrorR9RRRRnRRRq(((s2/usr/lib/python2.7/site-packages/jinja2/runtime.pyt sF4:        L@T