
    ]f                        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 ddlmZ erd	d
lmZ d!dZd"dZd#dZ	 d$d%d ZdS )&    )annotationsN)	Parameter	Signature	signature)TYPE_CHECKINGAnyCallable)PydanticUndefined   )ConfigWrapper)is_valid_identifier   	FieldInfo
field_namestr
field_infor   returnc                N    dd} ||j                   p ||j                  p| 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 validation_alias, then the 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.
    xr   r   
str | Nonec                R    t          | t                    rt          |           r| ndS )zBReturn the alias if it is a valid alias and identifier, else None.N)
isinstancer   r   )r   s    O/var/www/html/env/lib/python3.11/site-packages/pydantic/_internal/_signature.py_alias_if_validz2_field_name_for_signature.<locals>._alias_if_valid   s)    q#&&K+>q+A+AKqqtK    )r   r   r   r   )aliasvalidation_alias)r   r   r   s      r   _field_name_for_signaturer      sG    L L L L ?:+,,j
@[0\0\j`jjr   paramr   c                ,   ddl m} | j        }t          ||          rv| j        }|dk    rt
          }|j        }|t          u r'|j        t          u rt          j	        }nt          j        }|                     |t          | j        |          |          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$   s        r   _process_param_defaultsr,   %   s     #"""""MM-++ 
%
 J  '''',0AAA#/ &:}}!(A%*m(\(\fm  
 
 	
 Lr   initCallable[..., None]r%   dict[str, FieldInfo]config_wrapperr   dict[str, Parameter]c                    ddl m} t          |           j                                        }i }d}d} ||dd          D ]}|                    |j                  rSt          ||j                 dd          du r;|                    t          |j        ||j                                     }|j
        d	k    r|                    t          
          }|j        |j        u r|}|||j        <   |r|j        }	|                                D ]\  }
}t          |
|          }|
|v s||v rt!          |          s|	r|
}nd}5|                                ri nd|                    d          i}t'          |t&          j        fd|                                i|||<   |j        dk    rd}|r^|r\dt&          j        fdt&          j        fg}d |D             |k    rd}n|j        }||v r	|dz  }||v 	|                    |          ||<   |S )zaGenerate a mapping of parameter names to Parameter objects for a pydantic BaseModel or dataclass.r   )isliceNFr   r-   T)r#   r   )r"   r$   )call_default_factoryr"   allowselfdatac                *    g | ]}|j         |j        fS  )r#   kind).0ps     r   
<listcomp>z2_generate_signature_parameters.<locals>.<listcomp>   s!    555QVQV555r   
extra_data_)	itertoolsr3   r   
parametersvaluesgetr#   getattrr*   r   r"   r   r:   VAR_KEYWORDpopulate_by_nameitemsr   is_requiredget_defaultr   KEYWORD_ONLYrebuild_annotationextraPOSITIONAL_ONLY)r-   r%   r0   r3   present_paramsmerged_paramsvar_kw
use_var_kwr    allow_namesr   field
param_namekwargsdefault_model_signaturevar_kw_names                   r   _generate_signature_parametersrX   G   s    !     t__/6688N*,MFJ400 * * ::ej!! 	bvej)6488EAAMM'@VTYT^M_'`'`MaaEu$$MMSM11E:***F$)ej!! $5!' 	 	J2:uEEJ]**jM.I.I&z22  !+JJ!%J ,,..nRRY@Q@Qgl@Q@m@m4nF(1I2) )?D?W?W?Y?Y)]c) )M*%% w&&
 F* F Y./Y*+#
 65n5559PPP&KK !+K V##3K V##%+^^^%E%Ek"r   Fis_dataclassboolr   c                    t          | ||          }|rd |                                D             }t          t          |                                          d          S )a8  Generate signature for a pydantic BaseModel or dataclass.

    Args:
        init: The class init.
        fields: The model fields.
        config_wrapper: The config wrapper instance.
        is_dataclass: Whether the model is a dataclass.

    Returns:
        The dataclass/BaseModel subclass signature.
    c                4    i | ]\  }}|t          |          S r9   )r,   )r;   kvs      r   
<dictcomp>z/generate_pydantic_signature.<locals>.<dictcomp>   s'    YYY41a3A66YYYr   N)rA   return_annotation)rX   rG   r   listrB   )r-   r%   r0   rY   rO   s        r   generate_pydantic_signaturerb      se     34PPM ZYY=CVCVCXCXYYY]%9%9%;%; < <PTUUUUr   )r   r   r   r   r   r   )r    r   r   r   )r-   r.   r%   r/   r0   r   r   r1   )F)
r-   r.   r%   r/   r0   r   rY   rZ   r   r   )
__future__r   r(   inspectr   r   r   typingr   r   r	   pydantic_corer
   _configr   _utilsr   r%   r   r   r,   rX   rb   r9   r   r   <module>ri      s&   " " " " " "     3 3 3 3 3 3 3 3 3 3 / / / / / / / / / / + + + + + + " " " " " " ' ' ' ' ' ' #""""""k k k k*   DG G G GV rwV V V V V V Vr   