- ;cs\dZdkZdfdYZ dfdYZ4dfdYZEdfd YZWd fd YZud fd YZdfdYZdfdYZ dfdYZ dfdYZ ydk Z Wne j o eZ nX dfdYZ,dfdYZdS(s7$Id: producers.py,v 1.2 2000/09/09 22:44:06 adamf Exp $Nssimple_producercs)dZddZdZRS(sproducer for a stringics||_||_dS(N(sdatasselfs buffer_size(sselfsdatas buffer_size((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pys__init__s csvt|i|ijo4|i|i }|i|i|_|Sn |i}d|_|SdS(Ns(slensselfsdatas buffer_sizesresult(sselfsresult((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pysmores   (s__doc__s__init__smore(((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pyssimple_producers sscanning_producercs) dZ!"ddZ'dZRS(s:like simple_producer, but more efficient for large stringsics+"#||_$||_%d|_dS(Ni(sdatasselfs buffer_sizespos(sselfsdatas buffer_size((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pys__init__"s  cs'(|it|ijok)|i}*tt|i,|i|i}.|i||!}/|it||_0|Sn2dSdS(Ns( sselfsposslensdataslpsmins buffer_sizesrpsresult(sselfsrpsresultslp((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pysmore's  (s__doc__s__init__smore(((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pysscanning_producer s slines_producercs24dZ57dZ:dZ=dZRS(sproducer for a list of linescs78||_dS(N(slinessself(sselfslines((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pys__init__7scs:;t|iSdS(N(slensselfslines(sself((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pysready:scsY=>|io>?|id }@|id|_Ati|ddSnCdSdS(Ni2s s(sselfslinesschunksstringsjoin(sselfschunk((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pysmore=s  (s__doc__s__init__sreadysmore(((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pyslines_producer4s   sbuffer_list_producercs&EdZFJdZOdZRS(sproducer for a list of bufferscsJLd|_M||_dS(Ni(sselfsindexsbuffers(sselfsbuffers((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pys__init__Js cs[OP|it|ijo QdSn.S|i|i}T|id|_U|SdS(Nsi(sselfsindexslensbufferssdata(sselfsdata((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pysmoreOs  (s__doc__s__init__smore(((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pysbuffer_list_producerEs  s file_producercs3WdZX[dd>Z]dZadZRS(s(producer wrapper for file[-like] objectsiics]^d|__||_dS(Ni(sselfsdonesfile(sselfsfile((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pys__init__]s csyab|io cdSn[e|ii|i}f| o0g|iih|`id|_jdSnl|SdS(Nsi(sselfsdonesfilesreadsout_buffer_sizesdatasclose(sselfsdata((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pysmoreas      (s__doc__sout_buffer_sizes__init__smore(((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pys file_producerWs   soutput_producercsnudZvwdZzdZdZdZdZdZdZdZRS( s;Acts like an output file; suitable for capturing sys.stdoutcswxd|_dS(Ns(sselfsdata(sself((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pys__init__wscsDz{ti|d}|ti|d}}|i||_dS(Ns s (sstrings splitfieldssdataslinessjoinsself(sselfsdataslines((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pyswritezscs|i|d|_dS(Ns (sselfsdatasline(sselfsline((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pys writelinescs-|iti|dd|_dS(Ns (sselfsdatasstrings joinfieldsslines(sselfslines((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pys writelinesscst|idjSdS(Ni(slensselfsdata(sself((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pysreadyscs dS(N((sself((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pysflushscs dS(N((sselfsargs((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pys softspacescsI|io.|id }|id|_|SndSdS(Nis(sselfsdatasresult(sselfsresult((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pysmores   ( s__doc__s__init__swrites writelines writelinessreadysflushs softspacesmore(((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pysoutput_producerus        scomposite_producercs&dZdZdZRS(s$combine a fifo of producers into onecs||_dS(N(s producerssself(sselfs producers((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pys__init__scsrxet|ioJ|ii}|i}|o |Sn|iiq WdSdS(Ns(slensselfs producerssfirstspsmoresdspop(sselfspsd((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pysmores  (s__doc__s__init__smore(((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pyscomposite_producers  sglobbing_producercs-dZdd>dZdZRS(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] iics+||_d|_||_dS(Ns(sproducersselfsbuffers buffer_size(sselfsproducers buffer_size((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pys__init__s  csxXt|i|ijo;|ii}|o|i||_nPq W|i}d|_|SdS(Ns(slensselfsbuffers buffer_sizesproducersmoresdatasr(sselfsrsdata((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pysmores    (s__doc__s__init__smore(((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pysglobbing_producers shooked_producercs&dZdZdZRS(s A producer that will call when it empties,. with an argument of the number of bytes produced. Useful for logging/instrumentation purposes. cs+||_||_d|_dS(Ni(sproducersselfsfunctionsbytes(sselfsproducersfunction((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pys__init__s  cs|iod|ii}| o#t|_|i|in|it||_|SndSdS(Ns(sselfsproducersmoresresultsNonesfunctionsbytesslen(sselfsresult((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pysmores    (s__doc__s__init__smore(((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pyshooked_producers  schunked_producercs)dZedZdZRS(sA 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() cs||_||_dS(N(sproducersselfsfooters(sselfsproducersfooters((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pys__init__s cs|io|ii}|odt||fSnIt|_|io(tidg|iddSndSndSdS(Ns%x %s s0s s s0 s( sselfsproducersmoresdataslensNonesfooterssstringsjoin(sselfsdata((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pysmores     (s__doc__sNones__init__smore(((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pyschunked_producers scompressed_producercs) dZddZdZRS(sx Compress another producer on-the-fly, using ZLIB [Unfortunately, none of the current browsers seem to support this] ics(||_ti||_dS(N(sproducersselfszlibs compressobjslevels compressor(sselfsproducerslevel((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pys__init__s cs|io|d}!xb!| oV"|ii}#| o $t|_%|iiSn'|ii|}qW(|Sn*dSdS(Ns( sselfsproducerscdatasmoresdatasNones compressorsflushscompress(sselfsdatascdata((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pysmores      (s__doc__s__init__smore(((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pyscompressed_producer s  sescaping_producercs/,dZ./1dddZ9dZRS(s0A producer that escapes a sequence of characterss .s ..csS12||_3||_4||_5d|_6dkl}7||_dS(Ns(sfind_prefix_at_end(sproducersselfsesc_fromsesc_tosbuffersasynchatsfind_prefix_at_end(sselfsproducersesc_fromsesc_tosfind_prefix_at_end((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pys__init__1s     cs9:|i};|i}=|i|ii}?|oo@ti|||}A|i||}B|o!D|| |_E|| SnHd|_I|SnK|SdS(Ns( sselfsesc_fromsesc_tosbuffersproducersmoresstringsreplacesfind_prefix_at_endsi(sselfsisesc_fromsesc_tosbuffer((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pysmore9s      (s__doc__s__init__smore(((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pysescaping_producer,s (sRCS_IDsstringssimple_producersscanning_producerslines_producersbuffer_list_producers file_producersoutput_producerscomposite_producersglobbing_producershooked_producerschunked_producerszlibs ImportErrorsNonescompressed_producersescaping_producer(shooked_producersescaping_producerscompressed_producersstringslines_producersRCS_IDszlibssimple_producerschunked_producersbuffer_list_producersscanning_producersglobbing_producersoutput_producerscomposite_producers file_producer((sH/usr/ports/www/adzapper/work/adzapper-0.4.0/src/medusa-old1/producers.pys?s$  $ $!