U
    nËjBM  ã                   @   sþ  d dl Z d dlZd dlmZmZ d dlmZmZ d dlmZ d dl	m
Z
mZmZmZmZmZmZmZmZ d dlmZmZ d dlmZ d dlmZmZmZ d d	lmZmZmZm Z m!Z! d d
lm"Z" d dlm#Z# d dlm$Z$ d dl%m&Z& d dl'm(Z( d dl)m*Z* d dl+m,Z, d dl-m.Z. d dl-m/Z/ d dl0m1Z1 d dl0m2Z2m3Z3 d dl0m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9 zd dl:m;Z; W n" e<k
�r’   d dl:m=Z; Y nX e2Z>e2Z?e3Z@e(ZAe
ZBddddddddddddddddddddddœZCe,eeDe
f dœdd„ZEG dd „ d ƒZFG d!d"„ d"eGƒZHeG d#d$„ d$ƒƒZIe
e,eDe
d%œd&d'„ZJee dd(œd)d*„ZKdpee7d, e
e
d-œd.d/„ZLee
d(œd0d1„ZMeIeNd2œd3d4„ZOdd5œeIeeeeIe7d6 f e/f eNeeDe
f d7œd8d9„ZPdd5œeeI eeNeeeeIe7d6 f e/f eeDeeDe
f f f d:œd;d<„ZQeeDe
f eeDeDf eeDe
f d=œd>d?„ZReeeDe
f eeeIe7d6 f e/f eeeeIe7d6 f e/f eeDe
f f d@œdAdB„ZSeIeNd2œdCdD„ZTeIeNd2œdEdF„ZUeIeNd2œdGdH„ZVeIeNd2œdIdJ„ZWeIeNd2œdKdL„ZXe,e
e,dMœdNdO„ZYeIe
ee
 dPœdQdR„ZZeeDdf eeDe
f dSœdTdU„Z[eeI eDee dVœdWdX„Z\ee eeI d(œdYdZ„Z]eed[ ee f Z^ee^ Z_eDeDd\œd]d^„Z`e_ee^eDf d_œd`da„Zadqed[ ee_df e_dbœdcdd„Zbe
e_e_deœdfdg„ZceIe_e_dhœdidj„ZdeeI e_e_dkœdldm„Zee^eDd(œdndo„ZfdS )ré    N)ÚcopyÚdeepcopy)Ú	dataclassÚis_dataclass)ÚEnum)	ÚAnyÚDictÚListÚSequenceÚSetÚTupleÚTypeÚUnionÚcast)Úmay_v1Úshared)ÚREF_TEMPLATE)ÚIncExÚModelNameMapÚ	UnionType)Ú	BaseModelÚ
ConfigDictÚFieldÚTypeAdapterÚcreate_model)ÚPydanticSchemaGenerationError)ÚPydanticUndefinedAnnotation)ÚValidationError)ÚGetJsonSchemaHandler)Úeval_type_lenient)Úlenient_issubclass)Ú	FieldInfo)ÚGenerateJsonSchema)ÚJsonSchemaValue)Ú
CoreSchema)ÚPydanticUndefinedÚPydanticUndefinedType)ÚUrl)Ú	AnnotatedÚLiteralÚget_argsÚ
get_origin)Ú"with_info_plain_validator_function)Ú general_plain_validator_function.T)ÚdefaultÚdefault_factoryÚaliasZalias_priorityÚvalidation_aliasÚserialization_aliasÚtitleZfield_title_generatorÚdescriptionZexamplesÚexcludeZ
exclude_ifZdiscriminatorÚ
deprecatedZjson_schema_extraÚfrozenZvalidate_defaultÚreprÚinitZinit_varZkw_only)Ú
field_infoÚreturnc                 C   s:   i }t D ] }t| |tƒ}|tk	r|||< q| j| j|dœS )N)Ú
annotationÚmetadataÚ
attributes)Ú_AttrsÚgetattrÚ	Undefinedr<   r=   )r:   r>   ÚattrÚvalue© rD   ú6/tmp/pip-unpacked-wheel-yktl02hi/fastapi/_compat/v2.pyÚasdictP   s    
ýrF   c                   @   s   e Zd ZdS )Ú
BaseConfigN©Ú__name__Ú
__module__Ú__qualname__rD   rD   rD   rE   rG   ]   s   rG   c                   @   s   e Zd ZdS )ÚErrorWrapperNrH   rD   rD   rD   rE   rL   a   s   rL   c                   @   s~  e Zd ZU eed< eed< dZed ed< dZe	e
df ed< eedœd	d
„ƒZee	edf dœdd„ƒZee	edf dœdd„ƒZeedœdd„ƒZeedœdd„ƒZeedœdd„ƒZddœdd„Zedœdd„Zi fddœeeeef ee	eef df eee	eeeef  df f dœdd„Zdddd d!d!d!d"œeed# e	edf e	edf eeeeed$œ	d%d&„Zedœd'd(„ZdS ))Ú
ModelFieldr:   ÚnameÚ
validation©rO   ÚserializationÚmodeNÚconfig)r;   c                 C   s   | j j}|d k	r|S | jS ©N)r:   r0   rN   )ÚselfÚarD   rD   rE   r0   l   s    zModelField.aliasc                 C   s   | j j}t|tƒr|r|S d S rT   )r:   r1   Ú
isinstanceÚstr)rU   ÚvarD   rD   rE   r1   q   s    zModelField.validation_aliasc                 C   s   | j j}|pd S rT   )r:   r2   )rU   ÚsarD   rD   rE   r2   x   s    zModelField.serialization_aliasc                 C   s
   | j  ¡ S rT   )r:   Úis_required©rU   rD   rD   rE   Úrequired}   s    zModelField.requiredc                 C   s   |   ¡ S rT   )Úget_defaultr\   rD   rD   rE   r.   �   s    zModelField.defaultc                 C   s   | j jS rT   )r:   r<   r\   rD   rD   rE   Útype_…   s    zModelField.type_c              	   C   sz   t  ¡ �h tjdkr.ddlm} t jd|d� t| jƒ}|d f|d t	f |d Žf˜}t
