wce-ndZddlZddlZddlmZmZmZmZmZm Z ddl m Z ddl m Z ddlmZddlmZdd lmZd ZGd d eZeddZeddZeeegedfZeed gedfZGdde ZdedefdZdedd defdZeZ ddl m!Z!e!j>Z"ese"Zyy#e#$rYywxYw)z"Http related parsers and protocol.N)Any AwaitableCallable NamedTupleOptionalUnion) CIMultiDict)AbstractStreamWriter) BaseProtocol)ZLibCompressor) NO_EXTENSIONS) StreamWriter HttpVersion HttpVersion10 HttpVersion11c"eZdZUeed<eed<y)rmajorminorN)__name__ __module__ __qualname__int__annotations__5/usr/lib/python3/dist-packages/aiohttp/http_writer.pyrrs J JrrCIMultiDict[str]c eZdZ ddedej dededdf dZe de ejfdZ e defd Z dd Zd ej fd ed eddfdZdeddfdZddddedededdfdZdeddddfdZddeddfdZddZy) rNprotocolloop on_chunk_senton_headers_sentreturnc||_||_d|_d|_d|_d|_d|_d|_d|_||_ ||_ y)NFr) _protocolr!lengthchunked buffer_size output_size_eof _compress _drain_waiter_on_chunk_sent_on_headers_sent)selfr r!r"r#s r__init__zStreamWriter.__init__sV"    37!.;2Arc.|jjSN)r& transportr0s rr4zStreamWriter.transport5s~~'''rc|jSr3)r&r5s rr zStreamWriter.protocol9s ~~rcd|_y)NT)r(r5s renable_chunkingzStreamWriter.enable_chunking=s  rdeflateencodingstrategyc(t|||_y)N)r:r;)r r,)r0r:r;s renable_compressionzStreamWriter.enable_compression@s(HMrchunkct|}|xj|z c_|xj|z c_|j}|jj r||j r td|j|y)Nz!Cannot write to closing transport) lenr)r*r4r& connected is_closingConnectionResetErrorwrite)r0r>sizer4s r_writezStreamWriter._writeEsk5z D  D NN ~~''9+< @T@T@V&'JK KrTi)drainLIMITrGrHcK|j|j|d{t|tr)|jt |k7r|j d}|j &|j j|d{}|sy|jHt |}|j|k\r|j|z |_n|d|j}d|_|sy|ru|jr%dt |zjd}||zdz}|j||j|kDr#|r d|_ |jd{yyyy7<77 w)zWrites chunk of data to a stream. write_eof() indicates end of stream. writer can't be used after write_eof() method being called. write() return drain future. Ncr%x asciis )r. isinstance memoryviewnbytesr@castr,compressr'r(encoderFr)rG)r0r>rGrH chunk_len chunk_len_pres rrDzStreamWriter.writeNsE    *%%e, , , eZ (||s5z) 3 >> %..11%88E ;; "E I{{i'"kkI5 m ,  ||!)CJ!6 > >w G %-7 KK %'E#$ jjl""-2' - -9.#s5!E&EA'E& E" C E&E$ E&"E&$E& status_lineheadersrcK|j|j|d{t||}|j|y7"w)z*Write request/response status and headers.N)r/_serialize_headersrF)r0rUrVbufs r write_headerszStreamWriter.write_headersysG  ,''0 0 0!g6 C 1s!AA#AcTK|jry|r%|j|j|d{|jrv|r#|jj|d{}||jj z }|rh|j r\dt |zjd}||zdz}n6|j r*|r&dt |zjd}||zdz}nd}|r|j||jd{d|_y777w)NrKrLs 0 s0 T) r+r.r,rQflushr(r@rRrFrG)r0r>rSs r write_eofzStreamWriter.write_eofs  99  T((4%%e, , , >>"nn55e<< T^^))+ +E%E 2::7C !E),<<||!)CJ!6 > >w GI%-0@@E(E  KK jjl / -=" s40D(D"0D(#D$$B1D(D& D($D(&D(cK|jj#|jjd{yy7w)zFlush the write buffer. The intended use is to write await w.write(data) await w.drain() N)r&r4 _drain_helperr5s rrGzStreamWriter.drains6 >> # # /....0 0 0 0 0s 4?=?)NN)r$N)r)rrrr asyncioAbstractEventLoop_T_OnChunkSent_T_OnHeadersSentr1propertyr Transportr4r r8zlibZ_DEFAULT_STRATEGYstrrr=bytesrFboolrDrZr]rGrrrrrs4 )-,0 BB''B& B * B  B,(8G$5$56((,(9P9PNN36N N Ed.2)#)#&*)#:=)# )#V  );   UT< 1rrstringr$c,d|vsd|vr td|S)N  zRNewline or carriage return detected in headers. Potential header injection attack.) ValueError)rks r _safe_headerrps( v~ 1   MrrUrVcd|jD}|dzdj|zdz}|jdS)Nc3VK|]!\}}t|dzt|z#yw)z: N)rp).0kvs r z(_py_serialize_headers..s&X1<?T)LO;Xs')z z zutf-8)itemsjoinrR)rUrV headers_genlines r_py_serialize_headersr{s>X XK  &++k": :Z GD ;;w r)$__doc__r`rftypingrrrrrr multidictr abcr base_protocolr compression_utilsr helpersr__all__rrrrirbrcrrhrpr{rXaiohttp._http_writer _http_writer_c_serialize_headers ImportErrorrrrrs( HH!%'-" K* Aq! Aq! (E7IdO#;<=H&8%99T?%JKLM1'M1` s 5G E + /':: 1   sB,,B43B4