U
    ~fhJ                     @  s   d Z ddlmZ ddlmZmZmZmZ ddlm	Z	 ddl
mZ G 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ZdS )zTools for working with `collations`_.

.. _collations: https://www.mongodb.com/docs/manual/reference/collation/

.. seealso:: This module is compatible with both the synchronous and asynchronous PyMongo APIs.
    )annotations)AnyMappingOptionalUnion)common)validate_booleanc                   @  s$   e Zd ZdZdZdZdZdZdZdS )CollationStrengthzd
    An enum that defines values for `strength` on a
    :class:`~pymongo.collation.Collation`.
                   N)	__name__
__module____qualname____doc__ZPRIMARYZ	SECONDARYZTERTIARYZ
QUATERNARYZ	IDENTICAL r   r   5/tmp/pip-unpacked-wheel-36gvocj8/pymongo/collation.pyr	      s   r	   c                   @  s   e Zd ZdZdZdZdS )CollationAlternateze
    An enum that defines values for `alternate` on a
    :class:`~pymongo.collation.Collation`.
    znon-ignorableZshiftedN)r   r   r   r   ZNON_IGNORABLEZSHIFTEDr   r   r   r   r   3   s   r   c                   @  s   e Zd ZdZdZdZdS )CollationMaxVariablezh
    An enum that defines values for `max_variable` on a
    :class:`~pymongo.collation.Collation`.
    punctspaceN)r   r   r   r   ZPUNCTSPACEr   r   r   r   r   F   s   r   c                   @  s   e Zd ZdZdZdZdZdS )CollationCaseFirstzf
    An enum that defines values for `case_first` on a
    :class:`~pymongo.collation.Collation`.
    upperloweroffN)r   r   r   r   ZUPPERZLOWERZOFFr   r   r   r   r   S   s
   r   c                   @  sx   e Zd ZdZdZdddddddddddd	d
ddZeddddZddddZdddddZ	dddddZ
dS )	Collationa'
  Collation

    :param locale: (string) The locale of the collation. This should be a string
        that identifies an `ICU locale ID` exactly. For example, ``en_US`` is
        valid, but ``en_us`` and ``en-US`` are not. Consult the MongoDB
        documentation for a list of supported locales.
    :param caseLevel: (optional) If ``True``, turn on case sensitivity if
        `strength` is 1 or 2 (case sensitivity is implied if `strength` is
        greater than 2). Defaults to ``False``.
    :param caseFirst: (optional) Specify that either uppercase or lowercase
        characters take precedence. Must be one of the following values:

          * :data:`~CollationCaseFirst.UPPER`
          * :data:`~CollationCaseFirst.LOWER`
          * :data:`~CollationCaseFirst.OFF` (the default)

    :param strength: Specify the comparison strength. This is also
        known as the ICU comparison level. This must be one of the following
        values:

          * :data:`~CollationStrength.PRIMARY`
          * :data:`~CollationStrength.SECONDARY`
          * :data:`~CollationStrength.TERTIARY` (the default)
          * :data:`~CollationStrength.QUATERNARY`
          * :data:`~CollationStrength.IDENTICAL`

        Each successive level builds upon the previous. For example, a
        `strength` of :data:`~CollationStrength.SECONDARY` differentiates
        characters based both on the unadorned base character and its accents.

    :param numericOrdering: If ``True``, order numbers numerically
        instead of in collation order (defaults to ``False``).
    :param alternate: Specify whether spaces and punctuation are
        considered base characters. This must be one of the following values:

          * :data:`~CollationAlternate.NON_IGNORABLE` (the default)
          * :data:`~CollationAlternate.SHIFTED`

    :param maxVariable: When `alternate` is
        :data:`~CollationAlternate.SHIFTED`, this option specifies what
        characters may be ignored. This must be one of the following values:

          * :data:`~CollationMaxVariable.PUNCT` (the default)
          * :data:`~CollationMaxVariable.SPACE`

    :param normalization: If ``True``, normalizes text into Unicode
        NFD. Defaults to ``False``.
    :param backwards: If ``True``, accents on characters are
        considered from the back of the word to the front, as it is done in some
        French dictionary ordering traditions. Defaults to ``False``.
    :param kwargs: Keyword arguments supplying any additional options
        to be sent with this Collation object.

    .. versionadded: 3.4

    )Z
__documentNstrzOptional[bool]zOptional[str]zOptional[int]r   None)locale	caseLevel	caseFirststrengthnumericOrdering	alternatemaxVariablenormalization	backwardskwargsreturnc
                 K  s   t d|}d|i| _|d k	r.td|| jd< |d k	rHt d|| jd< |d k	rbt d|| jd< |d k	rztd|| jd< |d k	rt d|| jd< |d k	rt d|| jd< |d k	rtd|| jd< |	d k	rtd	|	| jd	< | j|
 d S )
Nr!   r"   r#   r$   r%   r&   r'   r(   r)   )r   Zvalidate_string_Collation__documentr   Zvalidate_integerupdate)selfr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r   r   r   __init__   s,    
 
zCollation.__init__zdict[str, Any])r+   c                 C  s
   | j  S )zThe document representation of this collation.

        .. note::
          :class:`Collation` is immutable. Mutating the value of
          :attr:`document` does not mutate this :class:`Collation`.
        )r,   copyr.   r   r   r   document   s    zCollation.documentc                   s$   | j  dd fdd D S )NzCollation({})z, c                 3  s    | ]}| d  | V  qdS )=Nr   ).0keyr2   r   r   	<genexpr>   s     z%Collation.__repr__.<locals>.<genexpr>)r2   formatjoinr1   r   r6   r   __repr__   s    zCollation.__repr__bool)otherr+   c                 C  s   t |tr| j|jkS tS N)
isinstancer   r2   NotImplementedr.   r<   r   r   r   __eq__   s    
zCollation.__eq__c                 C  s
   | |k S r=   r   r@   r   r   r   __ne__   s    zCollation.__ne__)NNNNNNNN)r   r   r   r   	__slots__r/   propertyr2   r:   rA   rB   r   r   r   r   r   c   s    9        $#	r   z-Optional[Union[Mapping[str, Any], Collation]]zOptional[dict[str, Any]])valuer+   c                 C  s6   | d krd S t | tr| jS t | tr*| S tdd S )NzFcollation must be a dict, an instance of collation.Collation, or None.)r>   r   r2   dict	TypeError)rE   r   r   r   validate_collation_or_none   s    

rH   N)r   
__future__r   typingr   r   r   r   Zpymongor   Zpymongo.write_concernr   r	   r   r   r   r   rH   r   r   r   r   <module>   s   v