
    3Cf-                     n   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	 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yy# e#$ r Y yw xY w)z"Http related parsers and protocol.    N)Any	AwaitableCallable
NamedTupleOptionalUnion)CIMultiDict   )AbstractStreamWriter)BaseProtocol)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__     S/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/aiohttp/http_writer.pyr   r      s    JJr   r   CIMultiDict[str]c                      e Zd Z	 	 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dddedededdfdZdeddddfdZddeddfdZddZy) r   Nprotocolloopon_chunk_senton_headers_sentreturnc                     || _         || _        d | _        d| _        d| _        d| _        d| _        d | _        d | _        || _	        || _
        y )NFr   )	_protocolr!   lengthchunkedbuffer_sizeoutput_size_eof	_compress_drain_waiter_on_chunk_sent_on_headers_sent)selfr    r!   r"   r#   s        r   __init__zStreamWriter.__init__   sV     "		37!.;2Ar   c                 .    | j                   j                  S N)r&   	transportr0   s    r   r4   zStreamWriter.transport5   s    ~~'''r   c                     | j                   S r3   )r&   r5   s    r   r    zStreamWriter.protocol9   s    ~~r   c                     d| _         y )NT)r(   r5   s    r   enable_chunkingzStreamWriter.enable_chunking=   s	    r   deflateencodingstrategyc                 (    t        ||      | _        y )N)r:   r;   )r   r,   )r0   r:   r;   s      r   enable_compressionzStreamWriter.enable_compression@   s     (HMr   chunkc                    t        |      }| xj                  |z  c_        | xj                  |z  c_        | j                  }| j                  j
                  r||j                         rt        d      |j                  |       y )Nz!Cannot write to closing transport)	lenr)   r*   r4   r&   	connected
is_closingConnectionResetErrorwrite)r0   r>   sizer4   s       r   _writezStreamWriter._writeE   sk    5zD D NN	~~''9+<	@T@T@V&'JKKr   Ti   )drainLIMITrG   rH   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|ru| j                  r%dt	        |      z  j                  d      }||z   dz   }| j                  |       | j                  |kD  r#|r d| _        | j                          d{    yyyy7 <7 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nbytesr@   castr,   compressr'   r(   encoderF   r)   rG   )r0   r>   rG   rH   	chunk_lenchunk_len_pres         r   rD   zStreamWriter.writeN   sE     *%%e,,,eZ(||s5z)

3>>%..11%88E;;"E
I{{i'"kkI5m,||!)CJ!6 > >w G%-7KK%'E#$ jjl"" -2' - - 9. #s5   !E&EA'E&E"C
E&E$	E&"E&$E&status_lineheadersr   c                    K   | j                   | j                  |       d{    t        ||      }| j                  |       y7 "w)z*Write request/response status and headers.N)r/   _serialize_headersrF   )r0   rU   rV   bufs       r   write_headerszStreamWriter.write_headersy   sG        ,''000 !g6C	 1s   !AA#Ac                 T  K   | j                   ry |r%| j                  | j                  |       d {    | j                  rv|r#| j                  j                  |       d {   }|| j                  j	                         z  }|rh| j
                  r\dt        |      z  j                  d      }||z   dz   }n6| j
                  r*|r&dt        |      z  j                  d      }||z   dz   }nd}|r| j                  |       | j                          d {    d| _         y 7 7 7 w)NrK   rL   s   
0

s   0

T)
r+   r.   r,   rQ   flushr(   r@   rR   rF   rG   )r0   r>   rS   s      r   	write_eofzStreamWriter.write_eof   s
    99T((4%%e,,,>>"nn55e<<T^^))++E%E
2::7C	!E),<<||!)CJ!6 > >w GI%-0@@E(EKKjjl	/ - =" 	s4   0D(D"0D(#D$$B1D(D&D($D(&D(c                    K   | j                   j                  #| j                   j                          d{    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   _drain_helperr5   s    r   rG   zStreamWriter.drain   s6      >>##/....000 00s   4?=?)NN)r$   N)r   )r   r   r   r   asyncioAbstractEventLoop_T_OnChunkSent_T_OnHeadersSentr1   propertyr   	Transportr4   r    r8   zlibZ_DEFAULT_STRATEGYstrr   r=   bytesrF   boolrD   rZ   r]   rG   r   r   r   r   r      s4   
 )-,0BB ''B &	B
 *B 
B, (8G$5$56 ( ( ,   (9P9PNN36N	N
E d  .2)#)#&*)#:=)#	)#V		);			U T <	1r   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)rk   s    r   _safe_headerrp      s(    v~1
 	
 Mr   rU   rV   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)rp   ).0kvs      r   	<genexpr>z(_py_serialize_headers.<locals>.<genexpr>   s&     X1<?T)LO;Xs   ')z
z

zutf-8)itemsjoinrR   )rU   rV   headers_genlines       r   _py_serialize_headersr{      s>    XXK&++k"::ZGD;;wr   )$__doc__r`   rf   typingr   r   r   r   r   r   	multidictr	   abcr   base_protocolr   compression_utilsr   helpersr   __all__r   r   r   ri   rb   rc   r   rh   rp   r{   rX   aiohttp._http_writer_http_writer_c_serialize_headersImportErrorr   r   r   <module>r      s   (   H H ! % ' - "
K* 
 Aq!Aq! (E7IdO#;<=H&8%99T?%JKL M1' M1`   s  5G  E   + 	/'::1  		s   B, ,B43B4