o
    pf*                     @   st  d dl Z d dlmZ d dlmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZ d dlmZ ddlmZm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 esXeZdZ eruedef Z!ede!dZ"edee ee#ef f Z$ed!dddddddedgdf fddZ%ed"ddZ%edddd!ddde
d dddefddZ%dZ&dZ'dZ(dZ)G dd  d Z*dS )#    N)wraps)TYPE_CHECKINGAnyCallableDictListMappingOptionalTupleTypeTypeVarUnionoverload)
deprecated   )_config_typing_extra)	to_pascal)PydanticUserError)field_validator)	BaseModelcreate_model)PydanticDeprecatedSince20)validate_arguments.AnyCallableT)boundconfigfuncr   
ConfigTypereturnc                C      d S N )r   r   r#   r#   V/home/ertert/spirit/venv/lib/python3.10/site-packages/pydantic/deprecated/decorator.pyr         r   c                 C   r!   r"   r#   )r   r#   r#   r$   r   !   r%   KThe `validate_arguments` method is deprecated; use `validate_call` instead.)categoryc                   s.   t jdtdd d
 fdd}| r|| S |S )z9Decorator to validate the arguments passed to a function.r&   r   )
stacklevel_funcAnyCallabler    c                    sN   t |  t| dtdtdtf fdd} |_ j|_ j|_ j|_|S )Nargskwargsr    c                     s    j | i |S r"   )call)r+   r,   vdr#   r$   wrapper_function5   s   z>validate_arguments.<locals>.validate.<locals>.wrapper_function)ValidatedFunctionr   r   r/   init_model_instancevalidateraw_functionmodel)r)   r0   r   r.   r$   r3   2   s   
z$validate_arguments.<locals>.validateN)r)   r*   r    r*   )warningswarnr   )r   r   r3   r#   r   r$   r   &   s   v__args	v__kwargsv__positional_onlyv__duplicate_kwargsc                
   @   s   e Zd ZdddZdeded	efd
