
    $Gg                        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j6                  cxk  xr dk  nc Zej6                  dk  Zexs e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+jR                  Z,ese,Z)yy# e-$ r Y y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HttpVersion11i   )      r   )r   r      )r      	   c                   "    e Zd ZU eed<   eed<   y)r   majorminorN)__name__
__module____qualname__int__annotations__     p/home/kushmeetdev/apache_webroot/langgraph_flaskproject/venv/lib/python3.12/site-packages/aiohttp/http_writer.pyr   r   '   s    JJr$   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j0                  fdededdfdZdeeeef   ddfdZde e   ddfdZ!ddddeeeef   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&y)(r   NlengthFchunked_eof	_compressprotocolloopon_chunk_senton_headers_sentreturnc                 <    || _         || _        || _        || _        y 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 r2   )r3   	transportr6   s    r%   r9   zStreamWriter.transportG   s    ~~'''r$   c                     | j                   S r2   )r3   r:   s    r%   r,   zStreamWriter.protocolK   s    ~~r$   c                     d| _         y )NT)r)   r:   s    r%   enable_chunkingzStreamWriter.enable_chunkingO   s	    r$   deflateencodingstrategyc                 (    t        ||      | _        y )N)r?   r@   )r   r+   )r6   r?   r@   s      r%   enable_compressionzStreamWriter.enable_compressionR   s     (HMr$   chunkc                     t        |      }| xj                  |z  c_        | xj                  |z  c_        | j                  j                  }||j                         rt        d      |j                  |       y )N!Cannot write to closing transport)lenbuffer_sizeoutput_sizer3   r9   
is_closingr   write)r6   rC   sizer9   s       r%   _writezStreamWriter._writeW   se    5zD D NN,,		 4 4 6,-PQQr$   chunksc                 n   d}|D ]  }|t        |      z  } | xj                  |z  c_        | xj                  |z  c_        | j                  j                  }||j                         rt        d      t        s	|t        k  r!|j                  dj                  |             y |j                  |       y )Nr   rE   r$   )rF   rG   rH   r3   r9   rI   r   SKIP_WRITELINESMIN_PAYLOAD_FOR_WRITELINESrJ   join
writelines)r6   rM   rK   rC   r9   s        r%   _writelineszStreamWriter._writelines`   s     	ECJD	D D NN,,		 4 4 6,-PQQd%??OOCHHV,-  (r$   Ti   )drainLIMITrT   rU   c                  K   | j                   | j                  |       d{    t        |t              r)|j                  t	        |      k7  r|j                  d      }| j                  &| j                  j                  |       d{   }|sy| j                  Ht	        |      }| j                  |k\  r| j                  |z
  | _        n|d| j                   }d| _        |sy|r| j                  r1| j                  t	        |      ddj                  d      |df       n| j                  |       | j                  |kD  r#|r d| _        | j                          d{    yyyy7 H7 7 w)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   
)r4   
isinstance
memoryviewnbytesrF   castr+   compressr(   r)   rS   encoderL   rG   rT   )r6   rC   rT   rU   	chunk_lens        r%   rJ   zStreamWriter.writen   sO     *%%e,,,eZ(||s5z)

3>>%..11%88E;;"E
I{{i'"kkI5m,||  E
1~T*11':E7K E"%'E#$ jjl"" -2' - - 90 #s5   !E2E+A'E2E.CE2"E0#	E2.E20E2status_lineheadersr&   c                    K   | j                   | j                  |       d{    t        ||      }| j                  |       y7 "w)z*Write request/response status and headers.N)r5   _serialize_headersrL   )r6   rb   rc   bufs       r%   write_headerszStreamWriter.write_headers   sG        ,''000 !g6C	 1s   !AA#Ac                     d| _         y)z&Indicate that the message is complete.TN)r*   r:   s    r%   set_eofzStreamWriter.set_eof   s	    	r$   c                   K   | j                   ry |r%| j                  | j                  |       d {    | j                  rg }d}|rA| j                  j                  |       d {   x}rt	        |      }|j                  |       | j                  j                         }|t	        |      z  }|j                  |       |sJ | j                  r-|ddj                  d      }| j                  |g|d       nt	        |      dkD  r| j                  |       n{| j                  |d          nf| j                  rG|r3t	        |      ddj                  d      }| j                  ||df       n%| j                  d       n|r| j                  |       | j                          d {    d| _         y 7 7 W7 w)	Nr   rX   rY   rZ   s   
0

r   s   0

T)r*   r4   r+   r_   rF   appendflushr)   r`   rS   rL   rT   )r6   rC   rM   
chunks_lencompressed_chunkflush_chunkchunk_len_pres          r%   	write_eofzStreamWriter.write_eof   s    99T((4%%e,,,>>"$FJDNN4K4KE4R.RR*R !12
./....0K#k**JMM+&:||#-a. 5 < <W E  -!K&!K:J!KLVq  (F1I&\\#&u:a. 5 < <W E  -8H!IJL)KKjjl	A -
 /S2 	s4   0GF;4G'F>(EG.G/G>GGc                    K   | j                   }|j                  &|j                  r|j                          d{    yyy7 w)zFlush the write buffer.

        The intended use is to write

          await w.write(data)
          await w.drain()
        N)r3   r9   _paused_drain_helper)r6   r,   s     r%   rT   zStreamWriter.drain   sB      >>)h.>.>((*** /?)*s   8AAA)NN)r0   N)r$   )'r   r   r    r(   r	   r!   r"   r)   boolr*   r+   r   r   asyncioAbstractEventLoop_T_OnChunkSent_T_OnHeadersSentr7   property	Transportr9   r,   r=   zlibZ_DEFAULT_STRATEGYstrrB   r
   bytes	bytearrayr\   rL   r   rS   rJ   rg   ri   rq   rT   r#   r$   r%   r   r   4   s    FHSM GTD$*.Ix'. )-,0
B
B ''
B &	
B
 *
B 

B (8G$5$56 ( ( ,   (9P9PNN36N	N
E%J">? D )(5/ )d )$ .#UIz12.# 	.#
 .# 
.#`		);			%U %T %N
+r$   r   stringr0   c                 ,    d| v sd| v rt        d      | S )N
zRNewline or carriage return detected in headers. Potential header injection attack.)
ValueError)r   s    r%   _safe_headerr      s(    v~1
 	
 Mr$   rb   rc   c                     d |j                         D        }| dz   dj                  |      z   dz   }|j                  d      S )Nc              3   V   K   | ]!  \  }}t        |      d z   t        |      z    # yw)z: N)r   ).0kvs      r%   	<genexpr>z(_py_serialize_headers.<locals>.<genexpr>   s&     X1<?T)LO;Xs   ')rY   z

zutf-8)itemsrQ   r`   )rb   rc   headers_genlines       r%   _py_serialize_headersr      s>    XXK&++k"::ZGD;;wr$   ).__doc__rv   sysr|   typingr   r   r   r   r   r   r	   r
   	multidictr   abcr   base_protocolr   client_exceptionsr   compression_utilsr   helpersr   __all__rP   version_infoIS_PY313_BEFORE_313_2IS_PY_BEFORE_312_9rO   r   r   r   r   rx   ry   r   r~   r   r   re   aiohttp._http_writer_http_writer_c_serialize_headersImportErrorr#   r$   r%   <module>r      sL   (  
 	 	 	 " % ' 9 - "
K " "c&6&6CC %%
2 '=+=* 
 Aq!Aq! (E7IdO#;<=H&8%99T?%JKL j+' j+Z   s  5G  E   + 	/'::1  		s   C+ +C32C3