t| | jd	�| _W 5 Q R X d S )
N)é   é   r   )Ú UnsupportedFieldAttributeWarningÚignore)Úcategoryr<   r=   r>   )rS   )ÚwarningsÚcatch_warningsr   ZPYDANTIC_VERSION_MINOR_TUPLEZpydantic.warningsrb   ÚsimplefilterrF   r:   r   r   r(   rS   Ú_type_adapter)rU   rb   Z
field_dictZannotated_argsrD   rD   rE   Ú__post_init__‰   s"    

 ÿ
ÿûþzModelField.__post_init__c                 C   s   | j  ¡ rtS | j jdd�S )NT)Zcall_default_factory)r:   r[   rA   r^   r\   rD   rD   rE   r^   ¤   s    
zModelField.get_defaultrD   )Úloc.)rC   Úvaluesrj   r;   c             
   C   s\   z| j j|dd�d fW S  tk
rV } z"d tj|jdd�|d�f W Y ¢S d }~X Y nX d S )NT)Zfrom_attributesF©Zinclude_url)ÚerrorsZ
loc_prefix)rh   Zvalidate_pythonr   r   Z_regenerate_error_with_locrm   )rU   rC   rk   rj   ÚexcrD   rD   rE   Úvalidate©   s    þ
 ÿzModelField.validateÚjsonTF©rR   Úincluder5   Úby_aliasÚexclude_unsetÚexclude_defaultsÚexclude_none©rp   Úpython)	rC   rR   rr   r5   rs   rt   ru   rv   r;   c          	   
   C   s   | j j||||||||d�S )Nrq   )rh   Zdump_python)	rU   rC   rR   rr   r5   rs   rt   ru   rv   rD   rD   rE   Ú	serializeº   s    øzModelField.serializec                 C   s   t | ƒS rT   )Úidr\   rD   rD   rE   Ú__hash__Ó   s    zModelField.__hash__)rI   rJ   rK   r!   Ú__annotations__rX   rR   r)   rS   r   r   Úpropertyr0   r1   r2   Úboolr]   r   r.   r_   ri   r^   r   r   Úintr	   ro   r   ry   r{   rD   rD   rD   rE   rM   e   s\   
ýû
úö

õrM   )r<   r:   Ú
field_namer;   c                 C   s   | S rT   rD   )r<   r:   r€   rD   rD   rE   Úget_annotation_from_field_infoÙ   s    r�   )Úmodelr;   c                 C   s   |   ¡  d S rT   )Zmodel_rebuild©r‚   rD   rD   rE   Ú_model_rebuildß   s    r„   rp   rw   )r‚   rR   Úkwargsr;   c                 K   s   | j f d|i|—ŽS )NrR   )Z
model_dump)r‚   rR   r…   rD   rD   rE   Ú_model_dumpã   s    r†   c                 C   s   | j S rT   )Úmodel_configrƒ   rD   rD   rE   Ú_get_model_configé   s    rˆ   )Úfieldr;   c                 C   s$   | j j di ¡ dg ¡}t|ƒdkS )NÚschemaÚcomputed_fieldsr   )rh   Úcore_schemaÚgetÚlen)r‰   r‹   rD   rD   rE   Ú_has_computed_fieldsí   s
     ÿr�   ©Úseparate_input_output_schemasrP   )r‰   Úmodel_name_mapÚfield_mappingr‘   r;   c                 C   sp   |st | ƒrd nd}| jdkr*| jp4| jn
