
    Ng                        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	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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e          Zde de fdZ!de dddefdZ"e"Z#	 ddl$m%Z% e%j#        Z&ese&Z#dS dS # e'$ r Y dS w xY 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HttpVersion11c                   $    e Zd ZU eed<   eed<   dS )r   majorminorN)__name__
__module____qualname__int__annotations__     O/var/www/html/ai-engine/env/lib/python3.11/site-packages/aiohttp/http_writer.pyr   r      s"         JJJJJJJJr   r   CIMultiDict[str]c                      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<   	 	 d&dedej        d	ed
eddf
dZedeej                 fd            Zedefd            Zd'dZdej        fdededdfdZdeddfdZdee         ddfdZddddedededdfdZdedd ddfd!Z d'd"Z!d(deddfd$Z"d'd%Z#dS ))r   NlengthFchunked_eof	_compressprotocolloopon_chunk_senton_headers_sentreturnc                 >    || _         || _        || _        || _        d S N)	_protocolr(   _on_chunk_sent_on_headers_sent)selfr'   r(   r)   r*   s        r    __init__zStreamWriter.__init__/   s(     "	.;2Ar   c                     | j         j        S r-   )r.   	transportr1   s    r    r4   zStreamWriter.transport;   s    ~''r   c                     | j         S r-   )r.   r5   s    r    r'   zStreamWriter.protocol?   s
    ~r   c                     d| _         d S )NT)r$   r5   s    r    enable_chunkingzStreamWriter.enable_chunkingC   s    r   deflateencodingstrategyc                 2    t          ||          | _        d S )N)r:   r;   )r   r&   )r1   r:   r;   s      r    enable_compressionzStreamWriter.enable_compressionF   s     (HMMMr   chunkc                     t          |          }| xj        |z  c_        | xj        |z  c_        | j        j        }||                                rt          d          |                    |           d S )N!Cannot write to closing transport)lenbuffer_sizeoutput_sizer.   r4   
