a
     ÑOc™A  ã                   @   sR  d Z ddlZddlZddlmZ ddlmZmZ ddlm	Z	m
Z
mZmZ ddlmZ z
ejZW n  ey~   ee d¡ƒZY n0 g d	¢Zd
d„ Zdd„ Zedd„ ƒZedddd�G dd„ dƒƒZdd„ Zedddd�G dd„ dƒƒZdFdd„Zedddd�G dd„ dƒƒZdd„ Zedddd�G d d!„ d!ƒƒZd"d#„ Zedddd�G d$d%„ d%ƒƒZd&d'„ Z edddd�G d(d)„ d)ƒƒZ!d*d+„ Z"edddd�G d,d-„ d-ƒƒZ#dGd.d/„Z$edddd�G d0d1„ d1ƒƒZ%dHd2d3„Z&edddd�G d4d5„ d5ƒƒZ'd6d7„ Z(d8d9„ Z)d:d;„ Z*d<d=„ Z+edddd�G d>d?„ d?ƒƒZ,d@dA„ Z-edddd�G dBdC„ dCƒƒZ.dDdE„ Z/dS )Iz
Commonly useful validators.
é    N)Úcontextmanageré   )Úget_run_validatorsÚset_run_validators)Ú_AndValidatorÚand_ÚattribÚattrs)ÚNotCallableErrorÚ )r   Údeep_iterableÚdeep_mappingÚdisabledÚgeÚget_disabledÚgtÚin_Úinstance_ofÚis_callableÚleÚltÚ
matches_reÚmax_lenÚmin_lenÚoptionalÚprovidesÚset_disabledc                 C   s   t |  ƒ dS )a  
    Globally disable or enable running validators.

    By default, they are run.

    :param disabled: If ``True``, disable running all validators.
    :type disabled: bool

    .. warning::

        This function is not thread-safe!

    .. versionadded:: 21.3.0
    N©r   )r   © r   úF/var/www/html/gsl.tools/lib/python3.9/site-packages/attr/validators.pyr   .   s    r   c                   C   s   t ƒ  S )zÀ
    Return a bool indicating whether validators are currently disabled or not.

    :return: ``True`` if validators are currently disabled.
    :rtype: bool

    .. versionadded:: 21.3.0
    )r   r   r   r   r   r   @   s    	r   c                   c   s*   t dƒ zdV  W t dƒ n
t dƒ 0 dS )z°
    Context manager that disables running validators within its context.

    .. warning::

        This context manager is not thread-safe!

    .. versionadded:: 21.3.0
    FNTr   r   r   r   r   r   L   s    r   FT)ÚreprÚslotsÚhashc                   @   s"   e Zd Zeƒ Zdd„ Zdd„ ZdS )Ú_InstanceOfValidatorc                 C   s4   t || jƒs0tdj|j| j|j|d�|| j|ƒ‚dS )úP
        We use a callable class to be able to change the ``__repr__``.
        z?'{name}' must be {type!r} (got {value!r} that is a {actual!r}).)ÚnameÚtypeÚactualÚvalueN)Ú
isinstancer&   Ú	TypeErrorÚformatr%   Ú	__class__©ÚselfÚinstÚattrr(   r   r   r   Ú__call__b   s    ûöz_InstanceOfValidator.__call__c                 C   s   dj | jd�S )Nz)<instance_of validator for type {type!r}>©r&   )r+   r&   ©r.   r   r   r   Ú__repr__t   s    ÿz_InstanceOfValidator.__repr__N)Ú__name__Ú
__module__Ú__qualname__r   r&   r1   r4   r   r   r   r   r#   ^   s   r#   c                 C   s   t | ƒS )aÓ  
    A validator that raises a `TypeError` if the initializer is called
    with a wrong type for this particular attribute (checks are performed using
    `isinstance` therefore it's also valid to pass a tuple of types).

    :param type: The type to check for.
    :type type: type or tuple of types

    :raises TypeError: With a human readable error message, the attribute
        (of type `attrs.Attribute`), the expected type, and the value it
        got.
    )r#   r2   r   r   r   r   z   s    r   )r    Úfrozenr!   c                   @   s(   e Zd Zeƒ Zeƒ Zdd„ Zdd„ ZdS )Ú_MatchesReValidatorc                 C   s0   |   |¡s,tdj|j| jj|d�|| j|ƒ‚dS )r$   z9'{name}' must match regex {pattern!r} ({value!r} doesn't))r%   Úpatternr(   N)Ú
