U '7`@sdZddlZddlZddlZddlmZmZmZmZm Z ddl m Z ddl m Z ddlmZddlmZd Zed d d gZeddZeddZeeegedfZGd dde ZededddZeZzddlmZejZeseZWne k rYnXdS)z"Http related parsers and protocol.N)Any AwaitableCallableOptionalUnion) CIMultiDict)AbstractStreamWriter) BaseProtocol) NO_EXTENSIONS) StreamWriter HttpVersion HttpVersion10 HttpVersion11r majorminorc@seZdZd"eejeddddZee ej dddZ eeddd Z ddd d Z d#edd ddZeddddZdddeeeddddZedddddZd$eddddZddd d!ZdS)%r N)protocolloop on_chunk_sentreturncCsH||_|j|_||_d|_d|_d|_d|_d|_d|_ d|_ ||_ dS)NFr) _protocol transport _transportrlengthchunked buffer_size output_size_eof _compressZ _drain_waiter_on_chunk_sent)selfrrrr!F/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/http_writer.py__init__szStreamWriter.__init__)rcCs|jSN)rr r!r!r"r.szStreamWriter.transportcCs|jSr$)rr%r!r!r"r2szStreamWriter.protocolcCs d|_dS)NT)rr%r!r!r"enable_chunking6szStreamWriter.enable_chunkingdeflate)encodingrcCs*|dkrdtjntj}tj|d|_dS)NZgzip)Zwbits)zlibZ MAX_WBITSZ compressobjr)r r(Z zlib_moder!r!r"enable_compression9szStreamWriter.enable_compression)chunkrcCsPt|}|j|7_|j|7_|jdks8|jr@td|j|dS)Nz!Cannot write to closing transport)lenrrrZ is_closingConnectionResetErrorwrite)r r,sizer!r!r"_write=s zStreamWriter._writeTi)drainLIMIT)r,r2r3rcs|jdk r||IdHt|tr<|jt|kr<|d}|jdk rZ|j|}|sZdS|jdk rt|}|j|kr|j||_n|d|j}d|_|sdS|r|j rdt| d}||d}| ||j |kr|rd|_ | IdHdS)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 ascii )r isinstance memoryviewnbytesr-castrcompressrrencoder1rr2)r r,r2r3 chunk_lenZ chunk_len_prer!r!r"r/Fs2         zStreamWriter.writeCIMultiDict[str] status_lineheadersrcst||}||dS)z*Write request/response status and headers.N)_serialize_headersr1)r rArBZbufr!r!r" write_headersqs zStreamWriter.write_headerscs|jr dS|r(|jdk r(||IdH|jrv|r>|j|}||j}|r|jrdt|d}||d}n.|jr|rdt|d}||d}nd}|r||| IdHd|_d|_ dS)Nr5r6s 0 s0 T) rrrr<flushrr-r=r1r2r)r r,r>r!r!r" write_eofys*   zStreamWriter.write_eofcs |jjdk r|jIdHdS)zFlush the write buffer. The intended use is to write await w.write(data) await w.drain() N)rrZ _drain_helperr%r!r!r"r2s zStreamWriter.drain)N)r')rE)__name__ __module__ __qualname__r asyncioZAbstractEventLoop_T_OnChunkSentr#propertyrZ Transportrrr&strr+bytesr1boolintr/rDrGr2r!r!r!r"r s8   , r r?r@cCs.|dddd|D}|ddS)N cSs g|]\}}|d|dqS)z: rRr!).0kvr!r!r" sz)_py_serialize_headers..zutf-8r7)joinitemsr=)rArBliner!r!r"_py_serialize_headerssr[)!__doc__rK collectionsr*typingrrrrrZ multidictrabcr Z base_protocolr Zhelpersr __all__ namedtupler rrrOrLr rNr[rCZaiohttp._http_writerZ _http_writerZ_c_serialize_headers ImportErrorr!r!r!r"s0