o
    m=8j=                     @   s  U d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
mZmZmZ ejdkr5d dlmZ nd dlmZ eeedd	f Zzzd dlZW n eyW   d dlZY nw d
ZW n eyf   dZY nw zejdkrtd dlmZ nd dlmZ d
ZW n ey   dZY nw dZd ZdZG dd deZG dd deZ G dd deZ!G dd deddZ"G dd dZ#e#eZ$e#e%d< de!ddfddZ&		d.d e'dB d!e(de)fd"d#Z*G d$d% d%eZ+G d&d' d'Z,G d(d) d)e+Z-G d*d+ d+e+Z.G d,d- d-e+Z/dS )/    N)ABCabstractmethod)Executor)AnyFinalProtocol	TypedDictcast)      )Buffer)Unionzmemoryview[int]zmemoryview[bytes]TF)r
      )ZstdDecompressori   c                   @   s2   e Zd ZdedefddZd
dedefddZd	S )ZLibCompressObjProtocoldatareturnc                 C      d S N selfr   r   r   `/home/nk/hobo-godmode/plappi-mvp/.venv/lib/python3.10/site-packages/aiohttp/compression_utils.pycompress,       z ZLibCompressObjProtocol.compress.modec                C   r   r   r   r   r   r   r   r   flush-   r   zZLibCompressObjProtocol.flushN.)__name__
__module____qualname__r   bytesr   intr   r   r   r   r   r   +   s    r   c                   @   sn   e Zd ZddededefddZddedefdd	Zede	fd
dZ
edefddZedefddZdS )ZLibDecompressObjProtocol.r   
max_lengthr   c                 C   r   r   r   r   r   r&   r   r   r   
decompress1   r   z$ZLibDecompressObjProtocol.decompresslengthc                C   r   r   r   r   r)   r   r   r   r   2   r   zZLibDecompressObjProtocol.flushc                 C   r   r   r   r   r   r   r   eof4      zZLibDecompressObjProtocol.eofc                 C   r   r   r   r+   r   r   r   unconsumed_tail7   r-   z)ZLibDecompressObjProtocol.unconsumed_tailc                 C   r   r   r   r+   r   r   r   unused_data:   r-   z%ZLibDecompressObjProtocol.unused_dataNr   )r    r!   r"   r   r$   r#   r(   r   propertyboolr,   r.   r/   r   r   r   r   r%   0   s    r%   c                   @   s   e Zd ZU eed< eed< eed< eed< eed< 						ddeded	ed
edededB defddZ	dd	ededefddZ		dded	edede
fddZ	dd	ededede
fddZdS )ZLibBackendProtocol	MAX_WBITSZ_FULL_FLUSHZ_SYNC_FLUSHZ_BEST_SPEEDZ_FINISH.levelmethodwbitsmemLevelstrategyzdictNr   c                 C   r   r   r   )r   r8   r9   r:   r;   r<   r=   r   r   r   compressobjE   s   zZLibBackendProtocol.compressobjc                 C   r   r   r   )r   r:   r=   r   r   r   decompressobjN      z!ZLibBackendProtocol.decompressobjr   c                C   r   r   r   )r   r   r8   r:   r   r   r   r   R   r@   zZLibBackendProtocol.compressbufsizec                C   r   r   r   )r   r   r:   rA   r   r   r   r(   U   r@   zZLibBackendProtocol.decompress)......)..)r    r!   r"   r$   __annotations__r   r   r>   r%   r?   r#   r   r(   r   r   r   r   r2   >   sn   
 



r2   c                   @   s&   e Zd ZU eed< eed< eed< dS )CompressObjArgsr:   r<   r8   N)r    r!   r"   r$   rB   r   r   r   r   rC   Z   s   
 rC   )totalc                   @   s   e Zd ZdefddZedefddZedefddZ	edefd	d
Z
edefddZedefddZedefddZdededefddZdededefddZdedededefddZdedededefddZdedefddZdS ) ZLibBackendWrapper_zlib_backendc                 C   s
   || _ d S r   )rF   )r   rF   r   r   r   __init__a      
zZLibBackendWrapper.__init__r   c                 C   s   t | jddS )Nr    	undefinedgetattrrF   r+   r   r   r   named   s   zZLibBackendWrapper.namec                 C      | j jS r   )rF   r3   r+   r   r   r   r3   h      zZLibBackendWrapper.MAX_WBITSc                 C   rM   r   )rF   r4   r+   r   r   r   r4   l   rN   zZLibBackendWrapper.Z_FULL_FLUSHc                 C   rM   r   )rF   r5   r+   r   r   r   r5   p   rN   zZLibBackendWrapper.Z_SYNC_FLUSHc                 C   rM   r   )rF   r6   r+   r   r   r   r6   t   rN   zZLibBackendWrapper.Z_BEST_SPEEDc                 C   rM   r   )rF   r7   r+   r   r   r   r7   x   rN   zZLibBackendWrapper.Z_FINISHargskwargsc                 O      | j j|i |S r   )rF   r>   r   rO   rP   r   r   r   r>   |      zZLibBackendWrapper.compressobjc                 O   rQ   r   )rF   r?   rR   r   r   r   r?      rS   z ZLibBackendWrapper.decompressobjr   c                 O      | j j|g|R i |S r   )rF   r   r   r   rO   rP   r   r   r   r         zZLibBackendWrapper.compressc                 O   rT   r   )rF   r(   rU   r   r   r   r(      rV   zZLibBackendWrapper.decompressattrnamec                 C   s   t | j|S r   rJ   )r   rW   r   r   r   __getattr__      zZLibBackendWrapper.__getattr__N)r    r!   r"   r2   rG   r0   strrL   r$   r3   r4   r5   r6   r7   r   r   r>   r%   r?   r   r#   r   r(   rX   r   r   r   r   rE   `   s&    rE   ZLibBackendnew_zlib_backendr   c                 C   s
   | t _d S r   )r[   rF   )r\   r   r   r   set_zlib_backend   rH   r]   encodingsuppress_deflate_headerc                 C   s$   | dkr	dt j S |rt j S t jS )Ngzip   )r[   r3   )r^   r_   r   r   r   encoding_to_mode   s   
