o
    hJ                     @  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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   D/var/www/html/venv/lib/python3.10/site-packages/pymongo/collation.pyr	      s    r	   c                   @     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       r   c                   @  r   )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   r   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                   @  s\   e Zd ZdZdZ								d"d#ddZed$ddZd%ddZd&ddZ	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localestr	caseLevelOptional[bool]	caseFirstOptional[str]strengthOptional[int]numericOrdering	alternatemaxVariablenormalization	backwardskwargsr   returnNonec
                 K  s   t d|}d|i| _|d urtd|| jd< |d ur$t d|| jd< |d ur1t d|| jd< |d ur=td|| jd< |d urJt d|| jd< |d urWt d|| jd< |d urctd|| jd< |	d urot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__dict[str, Any]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`.
        )r1   copyr3   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r8   r   r   	<genexpr>   s     z%Collation.__repr__.<locals>.<genexpr>)r8   formatjoinr7   r   r<   r   __repr__   s   zCollation.__repr__otherboolc                 C  s   t |tr| j|jkS tS N)
isinstancer    r8   NotImplementedr3   rA   r   r   r   __eq__   s   
zCollation.__eq__c                 C  s
   | |k S rC   r   rF   r   r   r   __ne__   s   
zCollation.__ne__)NNNNNNNN)r!   r"   r#   r$   r%   r&   r'   r(   r)   r$   r*   r&   r+   r&   r,   r$   r-   r$   r.   r   r/   r0   )r/   r5   )r/   r"   )rA   r   r/   rB   )r   r   r   r   	__slots__r4   propertyr8   r@   rG   rH   r   r   r   r   r    c   s"    9#
	
r    value-Optional[Union[Mapping[str, Any], Collation]]r/   Optional[dict[str, Any]]c                 C  s2   | d u rd S t | tr| jS t | tr| S td)NzEcollation must be a dict, an instance of collation.Collation, or None)rD   r    r8   dict	TypeError)rK   r   r   r   validate_collation_or_none   s   

rP   N)rK   rL   r/   rM   )r   
__future__r   typingr   r   r   r   Zpymongor   Zpymongo.write_concernr   r	   r   r   r   r    rP   r   r   r   r   <module>   s   v