<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    ^u_,              	   @   s  d Z ddlmZmZmZ ddlZddlmZmZm	Z	m
Z
 ddlmZ ddd	d
dddddg	Ze
ddddG dd deZdd Ze
ddddG dd deZd,ddZe
ddddG dd deZdd Ze
ddddG dd deZdd Ze
ddddG d d! d!eZd"d
 Ze
ddddG d#d$ d$eZd%d Ze
ddddG d&d' d'eZd-d(dZe
ddddG d)d* d*eZd.d+d	ZdS )/z
Commonly useful validators.
    )absolute_importdivisionprint_functionN   )_AndValidatorand_attribattrs)NotCallableErrorr   deep_iterabledeep_mappingin_instance_ofis_callable
matches_reoptionalprovidesFT)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 )zP
        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"   @/opt/alt/python37/lib/python3.7/site-packages/attr/validators.py__call__   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__0   s    z_InstanceOfValidator.__repr__N)__name__
__module____qualname__r   r   r$   r%   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 `attr.Attribute`), the expected type, and the value it
        got.
    )r   )r   r"   r"   r#   r   6   s    )r   frozenr   c               @   s.   e Zd Ze 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 )zP
        We use a callable class to be able to change the ``__repr__``.
        z7'{name}' must match regex {regex!r} ({value!r} doesn't))r   regexr   N)
match_func
ValueErrorr   r   r+   pattern)r   r    r!   r   r"   r"   r#   r$   L   s    
z_MatchesReValidator.__call__c             C   s   dj | jdS )Nz,<matches_re validator for pattern {regex!r}>)r+   )r   r+   )r   r"   r"   r#   r%   [   s    z_MatchesReValidator.__repr__N)	r&   r'   r(   r   r+   flagsr,   r$   r%   r"   r"   r"   r#   r*   F   s
   r*   c             C   s   t tdd}|dtjtjf}||krJtddtdd t|D f t| |}|tjkrh|j}n6|tjkrz|j}n$|r|j	}ntd
| |}|j}t|||S )a}  
    A validator that raises `ValueError` if the initializer is called
    with a string that doesn't match *regex*.

    :param str regex: a regex string 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 (options
        are `re.fullmatch`, `re.search`, `re.match`, default
        is ``None`` which means either `re.fullmatch` or an emulation of
        it on Python 2). For performance reasons, they won't be used directly
        but on a pre-`re.compile`\ ed pattern.

    .. versionadded:: 19.2.0
    	fullmatchNz'func' must be one of %s.z, c             s   s   | ]}|r|j pd V  qdS )NoneN)r&   ).0er"   r"   r#   	<genexpr>y   s    zmatches_re.<locals>.<genexpr>z(?:{})\Z)getattrresearchmatchr-   joinsortedsetcompiler0   r   r*   )r+   r/   funcr0   Zvalid_funcsr.   r,   r"   r"   r#   r   a   s$    

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 )zP
        We use a callable class to be able to change the ``__repr__``.
        z<'{name}' must provide {interface!r} which {value!r} doesn't.)r   	interfacer   N)r?   Z
providedByr   r   r   )r   r    r!   r   r"   r"   r#   r$      s    z_ProvidesValidator.__call__c             C   s   dj | jdS )Nz0<provides validator for interface {interface!r}>)r?   )r   r?   )r   r"   r"   r#   r%      s    z_ProvidesValidator.__repr__N)r&   r'   r(   r   r?   r$   r%   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 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 `attr.Attribute`), the expected interface, and the
        value it got.
    )r>   )r?   r"   r"   r#   r      s    c               @   s"   e Zd Ze Zdd Zdd ZdS )_OptionalValidatorc             C   s   |d krd S |  ||| d S )N)	validator)r   r    r!   r   r"   r"   r#   r$      s    z_OptionalValidator.__call__c             C   s   dj t| jdS )Nz'<optional validator for {what} or None>)Zwhat)r   r   rA   )r   r"   r"   r#   r%      s    z_OptionalValidator.__repr__N)r&   r'   r(   r   rA   r$   r%   r"   r"   r"   r#   r@      s   r@   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   listr@   r   )rA   r"   r"   r#   r      s    
