U
    d                     @  s`  d dl mZ d dlZd dlmZmZmZmZmZ zd dl	Z	dZ
W n ek
rX   dZ
Y nX zd dlZdZW n ek
r   dZY nX zd dlmZmZ dZW n ek
r   dZY nX d dlmZ d dlmZ d	d
dhZejejhZee ddddddZddd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d d!d"Z!dS )#    )annotationsN)AnyIterableListOptionalUnionTF)ZstdCompressorZstdDecompressor)HelloCompat)_SENSITIVE_COMMANDSsnappyzlibzstdr   zUnion[str, Iterable[str]]	List[str])dummyvaluereturnc                 C  s   z| d}W n tk
r*   t|}Y nX |d d  D ]}|tkr`|| td|  q8|dkrts|| td q8|dkrts|| td q8|dkr8t	s8|| td q8|S )	N,zUnsupported compressor: r   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warn_HAVE_SNAPPY
_HAVE_ZLIB
_HAVE_ZSTD)r   r   compressorsZ
compressor r   ?/tmp/pip-unpacked-wheel-oblwsawz/pymongo/compression_support.pyvalidate_compressors2   s0    



r!   strint)optionr   r   c                 C  sZ   zt |}W n( tk
r4   t|  d|dY nX |dk sF|dkrVt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_levelS   s    r,   c                   @  s,   e Zd ZdddddZdddd	d
ZdS )CompressionSettingsr   r#   r   zlib_compression_levelc                 C  s   || _ || _d S Nr.   )selfr   r/   r   r   r    __init__^   s    zCompressionSettings.__init__zOptional[List[str]]z4Union[SnappyContext, ZlibContext, ZstdContext, None])r   r   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ZlibContextr/   ZstdContext)r1   r   Zchosenr   r   r    get_compression_contextb   s    
z+CompressionSettings.get_compression_contextN)__name__
__module____qualname__r2   r6   r   r   r   r    r-   ]   s   r-   c                   @  s$   e Zd ZdZedddddZdS )r3      bytesdatar   c                 C  s
   t | S r0   )r   compressr=   r   r   r    r>   t   s    zSnappyContext.compressNr7   r8   r9   compressor_idstaticmethodr>   r   r   r   r    r3   q   s   r3   c                   @  s.   e Zd ZdZddddZddddd	Zd
S )r4      r#   r+   c                 C  s
   || _ d S r0   rD   )r1   r+   r   r   r    r2   |   s    zZlibContext.__init__r;   r<   c                 C  s   t || jS r0   )r   r>   r+   )r1   r=   r   r   r    r>      s    zZlibContext.compressN)r7   r8   r9   rA   r2   r>   r   r   r   r    r4   y   s   r4   c                   @  s$   e Zd ZdZedddddZdS )r5      r;   r<   c                 C  s   t  | S r0   )r   r>   r?   r   r   r    r>      s    zZstdContext.compressNr@   r   r   r   r    r5      s   r5   r;   )r=   rA   r   c                 C  sT   |t jkrtt| S |tjkr,t| S |tjkrBt	 | S t
d|f d S )NzUnknown compressorId %d)r3   rA   r   
uncompressr;   r4   r   
decompressr5   r	   r*   )r=   rA   r   r   r    rG      s    



rG   )"
__future__r   r   typingr   r   r   r   r   r   r   ImportErrorr   r   Z	zstandardr   r	   r   Zpymongo.hellor
   Zpymongo.monitoringr   r   ZCMDZ
LEGACY_CMDZ_NO_COMPRESSIONupdater!   r,   r-   r3   r4   r5   rG   r   r   r   r    <module>   s:   




!


