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`  4h^c@s4dZddlZddlmZdddYZdddYZddd YZd dd YZd d d YZdd!dYZ dd"dYZ dd#dYZ dd$dYZ dd%dYZ yddlZWnek r dZnXdd&dYZdd'dYZdS((s;$Id: producers.py,v 1.9 2004/04/21 13:56:28 akuchling Exp $iN(tfind_prefix_at_endtsimple_producercBs#eZdZddZdZRS(sproducer for a stringicCs||_||_dS(N(tdatat buffer_size(tselfRR((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyt__init__s cCsYt|j|jkr?|j|j }|j|j|_|S|j}d|_|SdS(Nt(tlenRR(Rtresult((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pytmores  (t__name__t __module__t__doc__RR (((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyRs tscanning_producercBs#eZdZddZdZRS(s:like simple_producer, but more efficient for large stringsicCs||_||_d|_dS(Ni(RRtpos(RRR((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyR#s  cCsu|jt|jkrm|j}tt|j|j|j}|j||!}|jt||_|SdSdS(NR(RRRtminR(RtlptrpR((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyR (s  (R R R RR (((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyR !s tlines_producercBs eZdZdZdZRS(sproducer for a list of linescCs ||_dS(N(tlines(RR((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyR8scCs?|jr7|jd }|jd|_dj|dSdSdS(Ni2s R(Rtjoin(Rtchunk((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyR ;s   (R R R RR (((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyR5s tbuffer_list_producercBs eZdZdZdZRS(sproducer for a list of stringscCsd|_||_dS(Ni(tindextbuffers(RR((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyRHs cCsD|jt|jkrdS|j|j}|jd|_|SdS(NRi(RRR(RR((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyR Ls (R R R RR (((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyRCs t file_producercBs&eZdZdZdZdZRS(s(producer wrapper for file[-like] objectsiicCsd|_||_dS(Ni(tdonetfile(RR((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyRZs cCsP|jr dS|jj|j}|sH|jj|`d|_dS|SdS(NRi(RRtreadtout_buffer_sizetclose(RR((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyR ^s   i(R R R RRR (((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyRTs toutput_producercBsMeZdZdZdZdZdZdZdZdZ RS(s;Acts like an output file; suitable for capturing sys.stdoutcCs d|_dS(NR(R(R((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyRtscCs2|jd}dj|}|j||_dS(Ns s (tsplitRR(RRR((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pytwritewscCs|j|d|_dS(Ns (R(Rtline((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyt writeline|scCs!|jdj|d|_dS(Ns (RR(RR((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyt writelinesscCsdS(N((R((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pytflushscGsdS(N((Rtargs((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyt softspacescCs2|jr*|jd }|jd|_|SdSdS(NiR(R(RR((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyR s   ( R R R RR!R#R$R%R'R (((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyRrs      tcomposite_producercBs eZdZdZdZRS(s$combine a fifo of producers into onecCs ||_dS(N(t producers(RR)((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyRscCsQxJt|jrH|jd}|j}|r5|S|jjdqWdSdS(NiR(RR)R tpop(Rtptd((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyR s  (R R R RR (((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyR(s tglobbing_producercBs#eZdZddZdZRS(s 'glob' the output from a producer into a particular buffer size. helps reduce the number of calls to send(). [this appears to gain about 30% performance on requests to a single channel] iicCs||_d|_||_dS(NR(tproducertbufferR(RR.R((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyRs  cCs^xEt|j|jkrG|jj}|rC|j||_qPqW|j}d|_|S(NR(RR/RR.R (RRtr((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyR s  i(R R R RR (((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyR-s thooked_producercBs eZdZdZdZRS(s A producer that will call when it empties,. with an argument of the number of bytes produced. Useful for logging/instrumentation purposes. cCs||_||_d|_dS(Ni(R.tfunctiontbytes(RR.R2((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyRs  cCs\|jrT|jj}|s:d|_|j|jn|jt||_|SdSdS(NR(R.R tNoneR2R3R(RR((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyR s  (R R R RR (((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyR1s tchunked_producercBs#eZdZddZdZRS(s'A producer that implements the 'chunked' transfer coding for HTTP/1.1. Here is a sample usage: request['Transfer-Encoding'] = 'chunked' request.push ( producers.chunked_producer (your_producer) ) request.done() cCs||_||_dS(N(R.tfooters(RR.R6((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyRs cCsn|jrf|jj}|r2dt||fSd|_|jr_djdg|jdSdSndSdS(Ns%x %s s t0s s0 R(R.R RR4R6R(RR((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyR s   N(R R R R4RR (((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyR5s tcompressed_producercBs#eZdZddZdZRS(s: Compress another producer on-the-fly, using ZLIB icCs||_tj||_dS(N(R.tzlibt compressobjt compressor(RR.tlevel((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyRs cCse|jr]d}xG|sX|jj}|sCd|_|jjS|jj|}qW|SdSdS(NR(R.R R4R;R%tcompress(RtcdataR((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyR s    (R R R RR (((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyR8s tescaping_producercBs&eZdZdddZdZRS(s0A producer that escapes a sequence of characterss .s ..cCs1||_||_||_d|_t|_dS(NR(R.tesc_fromtesc_toR/R(RR.R@RA((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyRs     cCs|j}|j}|j|jj}|r|j||}|j||}|ro|| |_|| Sd|_|Sn|SdS(NR(R@RAR/R.R treplaceR(RR@RAR/ti((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyR &s    (R R R RR (((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyR?s(((((((((((((tRCS_IDtstringtasynchatRRR RRRRR(R-R1R5R9t ImportErrorR4R8R?(((s?/usr/lib/python2.7/site-packages/supervisor/medusa/producers.pyts$