
    gw                        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%jF                  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HttpVersion11c                   "    e Zd ZU eed<   eed<   y)r   majorminorN)__name__
__module____qualname__int__annotations__     H/var/www/openai/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 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| _         y )NT)r$   r5   s    r    enable_chunkingzStreamWriter.enable_chunkingC   s	    r   deflateencodingstrategyc                 (    t        ||      | _        y )N)r:   r;   )r   r&   )r1   r:   r;   s      r    enable_compressionzStreamWriter.enable_compressionF   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_sizer.   r4   
is_closingr   write)r1   r>   sizer4   s       r    _writezStreamWriter._writeK   se    5zD D NN,,		 4 4 6,-PQQr   chunksc                 ,   d}|D ]  }|t        |      z  } | xj                  |z  c_        | xj                  |z  c_        | j                  j                  }||j                         rt        d      |j                  dj                  |             y )Nr   r@   r   )	rA   rB   rC   r.   r4   rD   r   rE   join)r1   rH   rF   r>   r4   s        r    _writelineszStreamWriter._writelinesT   s    ECJD D D NN,,		 4 4 6,-PQQ()r   Ti   )drainLIMITrL   rM   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   
)r/   
isinstance
memoryviewnbytesrA   castr&   compressr#   r$   rK   encoderG   rB   rL   )r1   r>   rL   rM   	chunk_lens        r    rE   zStreamWriter.write_   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)r0   _serialize_headersrG   )r1   rZ   r[   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%   r5   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   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    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)r.   r4   _paused_drain_helper)r1   r'   s     r    rL   zStreamWriter.drain   sB      >>)h.>.>((*** /?)*s   8AAA)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=   r
   bytes	bytearrayrT   rG   r   rK   rE   r_   ra   ri   rL   r   r   r    r   r   (   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   stringr+   c                 ,    d| v sd| v rt        d      | S )N
zRNewline or carriage return detected in headers. Potential header injection attack.)
ValueError)ry   s    r    _safe_headerr~      s(    v~1
 	
 Mr   rZ   r[   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;s   ')rQ   z

zutf-8)itemsrJ   rX   )rZ   r[   headers_genlines       r    _py_serialize_headersr      s>    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      s   (  	 	 	 " % ' 9 - "
K* 
 Aq!Aq! (E7IdO#;<=H&8%99T?%JKL g+' g+T   s  5G  E   + 	/'::1  		s   B6 6B>=B>