
    9Cg|                        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                    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   s     O/var/www/api/venv/lib/python3.11/site-packages/pydantic/_internal/_signature.py_field_name_for_signaturer      sl     *"C((  -@AQ-R-R  *-s33 +8KJLg8h8h +**    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_)	itertoolsr/   r   
parametersvaluesgetr   getattrr&   r   r   r   r6   VAR_KEYWORDpopulate_by_nameitemsr   is_requiredget_defaultr   KEYWORD_ONLYrebuild_annotationextraPOSITIONAL_ONLY)r)   r!   r,   r/   present_paramsmerged_paramsvar_kw
use_var_kwr   allow_namesr   field
param_namekwargsdefault_model_signaturevar_kw_names                   r   _generate_signature_parametersrT   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 r5   )r(   )r7   kvs      r   
<dictcomp>z/generate_pydantic_signature.<locals>.<dictcomp>   s'    YYY41a3A66YYYr   N)r=   return_annotation)rT   rC   r   listr>   )r)   r!   r,   rU   rK   s        r   generate_pydantic_signaturer^      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+   r,   r   r   r-   )F)
r)   r*   r!   r+   r,   r   rU   rV   r   r   )
__future__r   r$   inspectr   r   r   typingr   r   r	   pydantic_corer
   _configr   _utilsr   r!   r   r   r(   rT   r^   r5   r   r   <module>re      s"   " " " " " "     3 3 3 3 3 3 3 3 3 3 / / / / / / / / / / + + + + + + " " " " " " ' ' ' ' ' ' #""""""   *   DG G G GV rwV V V V V V Vr   