dZdeded	efddZdeedf de	e
ef d	e	e
ef fddZded	efddZde	e
ef dededdd	df
ddZdS )r1   functionr*   r   r   c                 C   s>  ddl m}m} ||j}| tttth@ r.t	dt dt dt dt dt
j dd d|| _i | _t | _d	| _d
| _tj|dd}d}d}i }	t| D ]\}
\}}|j|ju r`t}n|| }|j|ju rldn|j}|j|jkr|| j|
< ||f|	|< tt d f|	t< | j| qQ|j|jkr|| j|
< ||f|	|< tt d f|	t< qQ|j|j kr||f|	|< qQ|j|j!kr|| _t"|df d f|	|< d}qQ|j|j#ksJ |j|| _t$t|f d f|	|< d}qQ|s| j|	v rt| _|s| j|	v rt| _|stt d f|	| j< |st$ttf d f|	| j< | %|	||| d S )Nr   )	Parameter	signature"z", "z" and "z6" are not permitted as argument names when using the "z" decoratorcoder+   r,   T)include_extrasF.)&inspectr=   r>   
parameterskeys
ALT_V_ARGSALT_V_KWARGSV_POSITIONAL_ONLY_NAMEV_DUPLICATE_KWARGSr   r   __name__r4   arg_mappingsetpositional_only_argsv_args_namev_kwargs_namer   get_type_hints	enumerateitems
annotationemptyr   defaultkindPOSITIONAL_ONLYr   straddPOSITIONAL_OR_KEYWORDKEYWORD_ONLYVAR_POSITIONALr
   VAR_KEYWORDr   r   )selfr<   r   r=   r>   rD   
type_hints
takes_argstakes_kwargsfieldsinameprS   rU   r#   r#   r$   __init__L   sf   


zValidatedFunction.__init__r+   r,   r    c                 O   s   |  ||}| jdi |S )Nr#   )build_valuesr5   )r^   r+   r,   valuesr#   r#   r$   r2      s   z%ValidatedFunction.init_model_instancec                 O   s   | j |i |}| |S r"   )r2   execute)r^   r+   r,   mr#   r#   r$   r-      s   
zValidatedFunction.call.c                    s4  i }|r9t |}	 zt|\}}W n	 ty   Y nw  j|}|d ur*|||< n|gdd |D  | j< nq	i }g }	g }
 fdd jj D }t	 jj j j
h }| D ](\}}||v sh||v r| jv rr|	| ||v r{|
| |||< q\|||< q\|r|| j
< |	r|	|t< |
r|
|t< |S )NTc                 S   s   g | ]\}}|qS r#   r#   ).0_ar#   r#   r$   
<listcomp>   s    z2ValidatedFunction.build_values.<locals>.<listcomp>c                    s&   g | ]\}}| j  jfvr|jqS r#   )rN   rO   alias)rk   rd   fieldr^   r#   r$   rn      s
    )rQ   nextStopIterationrK   getrN   r5   model_fieldsrR   rL   rO   rM   appendrH   rI   )r^   r+   r,   rh   arg_iterrc   rm   arg_name
var_kwargswrong_positional_argsduplicate_kwargsfields_aliasnon_var_fieldskvr#   rq   r$   rg      sJ   








zValidatedFunction.build_valuesrj   c           	         s    fdd j  D }|| ji }| j|v rIg }d}i }| D ]\}}|r-|||< q"|| jkr9||7 }d}q"|| q"| j|i ||S | jrrg }i }| D ]\}}|| jv rc|| qT|||< qT| j|i ||S | jdi ||S )Nc                    s,   i | ]\}}| j v s j| jr||qS r#   )__pydantic_fields_set__ru   default_factory)rk   r~   r   rj   r#   r$   
<dictcomp>   s   , z-ValidatedFunction.execute.<locals>.<dictcomp>FTr#   )__dict__rR   poprO   rN   rv   r4   rM   )	r^   rj   dry   args_	in_kwargsr,   rd   valuer#   r   r$   ri      s.   




zValidatedFunction.executerb   r`   ra   Nc                    sx   t jt|  jrtdd d jd u rd jd< G  fdddt}t	t
jjfd|i|_d S )NztSetting the "alias_generator" property on custom Config for @validate_arguments is not yet supported, please remove.r@   forbidextrac                	       s   e Zd Zejddedeee  deee  ffddZ	ej
ddedeeeef  deeeef  ffddZeeddedeee  dd	fd
dZeeddedeee  dd	fddZ jZd	S )z:ValidatedFunction.create_model.<locals>.DecoratorBaseModelF)check_fieldsr   r    c                    s,   s|d u r|S t   d t|  d)Nz# positional arguments expected but z given)	TypeErrorlen)clsr   )pos_argsr`   r#   r$   
check_args   s   zEValidatedFunction.create_model.<locals>.DecoratorBaseModel.check_argsc                    sL    s|d u r|S t |dkrdnd}dtt| }td| d| )N    s, zunexpected keyword argument: )r   joinmapreprrE   r   r   r   pluralrE   )ra   r#   r$   check_kwargs   s
   zGValidatedFunction.create_model.<locals>.DecoratorBaseModel.check_kwargsNc                 S   sJ   |d u rd S t |dkrdnd}dtt|}td| d| d| )Nr   r   r   r   zpositional-only argumentz passed as keyword argumentr   r   r   r   r   r   r   r#   r#   r$   check_positional_only  s
   zPValidatedFunction.create_model.<locals>.DecoratorBaseModel.check_positional_onlyc                 S   sD   |d u rd S t |dkrdnd}dtt|}td| d| )Nr   r   r   r   zmultiple values for argumentr   r   r   r#   r#   r$   check_duplicate_kwargs  s
   zQValidatedFunction.create_model.<locals>.DecoratorBaseModel.check_duplicate_kwargs)rJ   
__module____qualname__r   rN   classmethodr	   r   r   r   rO   r   rX   r   rH   r   rI   r   config_dictmodel_configr#   config_wrapperr   r^   r`   ra   r#   r$   DecoratorBaseModel   s    ,2


r   __base__)r   rK   r   ConfigWrapperalias_generatorr   r   r   r   r   r   r4   rJ   r5   )r^   rb   r`   ra   r   r   r#   r   r$   r      s   



")zValidatedFunction.create_model)r<   r*   r   r   )rJ   r   r   rf   r   r   r2   r-   r
   r   rX   rg   ri   boolr   r#   r#   r#   r$   r1   K   s    
D.+*r1   r"   )r   r   r    r   )+r6   	functoolsr   typingr   r   r   r   r   r   r	   r
   r   r   r   r   typing_extensionsr   	_internalr   r   alias_generatorsr   errorsr   functional_validatorsr   mainr   r   r   DeprecationWarning__all__r*   r   rX   r   r   rF   rG   rH   rI   r1   r#   r#   r#   r$   <module>   s>    8*$