o
    ~j6h{                     @  s   d dl mZ d dlZd dlmZmZmZ d dlmZm	Z	m
Z
 d dlmZ ddlmZ er8dd	lmZ dd
lmZ G dd dZe Zd(ddZd)ddZd*d!d"Z	#d+d,d&d'ZdS )-    )annotationsN)	Parameter	Signature	signature)TYPE_CHECKINGAnyCallable)PydanticUndefined   )is_valid_identifier   )ExtraValues	FieldInfoc                   @  s   e Zd Zdd ZdS )_HAS_DEFAULT_FACTORY_CLASSc                 C  s   dS )Nz	<factory> )selfr   r   l/var/www/html/chefvision.cloud.itp360.com/venv/lib/python3.10/site-packages/pydantic/_internal/_signature.py__repr__   s   z#_HAS_DEFAULT_FACTORY_CLASS.__repr__N)__name__
__module____qualname__r   r   r   r   r   r      s    r   
field_namestr
field_infor   returnc                 C  s<   t |jtrt|jr|jS t |jtrt|jr|jS | S )a  Extract the correct name to use for the field when generating a signature.

    Assuming the field has a valid alias, this will return the alias. Otherwise, it will return the field name.
    First priority is given to the alias, then the validation_alias, then the field name.

    Args:
        field_name: The name of the field
        field_info: The corresponding FieldInfo object.

    Returns:
        The correct name to use when generating a signature.
    )
isinstancealiasr   r   validation_alias)r   r   r   r   r   _field_name_for_signature   s
   r   paramr   c                 C  sp   ddl m} | j}t||r6| j}|dkrt}|j}|tu r*|jtu r'tj	}nt
j}| j|t| j||dS | S )zModify the signature for a parameter in a dataclass where the default value is a FieldInfo instance.

    Args:
        param (Parameter): The parameter

    Returns:
        Parameter: The custom processed parameter
    r   r   r   )
annotationnamedefault)fieldsr   r#   r   r!   r   r	   default_factoryr   emptydataclasses_HAS_DEFAULT_FACTORYreplacer   r"   )r    r   param_defaultr!   r#   r   r   r   _process_param_defaults.   s   	

r+   initCallable[..., None]r$   dict[str, FieldInfo]validate_by_nameboolextraExtraValues | Nonedict[str, Parameter]c                 C  s  ddl m} t| j }i }d}d}||ddD ]:}	||	jr:t||	j dddu r-q|	jt	|	j||	j d}	|	j
d	krE|	jtd
}	|	j|	ju rN|	}q|	||	j< q|r|}
| D ]>\}}t	||}||v sm||v rnq\t|sz|
rw|}nd}q\| rtj}n|jdurt}n|j}t|tj| |d||< q\|dkrd}|r|rdtjfdtjfg}dd |D |krd}n|j}||v r|d7 }||v s|j|d||< |S )zaGenerate a mapping of parameter names to Parameter objects for a pydantic BaseModel or dataclass.r   )isliceNFr
   r,   T)r"   r   )r!   )r!   r#   allowr   datac                 S  s   g | ]}|j |jfqS r   )r"   kind).0pr   r   r   
<listcomp>   s    z2_generate_signature_parameters.<locals>.<listcomp>
extra_data_)	itertoolsr4   r   
parametersvaluesgetr"   getattrr)   r   r!   r   r7   VAR_KEYWORDitemsr   is_requiredr   r&   r%   r(   r#   KEYWORD_ONLYrebuild_annotationPOSITIONAL_ONLY)r,   r$   r/   r1   r4   present_paramsmerged_paramsvar_kw
use_var_kwr    allow_namesr   field
param_namer#   default_model_signaturevar_kw_namer   r   r   _generate_signature_parametersP   sh   


rQ   Fis_dataclassr   c                 C  s8   t | |||}|rdd | D }tt| ddS )ay  Generate signature for a pydantic BaseModel or dataclass.

    Args:
        init: The class init.
        fields: The model fields.
        validate_by_name: The `validate_by_name` value of the config.
        extra: The `extra` value of the config.
        is_dataclass: Whether the model is a dataclass.

    Returns:
        The dataclass/BaseModel subclass signature.
    c                 S  s   i | ]	\}}|t |qS r   )r+   )r8   kvr   r   r   
<dictcomp>   s    z/generate_pydantic_signature.<locals>.<dictcomp>N)r>   return_annotation)rQ   rC   r   listr?   )r,   r$   r/   r1   rR   rI   r   r   r   generate_pydantic_signature   s   rX   )r   r   r   r   r   r   )r    r   r   r   )
r,   r-   r$   r.   r/   r0   r1   r2   r   r3   )F)r,   r-   r$   r.   r/   r0   r1   r2   rR   r0   r   r   )
__future__r   r'   inspectr   r   r   typingr   r   r   pydantic_corer	   _utilsr   configr   r$   r   r   r(   r   r+   rQ   rX   r   r   r   r   <module>   s     


"Y