match_funcÚ
ValueErrorr+   r%   r:   r-   r   r   r   r1   �   s    
þùz_MatchesReValidator.__call__c                 C   s   dj | jd�S )Nz.<matches_re validator for pattern {pattern!r}>)r:   )r+   r:   r3   r   r   r   r4   ž   s    ÿz_MatchesReValidator.__repr__N)r5   r6   r7   r   r:   r;   r1   r4   r   r   r   r   r9   Š   s   r9   c              	   C   sœ   t jdt jt jf}||vr@td d tdd„ t|ƒD ƒƒ¡¡ƒ‚t	| t
ƒr\|rVtdƒ‚| }nt  | |¡}|t ju rz|j}n|t ju rŒ|j}n|j}t||ƒS )aœ  
    A validator that raises `ValueError` if the initializer is called
    with a string that doesn't match *regex*.

    :param regex: a regex string or precompiled pattern to match against
    :param int flags: flags that will be passed to the underlying re function
        (default 0)
    :param callable func: which underlying `re` function to call. Valid options
        are `re.fullmatch`, `re.search`, and `re.match`; the default ``None``
        means `re.fullmatch`. For performance reasons, the pattern is always
        precompiled using `re.compile`.

    .. versionadded:: 19.2.0
    .. versionchanged:: 21.3.0 *regex* can be a pre-compiled pattern.
    Nz'func' must be one of {}.z, c                 s   s   | ]}|r|j pd V  qdS )ÚNoneN)r5   )Ú.0Úer   r   r   Ú	<genexpr>¹   s   zmatches_re.<locals>.<genexpr>zR'flags' can only be used with a string pattern; pass flags to re.compile() instead)ÚreÚ	fullmatchÚsearchÚmatchr<   r+   ÚjoinÚsortedÚsetr)   ÚPatternr*   Úcompiler9   )ÚregexÚflagsÚfuncZvalid_funcsr:   r;   r   r   r   r   ¤   s0    ÿÿÿÿ

ÿ

r   c                   @   s"   e Zd Zeƒ Zdd„ Zdd„ ZdS )Ú_ProvidesValidatorc                 C   s0   | j  |¡s,tdj|j| j |d�|| j |ƒ‚dS )r$   z<'{name}' must provide {interface!r} which {value!r} doesn't.)r%   Ú	interfacer(   N)rN   Z
providedByr*   r+   r%   r-   r   r   r   r1   Ø   s    
þùz_ProvidesValidator.__call__c                 C   s   dj | jd�S )Nz0<provides validator for interface {interface!r}>©rN   )r+   rN   r3   r   r   r   r4   ç   s    ÿz_ProvidesValidator.__repr__N)r5   r6   r7   r   rN   r1   r4   r   r   r   r   rM   Ô   s   rM   c                 C   s   t | ƒS )a)  
    A validator that raises a `TypeError` if the initializer is called
    with an object that does not provide the requested *interface* (checks are
    performed using ``interface.providedBy(value)`` (see `zope.interface
    <https://zopeinterface.readthedocs.io/en/latest/>`_).

    :param interface: The interface to check for.
    :type interface: ``zope.interface.Interface``

    :raises TypeError: With a human readable error message, the attribute
        (of type `attrs.Attribute`), the expected interface, and the
        value it got.
    )rM   rO   r   r   r   r   í   s    r   c                   @   s"   e Zd Zeƒ Zdd„ Zdd„ ZdS )Ú_OptionalValidatorc                 C   s   |d u rd S |   |||¡ d S )N©Ú	validatorr-   r   r   r   r1     s    z_OptionalValidator.__call__c                 C   s   dj t| jƒd�S )Nz'<optional validator for {what} or None>)Úwhat)r+   r    rR   r3   r   r   r   r4     s    ÿz_OptionalValidator.__repr__N)r5   r6   r7   r   rR   r1   r4   r   r   r   r   rP   þ   s   rP   c                 C   s   t | tƒrtt| ƒƒS t| ƒS )aÂ  
    A validator that makes an attribute optional.  An optional attribute is one
    which can be set to ``None`` in addition to satisfying the requirements of
    the sub-validator.

    :param validator: A validator (or a list of validators) that is used for
        non-``None`` values.
    :type validator: callable or `list` of callables.

    .. versionadded:: 15.1.0
    .. versionchanged:: 17.1.0 *validator* can be a list of validators.
    )r)   ÚlistrP   r   rQ   r   r   r   r     s    
r   c                   @   s"   e Zd Zeƒ Zdd„ Zdd„ ZdS )Ú_InValidatorc                 C   sN   z|| j v }W n ty$   d}Y n0 |sJtdj|j| j |d�|| j |ƒ‚d S )NFz/'{name}' must be in {options!r} (got {value!r}))r%   Úoptionsr(   )rV   r*   r<   r+   r%   )r.   r/   r0   r(   Z
in_optionsr   r   r   r1   $  s    

