U
    Û~fhÎ	  ã                   @  s8   d Z ddlmZ ddlmZmZ G dd„ dƒZeƒ ZdS )z‡Tools for working with read concerns.

.. seealso:: This module is compatible with both the synchronous and asynchronous PyMongo APIs.
é    )Úannotations)ÚAnyÚOptionalc                   @  sv   e Zd ZdZddddœdd„Zeddœd	d
„ƒZeddœdd„ƒZeddœdd„ƒZdddœdd„Z	ddœdd„Z
dS )ÚReadConcernaŽ  ReadConcern

    :param level: (string) The read concern level specifies the level of
          isolation for read operations.  For example, a read operation using a
          read concern level of ``majority`` will only return data that has been
          written to a majority of nodes. If the level is left unspecified, the
          server default will be used.

    .. versionadded:: 3.2

    NzOptional[str]ÚNone)ÚlevelÚreturnc                 C  s&   |d kst |tƒr|| _ntdƒ‚d S )Nzlevel must be a string or None.)Ú
isinstanceÚstrÚ_ReadConcern__levelÚ	TypeError)Úselfr   © r   ú8/tmp/pip-unpacked-wheel-36gvocj8/pymongo/read_concern.pyÚ__init__%   s    zReadConcern.__init__)r   c                 C  s   | j S )zThe read concern level.)r   ©r   r   r   r   r   +   s    zReadConcern.levelÚboolc                 C  s   | j dkp| j dkS )zdReturn ``True`` if this read concern is compatible with
        old wire protocol versions.
        NÚlocal©r   r   r   r   r   Úok_for_legacy0   s    zReadConcern.ok_for_legacyzdict[str, Any]c                 C  s   i }| j r| j|d< |S )zÖThe document representation of this read concern.

        .. note::
          :class:`ReadConcern` is immutable. Mutating the value of
          :attr:`document` does not mutate this :class:`ReadConcern`.
        r   )r   r   )r   Údocr   r   r   Údocument7   s    
zReadConcern.documentr   )Úotherr   c                 C  s   t |tƒr| j|jkS tS )N)r	   r   r   ÚNotImplemented)r   r   r   r   r   Ú__eq__D   s    
zReadConcern.__eq__r
   c                 C  s   | j rd| j  S dS )NzReadConcern(%s)zReadConcern()r   r   r   r   r   Ú__repr__I   s    
zReadConcern.__repr__)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   r   r   r   r   r   r   r   r   r      s   r   N)r   Ú
__future__r   Útypingr   r   r   ZDEFAULT_READ_CONCERNr   r   r   r   Ú<module>   s   7