| jp4| j}|| |pB| jf }d|krl| jjpf| ¡  dd¡|d< |S )NrO   ú$refÚ_ú r3   )r�   rR   r1   r0   r2   r:   r3   Úreplace)r‰   r’   r“   r‘   Zoverride_modeZfield_aliasZjson_schemarD   rD   rE   Úget_schema_from_model_fieldô   s"    ÿÿýÿ
ý ÿr˜   )Úfieldsr’   r‘   r;   c                    s  t td�}dd„ | D ƒ}dd„ | D ƒ}t|tƒ d�}t|tƒ d�}dd„ |D ƒ}dd„ |D ƒ}	||	 }
dd	„ | D ƒ‰ ‡ fd
d	„|
D ƒ}‡fdd„t| ƒt|ƒ D ƒ}|j|d�\}}tttttt	f f |ƒ 
¡ D ],}d|krÒtt|d ƒ d¡d }||d< qÒt|||d�\}}||fS )N)Zref_templatec                 S   s   g | ]}|j d kr|‘qS ©rO   ©rR   ©Ú.0r‰   rD   rD   rE   Ú
<listcomp>  s     
 z#get_definitions.<locals>.<listcomp>c                 S   s   g | ]}|j d kr|‘qS )rQ   r›   rœ   rD   rD   rE   rž     s     
 ©Úknown_modelsc                 S   s"   g | ]}t t|d �|jdd�‘qS )©r<   rO   ©r:   rN   rR   ©rM   r!   rI   ©r�   r‚   rD   rD   rE   rž   %  s   ûýc                 S   s"   g | ]}t t|d �|jdd�‘qS )r¡   rQ   r¢   r£   r¤   rD   rD   rE   rž   -  s   ûýc                 S   s   h | ]
}|j ’qS rD   ©r_   ©r�   ÚfrD   rD   rE   Ú	<setcomp>6  s     z"get_definitions.<locals>.<setcomp>c                    s   h | ]}|j ˆ kr|’qS rD   r¥   r¦   )Úinput_typesrD   rE   r¨   7  s    
 c                    s,   g | ]$}|ˆ st |ƒr|jnd |jjf‘qS rš   )r�   rR   rh   rŒ   rœ   r�   rD   rE   rž   :  s   
øÿÿù)Úinputsr4   úr   )r’   Údefinitionsr“   )r"   r   Úget_flat_models_from_fieldsÚsetÚlistZgenerate_definitionsr   r   rX   r   rk   ÚsplitÚ%_remap_definitions_and_field_mappings)r™   r’   r‘   Zschema_generatorZvalidation_fieldsZserialization_fieldsZflat_validation_modelsZflat_serialization_modelsZflat_validation_model_fieldsZflat_serialization_model_fieldsZflat_model_fieldsZunique_flat_model_fieldsrª   r“   r¬   Zitem_defZitem_descriptionZnew_mappingÚnew_definitionsrD   )r©   r‘   rE   Úget_definitions  sH    	
 ÿ ÿúú
