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>   zlibzstdsnappyreturnboolc                  C  $   zdd l } W dS  ty   Y dS w Nr   TF)r   ImportError)r    r   W/var/www/html/olx_land/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   compressors
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   r2   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&   r4   )selfr&   r4   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ZlibContextr4   ZstdContext)r6   r&   chosenr   r   r   get_compression_contexti   s   
z+CompressionSettings.get_compression_contextN)r&   r   r4   r+   )r&   r8   r   r9   )__name__
__module____qualname__r7   r>   r   r   r   r   r3   d   s    
r3   c                   @     e Zd ZdZedddZdS )	r:      databytesr   c                 C  s   dd l }|| S Nr   )r   compress)rD   r   r   r   r   rG   {   s   
zSnappyContext.compressNrD   rE   r   rE   r?   r@   rA   compressor_idstaticmethodrG   r   r   r   r   r:   x       r:   c                   @  s$   e Zd ZdZdddZdd	d
ZdS )r;   r   r1   r+   c                 C  s
   || _ d S r5   )r1   )r6   r1   r   r   r   r7      s   
zZlibContext.__init__rD   rE   r   c                 C  s   dd l }||| jS rF   )r	   rG   r1   )r6   rD   r	   r   r   r   rG      s   zZlibContext.compressN)r1   r+   rH   )r?   r@   rA   rJ   r7   rG   r   r   r   r   r;      s    
r;   c                   @  rB   )	r<      rD   rE   r   c                 C  s   dd l }| | S rF   )r   ZstdCompressorrG   )rD   r   r   r   r   rG      s   zZstdContext.compressNrH   rI   r   r   r   r   r<      rL   r<   rD   rE   rJ   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)r:   rJ   r   
uncompressrE   r;   r	   
decompressr<   r   ZstdDecompressorr0   )rD   rJ   r   r	   r   r   r   r   rP      s   



rP   )r   r   )r   r   r   r   r   r   )r)   r*   r   r   r   r+   )rD   rE   rJ   r+   r   rE   )
__future__r   r$   typingr   r   r   r   pymongo.hellor   pymongo.helpers_sharedr   r"   CMD
LEGACY_CMD_NO_COMPRESSIONupdater   r   r   r(   r2   r3   r:   r;   r<   rP   r   r   r   r   <module>   s$   


	
	
	
$