is_closingr   write)r1   r>   sizer4   s       r    _writezStreamWriter._writeK   s}    5zzD D N,		 4 4 6 6,-PQQQr   chunksc                    d}|D ]}|t          |          z  }| xj        |z  c_        | xj        |z  c_        | j        j        }||                                rt          d          |                    |           d S )Nr   r@   )rA   rB   rC   r.   r4   rD   r   
writelines)r1   rH   rF   r>   r4   s        r    _writelineszStreamWriter._writelinesT   s     	 	ECJJDDD D N,		 4 4 6 6,-PQQQV$$$$$r   Ti   )drainLIMITrL   rM   c                  K   | j         |                      |           d{V  t          |t                    r-|j        t	          |          k    r|                    d          }| j        $| j                            |           d{V }|sdS | j        Dt	          |          }| j        |k    r| j        |z
  | _        n|d| j                 }d| _        |sdS |r| j	        r=| 
                    t	          |          dd                    d          |df           n|                     |           | j        |k    r'|r'd| _        |                                  d{V  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nbytesrA   castr&   compressr#   r$   rK   encoderG   rB   rL   )r1   r>   rL   rM   	chunk_lens        r    rE   zStreamWriter.write_   s      *%%e,,,,,,,,,eZ(( 	(|s5zz))

3>%.11%88888888E ;"E

I{i''"kI5mm, F 
	#| #  E

****11'::E7K    E"""%''E'#$ jjll"""""""""
	# 
	# ('''r   status_lineheadersr!   c                    K   | j         |                      |           d{V  t          ||          }|                     |           dS )z*Write request/response status and headers.N)r0   _serialize_headersrG   )r1   rZ   r[   bufs       r    write_headerszStreamWriter.write_headers   s`        ,''000000000 !g66Cr   c                     d| _         dS )z&Indicate that the message is complete.TN)r%   r5   s    r    set_eofzStreamWriter.set_eof   s    			r   r   c                   K   | j         rd S |r"| j        |                     |           d {V  | j        rg }d}|rF| j                            |           d {V x}r$t	          |          }|                    |           | j                                        }|t	          |          z  }|                    |           |sJ | j        r5|dd                    d          }| 	                    |g|dR            nt	          |          dk    r| 	                    |           n| 
                    |d                    nu| j        rW|r?t	          |          dd                    d          }| 	                    ||df           n-| 
                    d           n|r| 
                    |           |                                  d {V  d| _         d S )	Nr   rP   rQ   rR   s   
0

r   s   0

T)r%   r/   r&   rW   rA   appendflushr$   rX   rK   rG   rL   )r1   r>   rH   
chunks_lencompressed_chunkflush_chunkchunk_len_pres          r    	write_eofzStreamWriter.write_eof   s:     9 	F 	-T(4%%e,,,,,,,,,> 	"$FJ 0DN4K4KE4R4R.R.R.R.R.R.RR* 0 !122
.///...00K#k***JMM+&&&| '#- 5 5 5 5 < <W E E  -!K&!K:J!K!KLLLLVq  ((((F1I&&&&\ 	 *#&u:: 5 5 5 5 < <W E E  -8H!IJJJJL)))) 	KKjjll			r   c                 p   K   | j         }|j        #|j        r|                                 d{V  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.   r4   _paused_drain_helper)r1   r'   s     r    rL   zStreamWriter.drain   sX       >)h.>)((*********** *)))r   )NN)r+   N)r   )$r   r   r   r#   r	   r   r   r$   boolr%   r&   r   r   asyncioAbstractEventLoop_T_OnChunkSent_T_OnHeadersSentr2   property	Transportr4   r'   r8   zlibZ_DEFAULT_STRATEGYstrr=   bytesrG   r   rK   rE   r_   ra   ri   rL   r   r   r    r   r   (   st         FHSM   GTD$*.Ix'... )-,0
B 
B
B '
B &	
B
 *
B 

B 
B 
B 
B (8G$56 ( ( ( X( ,    X    (9PN NN36N	N N N N
E d    	%(5/ 	%d 	% 	% 	% 	% .2*# *# *#*#&**#:=*#	*# *# *# *#X		);			 	 	 	   % %U %T % % % %N
+ 
+ 
+ 
+ 
+ 
+r   r   stringr+   c                 4    d| v sd| v rt          d          | S )N
zRNewline or carriage return detected in headers. Potential header injection attack.)
ValueError)rx   s    r    _safe_headerr}      s1    v~~1
 
 	
 Mr   rZ   r[   c                     d |                                 D             }| dz   d                    |          z   dz   }|                    d          S )Nc              3   `   K   | ])\  }}t          |          d z   t          |          z   V  *dS )z: N)r}   ).0kvs      r    	<genexpr>z(_py_serialize_headers.<locals>.<genexpr>   s<      XX1<??T)LOO;XXXXXXr   rQ   z

zutf-8)itemsjoinrX   )rZ   r[   headers_genlines       r    _py_serialize_headersr      sO    XXXXXK&++k":"::ZGD;;wr   )(__doc__rn   rt   typingr   r   r   r   r   r   r	   r
   	multidictr   abcr   base_protocolr   client_exceptionsr   compression_utilsr   helpersr   __all__r   r   r   rw   rp   rq   r   rv   r}   r   r]   aiohttp._http_writer_http_writer_c_serialize_headersImportErrorr   r   r    <module>r      sc   ( (  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 " ! ! ! ! ! % % % % % % ' ' ' ' ' ' 9 9 9 9 9 9 - - - - - - " " " " " "
K    *   
 Aq!!Aq!! (E7IdO#;<=H&8%99T?%JKL c+ c+ c+ c+ c+' c+ c+ c+L      s  5G  E         + 	//////': 212 2 	 	 	DD	s   <C CC