ÿ

ö"
ý
r³   )rŠ   Úold_name_to_new_name_mapr;   c           
      C   sÔ   t | ƒ}| ¡ D ]¾\}}|dkrf| d }t|tƒr| d  d¡d }||kr|| }tj|d�|d< qt|tƒr‚t||d�||< qt|t	ƒrg }|D ]0}t|tƒrºt||d�}	| 
|	¡ q”| 
|¡ q”|||< q|S )Nr”   ú/éÿÿÿÿrƒ   ©rŠ   r´   )r   ÚitemsrW   rX   r°   r   ÚformatÚdictÚ_replace_refsr¯   Úappend)
rŠ   r´   Ú
new_schemaÚkeyrC   Zref_nameÚnew_nameÚ	new_valueÚitemZnew_itemrD   rD   rE   r»   S  s6    

þ

þ
r»   )r’   r¬   r“   r;   c                 C   sà   i }|  ¡ D ]`\}}|d j}|| ksd|kr0q| | }|d  d¡d }||› d�|› d�hkrdq|||< qi }	|  ¡ D ]\}}t||d�}
|
|	|< qzi }|  ¡ D ]2\}}||kr¾|| }n|}t||d�}|||< q¤|	|fS )Nr   r”   rµ   r¶   z-Inputz-Outputr·   )r¸   r_   r°   r»   )r’   r¬   r“   r´   Z	field_keyrŠ   r‚   r¿   Zold_nameZnew_field_mappingr½   r²   r¾   rC   Znew_keyrÀ   rD   rD   rE   r±   w  s:    

þþ

þ
r±   c                 C   s*   ddl m} t | jj¡o(t| j|jƒ S )Nr   )Úparams)ZfastapirÂ   r   Zfield_annotation_is_scalarr:   r<   rW   ZBody)r‰   rÂ   rD   rD   rE   Úis_scalar_field¥  s    ÿþrÃ   c                 C   s   t  | jj¡S rT   )r   Zfield_annotation_is_sequencer:   r<   ©r‰   rD   rD   rE   Úis_sequence_field­  s    rÅ   c                 C   s   t  | jj¡S rT   )r   Z#field_annotation_is_scalar_sequencer:   r<   rÄ   rD   rD   rE   Úis_scalar_sequence_field±  s    rÆ   c                 C   s   t  | j¡S rT   )r   Z$is_bytes_or_nonable_bytes_annotationr_   rÄ   rD   rD   rE   Úis_bytes_fieldµ  s    rÇ   c                 C   s   t  | j¡S rT   )r   Zis_bytes_sequence_annotationr_   rÄ   rD   rD   rE   Úis_bytes_sequence_field¹  s    rÈ   )r:   r<   r;   c                 C   s.   t | ƒ}| |¡}t| ƒ}|j|_|j|_|S rT   )ÚtypeZfrom_annotationr   r=   r<   )r:   r<   ÚclsZmerged_field_infoZnew_field_inforD   rD   rE   Úcopy_field_info½  s    
rË   )r‰   rC   r;   c                 C   sv   t | jjƒp| jj}|tks$|tkrXt| jjƒ}|D ]"}|td ƒkrFq4t |ƒpP|} qXq4t|tj	ƒsht
‚tj| |ƒS rT   )r+   r:   r<   r   r   r*   rÉ   Ú
issubclassr   Zsequence_typesÚAssertionErrorZsequence_annotation_to_type)r‰   rC   Zorigin_typeZ
union_argsZ	union_argrD   rD   rE   Úserialize_sequence_valueÆ  s    rÎ   )rj   r;   c                 C   s.   t  dd| i dœg¡jdd�d }d |d< |S )NzField requiredÚmissing)rÉ   rj   ÚinputFrl   r   rÐ   )r   Zfrom_exception_datarm   )rj   ÚerrorrD   rD   rE   Úget_missing_field_errorÓ  s     ÿþþrÒ   )r™   Ú
model_namer;   c                 C   s   dd„ | D ƒ}t |f|Ž}|S )Nc                 S   s   i | ]}|j |jj|jf“qS rD   )rN   r:   r<   r¦   rD   rD   rE   Ú
<dictcomp>Þ  s      z%create_body_model.<locals>.<dictcomp>)r   )r™   rÓ   Zfield_paramsZ	BodyModelrD   rD   rE   Úcreate_body_modelÛ  s    rÕ   c                 C   sX   g }| j  ¡ D ]D\}}|j}t|ttfƒs2t|ƒr8d }n| j}| t	|||d�¡ q|S )N)r:   rN   rS   )
Úmodel_fieldsr¸   r<   r    r   rº   r   r‡   r¼   rM   )r‚   rÖ   rN   r:   r_   r‡   rD   rD   rE   Úget_model_fieldsã  s    ýÿr×   r   )rN   r;   c                 C   s   t  dd| ¡S )Nz[^a-zA-Z0-9.\-_]r•   )ÚreÚsub)rN   rD   rD   rE   Únormalize_nameü  s    rÚ   )Úunique_modelsr;   c                 C   sˆ   i }t ƒ }| D ]f}t|jƒ}||kr6t|ƒ}|||< q||krl| |¡ | |¡}||t|ƒ< ||t|ƒ< q|||< qdd„ | ¡ D ƒS )Nc                 S   s   i | ]\}}||“qS rD   rD   )r�   ÚkÚvrD   rD   rE   rÔ     s      z&get_model_name_map.<locals>.<dictcomp>)r®   rÚ   rI   Úget_long_model_nameÚaddÚpopr¸   )rÛ   Zname_model_mapZconflicting_namesr‚   rÓ   Zconflicting_modelrD   rD   rE   Úget_model_name_map   s    




rá   )r‚   r    r;   c                 C   s"   |pt ƒ }t| ƒ}t||d� |S ©NrŸ   )r®   r×   r­   )r‚   r    r™   rD   rD   rE   Úget_flat_models_from_model  s    
rã   )r<   r    r;   c                 C   sf   t | ƒ}|d k	rbt| ƒD ]H}t|ttfƒrT||krT| |¡ t|tƒr`t||d� qt||d� q|S râ   )r+   r*   r    r   r   rß   rã   Úget_flat_models_from_annotation)r<   r    ÚoriginÚargrD   rD   rE   rä     s    