ÿúz_InValidator.__call__c                 C   s   dj | jd�S )Nz(<in_ validator with options {options!r}>©rV   )r+   rV   r3   r   r   r   r4   4  s    ÿz_InValidator.__repr__N)r5   r6   r7   r   rV   r1   r4   r   r   r   r   rU      s   rU   c                 C   s   t | ƒS )a¶  
    A validator that raises a `ValueError` if the initializer is called
    with a value that does not belong in the options provided.  The check is
    performed using ``value in options``.

    :param options: Allowed options.
    :type options: list, tuple, `enum.Enum`, ...

    :raises ValueError: With a human readable error message, the attribute (of
       type `attrs.Attribute`), the expected options, and the value it
       got.

    .. versionadded:: 17.1.0
    .. versionchanged:: 22.1.0
       The ValueError was incomplete until now and only contained the human
       readable error message. Now it contains all the information that has
       been promised since 17.1.0.
    )rU   rW   r   r   r   r   :  s    r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_IsCallableValidatorc                 C   s,   t |ƒs(d}t|j|j||jd�|d�‚dS )r$   z?'{name}' must be callable (got {value!r} that is a {actual!r}).)r%   r(   r'   )Úmsgr(   N)Úcallabler
   r+   r%   r,   )r.   r/   r0   r(   Úmessager   r   r   r1   R  s    ÿ
ÿüz_IsCallableValidator.__call__c                 C   s   dS )Nz<is_callable validator>r   r3   r   r   r   r4   b  s    z_IsCallableValidator.__repr__N)r5   r6   r7   r1   r4   r   r   r   r   rX   P  s   rX   c                   C   s   t ƒ S )ax  
    A validator that raises a `attr.exceptions.NotCallableError` if the
    initializer is called with a value for this particular attribute
    that is not callable.

    .. versionadded:: 19.1.0

    :raises `attr.exceptions.NotCallableError`: With a human readable error
        message containing the attribute (`attrs.Attribute`) name,
        and the value it got.
    )rX   r   r   r   r   r   f  s    r   c                   @   s:   e Zd Zeeƒ d�Zedeeƒ ƒd�Zdd„ Zdd„ Z	dS )Ú_DeepIterablerQ   N©ÚdefaultrR   c                 C   s4   | j dur|   |||¡ |D ]}|  |||¡ qdS ©r$   N)Úiterable_validatorÚmember_validator)r.   r/   r0   r(   Úmemberr   r   r   r1   |  s    
z_DeepIterable.__call__c                 C   s,   | j d u rdndj| j d�}dj|| jd�S )Nr   z {iterable!r})ÚiterablezJ<deep_iterable validator for{iterable_identifier} iterables of {member!r}>)Úiterable_identifierrb   )r`   r+   ra   )r.   rd   r   r   r   r4   †  s    ÿýÿûz_DeepIterable.__repr__)
r5   r6   r7   r   r   ra   r   r`   r1   r4   r   r   r   r   r\   u  s   
ÿ
r\   c                 C   s    t | ttfƒrt| Ž } t| |ƒS )a4  
    A validator that performs deep validation of an iterable.

    :param member_validator: Validator(s) to apply to iterable members
    :param iterable_validator: Validator to apply to iterable itself
        (optional)

    .. versionadded:: 19.1.0

    :raises TypeError: if any sub-validators fail
    )r)   rT   Útupler   r\   )ra   r`   r   r   r   r   •  s    r   c                   @   sF   e Zd Zeeƒ d�Zeeƒ d�Zedeeƒ ƒd�Zdd„ Z	dd„ Z
dS )Ú_DeepMappingrQ   Nr]   c                 C   sF   | j dur|   |||¡ |D ]$}|  |||¡ |  |||| ¡ qdS r_   )Úmapping_validatorÚkey_validatorÚvalue_validator)r.   r/   r0   r(   Úkeyr   r   r   r1   ¬  s
    
z_DeepMapping.__call__c                 C   s   dj | j| jd�S )NzA<deep_mapping validator for objects mapping {key!r} to {value!r}>)rj   r(   )r+   rh   ri   r3   r   r   r   r4   ·  s    ÿþz_DeepMapping.__repr__)r5   r6   r7   r   r   rh   ri   r   rg   r1   r4   r   r   r   r   rf   ¦  s
   rf   c                 C   s   t | ||ƒS )a}  
    A validator that performs deep validation of a dictionary.

    :param key_validator: Validator to apply to dictionary keys
    :param value_validator: Validator to apply to dictionary values
    :param mapping_validator: Validator to apply to top-level mapping
        attribute (optional)

    .. versionadded:: 19.1.0

    :raises TypeError: if any sub-validators fail
    )rf   )rh   ri   rg   r   r   r   r   ½  s    r   c                   @   s.   e Zd Zeƒ Zeƒ Zeƒ Zdd„ Zdd„ ZdS )Ú_NumberValidatorc                 C   s.   |   || j¡s*tdj|j| j| j|d�ƒ‚dS )r$   z&'{name}' must be {op} {bound}: {value})r%   ÚopÚboundr(   N)Úcompare_funcrm   r<   r+   r%   Ú
compare_opr-   r   r   r   r1   Ó  s    üÿz_NumberValidator.__call__c                 C   s   dj | j| jd�S )Nz<Validator for x {op} {bound}>)rl   rm   )r+   ro   rm   r3   r   r   r   r4   á  s    ÿz_NumberValidator.__repr__N)	r5   r6   r7   r   rm   ro   rn   r1   r4   r   r   r   r   rk   Í  s
   rk   c                 C   s   t | dtjƒS )zÇ
    A validator that raises `ValueError` if the initializer is called
    with a number larger or equal to *val*.

    :param val: Exclusive upper bound for values

    .. versionadded:: 21.3.0
    ú<)rk   Úoperatorr   ©Úvalr   r   r   r   ç  s    	r   c                 C   s   t | dtjƒS )zÁ
    A validator that raises `ValueError` if the initializer is called
    with a number greater than *val*.

    :param val: Inclusive upper bound for values

    .. versionadded:: 21.3.0
    z<=)rk   rq   r   rr   r   r   r   r   ó  s    	r   c                 C   s   t | dtjƒS )zÁ
    A validator that raises `ValueError` if the initializer is called
    with a number smaller than *val*.

    :param val: Inclusive lower bound for values

    .. versionadded:: 21.3.0
    z>=)rk   rq   r   rr   r   r   r   r   ÿ  s    	r   c                 C   s   t | dtjƒS )zÈ
    A validator that raises `ValueError` if the initializer is called
    with a number smaller or equal to *val*.

    :param val: Exclusive lower bound for values

    .. versionadded:: 21.3.0
    ú>)rk   rq   r   rr   r   r   r   r     s    	r   c                   @   s"   e Zd Zeƒ Zdd„ Zdd„ ZdS )Ú_MaxLengthValidatorc                 C   s.   t |ƒ| jkr*tdj|j| jt |ƒd�ƒ‚dS )r$   z*Length of '{name}' must be <= {max}: {len})r%   ÚmaxÚlenN)rw   Ú
max_lengthr<   r+   r%   r-   r   r   r   r1     s    ÿÿz_MaxLengthValidator.__call__c                 C   s   dj | jd�S )Nz<max_len validator for {max}>)rv   )r+   rx   r3   r   r   r   r4   &  s    z_MaxLengthValidator.__repr__N)r5   r6   r7   r   rx   r1   r4   r   r   r   r   ru     s   ru   c                 C   s   t | ƒS )zæ
    A validator that raises `ValueError` if the initializer is called
    with a string or iterable that is longer than *length*.

    :param int length: Maximum length of the string or iterable

    .. versionadded:: 21.3.0
    )ru   ©Úlengthr   r   r   r   *  s    	r   c                   @   s"   e Zd Zeƒ Zdd„ Zdd„ ZdS )Ú_MinLengthValidatorc                 C   s.   t |ƒ| jk r*tdj|j| jt |ƒd�ƒ‚dS )r$   z*Length of '{name}' must be => {min}: {len})r%   Úminrw   N)rw   Ú
min_lengthr<   r+   r%   r-   r   r   r   r1   :  s    ÿÿz_MinLengthValidator.__call__c                 C   s   dj | jd�S )Nz<min_len validator for {min}>)r|   )r+   r}   r3   r   r   r   r4   E  s    z_MinLengthValidator.__repr__N)r5   r6   r7   r   r}   r1   r4   r   r   r   r   r{   6  s   r{   c                 C   s   t | ƒS )zç
    A validator that raises `ValueError` if the initializer is called
    with a string or iterable that is shorter than *length*.

    :param int length: Minimum length of the string or iterable

    .. versionadded:: 22.1.0
    )r{   ry   r   r   r   r   I  s    	r   )r   N)N)N)0Ú__doc__rq   rA   Ú
contextlibr   Ú_configr   r   Ú_maker   r   r   r	   Ú
exceptionsr
   rH   ÚAttributeErrorr&   rI   Ú__all__r   r   r   r#   r   r9   r   rM   r   rP   r   rU   r   rX   r   r\   r   rf   r   rk   r   r   r   r   ru   r   r{   r   r   r   r   r   Ú<module>   sf   


0

