Ë
    RPf•  ã                  óº   — 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y)é    )ÚannotationsN)Ú	ParameterÚ	SignatureÚ	signature)ÚTYPE_CHECKINGÚAnyÚCallable)ÚPydanticUndefinedé   )ÚConfigWrapper)Úis_valid_identifieré   ©Ú	FieldInfoc                ó^   — dd„} ||j                   «      xs  ||j                  «      x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 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.
    c                ó@   — t        | t        «      rt        | «      r| S dS )zBReturn the alias if it is a valid alias and identifier, else None.N)Ú
isinstanceÚstrr   )Úxs    úW/var/www/fastapitest/venv/lib/python3.12/site-packages/pydantic/_internal/_signature.pyÚ_alias_if_validz2_field_name_for_signature.<locals>._alias_if_valid   s   € ä˜q¤#Ô&Ô+>¸qÔ+AˆqÐKÀtÐKó    )r   r   Úreturnz
str | None)ÚaliasÚvalidation_alias)Ú
field_nameÚ
field_infor   s      r   Ú_field_name_for_signaturer      s1   € óLñ ˜:×+Ñ+Ó,Òj±À
×@[Ñ@[Ó0\ÒjÐ`jÐjr   c                óN  — ddl m} | j                  }t        ||«      r†| j                  }|dk(  rt
        }|j                  }|t        u r3|j                  t        u rt        j                  }nt        j                  }| j                  |t        | j                  |«      |¬«      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   )Ú
annotationÚnameÚdefault)Úfieldsr   r"   r   r    r   r
   Údefault_factoryr   ÚemptyÚdataclassesÚ_HAS_DEFAULT_FACTORYÚreplacer   r!   )Úparamr   Úparam_defaultr    r"   s        r   Ú_process_param_defaultsr+   %   s    € õ #à—M‘M€MÜ�- Ô+Ø×%Ñ%ˆ
ð ˜ÒÜˆJð  ×'Ñ'ˆØÔ'Ñ'Ø×,Ñ,Ô0AÑAÜ#Ÿ/™/‘ô &×:Ñ:�Ø�}‰}Ø!Ô(AÀ%Ç*Á*ÈmÓ(\Ðfmð ó 
ð 	
ð €Lr   c                ól  — ddl m} t        | «      j                  j	                  «       }i }d}d} ||dd«      D ]¼  }|j                  |j                  «      rPt        ||j                     dd«      du rŒ;|j                  t        |j                  ||j                     «      ¬«      }|j                  d	k(  r|j                  t        ¬
«      }|j                  |j                  u r|}Œ®|||j                  <   Œ¾ |r |j                  }	|j                  «       D ]�  \  }
}t        |
|«      }|
|v s||v rŒt!        |«      s|	r|
}nd}Œ.|j#                  «       ri nd|j%                  d¬«      i}t'        |t&        j(                  fd|j+                  «       i|¤Ž||<   Œƒ |j,                  dk(  rd}|r�|rdt&        j.                  fdt&        j                  fg}|D �cg c]  }|j                  |j                  f‘Œ c}|k(  rd}n|j                  }||v r
|dz  }||v rŒ
|j                  |¬«      ||<   |S c c}w )zaGenerate a mapping of parameter names to Parameter objects for a pydantic BaseModel or dataclass.r   )ÚisliceNFr   ÚinitT)r!   r   )r    r"   )Úcall_default_factoryr    ÚallowÚselfÚdataÚ
extra_dataÚ_)Ú	itertoolsr-   r   Ú
parametersÚvaluesÚgetr!   Úgetattrr(   r   r    r   ÚkindÚVAR_KEYWORDÚpopulate_by_nameÚitemsr   Úis_requiredÚget_defaultr   ÚKEYWORD_ONLYÚrebuild_annotationÚextraÚPOSITIONAL_ONLY)r.   r#   Úconfig_wrapperr-   Úpresent_paramsÚmerged_paramsÚvar_kwÚ
use_var_kwr)   Úallow_namesr   ÚfieldÚ
param_nameÚkwargsÚdefault_model_signatureÚpÚvar_kw_names                    r   Ú_generate_signature_parametersrP   G   sM  € õ !ä˜t“_×/Ñ/×6Ñ6Ó8€NØ*,€MØ€FØ€Já˜¨¨4Ó0ò *ˆð �:‰:�e—j‘jÔ!ä�v˜eŸj™jÑ)¨6°4Ó8¸EÑAØØ—M‘MÔ'@ÀÇÁÈVÐTY×T^ÑT^ÑM_Ó'`�MÓaˆEØ×Ñ˜uÒ$Ø—M‘M¬S�MÓ1ˆEØ�:‰:˜×*Ñ*Ñ*ØˆFØØ$)ˆ�e—j‘jÒ!ð*ñ Ø$×5Ñ5ˆØ!'§¡£ò 	ÑˆJ˜ä2°:¸uÓEˆJà˜]Ñ*¨j¸MÑ.IØä& zÔ2ÙØ!+‘Jà!%�JØà ×,Ñ,Ô.‘R°YÀ×@QÑ@QÐglÐ@QÓ@mÐ4nˆFÜ(1ØœI×2Ñ2ñ)Ø?D×?WÑ?WÓ?Yð)Ø]cñ)ˆM˜*Ò%ð	ð& ×Ñ˜wÒ&Øˆ
á‘*ð ”Y×.Ñ.Ð/Ø”Y×*Ñ*Ð+ð#
Ðð '5Ö5 ˆQ�V‰V�Q—V‘VÒÒ5Ð9PÒPà&‰Kð !Ÿ+™+ˆKð ˜VÑ#Ø˜3ÑˆKð ˜VÒ#à%+§^¡^¸ ^Ó%Eˆ�kÑ"àÐùò 6s   ÇH1c                óÌ   — t        | ||«      }|r,|j                  «       D ��ci c]  \  }}|t        |«      “Œ }}}t        t	        |j                  «       «      d¬«      S c c}}w )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.
    N)r6   Úreturn_annotation)rP   r=   r+   r   Úlistr7   )r.   r#   rD   Úis_dataclassrF   ÚkÚvs          r   Úgenerate_pydantic_signaturerW   ‘   sb   € ô 3°4¸ÀÓP€MáØCP×CVÑCVÓCX×Y¹4¸1¸a˜Ô3°AÓ6Ñ6ÐYˆÑYä¤ ]×%9Ñ%9Ó%;Ó <ÐPTÔUÐUùó Zs   £A )r   r   r   r   r   r   )r)   r   r   r   )r.   úCallable[..., None]r#   údict[str, FieldInfo]rD   r   r   zdict[str, Parameter])F)
r.   rX   r#   rY   rD   r   rT   Úboolr   r   )Ú
__future__r   r&   Úinspectr   r   r   Útypingr   r   r	   Úpydantic_corer
   Ú_configr   Ú_utilsr   r#   r   r   r+   rP   rW   © r   r   ú<module>rb      s›   ðÝ "ã ß 3Ñ 3ß /Ñ /å +å "Ý 'áÝ"ókó*ðDGØ
ðGà ðGð "ðGð ó	GðV rwðVØ
ðVØ';ðVØMZðVØjnðVàôVr   