rä   )r‰   r    r;   c                 C   sZ   | j }t|tƒr4||kr|S | |¡ t||d� n"t|tƒrJ| |¡ nt||d� |S râ   )r_   r    r   rß   rã   r   rä   )r‰   r    Z
field_typerD   rD   rE   Úget_flat_models_from_field*  s    


rç   )r™   r    r;   c                 C   s   | D ]}t ||d� q|S râ   )rç   )r™   r    r‰   rD   rD   rE   r­   :  s    r­   c                 C   s   | j › d| j› � dd¡S )NÚ__Ú.)rJ   rK   r—   rƒ   rD   rD   rE   rÞ   B  s    rÞ   )rp   )N)grØ   re   r   r   Zdataclassesr   r   Úenumr   Útypingr   r   r	   r
   r   r   r   r   r   Zfastapi._compatr   r   Zfastapi.openapi.constantsr   Zfastapi.typesr   r   r   Zpydanticr   r   r   r   r   r   r   r   Z,pydantic._internal._schema_generation_sharedr   Z pydantic._internal._typing_extrar   Zpydantic._internal._utilsr    Zpydantic.fieldsr!   Zpydantic.json_schemar"   r#   Zpydantic_corer$   r%   r&   r'   Ztyping_extensionsr(   r)   r*   r+   Zpydantic_core.core_schemar,   ÚImportErrorr-   ZRequiredParamrA   ZUndefinedTypeZevaluate_forwardrefZ	Validatorr?   rX   rF   rG   Ú	ExceptionrL   rM   r�   r„   r†   rˆ   r~   r�   r˜   r³   r»   r±   rÃ   rÅ   rÆ   rÇ   rÈ   rË   rÎ   rÒ   rÕ   r×   ZTypeModelOrEnumZTypeModelSetrÚ   rá   rã   rä   rç   r­   rÞ   rD   rD   rD   rE   Ú<module>   s"  ,ët  þ ÿ  þùÿ
ø#üÿÿûB


ü&
ÿ
ÿÿù.	 	 þ ÿ 
þ
 þ þ þ