B `@sdZddlZddlZddlZddlmZmZmZmZm Z ddl m Z ddl m Z ddlmZddlmZd Zed d d gZeddZeddZeeegedfZGd dde ZededddZeZyddlmZejZeseZWne 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!n/private/var/folders/7j/8686xlfs15q3tgljmghtvg0r0000gn/T/pip-target-isidps9b/lib/python/aiohttp/http_writer.py__init__szStreamWriter.__init__)rcCs|jS)N)r)r r!r!r"r.szStreamWriter.transportcCs|jS)N)r)r r!r!r"r2szStreamWriter.protocolcCs d|_dS)NT)r)r r!r!r"enable_chunking6szStreamWriter.enable_chunkingdeflate)encodingrcCs*|dkrdtjntj}tj|d|_dS)Ngzip)wbits)zlib MAX_WBITS compressobjr)r r& 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/r5r6rcs|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. Ncrz%x asciis )r isinstance memoryviewnbytesr0castrcompressrrencoder4rr5)r r/r5r6 chunk_lenZ chunk_len_prer!r!r"r2Fs2         zStreamWriter.writezCIMultiDict[str]) status_lineheadersrcst||}||dS)z*Write request/response status and headers.N)_serialize_headersr4)r r@rAbufr!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)Nz%x r8s 0 s0 T) rrrr=flushrr0r>r4r5r)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_helper)r r!r!r"r5s zStreamWriter.drain)N)r%)rE)__name__ __module__ __qualname__r asyncioZAbstractEventLoop_T_OnChunkSentr#propertyr Transportrrr$strr.bytesr4boolintr2rDrGr5r!r!r!r"r s  *r zCIMultiDict[str])r@rArcCs.|dddd|D}|ddS)Nz cSs g|]\}}|d|dqS)z: z r!).0kvr!r!r" sz)_py_serialize_headers..zutf-8s )joinitemsr>)r@rAliner!r!r"_py_serialize_headerss r[)!__doc__rK collectionsr*typingrrrrrZ multidictrabcr Z base_protocolr Zhelpersr __all__ namedtupler rrrPrLr rOr[rBZaiohttp._http_writerZ _http_writerZ_c_serialize_headers ImportErrorr!r!r!r"s0