
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    'â7`Ý  ã                   @   s  d Z ddlZddlZddlZddl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	Ze d
ddg¡ZeddƒZeddƒZeeeged f  ZG dd„ deƒ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ÚOptionalÚUnion)ÚCIMultiDicté   )ÚAbstractStreamWriter)ÚBaseProtocol)ÚNO_EXTENSIONS)ÚStreamWriterÚHttpVersionÚHttpVersion10ÚHttpVersion11r   ÚmajorÚminorc                   @   sÌ   e Zd Zd"eej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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Úreturnc                 C   sH   || _ |j| _|| _d | _d| _d| _d| _d| _d | _	d | _
|| _d S )NFr   )Ú	_protocolÚ	transportÚ
_transportr   ÚlengthÚchunkedÚbuffer_sizeÚoutput_sizeÚ_eofÚ	_compressZ_drain_waiterÚ_on_chunk_sent)Úselfr   r   r   © r!   úF/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/http_writer.pyÚ__init__   s    zStreamWriter.__init__)r   c                 C   s   | j S ©N)r   ©r    r!   r!   r"   r   .   s    zStreamWriter.transportc                 C   s   | j S r$   )r   r%   r!   r!   r"   r   2   s    zStreamWriter.protocolc                 C   s
   d| _ d S )NT)r   r%   r!   r!   r"   Úenable_chunking6   s    zStreamWriter.enable_chunkingÚdeflate)Úencodingr   c                 C   s*   |dkrdt j nt j}t j|d�| _d S )NÚgzipé   )Zwbits)ÚzlibÚ	MAX_WBITSÚcompressobjr   )r    r(   Z	zlib_moder!   r!   r"   Úenable_compression9   s    zStreamWriter.enable_compression)Úchunkr   c                 C   sP   t |ƒ}|  j|7  _|  j|7  _| jd ks8| j ¡ r@tdƒ‚| j |¡ d S )Nz!Cannot write to closing transport)Úlenr   r   r   Z
is_closingÚConnectionResetErrorÚwrite)r    r/   Úsizer!   r!   r"   Ú_write=   s    zStreamWriter._writeTi   )ÚdrainÚLIMIT)r/   r5   r6   r   c                Ã   sø   | j dk	r|   |¡I dH  t|tƒr<|jt|ƒkr<| d¡}| jdk	rZ| j |¡}|sZdS | jdk	r t|ƒ}| j|kr„| j| | _n|d| j… }d| _|s dS |rô| j	rÈdt|ƒ  
d¡}|| d }|  |¡ | j|krô|rôd| _|  ¡ I dH  dS )zÁWrites 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
Úasciió   
)r   Ú
isinstanceÚ
memoryviewÚnbytesr0   Úcastr   Úcompressr   r   Úencoder4   r   r5   )r    r/   r5   r6   Ú	chunk_lenZchunk_len_prer!   r!   r"   r2   F   s2    	






zStreamWriter.writeúCIMultiDict[str]©Ústatus_lineÚheadersr   c                 Ã   s   t ||ƒ}|  |¡ dS )z*Write request/response status and headers.N)Ú_serialize_headersr4   )r    rD   rE   Úbufr!   r!   r"   Úwrite_headersq   s    
zStreamWriter.write_headersó    c                 Ã   sÐ   | j r
d S |r(| jd k	r(|  |¡I d H  | jrv|r>| j |¡}|| j ¡  }|r¤| jr¤dt|ƒ  d¡}|| d }n.| jr¤|r dt|ƒ  d¡}|| d }nd}|r²|  |¡ |  	¡ I d H  d| _ d | _
d S )Nr8   r9   s   
0

s   0

T)r   r   r   r?   Úflushr   r0   r@   r4   r5   r   )r    r/   rA   r!   r!   r"   Ú	write_eofy   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"   r5   ˜   s    zStreamWriter.drain)N)r'   )rI   )Ú__name__Ú
__module__Ú__qualname__r
   ÚasyncioZAbstractEventLoopÚ_T_OnChunkSentr#   Úpropertyr   Z	Transportr   r   r&   Ústrr.   Úbytesr4   ÚboolÚintr2   rH   rK   r5   r!   r!   r!   r"   r      s8    üû
 ÿ  þ, þr   rB   rC   c                 C   s.   | d d  dd„ | ¡ D ƒ¡ }| d¡d S )Nú
Ú c                 S   s    g | ]\}}|d  | d ‘qS )z: rV   r!   )Ú.0ÚkÚvr!   r!   r"   Ú
<listcomp>¨   s     z)_py_serialize_headers.<locals>.<listcomp>zutf-8r:   )ÚjoinÚitemsr@   )rD   rE   Úliner!   r!   r"   Ú_py_serialize_headers¤   s    ÿþÿr_   )!Ú__doc__rO   Úcollectionsr+   Útypingr   r   r   r   r   Z	multidictr   Úabcr	   Zbase_protocolr
   Zhelpersr   Ú__all__Ú
namedtupler   r   r   rS   rP   r   rR   r_   rF   Zaiohttp._http_writerZ_http_writerZ_c_serialize_headersÚImportErrorr!   r!   r!   r"   Ú<module>   s0   

 	