a
    `g                     @   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odk n  Zejdk Zepe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%e&e&dddZ'e&de"dddZ(e(Z)z ddl*m+Z+ e+j)Z,esde,Z)W n e-yz   Y n0 dS )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!   a/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/aiohttp/http_writer.pyr   '   s   
r   CIMultiDict[str]c                   @   sF  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,eejeedddd	Zeeej d
ddZeed
ddZdd
ddZdejfeeddddZeeeef ddddZe e ddddZ!dddeeeef eedddd Z"ed!dd"d#d$Z#dd
d%d&Z$d-eddd(d)Z%dd
d*d+Z&dS ).r   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__)r,   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strategyr,   c                 C   s   t ||d| _d S )N)r7   r8   )r   r'   )r1   r7   r8   r!   r!   r"   enable_compressionR   s    zStreamWriter.enable_compression)chunkr,   c                 C   sR   t |}|  j|7  _|  j|7  _| jj}|d u s<| rDt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)chunksr,   c                 C   s   d}|D ]}|t |7 }q|  j|7  _|  j|7  _| jj}|d u sN| rVtdtsb|tk rt|	d
| n
|| 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LIMIT)r:   rJ   rK   r,   c                   s
  | j dur|  |I dH  t|tr<|jt|kr<|d}| jdur`| j|I dH }|s`dS | jdurt|}| j|kr| j| | _n|d| j }d| _|sdS |r| j	r| 
t|ddd|df n
| | | j|kr|rd| _|  I dH  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   Z	chunk_lenr!   r!   r"   r@   n   s4    






zStreamWriter.writer#   status_lineheadersr,   c                    s2   | 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                    sL  | j r
d S |r(| jd ur(| |I d H  | jrg }d}|rb| j|I d H  }rbt|}|| | j }|t|7 }|| |sJ | jr|ddd}| 	|g|dR  n&t|dkr| 	| n| 
|d  nR| jr$|rt|ddd}| 	||df n
| 
d n|r4| 
| |  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   Z
chunks_lenZcompressed_chunkZflush_chunkZchunk_len_prer!   r!   r"   	write_eof   s:    



zStreamWriter.write_eofc                    s(   | j }|jdur$|jr$| I dH  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)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\   r_   rJ   r!   r!   r!   r"   r   4   sN   
  	1'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)rn   r!   r!   r"   _safe_header   s
    rr   rV   c                 C   s2   dd |  D }| d d| d }|dS )Nc                 s   s&   | ]\}}t |d  t | V  qdS )z: N)rr   ).0kvr!   r!   r"   	<genexpr>   rD   z(_py_serialize_headers.<locals>.<genexpr>rN   z

zutf-8)itemsrG   rU   )rW   rX   Zheaders_genliner!   r!   r"   _py_serialize_headers   s    ry   ).__doc__rc   sysri   typingr   r   r   r   r   r   r   r	   Z	multidictr
   abcr   Zbase_protocolr   Zclient_exceptionsr   Zcompression_utilsr   helpersr   __all__rF   version_infoZIS_PY313_BEFORE_313_2ZIS_PY_BEFORE_312_9rE   r   r   r   rl   re   rf   r   rk   rr   ry   rY   Zaiohttp._http_writerZ_http_writerZ_c_serialize_headersImportErrorr!   r!   r!   r"   <module>   s@   (


 .	