a
    Ofc(                     @   sF  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 d dlmZ d dlmZmZ d dlmZ d dlmZ d	Zerd d
lm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!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 )    )wraps)TYPE_CHECKINGAnyCallableDictListMappingOptionalTupleTypeTypeVarUnionoverload)	validator)Extra)ConfigError)	BaseModelcreate_model)get_all_type_hints)to_camel)validate_arguments)AnyCallableAnyCallableT)boundNconfig
ConfigType)funcr   returnc                C   s   d S N )r   r   r    r    N/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pydantic/v1/decorator.pyr      s    r   )r   r   c                 C   s   d S r   r    )r   r    r    r!   r      s    c                   s(   ddd fdd}| r || S |S dS )zC
    Decorator to validate the arguments passed to a function.
    r   )_funcr   c                    sJ   t |  t| tttd fdd} |_ j|_ j|_ j|_|S )Nargskwargsr   c                     s    j | i |S r   )call)r$   r%   vdr    r!   wrapper_function&   s    z>validate_arguments.<locals>.validate.<locals>.wrapper_function)ValidatedFunctionr   r   r(   init_model_instancevalidateraw_functionmodel)r"   r)   r   r'   r!   r,   #   s    
z$validate_arguments.<locals>.validateNr    )r   r   r,   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 )r*   r   r   )functionr   c                 C   sH  ddl m}m} ||j}| tttth@ rXt	dt dt dt dt dt
j d|| _i | _t | _d| _d	| _t|}d
}d
}i }	t| D ]4\}
\}}|j|ju rt}n|| }|j|ju rdn|j}|j|jkr|| j|
< ||f|	|< tt d f|	t< | j| q|j|jkrN|| j|
< ||f|	|< tt d f|	t< q|j|jkrj||f|	|< q|j|j kr|| _t!|df d f|	|< d}q|j|j"ksJ |j|| _t#t|f d f|	|< d}q|s| j|	v rt| _|s | j|	v r t| _|stt d f|	| j< |s4t#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" decoratorr$   r%   F.T)%inspectr0   r1   
parameterskeys
ALT_V_ARGSALT_V_KWARGSV_POSITIONAL_ONLY_NAMEV_DUPLICATE_KWARGSr   r   __name__r-   arg_mappingsetpositional_only_argsv_args_namev_kwargs_namer   	enumerateitems
annotationemptyr   defaultkindPOSITIONAL_ONLYr   straddPOSITIONAL_OR_KEYWORDKEYWORD_ONLYVAR_POSITIONALr
   VAR_KEYWORDr   r   )selfr/   r   r0   r1   r4   Z
type_hints
takes_argstakes_kwargsfieldsinameprB   rD   r    r    r!   __init__=   sd    


zValidatedFunction.__init__r#   c                 O   s   |  ||}| jf i |S r   )build_valuesr.   )rM   r$   r%   valuesr    r    r!   r+      s    z%ValidatedFunction.init_model_instancec                 O   s   | j |i |}| |S r   )r+   execute)rM   r$   r%   mr    r    r!   r&      s    zValidatedFunction.call.c                    s>  i }|rtt |}zt|\}}W n ty6   Y qtY n0  j|}|d urV|||< q|gdd |D  | j< qtqi }g }	g }
 fdd jj D }t	 jj j j
