o
    $6d4                     @  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mZmZ dd
lmZ ddlmZmZ eG dd dZG dd dZdS )    )annotationsN)	dataclass)partial)Any	AwaitableCallable   )
ConfigDict   )_discriminated_union_generate_schema_typing_extra)ConfigWrapper)flatten_schema_defsinline_schema_defsc                   @  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   xC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\site-packages\pydantic/_internal/_validate_call.pyr      s   
 r   c                   @  sH   e Zd ZdZdZdd	d
Zd ddZd!d"ddZd#ddZd$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   r   configConfigDict | Noner   r   c                   s  || _ || _|| _t|| _t|tr4|j}d|j	 d| _	d|j
 d| _
|j| _|j| _|j| _n|j	| _	|j
| _
|j| _|j| _|j| _t|d }t|}t||}||| | _}|| }	tt|}t|}
t|
|	| _| jr| jj| jjur| jjnt }t||}||| | _!}|| }	tt|}t|}
t|
|	 t"| j rd	 fdd}|| _#n j$| _#nd | _!d | _#d | _%d S )
Nzpartial()awAwaitable[Any]returnNonec                   s     | I d H S N)validate_python)r'   	validatorr   r   return_val_wrapperV   s   z8ValidateCallWrapper.__init__.<locals>.return_val_wrapper)r'   r(   r)   r*   )&r   r   r   inspect	signaturer"   
isinstancer   funcr   r   r   r   __doc__r   Zadd_module_globalsr   r   ZGenerateSchemaZcollect_definitionsZgenerate_schemar    core_configr   Zapply_discriminatorsr   r   pydantic_coreZSchemaValidatorr!   return_annotationemptyr   Z__return_pydantic_core_schema__iscoroutinefunction__return_pydantic_validator__r,   _name)selfr   r$   r   r3   	namespaceZconfig_wrapperZ
gen_schemaZschemar5   Zsimplified_schemareturn_typer/   r   r-   r   __init__*   sX   






zValidateCallWrapper.__init__argsr   kwargsr)   c                 O  s(   | j t||}| jr| |S |S r+   )r!   r,   r6   Z
ArgsKwargsr:   )r<   r@   rA   resr   r   r   __call__b   s   
zValidateCallWrapper.__call__Nobjobjtypetype[Any] | Nonec                 C  s   |du rz| || jW S  ty   Y nw | j||}| || j| j}| jdurA|dur9t	|| j| |S t	|| j| |S )zKBind the raw function and return another ValidateCallWrapper wrapping that.N)
__getattribute__r;   AttributeErrorr   __get__	__class__r   r   object__setattr__)r<   rD   rE   Zbound_functionresultr   r   r   rI   h   s   
zValidateCallWrapper.__get__ownernamestrr*   c                 C  s
   || _ d S r+   )r;   )r<   rN   rO   r   r   r   __set_name__{   s   
z ValidateCallWrapper.__set_name__c                 C  s   d| j  dS )NzValidateCallWrapper(r&   )r   )r<   r   r   r   __repr__~   s   zValidateCallWrapper.__repr__)r   r   r$   r%   r   r   )r@   r   rA   r   r)   r   r+   )rD   r   rE   rF   r)   r   )rN   r   rO   rP   r)   r*   )r)   rP   )
r   r   r   r4   	__slots__r?   rC   rI   rQ   rR   r   r   r   r   r      s    

8
r   )
__future__r   Z_annotationsr0   dataclassesr   	functoolsr   typingr   r   r   r6   r$   r	    r   r   r   r   r   Z_core_utilsr   r   r   r   r   r   r   r   <module>   s    