o
    í6Wj˜  ã                   @  s¼   d dl mZ d dlZd dlmZmZ d dlmZmZm	Z	 d dl
mZ ddlmZ ddlmZ er<d	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)ÚTYPE_CHECKINGÚAnyÚCallable)ÚPydanticUndefinedé   )Úsignature_no_eval)Ú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/home/esfera/Documents/content_generation/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du r'tj	}nt
j}| j|t| j|ƒ|d�S | S )zÝModify 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   N)Ú
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\| ¡ r‚tj}n|jdurŠt}n|j}t|tj| ¡ |d�||< q\|dkr¡d}|rÒ|rÒdtjfdtjfg}dd„ |D ƒ|kr»d}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_parametersQ   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   Útypingr   r   r   Úpydantic_corer   Ú_typing_extrar
   Ú_utilsr   Úconfigr   r$   r   r   r(   r   r+   rQ   rX   r   r   r   r   Ú<module>   s"    


"Yû