a
    y{JhO                     @  s   d dl mZ d dlZd dlmZ d dlmZ d dlm	Z	m
Z
m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mZ eG dd dZG dd dZdS )    )annotationsN)	dataclass)partial)Any	AwaitableCallable   )
ConfigDict)create_schema_validator   )_generate_schema_typing_extra)ConfigWrapperc                   @  s   e Zd ZU ded< ded< dS )
CallMarkerCallable[..., Any]functionboolvalidate_returnN)__name__
__module____qualname____annotations__ r   r   S/var/www/shaz/venv/lib/python3.9/site-packages/pydantic/_internal/_validate_call.pyr      s   
r   c                   @  s   e Zd ZdZdZddddddZd	d	d	d
ddZdd	dd dddZd	dddddZddddZ	ddddZ
dd ZdS )ValidateCallWrapperaQ  This is a wrapper around a function that validates the arguments passed to it, and optionally the return value.

    It's partially inspired by `wraps` which in turn uses `partial`, but extended to be a descriptor so
    these functions can be applied to instance methods, class methods, static methods, as well as normal functions.
    )
raw_function_config_validate_return__pydantic_core_schema____pydantic_validator____signature__r   r   r   __dict__r   zConfigDict | Noner   )r   configr   c                   s  || _ || _|| _t|| _t|trl|j}|}d|j	 d| _	d|j
 d| _
|j| _|j| _|j| _n,|}|j	| _	|j
| _
|j| _|j| _|j| _t|d }t|}t||}|||}	|	| _|| }
t|	|| j| j
d|
|j| _| jr| jj| jjur| jjnt}t||}|||}	|	| _t|	|| j| j
d|
|j t| j rddd fdd}|| _n j | _nd | _d | _d | _!d S )	Nzpartial()Zvalidate_callzAwaitable[Any]None)awreturnc                   s     | I d H S N)validate_python)r%   	validatorr   r   return_val_wrapperd   s    z8ValidateCallWrapper.__init__.<locals>.return_val_wrapper)"r   r   r   inspect	signaturer    
isinstancer   funcr   r   r   r   __doc__r   Zadd_module_globalsr   r   ZGenerateSchemaZclean_schemaZgenerate_schemar   core_configr
   Zplugin_settingsr   return_annotationemptyr   Z__return_pydantic_core_schema__iscoroutinefunction__return_pydantic_validator__r(   _name)selfr   r"   r   r/   Zschema_type	namespaceZconfig_wrapperZ
gen_schemaZschemar1   return_typer+   r   r)   r   __init__*   sr    



	
zValidateCallWrapper.__init__r   )argskwargsr&   c                 O  s(   | j t||}| jr$| |S |S r'   )r   r(   pydantic_coreZ
ArgsKwargsr5   )r7   r;   r<   resr   r   r   __call__p   s    
zValidateCallWrapper.__call__Nztype[Any] | None)objobjtyper&   c                 C  s   |du r,z| || jW S  ty*   Y n0 | j||}| || j| j}t|ds`t|drd|S | jdur|durt	
|| j| nt	
|| j| |S )zKBind the raw function and return another ValidateCallWrapper wrapping that.N	__slots__)__getattribute__r6   AttributeErrorr   __get__	__class__r   r   hasattrobject__setattr__)r7   r@   rA   Zbound_functionresultr   r   r   rE   v   s    
zValidateCallWrapper.__get__strr$   )ownernamer&   c                 C  s
   || _ d S r'   )r6   )r7   rL   rM   r   r   r   __set_name__   s    z ValidateCallWrapper.__set_name__)r&   c                 C  s   d| j  dS )NzValidateCallWrapper(r#   )r   r7   r   r   r   __repr__   s    zValidateCallWrapper.__repr__c                 C  s$   | j |j ko"| j|jko"| j|jkS r'   )r   r   r   )r7   otherr   r   r   __eq__   s
    

zValidateCallWrapper.__eq__c                 C  s
   t | jS r'   )hashr   rO   r   r   r   __hash__   s    zValidateCallWrapper.__hash__)N)r   r   r   r0   rB   r:   r?   rE   rN   rP   rR   rT   r   r   r   r   r      s   Fr   )
__future__r   Z_annotationsr,   dataclassesr   	functoolsr   typingr   r   r   r=   r"   r	   Zplugin._schema_validatorr
    r   r   r   r   r   r   r   r   r   r   <module>   s   