o
    h                     @  s   d dl mZ d dlZd dlmZmZmZmZ d dlm	Z	 d dl
mZ h dZe	je	jhZee d(d	d
Zd(ddZd(ddZd)ddZd*ddZG dd dZG dd dZG dd  d ZG d!d" d"Zd+d&d'ZdS ),    )annotationsN)AnyIterableOptionalUnion)HelloCompat)_SENSITIVE_COMMANDS>   zstdsnappyzlibreturnboolc                  C  $   zdd l } W dS  ty   Y dS w Nr   TF)r
   ImportError)r
    r   N/var/www/html/venv/lib/python3.10/site-packages/pymongo/compression_support.py_have_snappy      r   c                  C  r   r   )r   r   )r   r   r   r   
_have_zlib$   r   r   c                  C  r   r   )	zstandardr   )r   r   r   r   
_have_zstd-   r   r   dummyr   valueUnion[str, Iterable[str]]	list[str]c                 C  s   z| d}W n ty   t|}Y nw |d d  D ]Q}|tvr1|| tjd| dd q|dkrEt sE|| tjddd q|dkrYt sY|| tjddd q|d	krlt	 sl|| tjd
dd q|S )N,zUnsupported compressor:    )
stacklevelr
   zuWire protocol compression with snappy is not available. You must install the python-snappy module for snappy support.r   zWWire protocol compression with zlib is not available. The zlib module is not available.r	   zwWire protocol compression with zstandard is not available. You must install the zstandard module for zstandard support.)
splitAttributeErrorlist_SUPPORTED_COMPRESSORSremovewarningswarnr   r   r   )r   r   compressorsZ
compressorr   r   r   validate_compressors6   s:   



r'   optionstrintc                 C  sT   zt |}W n ty   t|  d|d w |dk s |dkr(td| |f |S )Nz must be an integer, not 	   z$%s must be between -1 and 9, not %d.)r*   	Exception	TypeError
ValueError)r(   r   levelr   r   r   validate_zlib_compression_levelZ   s   r1   c                   @  s    e Zd ZdddZdd
dZdS )CompressionSettingsr&   r   zlib_compression_levelr*   c                 C  s   || _ || _d S N)r&   r3   )selfr&   r3   r   r   r   __init__e   s   
zCompressionSettings.__init__Optional[list[str]]r   4Union[SnappyContext, ZlibContext, ZstdContext, None]c                 C  sB   |r|d }|dkrt  S |dkrt| jS |dkrt S d S d S )Nr   r
   r   r	   )SnappyContextZlibContextr3   ZstdContext)r5   r&   Zchosenr   r   r   get_compression_contexti   s   
z+CompressionSettings.get_compression_contextN)r&   r   r3   r*   )r&   r7   r   r8   )__name__
__module____qualname__r6   r<   r   r   r   r   r2   d   s    
r2   c                   @     e Zd ZdZedddZdS )	r9      databytesr   c                 C  s   dd l }|| S Nr   )r
   compress)rB   r
   r   r   r   rE   {   s   
zSnappyContext.compressNrB   rC   r   rC   r=   r>   r?   compressor_idstaticmethodrE   r   r   r   r   r9   x       r9   c                   @  s$   e Zd ZdZdddZdd	d
ZdS )r:   r   r0   r*   c                 C  s
   || _ d S r4   )r0   )r5   r0   r   r   r   r6      s   
zZlibContext.__init__rB   rC   r   c                 C  s   dd l }||| jS rD   )r   rE   r0   )r5   rB   r   r   r   r   rE      s   zZlibContext.compressN)r0   r*   rF   )r=   r>   r?   rH   r6   rE   r   r   r   r   r:      s    
r:   c                   @  r@   )	r;      rB   rC   r   c                 C  s   dd l }| | S rD   )r   ZZstdCompressorrE   )rB   r   r   r   r   rE      s   zZstdContext.compressNrF   rG   r   r   r   r   r;      rJ   r;   rB   rC   rH   c                 C  sj   |t jkrdd l}|t| S |tjkrdd l}|| S |tjkr.dd l	}|
 | S td|f )Nr   zUnknown compressorId %d)r9   rH   r
   
uncompressrC   r:   r   
decompressr;   r   ZZstdDecompressorr/   )rB   rH   r
   r   r   r   r   r   rM      s   



rM   )r   r   )r   r   r   r   r   r   )r(   r)   r   r   r   r*   )rB   rC   rH   r*   r   rC   )
__future__r   r$   typingr   r   r   r   Zpymongo.hellor   Zpymongo.helpers_sharedr   r"   ZCMDZ
LEGACY_CMDZ_NO_COMPRESSIONupdater   r   r   r'   r1   r2   r9   r:   r;   rM   r   r   r   r   <module>   s$   


	
	
	
$