rb   c                   @   sz   e Zd ZdefdedB dedB fddZeefde	dede
fd	d
Zefde	dede
fddZeedefddZdS )DecompressionBaseHandlerNexecutormax_sync_chunk_sizec                 C   s   || _ || _dS )z&Base class for decompression handlers.N)	_executor_max_sync_chunk_sizer   rd   re   r   r   r   rG      s   
z!DecompressionBaseHandler.__init__r   r&   r   c                 C      dS Decompress the given data.Nr   r'   r   r   r   decompress_sync   r   z(DecompressionBaseHandler.decompress_syncc                    sD   | j durt|| j krt | j| j||I dH S | ||S rj   )rg   lenasyncioget_event_looprun_in_executorrf   rl   r'   r   r   r   r(      s   

z#DecompressionBaseHandler.decompressc                 C   ri   )z7Return True if more output is available by passing b"".Nr   r+   r   r   r   data_available   r   z'DecompressionBaseHandler.data_available)r    r!   r"   MAX_SYNC_CHUNK_SIZEr   r$   rG   r   ZLIB_MAX_LENGTH_UNLIMITEDr   r#   rl   r(   r0   r1   rq   r   r   r   r   rc      s8    
	
rc   c                   @   s   e Zd ZddddddefdedB dededB dedB dedB dedB d	edB fd
dZde	de
fddZde	de
fddZddedB de
fddZdS )ZLibCompressorNFr^   r_   r8   r:   r<   rd   re   c           	      C   sv   || _ || _|d u rt||n|| _ttj| _i }| j|d< |d ur'||d< |d ur/||d< | jjdi || _d S )Nr:   r<   r8   r   )	rf   rg   rb   _moderE   r[   rF   r>   _compressor)	r   r^   r_   r8   r:   r<   rd   re   rP   r   r   r   rG      s   


zZLibCompressor.__init__r   r   c                 C   s   | j |S r   )rv   r   r   r   r   r   compress_sync   rY   zZLibCompressor.compress_syncc                    sF   | j duot|| j k}|rt | j| jj|I dH S | |S )a  Compress the data and returned the compressed bytes.

        Note that flush() must be called after the last call to compress()

        If the data size is large than the max_sync_chunk_size, the compression
        will be done in the executor. Otherwise, the compression will be done
        in the event loop.

        **WARNING: This method is NOT cancellation-safe when used with flush().**
        If this operation is cancelled, the compressor state may be corrupted.
        The connection MUST be closed after cancellation to avoid data corruption
        in subsequent compress operations.

        For cancellation-safe compression (e.g., WebSocket), the caller MUST wrap
        compress() + flush() + send operations in a shield and lock to ensure atomicity.
        N)	rg   rm   rn   get_running_looprp   rf   rv   r   rw   )r   r   should_use_executorr   r   r   r      s   


zZLibCompressor.compressr   c                 C   s   | j |dur
|S | jjS )a	  Flush the compressor synchronously.

        **WARNING: This method is NOT cancellation-safe when called after compress().**
        The flush() operation accesses shared compressor state. If compress() was
        cancelled, calling flush() may result in corrupted data. The connection MUST
        be closed after compress() cancellation.

        For cancellation-safe compression (e.g., WebSocket), the caller MUST wrap
        compress() + flush() + send operations in a shield and lock to ensure atomicity.
        N)rv   r   rF   r7   r   r   r   r   r      s
   
