U
    e*                     @   sr  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seZdZ ere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edgdf dddZ%edddddZ%edddd!dde
d ded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
ConfigType)funcr   returnc                C   s   d S N )r   r   r"   r"   A/tmp/pip-unpacked-wheel-6q_yhcy8/pydantic/deprecated/decorator.pyr      s    r   )r   r    c                 C   s   d S r!   r"   )r   r"   r"   r#   r   !   s    KThe `validate_arguments` method is deprecated; use `validate_call` instead.)categoryc                   s8   t jdtdd ddd fdd}| r0|| S |S dS )	z9Decorator to validate the arguments passed to a function.r$   r   )
stacklevelAnyCallable)_funcr    c                    sJ   t |  t| tttd fdd} |_ j|_ j|_ j|_|S )Nargskwargsr    c                     s    j | |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(   r/   r   r-   r#   r2   2   s    
z$validate_arguments.<locals>.validateN)warningswarnr   )r   r   r2   r"   r   r#   r   &   s    Zv__argsZ	v__kwargsZv__positional_onlyZv__duplicate_kwargsc                   @   s   e Zd ZdddddZeeedddZeeedd	d
Zeedf e	e
ef e	e
ef dddZeedddZe	e
ef eedddddZdS )r0   r'   r   )functionr   c                 C   sR  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 ]4\}
\}}|j|jkrt}n|| }|j|jkrdn|j}|j|jkr"|| j|
< ||f|	|< tt d f|	t< | j| q|j|jkrX|| j|
< ||f|	|< tt d f|	t< q|j|j krt||f|	|< q|j|j!kr|| _t"|df d f|	|< d}q|j|j#kst$|j|| _t%t|f d f|	|< d}q|s| j|	krt| _|s
| j|	kr
t| _|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)Zinclude_extrasF.)'inspectr8   r9   
parameterskeys
ALT_V_ARGSALT_V_KWARGSV_POSITIONAL_ONLY_NAMEV_DUPLICATE_KWARGSr   r   __name__r3   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_KEYWORDAssertionErrorr   r   )selfr7   r   r8   r9   r>   Z
type_hints
takes_argstakes_kwargsfieldsinameprM   rO   r"   r"   r#   __init__L   sb    
$

zValidatedFunction.__init__r)   c                 O   s   |  ||}| jf |S r!   )build_valuesr4   )rY   r*   r+   valuesr"   r"   r#   r1      s    z%ValidatedFunction.init_model_instancec                 O   s   | j ||}| |S r!   )r1   execute)rY   r*   r+   mr"   r"   r#   r,      s    zValidatedFunction.call.c                    s@  i }|rvt |}zt|\}}W n tk
r8   Y qvY nX  j|}|d k	rX|||< q|gdd |D  | j< qvqi }g }	g }
 fdd jj D }t	 jj j j
h }| D ]R\}}||ks||kr| jkr|	| ||kr|
| |||< q|||< q|r || j
< |	r.|	|t< |
r<|
|t< |S )Nc                 S   s   g | ]\}}|qS r"   r"   ).0_ar"   r"   r#   
<listcomp>   s     z2ValidatedFunction.build_values.<locals>.<listcomp>c                    s&   g | ]\}}| j  jfkr|jqS r"   )rH   rI   alias)re   r^   fieldrY   r"   r#   rh      s   )rK   nextStopIterationrE   getrH   r4   model_fieldsrL   rF   rI   rG   appendrB   rC   )rY   r*   r+   rb   Zarg_iterr]   rg   Zarg_name
var_kwargsZwrong_positional_argsZduplicate_kwargsZfields_aliasZnon_var_fieldskvr"   rk   r#   ra      sD    









zValidatedFunction.build_values)rd   r    c           	         s    fdd j  D }|| ji }| j|krg }d}i }| D ]8\}}|rZ|||< qD|| jkrr||7 }d}qD|| qD| j|||S | jrg }i }| D ]&\}}|| jkr|| q|||< q| j|||S | jf ||S d S )Nc                    s,   i | ]$\}}| j ks" j| jr||qS r"   )Z__pydantic_fields_set__ro   default_factory)re   rr   rs   rd   r"   r#   
<dictcomp>   s
     
   z-ValidatedFunction.execute.<locals>.<dictcomp>FT)__dict__rL   poprI   rH   rp   r3   rG   )	rY   rd   drq   Zargs_Z	in_kwargsr+   r^   valuer"   ru   r#   rc      s.    




zValidatedFunction.executeN)r\   rZ   r[   r   r    c                    sx   t jt|  jr&tdd d jd k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;   Zforbidextrac                       s   e Zd Zejddeeee  eee  dfddZ	ej
ddeeeeef  eeeef  dfddZeeddeeee  ddd	d
Zeeddeeee  ddddZ jZdS )z:ValidatedFunction.create_model.<locals>.DecoratorBaseModelF)Zcheck_fields)rs   r    c                    s0   s|d kr|S t   d t|  dd S )Nz# positional arguments expected but z given)	TypeErrorlen)clsrs   )pos_argsrZ   r"   r#   
check_args   s    zEValidatedFunction.create_model.<locals>.DecoratorBaseModel.check_argsc                    sP    s|d kr|S t |dkr dnd}dtt| }td| d| d S )N    s, zunexpected keyword argument: )r}   joinmapreprr?   r|   r~   rs   pluralr?   )r[   r"   r#   check_kwargs   s
    zGValidatedFunction.create_model.<locals>.DecoratorBaseModel.check_kwargsNc                 S   sN   |d krd S t |dkrdnd}dtt|}td| d| d| d S )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   sH   |d krd S t |dkrdnd}dtt|}td| d| d S )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)rD   
__module____qualname__r   rH   classmethodr	   r   r   r   rI   r   rR   r   rB   r   rC   r   config_dictZmodel_configr"   Zconfig_wrapperr   rY   rZ   r[   r"   r#   DecoratorBaseModel   s   *0

r   __base__)r}   rE   r   ZConfigWrapperZalias_generatorr   r{   r   r   r   r   r3   rD   r4   )rY   r\   rZ   r[   r   r   r"   r   r#   r      s    



)zValidatedFunction.create_model)rD   r   r   r`   r   r   r1   r,   r
   r   rR   ra   rc   boolr   r"   r"   r"   r#   r0   K   s   D*+r0   )N)N)+r5   	functoolsr   typingr   r   r   r   r   r   r	   r
   r   r   r   r   Ztyping_extensionsr   	_internalr   r   Zalias_generatorsr   errorsr   Zfunctional_validatorsr   mainr   r   r   DeprecationWarning__all__r'   r   rR   r   r   r@   rA   rB   rC   r0   r"   r"   r"   r#   <module>   s<   8& 