a
    h                     @  s   d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
 d dlZddlmZ ddlmZ d	d
lmZ d	dlmZmZ d	dlmZmZmZ dddddZdddddZdddddZG dd dZdS )    )annotationsN)	Awaitable)partial)AnyCallable   )
ConfigDict)create_schema_validator   )ConfigWrapper)GenerateSchemaValidateCallSupportedTypes)MappingNamespace
NsResolverns_for_functionr   str)funcreturnc                 C  s"   t | tjrd| jj dS | jS )z:Extract the name of a `ValidateCallSupportedTypes` object.partial())
isinstance	functoolsr   r   __name__r    r   ]/var/www/html/assistant/venv/lib/python3.9/site-packages/pydantic/_internal/_validate_call.pyextract_function_name   s    r   c                 C  s"   t | tjrd| jj dS | jS )z>Extract the qualname of a `ValidateCallSupportedTypes` object.r   r   )r   r   r   r   __qualname__r   r   r   r   extract_function_qualname   s    r   zCallable[..., Any])wrappedwrapperc                   sV   t | r"t|  fdd}nt|  fdd}t| |_t| |_| |_|S )ziUpdate the `wrapper` function with the attributes of the `wrapped` function. Return the updated function.c                    s    | i |I d H S Nr   argskwargsr    r   r   wrapper_function    s    z3update_wrapper_attributes.<locals>.wrapper_functionc                    s    | i |S r!   r   r"   r%   r   r   r&   %   s    )	inspectiscoroutinefunctionr   wrapsr   r   r   r   Zraw_function)r   r    r&   r   r%   r   update_wrapper_attributes   s    


r*   c                   @  sJ   e Zd ZdZdZddddddd	d
ZddddZddddddZdS )ValidateCallWrapperzoThis is a wrapper around a function that validates the arguments passed to it, and optionally the return value.)
functionvalidate_returnschema_typemodulequalnamens_resolverconfig_wrapper__pydantic_complete____pydantic_validator____return_pydantic_validator__r   zConfigDict | NoneboolzMappingNamespace | NoneNone)r,   configr-   parent_namespacer   c                 C  s~   || _ || _t|tr*|j| _|jj| _n|| _|j| _t|| _	t
t| j|dd| _t|| _| jjst|   nd| _d S )N)r9   )Znamespaces_tupleF)r,   r-   r   r   r   r.   
__module__r/   r   r0   r   r   r1   r   r2   Zdefer_build_create_validatorsr3   )selfr,   r8   r-   r9   r   r   r   __init__A   s    



zValidateCallWrapper.__init__)r   c                   s   t | j| j}||| j}| jj| jd}t|| j	| j
| jd|| jj| _| jrt| j}|j|jurt|jnt}t | j| j}|||}t|| j	| j
| jd|| jj t| jrddd fdd}|| _q j| _nd | _d| _d S )	N)titleZvalidate_callzAwaitable[Any]r7   )awr   c                   s     | I d H S r!   )validate_python)r?   Z	validatorr   r   return_val_wrappery   s    zBValidateCallWrapper._create_validators.<locals>.return_val_wrapperT)r   r2   r1   Zclean_schemaZgenerate_schemar,   core_configr0   r	   r.   r/   Zplugin_settingsr4   r-   r'   	signaturereturn_annotationemptyr   r(   r5   r@   r3   )r<   Z
gen_schemaZschemarC   rD   return_typerB   r   rA   r   r;   [   s@    		
z&ValidateCallWrapper._create_validatorsr   )r#   r$   r   c                 O  s:   | j s|   | jt||}| jr2| |S |S d S r!   )r3   r;   r4   r@   pydantic_coreZ
ArgsKwargsr5   )r<   r#   r$   resr   r   r   __call__   s    
zValidateCallWrapper.__call__N)r   r:   r   __doc__	__slots__r=   r;   rJ   r   r   r   r   r+   1   s
   )r+   )
__future__r   Z_annotationsr   r'   collections.abcr   r   typingr   r   rH   r8   r   Zplugin._schema_validatorr	   _configr   Z_generate_schemar   r   Z_namespace_utilsr   r   r   r   r   r*   r+   r   r   r   r   <module>   s   