c               @   s"   e Zd Ze Zdd Zdd ZdS )_InValidatorc             C   sH   y|| j k}W n tk
r&   d}Y nX |sDtdj|j| j |dd S )NFz/'{name}' must be in {options!r} (got {value!r}))r   optionsr   )rD   r   r-   r   r   )r   r    r!   r   Z
in_optionsr"   r"   r#   r$      s    
z_InValidator.__call__c             C   s   dj | jdS )Nz(<in_ validator with options {options!r}>)rD   )r   rD   )r   r"   r"   r#   r%      s    z_InValidator.__repr__N)r&   r'   r(   r   rD   r$   r%   r"   r"   r"   r#   rC      s   rC   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 `attr.Attribute`), the expected options, and the value it
       got.

    .. versionadded:: 17.1.0
    )rC   )rD   r"   r"   r#   r      s    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 )zP
        We use a callable class to be able to change the ``__repr__``.
        z?'{name}' must be callable (got {value!r} that is a {actual!r}).)r   r   r   )msgr   N)callabler
   r   r   r   )r   r    r!   r   messager"   r"   r#   r$     s    z_IsCallableValidator.__call__c             C   s   dS )Nz<is_callable validator>r"   )r   r"   r"   r#   r%     s    z_IsCallableValidator.__repr__N)r&   r'   r(   r$   r%   r"   r"   r"   r#   rE     s   rE   c               C   s   t  S )aw  
    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 (`attr.Attribute`) name,
        and the value it got.
    )rE   r"   r"   r"   r#   r     s    c               @   s:   e Zd Zee dZedee dZdd Zdd Z	dS )_DeepIterable)rA   N)defaultrA   c             C   s8   | j dk	r|  ||| x|D ]}| ||| qW dS )zP
        We use a callable class to be able to change the ``__repr__``.
        N)iterable_validatormember_validator)r   r    r!   r   memberr"   r"   r#   r$   /  s    

z_DeepIterable.__call__c             C   s,   | j d krdndj| j d}dj|| jdS )N z {iterable!r})iterablezJ<deep_iterable validator for{iterable_identifier} iterables of {member!r}>)iterable_identifierrM   )rK   r   rL   )r   rP   r"   r"   r#   r%   9  s
    z_DeepIterable.__repr__)
r&   r'   r(   r   r   rL   r   rK   r$   r%   r"   r"   r"   r#   rI   (  s
   
rI   c             C   s
   t | |S )a1  
    A validator that performs deep validation of an iterable.

    :param member_validator: Validator 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
    )rI   )rL   rK   r"   r"   r#   r   H  s    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 )_DeepMapping)rA   N)rJ   rA   c             C   sJ   | j dk	r|  ||| x,|D ]$}| ||| | ||||  qW dS )zP
        We use a callable class to be able to change the ``__repr__``.
        N)mapping_validatorkey_validatorvalue_validator)r   r    r!   r   keyr"   r"   r#   r$   ]  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}>)rU   r   )r   rS   rT   )r   r"   r"   r#   r%   h  s    z_DeepMapping.__repr__)r&   r'   r(   r   r   rS   rT   r   rR   r$   r%   r"   r"   r"   r#   rQ   W  s
   rQ   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
    )rQ   )rS   rT   rR   r"   r"   r#   r   n  s    )r   N)N)N)__doc__Z
__future__r   r   r   r6   _maker   r   r   r	   
exceptionsr
   __all__objectr   r   r*   r   r>   r   r@   r   rC   r   rE   r   rI   r   rQ   r   r"   r"   r"   r#   <module>   sJ   
-
