U
    ;gW                     @   sB  d Z ddlZddlZddlmZmZmZmZmZm	Z	 ddl
mZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ dZG dd deZeddZeddZeeeged f  Zeedged f  ZG dd deZeedddZededddZ e Z!z ddl"m#Z# e#j!Z$es$e$Z!W n e%k
r<   Y nX dS )z"Http related parsers and protocol.    N)Any	AwaitableCallable
NamedTupleOptionalUnion)CIMultiDict   )AbstractStreamWriter)BaseProtocol)ClientConnectionResetError)ZLibCompressor)NO_EXTENSIONS)StreamWriterHttpVersionHttpVersion10HttpVersion11c                   @   s   e Zd ZU eed< eed< dS )r   majorminorN)__name__
__module____qualname__int__annotations__ r   r   S/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/aiohttp/http_writer.pyr      s   
r   CIMultiDict[str]c                   @   s   e Zd Zd"eejeeddddZe	e
ej dddZe	eddd	Zddd
dZdejfeeddddZeddddZdddeeeddddZedddddZd#eddddZddd d!ZdS )$r   N)protocolloopon_chunk_senton_headers_sentreturnc                 C   sF   || _ || _d | _d| _d| _d| _d| _d | _d | _|| _	|| _
d S )NFr   )	_protocolr   lengthchunkedbuffer_sizeoutput_size_eof	_compressZ_drain_waiter_on_chunk_sent_on_headers_sent)selfr   r   r   r    r   r   r   __init__    s    zStreamWriter.__init__)r!   c                 C   s   | j jS N)r"   	transportr+   r   r   r   r.   6   s    zStreamWriter.transportc                 C   s   | j S r-   )r"   r/   r   r   r   r   :   s    zStreamWriter.protocolc                 C   s
   d| _ d S )NT)r$   r/   r   r   r   enable_chunking>   s    zStreamWriter.enable_chunkingdeflate)encodingstrategyr!   c                 C   s   t ||d| _d S )N)r2   r3   )r   r(   )r+   r2   r3   r   r   r   enable_compressionA   s    zStreamWriter.enable_compression)chunkr!   c                 C   sR   t |}|  j|7  _|  j|7  _| jj}|d ks<| rDtd|| d S )Nz!Cannot write to closing transport)lenr%   r&   r"   r.   Z
is_closingr   write)r+   r5   sizer.   r   r   r   _writeF   s    zStreamWriter._writeTi   )drainLIMIT)r5   r:   r;   r!   c                   s   | j dk	r|  |I dH  t|tr<|jt|kr<|d}| jdk	r`| j|I dH }|s`dS | jdk	rt|}| j|kr| j| | _n|d| j }d| _|sdS |r| j	rdt| 
d}|| d }| | | j|kr|rd| _|  I dH  dS )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.
        Ncr   %x
asciis   
)r)   
isinstance
memoryviewnbytesr6   castr(   compressr#   r$   encoder9   r%   r:   )r+   r5   r:   r;   	chunk_lenZchunk_len_prer   r   r   r7   O   s2    	






zStreamWriter.writer   status_lineheadersr!   c                    s2   | j dk	r|  |I dH  t||}| | dS )z*Write request/response status and headers.N)r*   _serialize_headersr9   )r+   rG   rH   bufr   r   r   write_headersz   s    

zStreamWriter.write_headers    c                    s   | j r
d S |r(| jd k	r(| |I d H  | jr||rD| j|I d H }|| j 7 }|r| jrdt| d}|| d }n.| jr|rdt| d}|| d }nd}|r| | | 	 I d H  d| _ d S )Nr=   r>   s   
0

s   0

T)
r'   r)   r(   rC   flushr$   r6   rD   r9   r:   )r+   r5   rE   r   r   r   	write_eof   s(    

zStreamWriter.write_eofc                    s    | j jdk	r| j  I dH  dS )zFlush the write buffer.

        The intended use is to write

          await w.write(data)
          await w.drain()
        N)r"   r.   Z_drain_helperr/   r   r   r   r:      s    zStreamWriter.drain)NN)rL   )r   r   r   r   asyncioZAbstractEventLoop_T_OnChunkSent_T_OnHeadersSentr,   propertyr   	Transportr.   r   r0   zlibZ_DEFAULT_STRATEGYstrr   r4   bytesr9   boolr7   rK   rN   r:   r   r   r   r   r      sH       
   , r   )stringr!   c                 C   s   d| ksd| krt d| S )N
zRNewline or carriage return detected in headers. Potential header injection attack.)
ValueError)rY   r   r   r   _safe_header   s
    r]   rF   c                 C   s2   dd |  D }| d d| d }|dS )Nc                 s   s&   | ]\}}t |d  t | V  qdS )z: N)r]   ).0kvr   r   r   	<genexpr>   s     z(_py_serialize_headers.<locals>.<genexpr>z
z

zutf-8)itemsjoinrD   )rG   rH   Zheaders_genliner   r   r   _py_serialize_headers   s    re   )&__doc__rO   rT   typingr   r   r   r   r   r   Z	multidictr   abcr
   Zbase_protocolr   Zclient_exceptionsr   Zcompression_utilsr   Zhelpersr   __all__r   r   r   rW   rP   rQ   r   rV   r]   re   rI   Zaiohttp._http_writerZ_http_writerZ_c_serialize_headersImportErrorr   r   r   r   <module>   s6    

 	