zZLibCompressor.flushr   )r    r!   r"   rr   rZ   r1   r$   r   rG   r   r#   rw   r   r   r   r   r   r   rt      s4    
rt   c                
       s   e Zd ZdddefdedB dededB dedB f fddZe	fd	e
d
edefddZddedefddZedefddZedefddZ  ZS )ZLibDecompressorNFr^   r_   rd   re   c                    sJ   t  j||d t||| _ttj| _| jj| jd| _d| _	d | _
d S )Nrd   re   r:   F)superrG   rb   ru   rE   r[   rF   r?   _decompressor_last_empty_pending_unused_data)r   r^   r_   rd   re   	__class__r   r   rG     s   
zZLibDecompressor.__init__r   r&   r   c                 C   s   | j d ur| j t| }d | _ | j| jj| |}|dk| _| jjr^| jjr^| jj}| jj	| j
d| _|tkrF|t|8 }|dkrF|| _ n| j||}|dk| _||7 }| jjr^| jjs'| jjrr| j
| jjkrr| jj	| j
d| _|S )N    r|   r   )r   r#   r~   r(   r.   r   r,   r/   rF   r?   ru   rs   rm   r3   )r   r   r&   resultunusedchunkr   r   r   rl     s,   


z ZLibDecompressor.decompress_syncr   r)   c                 C   s   |dkr
| j |S | j  S Nr   )r~   r   r*   r   r   r   r   ?  s
   
zZLibDecompressor.flushc                 C   s   t | jjp| j p| jd uS r   )r1   r~   r.   r   r   r+   r   r   r   rq   F  s
   zZLibDecompressor.data_availablec                 C   rM   r   )r~   r,   r+   r   r   r   r,   N  rN   zZLibDecompressor.eof)r   )r    r!   r"   rr   rZ   r1   r   r$   rG   rs   r   r#   rl   r   r0   rq   r,   __classcell__r   r   r   r   rz     s6    
$rz   c                       r   e Zd ZdefdedB dedB ddf fddZefdedede	fd	d
Z
de	fddZedefddZ  ZS )BrotliDecompressorNrd   re   r   c                    s0   t stdt | _d| _t j||d dS )z)Decompress data using the Brotli library.zIThe brotli decompression is not available. Please install `Brotli` moduleFr{   N)
HAS_BROTLIRuntimeErrorbrotliDecompressor_objr   r}   rG   rh   r   r   r   rG   W  s   
zBrotliDecompressor.__init__r   r&   c                 C   s|   t | jdr|tkrtt| j|}n#tt| j||}n|tkr-tt| j|}n
tt| j||}|dk| _|S )rk   r(   r   )hasattrr   rs   r	   r#   r(   processr   )r   r   r&   r   r   r   r   rl   f  s   
z"BrotliDecompressor.decompress_syncc                 C   s    t | jdrtt| j S dS )zFlush the decompressor.r   r   )r   r   r	   r#   r   r+   r   r   r   r   x  s   zBrotliDecompressor.flushc                 C   s   | j   o	| j S r   )r   is_finishedr   r+   r   r   r   rq   ~  s   z!BrotliDecompressor.data_availabler    r!   r"   rr   r   r$   rG   rs   r   r#   rl   r   r0   r1   rq   r   r   r   r   r   r   S  s*    
r   c                       r   )ZSTDDecompressorNrd   re   r   c                    s.   t stdt | _d | _t j||d d S )NzOThe zstd decompression is not available. Please install `backports.zstd` moduler{   )HAS_ZSTDr   r   r   r   r}   rG   rh   r   r   r   rG     s   zZSTDDecompressor.__init__r   r&   c                 C   s   |t krtn|}| jd ur| j| }d | _| j||}| jjrO| jjrO| jj}t | _|tkr>|t|8 }|dkr>|| _n|| j||7 }| jjrO| jjs$| jjrWt | _|S r   )	rs   ZSTD_MAX_LENGTH_UNLIMITEDr   r   r(   r,   r/   r   rm   )r   r   r&   zstd_max_lengthr   r/   r   r   r   rl     s*   

z ZSTDDecompressor.decompress_syncc                 C   ri   )Nr   r   r+   r   r   r   r     r-   zZSTDDecompressor.flushc                 C   s   | j j o	| j j p| jd uS r   )r   needs_inputr,   r   r+   r   r   r   rq     s   zZSTDDecompressor.data_availabler   r   r   r   r   r     s*    
&r   )NF)0rn   syszlibabcr   r   concurrent.futuresr   typingr   r   r   r   r	   version_infocollections.abcr   r   r#   	bytearray
brotlicffir   ImportErrorr   compression.zstdr   backports.zstdr   rr   rs   r   r   r%   r2   rC   rE   r[   rB   r]   rZ   r1   r$   rb   rc   rt   rz   r   r   r   r   r   r   <module>   sh   
 

-

#KG0