
    `B                     ^    d dl Z d dlZd dlmZ d dlZd dlmZ  G d de          Zd Zd Z	dS )    N)OrderedDict	decoratorc                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )ValidationFailurec                 H    || _         | j                            |           d S N)func__dict__update)selfr
   argss      0lib/python3.11/site-packages/validators/utils.py__init__zValidationFailure.__init__
   s%    	T"""""    c                     d                     | j        j        t          d | j                                        D                                 S )Nz+ValidationFailure(func={func}, args={args})c                 (    g | ]\  }}|d k    ||fS )r
    ).0kvs      r   
<listcomp>z.ValidationFailure.__repr__.<locals>.<listcomp>   s%    KKKFQqF{{!Q{{{r   )r
   r   )formatr
   __name__dictr   itemsr   s    r   __repr__zValidationFailure.__repr__   sT    =DD#KKdm&9&9&;&;KKK  E 
 
 	
r   c                      t          |           S r	   reprr   s    r   __str__zValidationFailure.__str__       Dzzr   c                      t          |           S r	   r    r   s    r   __unicode__zValidationFailure.__unicode__   r#   r   c                     dS NFr   r   s    r   __bool__zValidationFailure.__bool__       ur   c                     dS r'   r   r   s    r   __nonzero__zValidationFailure.__nonzero__   r)   r   N)	r   
__module____qualname__r   r   r"   r%   r(   r+   r   r   r   r   r   	   sn        # # #
 
 
          r   r   c           	         t           j        rt          j        }nt          j        }t          t          j        t          j	         ||           d         |
                                                              }t          t          t           j                            ||                    t          |                                          z             S )zb
    Return given function's positional and key value arguments as an ordered
    dictionary.
    r   )sixPY2inspect
getargspecgetfullargspeclistr   fromkeys	itertoolschainkeysmoveszipr   )r
   r   kwargs_getargspec	arg_namess        r   func_args_as_dictr>   #   s    
 w -(,OD!!!$ 	
 	
 I SY]]9d++,,V\\^^	  r   c                 (    d }t          ||           S )a  
    A decorator that makes given function validator.

    Whenever the given function is called and returns ``False`` value
    this decorator returns :class:`ValidationFailure` object.

    Example::

        >>> @validator
        ... def even(value):
        ...     return not (value % 2)

        >>> even(4)
        True

        >>> even(5)
        ValidationFailure(func=even, args={'value': 5})

    :param func: function to decorate
    :param args: positional function arguments
    :param kwargs: key value function arguments
    c                 X     | |i |}|st          | t          | ||                    S dS )NT)r   r>   )r
   r   r;   values       r   wrapperzvalidator.<locals>.wrapperR   sI    d%f%% 	$'dF;;   tr   r   )r
   r   r;   rB   s       r   	validatorrC   ;   s#    .   Wd###r   )
r1   r6   collectionsr   r/   r   	Exceptionr   r>   rC   r   r   r   <module>rF      s         # # # # # # 



          	   4  0$ $ $ $ $r   