
­­­­­­­­­­­­­­­­­­
<!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se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	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
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rdt| d}|| d }n.| jr|rd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   

 	