mò "á¸Ec@sldZdklZdklZdklZdkZdefd„ƒYZdfd„ƒYZ d „Z dS( s$ Response class for the FTP Server. (sZServerHTTPResponse(sWakeup(sStringIONt FTPResponsecBs_tZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z RS( s$ Response to an FTP command cCsdS(Nt((tself((t2/data/zmath/zope/lib/python/ZServer/FTPResponse.pyt__str__scCsdS(N((R((Rt outputBodyscKs||i|tZdZd„Zd„Zed„Zd„Zd„ZRS(s Sends response object to a callback. Doesn't write anything. The callback takes place in Medusa's thread, not the request thread. cCs||_||_g|_dS(N(tcallbackRt _callbacktargst_argst _producers(RRR((Rt__init__=s  cCsdS(N((R((RtcloseBscCs|o|ii|ƒndS(N(ttextRR tappend(RR#tl((RtwriteEscCs||_t|iƒdS(N(tresponseRt _responsetWakeuptapply(RR'((RtfinishIs cCs>t|i|i|ifƒ}d|_d|_d|_|S(N(R*RRRR(tresulttNone(RR,((RR*Ms    ( RRRR!R"R-R&R+R*(((RR8s     cGsAtdt||ƒdtƒƒ}|iddƒ|i|_|S(Ntstdouttstderrs content-types text/plain( RRRRtStringIOtrt setHeadertchannelR(R3RRR1((Rt make_responseWs! ( RtZServer.HTTPResponsetZServerHTTPResponsetPubCore.ZEventR)t cStringIOR0RRRR4(RR6R0RR4R)R((Rt?s    !