o
    4g                     @   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	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dZdej  koTdk n  Zejdk Zep_e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%de&de&fddZ'de&ddde"fddZ(e(Z)zddl*m+Z+ e+j)Z,ese,Z)W dS W dS  e-y   Y dS w )z"Http related parsers and protocol.    N)Any	AwaitableCallableIterableList
NamedTupleOptionalUnion)CIMultiDict   )AbstractStreamWriter)BaseProtocol)ClientConnectionResetError)ZLibCompressor)NO_EXTENSIONS)StreamWriterHttpVersionHttpVersion10HttpVersion11i   )      r   )r   r      )r      	   c                   @   s   e Zd ZU eed< eed< dS )r   majorminorN)__name__
__module____qualname__int__annotations__ r!   r!   _/var/www/html/Testing_prj/Navya-Bakers/venv/lib/python3.10/site-packages/aiohttp/http_writer.pyr   '   s   
 r   CIMultiDict[str]c                   @   sZ  e Zd ZU dZee ed< dZeed< dZ	eed< dZ
ee ed< 		d2dedejd	ed
eddf
ddZedeej fddZedefddZd3ddZdejfdededdfddZdeeeef ddfddZde e ddfddZ!dd d!deeeef d"ed#eddfd$d%Z"d&ed'd(ddfd)d*Z#d3d+d,Z$d4deddfd.d/Z%d3d0d1Z&dS )5r   NlengthFchunked_eof	_compressprotocolloopon_chunk_senton_headers_sentreturnc                 C   s   || _ || _|| _|| _d S N)	_protocolr)   _on_chunk_sent_on_headers_sent)selfr(   r)   r*   r+   r!   r!   r"   __init__;   s   
zStreamWriter.__init__c                 C   s   | j jS r-   )r.   	transportr1   r!   r!   r"   r3   G   s   zStreamWriter.transportc                 C   s   | j S r-   )r.   r4   r!   r!   r"   r(   K   s   zStreamWriter.protocolc                 C   s
   d| _ d S )NT)r%   r4   r!   r!   r"   enable_chunkingO   s   
zStreamWriter.enable_chunkingdeflateencodingstrategyc                 C   s   t ||d| _d S )N)r7   r8   )r   r'   )r1   r7   r8   r!   r!   r"   enable_compressionR   s   zStreamWriter.enable_compressionchunkc                 C   sR   t |}|  j|7  _|  j|7  _| jj}|d u s| r"td|| d S )N!Cannot write to closing transport)lenbuffer_sizeoutput_sizer.   r3   
is_closingr   write)r1   r:   sizer3   r!   r!   r"   _writeW   s   zStreamWriter._writechunksc                 C   s   d}|D ]}|t |7 }q|  j|7  _|  j|7  _| jj}|d u s'| r+tdts1|tk r;|	d
| d S || d S )Nr   r;       )r<   r=   r>   r.   r3   r?   r   SKIP_WRITELINESMIN_PAYLOAD_FOR_WRITELINESr@   join
writelines)r1   rC   rA   r:   r3   r!   r!   r"   _writelines`   s   zStreamWriter._writelinesTi   )drainLIMITrJ   rK   c                   s  | j dur|  |I dH  t|tr|jt|kr|d}| jdur1| j|I dH }|s1dS | jdurTt|}| j|krF| j| | _n|d| j }d| _|sTdS |r| j	rk| 
t|ddd|df n| | | j|kr|rd| _|  I dH  dS dS dS 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nbytesr<   castr'   compressr$   r%   rI   encoderB   r=   rJ   )r1   r:   rJ   rK   	chunk_lenr!   r!   r"   r@   n   s:   






zStreamWriter.writestatus_lineheadersr#   c                    s4   | j dur|  |I dH  t||}| | dS )z*Write request/response status and headers.N)r0   _serialize_headersrB   )r1   rW   rX   bufr!   r!   r"   write_headers   s
   

zStreamWriter.write_headersc                 C   s
   d| _ dS )z&Indicate that the message is complete.TN)r&   r4   r!   r!   r"   set_eof   s   
zStreamWriter.set_eofrD   c                    sH  | j rd S |r| jd ur| |I d H  | jrrg }d}|r2| j|I d H  }r2t|}|| | j }|t|7 }|| |sFJ | jr^|ddd}| 	|g|dR  n:t|dkrj| 	| n.| 
|d  n&| jr|rt|ddd}| 	||df n| 
d n|r| 
| |  I d H  d| _ d S )	Nr   rM   rN   rO   s   
0

r   s   0

T)r&   r/   r'   rT   r<   appendflushr%   rU   rI   rB   rJ   )r1   r:   rC   
chunks_lencompressed_chunkflush_chunkchunk_len_prer!   r!   r"   	write_eof   s<   




zStreamWriter.write_eofc                    s2   | j }|jdur|jr| I dH  dS dS dS )zFlush the write buffer.

        The intended use is to write

          await w.write(data)
          await w.drain()
        N)r.   r3   _paused_drain_helper)r1   r(   r!   r!   r"   rJ      s
   zStreamWriter.drain)NN)r,   N)rD   )'r   r   r   r$   r   r   r    r%   boolr&   r'   r   r   asyncioAbstractEventLoop_T_OnChunkSent_T_OnHeadersSentr2   property	Transportr3   r(   r5   zlibZ_DEFAULT_STRATEGYstrr9   r	   bytes	bytearrayrQ   rB   r   rI   r@   r[   r\   rc   rJ   r!   r!   r!   r"   r   4   sl   
 


	
0

'r   stringr,   c                 C   s   d| v sd| v rt d| S )N
zRNewline or carriage return detected in headers. Potential header injection attack.)
ValueError)rr   r!   r!   r"   _safe_header   s
   rv   rW   rX   c                 C   s2   dd |  D }| d d| d }|dS )Nc                 s   s(    | ]\}}t |d  t | V  qdS )z: N)rv   ).0kvr!   r!   r"   	<genexpr>   s   & z(_py_serialize_headers.<locals>.<genexpr>rN   z

zutf-8)itemsrG   rU   )rW   rX   headers_genliner!   r!   r"   _py_serialize_headers   s   
r~   ).__doc__rg   sysrm   typingr   r   r   r   r   r   r   r	   	multidictr
   abcr   base_protocolr   client_exceptionsr   compression_utilsr   helpersr   __all__rF   version_infoIS_PY313_BEFORE_313_2IS_PY_BEFORE_312_9rE   r   r   r   rp   ri   rj   r   ro   rv   r~   rY   aiohttp._http_writer_http_writer_c_serialize_headersImportErrorr!   r!   r!   r"   <module>   sF    (


 .	