h }| D ]R\}}||v s||v r| jv r|	| ||v r|
| |||< q|||< q|r|| j
< |	r,|	|t< |
r:|
|t< |S )Nc                 S   s   g | ]\}}|qS r    r    ).0_ar    r    r!   
<listcomp>       z2ValidatedFunction.build_values.<locals>.<listcomp>c                    s&   g | ]\}}| j  jfvr|jqS r    )r>   r?   alias)rY   rR   fieldrM   r    r!   r\      s   )r@   nextStopIterationr;   getr>   r.   
__fields__rA   r<   r?   r=   appendr8   r9   )rM   r$   r%   rV   Zarg_iterrQ   r[   Zarg_name
var_kwargsZwrong_positional_argsZduplicate_kwargsZfields_aliasZnon_var_fieldskvr    r`   r!   rU      sD    









zValidatedFunction.build_values)rX   r   c           	         s    fdd   D }|| ji }| j|v rg }d}i }| D ]8\}}|rX|||< qB|| jkrp||7 }d}qB|| qB| j|i ||S | jrg }i }| D ]&\}}|| jv r|| q|||< q| j|i ||S | jf i ||S d S )Nc                    s,   i | ]$\}}| j v s" j| jr||qS r    )Z__fields_set__rd   default_factory)rY   rg   rh   rX   r    r!   
<dictcomp>   r]   z-ValidatedFunction.execute.<locals>.<dictcomp>FT)Z_iterpopr?   r>   rA   re   r-   r=   )	rM   rX   drf   Zargs_Z	in_kwargsr%   rR   valuer    rj   r!   rW      s.    




zValidatedFunction.executeN)rP   rN   rO   r   r   c                    s   t jG dd d ts@t|tr4tdd| n|d ur@| t dsTt dr\tdG  fdd	d	t}t	t
jjfd
|i|_d S )Nc                   @   s   e Zd ZdS )z4ValidatedFunction.create_model.<locals>.CustomConfigN)r:   
__module____qualname__r    r    r    r!   CustomConfig   s   rq   Configr    rP   Zalias_generatorzSetting the "fields" and "alias_generator" property on custom Config for @validate_arguments is not yet supported, please remove.c                       s   e Zd Zejdddeee  eee  dfddZej	dddee
eef  ee
eef  dfddZeedddeee  d	dd
dZeedddeee  d	dddZG  fddd Zd	S )z:ValidatedFunction.create_model.<locals>.DecoratorBaseModelFT)Zcheck_fieldsZallow_reuse)rh   r   c                    s0   s|d u r|S t   d t|  dd S )Nz# positional arguments expected but z given)	TypeErrorlen)clsrh   )pos_argsrN   r    r!   
check_args   s    zEValidatedFunction.create_model.<locals>.DecoratorBaseModel.check_argsc                    sP    s|d u r|S t |dkr dnd}dtt| }td| d| d S )N    s, zunexpected keyword argument: )rt   joinmapreprr5   rs   ru   rh   pluralr5   )rO   r    r!   check_kwargs   s
    zGValidatedFunction.create_model.<locals>.DecoratorBaseModel.check_kwargsNc                 S   sN   |d u rd S t |dkrdnd}dtt|}td| d| d| d S )Nrx   ry   rz   r{   zpositional-only argumentz passed as keyword argumentr|   rt   r}   r~   r   rs   r   r    r    r!   check_positional_only   s
    zPValidatedFunction.create_model.<locals>.DecoratorBaseModel.check_positional_onlyc                 S   sH   |d u rd S t |dkrdnd}dtt|}td| d| d S )Nrx   ry   rz   r{   zmultiple values for argumentr|   r   r   r    r    r!   check_duplicate_kwargs   s
    zQValidatedFunction.create_model.<locals>.DecoratorBaseModel.check_duplicate_kwargsc                       s   e Zd Ze dejZdS )zAValidatedFunction.create_model.<locals>.DecoratorBaseModel.ConfigextraN)r:   ro   rp   getattrr   Zforbidr   r    )rq   r    r!   rr     s   rr   )r:   ro   rp   r   r>   r	   r   r   rw   r?   r   rG   r   r8   r   r9   r   rr   r    rq   rv   rM   rN   rO   r    r!   DecoratorBaseModel   s   (.r   __base__)rt   r;   r   
isinstancedicttypehasattrr   r   r   r   r-   r:   r.   )rM   rP   rN   rO   r   r   r    r   r!   r      s    

&zValidatedFunction.create_model)r:   ro   rp   rT   r   r   r+   r&   r
   r   rG   rU   rW   boolr   r    r    r    r!   r*   <   s   C*+r*   )N)N)'	functoolsr   typingr   r   r   r   r   r   r	   r
   r   r   r   r   Zpydantic.v1r   Zpydantic.v1.configr   Zpydantic.v1.errorsr   Zpydantic.v1.mainr   r   Zpydantic.v1.typingr   Zpydantic.v1.utilsr   __all__r   r   rG   r   r   r6   r7   r8   r9   r*   r    r    r    r!   <module>   s,   8&