o
    4˜Žjà=  ã                   @   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   úV/var/www/kodo/Anonymous/send/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