PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  aNc@s)dZddlmZddlZdgZddgZdefdYZdefd YZ defd YZ de fd YZ d efd YZ de fdYZde fdYZdefdYZde fdYZdefdYZdZee_dS(s Middleware to make internal requests and forward requests internally. When applied, several keys are added to the environment that will allow you to trigger recursive redirects and forwards. paste.recursive.include: When you call ``environ['paste.recursive.include'](new_path_info)`` a response will be returned. The response has a ``body`` attribute, a ``status`` attribute, and a ``headers`` attribute. paste.recursive.script_name: The ``SCRIPT_NAME`` at the point that recursive lives. Only paths underneath this path can be redirected to. paste.recursive.old_path_info: A list of previous ``PATH_INFO`` values from previous redirects. Raise ``ForwardRequestException(new_path_info)`` to do a forward (aborting the current request). i(tStringIONtRecursiveMiddlewaretForwardRequestExceptiont RecursionLoopcBseZdZRS(s*Raised when a recursion enters into a loop(t__name__t __module__t__doc__(((s3/usr/lib/python2.7/site-packages/paste/recursive.pyR stCheckForRecursionMiddlewarecBseZdZdZRS(cCs||_||_dS(N(tapptenv(tselfRR ((s3/usr/lib/python2.7/site-packages/paste/recursive.pyt__init__%s cCs|jdd}||jjdgkrMtd||jdfn|jjdg}|j|jjdd|j||S(Nt PATH_INFOtspaste.recursive.old_path_infosGForwarding loop detected; %r visited twice (internal redirect path: %s)(tgetR Rt setdefaulttappendR(R tenvirontstart_responset path_infot old_path_info((s3/usr/lib/python2.7/site-packages/paste/recursive.pyt__call__)s (RRR R(((s3/usr/lib/python2.7/site-packages/paste/recursive.pyR$s cBs#eZdZddZdZRS(s} A WSGI middleware that allows for recursive and forwarded calls. All these calls go to the same 'application', but presumably that application acts differently with different URLs. The forwarded URLs must be relative to this container. Interface is entirely through the ``paste.recursive.forward`` and ``paste.recursive.include`` environmental keys. cCs ||_dS(N(t application(R Rt global_conf((s3/usr/lib/python2.7/site-packages/paste/recursive.pyR AscCst|j|||djdd|d<jdd|d<|j||S(NR!iR it QUERY_STRING(tsplitR(R RR(turl(s3/usr/lib/python2.7/site-packages/paste/recursive.pyRs(RRR((R)(s3/usr/lib/python2.7/site-packages/paste/recursive.pyR&s((RR&(R"R)(s3/usr/lib/python2.7/site-packages/paste/recursive.pyR%scs&dffdY}||S(NtEnvironForwardcseZfdZRS(cs|j|S(N(R(R tenviron_R(R(s3/usr/lib/python2.7/site-packages/paste/recursive.pyRs(RRR((R(s3/usr/lib/python2.7/site-packages/paste/recursive.pyR*s((RR*(R"R(s3/usr/lib/python2.7/site-packages/paste/recursive.pyR%s( t TypeErrortwarningstwarntDeprecationWarningRtstrtobjectthasattrR(R R)RRRR%((R"RR$R)s3/usr/lib/python2.7/site-packages/paste/recursive.pyR s<              N(RRRR R (((s3/usr/lib/python2.7/site-packages/paste/recursive.pyRZs Pt RecursivecBs/eZdZddZdZdZRS(cCs.||_|j|_||_||_dS(N(Rtcopytoriginal_environtprevious_environR(R RRR((s3/usr/lib/python2.7/site-packages/paste/recursive.pyR s  cCs|jj}|r%|j|n|j|d<|jjd}|jdrj|t|d}nd|}||dRR7(t __class__RRR5R(R ((s3/usr/lib/python2.7/site-packages/paste/recursive.pyt__repr__s  N(RRR R RR@RF(((s3/usr/lib/python2.7/site-packages/paste/recursive.pyR3s   RcBseZdZdZRS(s  The forwarder will try to restart the request, except with the new `path` (replacing ``PATH_INFO`` in the request). It must not be called after and headers have been returned. It returns an iterator that must be returned back up the call stack, so it must be used like: .. code-block:: python return environ['paste.recursive.forward'](path) Meaningful transformations cannot be done, since headers are sent directly to the server and cannot be inspected or rewritten. cCs&tjdtd|j||jS(NsKrecursive.Forwarder has been deprecated; please use ForwardRequestExceptioni(R-R.R/RR(R R((s3/usr/lib/python2.7/site-packages/paste/recursive.pyR@.s (RRRR@(((s3/usr/lib/python2.7/site-packages/paste/recursive.pyRsRcBseZdZdZRS(s Starts another request with the given path and adding or overwriting any values in the `extra_environ` dictionary. Returns an IncludeResponse object. cs}tdfd}|j||}z"x|D]}j|q7WWdt|drn|jnXjS(Ncs:|r!|d|d|dn|_|_jS(Niii(tstatustheaderstwrite(RGRHtexc_info(tresponse(s3/usr/lib/python2.7/site-packages/paste/recursive.pyR@s   tclose(tIncludedResponseR RRIR2RL(R RRtapp_iterts((RKs3/usr/lib/python2.7/site-packages/paste/recursive.pyR@>s   (RRRR@(((s3/usr/lib/python2.7/site-packages/paste/recursive.pyR6sRMcBsAeZdZdZdZdZdZeeZRS(cCs+d|_d|_t|_d|_dS(N(R RHRGRtoutputR0(R ((s3/usr/lib/python2.7/site-packages/paste/recursive.pyR Rs   cCs,|jj|_|jjd|_dS(N(RPtgetvalueR0RLR (R ((s3/usr/lib/python2.7/site-packages/paste/recursive.pyRLXs cCs|jj|dS(N(RPRI(R RO((s3/usr/lib/python2.7/site-packages/paste/recursive.pyRI]scCs|jS(N(tbody(R ((s3/usr/lib/python2.7/site-packages/paste/recursive.pyt__str__cscCs'|jdkr|jjS|jSdS(N(R0R RPRQ(R ((s3/usr/lib/python2.7/site-packages/paste/recursive.pyt body__getfs ( RRR RLRIRSRTtpropertyRR(((s3/usr/lib/python2.7/site-packages/paste/recursive.pyRMPs      RcBseZdZdZRS(sk Like Includer, but just stores the app_iter response (be sure to call close on the response!) cs:tdfd}|j||}|_S(Ncs:|r!|d|d|dn|_|_jS(Niii(RGRHRI(RGRHRJ(RK(s3/usr/lib/python2.7/site-packages/paste/recursive.pyRvs   (tIncludedAppIterResponseR RRN(R RRRN((RKs3/usr/lib/python2.7/site-packages/paste/recursive.pyR@ts   (RRRR@(((s3/usr/lib/python2.7/site-packages/paste/recursive.pyRnsRVcBs#eZdZdZdZRS(cCs1d|_d|_g|_d|_t|_dS(N(R RGRHt accumulatedRNtFalset_closed(R ((s3/usr/lib/python2.7/site-packages/paste/recursive.pyR s     cCs&t|jdr"|jjndS(NRL(R2RNRL(R ((s3/usr/lib/python2.7/site-packages/paste/recursive.pyRLscCs|jjdS(N(RWR(R RO((s3/usr/lib/python2.7/site-packages/paste/recursive.pyRIs(RRR RLRI(((s3/usr/lib/python2.7/site-packages/paste/recursive.pyRVs  cCs t|S(N(R(RR((s3/usr/lib/python2.7/site-packages/paste/recursive.pytmake_recursive_middlewares(Rt cStringIORR-t__all__t __pudge_all__tAssertionErrorRR1RRt ExceptionRR3RRRMRRVRZ(((s3/usr/lib/python2.7/site-packages/paste/recursive.pyts    %*