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__PRIMARY	SECONDARYTERTIARY
QUATERNARY	IDENTICAL r   r   M/var/www/html/olx_land/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-ignorableshiftedN)r   r   r   r   NON_IGNORABLE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   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   UPPERLOWER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

    )
__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.   r0   r2   r4   r6   r7   r8   r9   r:   )r   validate_string_Collation__documentr   validate_integerupdate)selfr.   r0   r2   r4   r6   r7   r8   r9   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`.
        )r?   copyrB   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rG   r   r   	<genexpr>   s     z%Collation.__repr__.<locals>.<genexpr>)rG   formatjoinrF   r   rK   r   __repr__   s   zCollation.__repr__otherboolc                 C  s   t |tr| j|jkS tS N)
isinstancer,   rG   NotImplementedrB   rP   r   r   r   __eq__   s   
zCollation.__eq__c                 C  s
   | |k S rR   r   rU   r   r   r   __ne__   s   
zCollation.__ne__)NNNNNNNN)r.   r/   r0   r1   r2   r3   r4   r5   r6   r1   r7   r3   r8   r3   r9   r1   r:   r1   r;   r   r<   r=   )r<   rD   )r<   r/   )rP   r   r<   rQ   )r   r   r   r   	__slots__rC   propertyrG   rO   rV   rW   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)rS   r,   rG   dict	TypeError)rZ   r   r   r   validate_collation_or_none   s   

r_   N)rZ   r[   r<   r\   )r   
__future__r   typingr   r   r   r   pymongor   pymongo.write_concernr   r	   r   r    r%   r,   r_   r   r   r   r   <module>   s   v