a
   %{Q                   @   sZ   d Z ddlmZmZmZ ddlmZ ddlmZ dd Z	dd	 Z
d
d Zdd Ze ZdS )z%
Commonly used hooks for on_setattr.
    )absolute_importdivisionprint_function   )_configFrozenAttributeErrorc                     s    fdd}|S )zf
    Run all *setters* and return the return value of the last one.

    .. versionadded:: 20.1.0
    c                    s   |} D ]}|| ||}q|S )N )instanceattrib	new_valuervsettersettersr	   0/usr/lib/python3.9/site-packages/attr/setters.pywrapped_pipe   s    zpipe.<locals>.wrapped_piper	   )r   r   r	   r   r   pipe   s    r   c                 C   s
   t  dS )zL
    Prevent an attribute to be modified.

    .. versionadded:: 20.1.0
    Nr   )___Z___r	   r	   r   frozen   s    r   c                 C   s,   t jdu r|S |j}|s|S || || |S )z^
    Run *attrib*'s validator on *new_value* if it has one.

    .. versionadded:: 20.1.0
    F)r   Z_run_validatorsZ	validator)r
   r   r   vr	   r	   r   validate&   s    
r   c                 C   s   |j }|r||S |S )z
    Run *attrib*'s converter -- if it has one --  on *new_value* and return the
    result.

    .. versionadded:: 20.1.0
    )Z	converter)r
   r   r   cr	   r	   r   convert8   s    r   N)__doc__Z
__future__r   r   r    r   
exceptionsr   r   r   r   r   objectZNO_OPr	   r	   r	   r   <module>   s   	