U
    nËjâ*  ã                   @   sn  d dl Z d dlmZ d dlmZmZmZmZmZm	Z	 d dl
mZ d dlmZmZ d dl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 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" n„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l#m!Z! d	dl#m"Z" ee	e ee dœdd„ƒZ$e%e&dœdd„Z'eedœdd„Z(dOeed eed œd!d"„Z)e*e&d#œd$d%„Z+eeed&œd'd(„Z,ee e-e	e d)œd*d+„Z.eee-ed,œd-d.„Z/ee&d/œd0d1„Z0ee&d/œd2d3„Z1ee&d/œd4d5„Z2ee&d/œd6d7„Z3ee&d/œd8d9„Z4eeee d:œd;d<„Z5e	e ddœd=d>„Z6ee ed?œd@dA„Z7dBdCœee ee&eeeeedD f ej8f ee-ee-ef f f dEœdFdG„Z9dBdCœeeeeeedD f ej8f e&ee-ef dHœdIdJ„Z:ee&dœdKdL„Z;ee&dœdMdN„Z<dS )Pé    N)Ú	lru_cache)ÚAnyÚDictÚListÚSequenceÚTupleÚType)Úmay_v1)ÚPYDANTIC_V2Úlenient_issubclass)ÚModelNameMap)Ú	BaseModel)ÚLiteralé   )Ú
ModelField)Ú
BaseConfig)Ú	FieldInfo)ÚPydanticSchemaGenerationError)ÚRequiredParam)Ú	Undefined)ÚUndefinedType)ÚUrl)Ú	Validator)Úevaluate_forwardref)Úget_missing_field_error)Ú"with_info_plain_validator_function)ÚmodelÚreturnc                 C   s<   t | tjƒr"ddlm} | | ¡S ddlm} | | ¡S d S ©Nr   ©Úv1r   ©Úv2)r   r	   r   Úfastapi._compatr    Zget_model_fieldsÚ r"   ©r   r    r"   © r&   ú8/tmp/pip-unpacked-wheel-yktl02hi/fastapi/_compat/main.pyÚget_cached_model_fields4   s
    
r(   )Úvaluer   c                 C   s0   t | tjƒrdS tr,ddlm} t | |jƒS dS ©NTr   r!   F)Ú
isinstancer	   r   r
   r$   r"   ©r)   r"   r&   r&   r'   Ú_is_undefined@   s    r-   c                 C   s@   t | tjƒr"ddlm} | | ¡S tr<ddlm} | | ¡S d S r   )	r+   r	   r   r#   r    Ú_get_model_configr
   r$   r"   r%   r&   r&   r'   r.   J   s    
r.   Újson)r/   Úpython)r   ÚmodeÚkwargsr   c                 K   sX   t | tjƒr.ddlm} |j| fd|i|—ŽS trTddlm} |j| fd|i|—ŽS d S )Nr   r   r1   r   r!   )	r+   r	   r   r#   r    Ú_model_dumpr
   r$   r"   )r   r1   r2   r    r"   r&   r&   r'   r3   U   s    r3   )Úexcr   c                 C   s0   t | tjƒrdS tr,ddlm} t | |jƒS dS r*   )r+   r	   ZErrorWrapperr
   r$   r"   )r4   r"   r&   r&   r'   Ú_is_error_wrapperb   s    r5   )Ú
field_infoÚ
annotationr   c                 C   sL   t | tjƒr&ddlm} |j| |d�S ts.t‚ddlm	} |j| |d�S d S )Nr   r   )r6   r7   r   r!   )
r+   r	   r   r#   r    Úcopy_field_infor
   ÚAssertionErrorr$   r"   )r6   r7   r    r"   r&   r&   r'   r8   l   s    r8   )ÚfieldsÚ
model_namer   c                 C   sT   | r.t | d tjƒr.ddlm} |j| |d�S ts6t‚ddlm	} |j| |d�S d S )Nr   r   )r:   r;   r   r!   )
r+   r	   r   r#   r    Úcreate_body_modelr
   r9   r$   r"   )r:   r;   r    r"   r&   r&   r'   r<   x   s    r<   )r7   r6   Ú
field_namer   c                 C   sP   t |tjƒr(ddlm} |j| ||d�S ts0t‚ddlm	} |j| ||d�S d S )Nr   r   )r7   r6   r=   r   r!   )
r+   r	   r   r#   r    Úget_annotation_from_field_infor
   r9   r$   r"   )r7   r6   r=   r    r"   r&   r&   r'   r>   †   s      ÿ  ÿr>   )Úfieldr   c                 C   sD   t | tjƒr"ddlm} | | ¡S ts*t‚ddlm	} | | ¡S d S r   )
r+   r	   r   r#   r    Úis_bytes_fieldr
   r9   r$   r"   ©r?   r    r"   r&   r&   r'   r@   ˜   s    
r@   c                 C   sD   t | tjƒr"ddlm} | | ¡S ts*t‚ddlm	} | | ¡S d S r   )
r+   r	   r   r#   r    Úis_bytes_sequence_fieldr
   r9   r$   r"   rA   r&   r&   r'   rB   ¤   s    
rB   c                 C   sD   t | tjƒr"ddlm} | | ¡S ts*t‚ddlm	} | | ¡S d S r   )
r+   r	   r   r#   r    Úis_scalar_fieldr
   r9   r$   r"   rA   r&   r&   r'   rC   °   s    
rC   c                 C   sD   t | tjƒr"ddlm} | | ¡S ts*t‚ddlm	} | | ¡S d S r   )
r+   r	   r   r#   r    Úis_scalar_sequence_fieldr
   r9   r$   r"   rA   r&   r&   r'   rD   ¼   s    
rD   c                 C   sD   t | tjƒr"ddlm} | | ¡S ts*t‚ddlm	} | | ¡S d S r   )
r+   r	   r   r#   r    Úis_sequence_fieldr
   r9   r$   r"   rA   r&   r&   r'   rE   È   s    
rE   )r?   r)   r   c                 C   sL   t | tjƒr&ddlm} |j| |d�S ts.t‚ddlm	} |j| |d�S d S )Nr   r   )r?   r)   r   r!   )
r+   r	   r   r#   r    Úserialize_sequence_valuer
   r9   r$   r"   )r?   r)   r    r"   r&   r&   r'   rF   Ô   s    rF   c                 C   sB   t | tjƒr$ddlm} | | ¡ ntr>ddlm} | | ¡ d S r   )	r   r	   r   r#   r    Ú_model_rebuildr
   r$   r"   r%   r&   r&   r'   rG   à   s    rG   )r:   r   c                    sž   dd„ | D ƒ}|r4ddl m} |j|tƒ d�}|}ntƒ }tr„ddlm‰  ‡ fdd„| D ƒ}ˆ j|tƒ d�}| |¡}ˆ  |¡}|S ddl m} | |¡}|S )	Nc                 S   s   g | ]}t |tjƒr|‘qS r&   ©r+   r	   r   ©Ú.0r?   r&   r&   r'   Ú
<listcomp>ì   s     z-get_compat_model_name_map.<locals>.<listcomp>r   r   )Zknown_modelsr   r!   c                    s   g | ]}t |ˆ jƒr|‘qS r&   ©r+   r   rI   r!   r&   r'   rK   û   s     )	r#   r    Zget_flat_models_from_fieldsÚsetr
   r$   r"   ÚunionZget_model_name_map)r:   Zv1_model_fieldsr    Zv1_flat_modelsZall_flat_modelsZv2_model_fieldsZv2_flat_modelsÚmodel_name_mapr&   r!   r'   Úget_compat_model_name_mapë   s4    ÿ ÿ
ÿ ÿ


rP   T)Úseparate_input_output_schemas)Z
validationZserialization)r:   rO   rQ   r   c                    sÂ   t jdk r„dd„ | D ƒ}tj|||d�\}}ts8||fS ddlm‰  ‡ fdd„| D ƒ}ˆ j|||d�\}}||–}	||–}
|
|	fS n:ddlm‰  ‡ fdd„| D ƒ}ˆ j|||d�\}}||fS d S )	N)é   é   c                 S   s   g | ]}t |tjƒr|‘qS r&   rH   rI   r&   r&   r'   rK     s      z#get_definitions.<locals>.<listcomp>)r:   rO   rQ   r   r!   c                    s   g | ]}t |ˆ jƒr|‘qS r&   rL   rI   r!   r&   r'   rK   #  s      c                    s   g | ]}t |ˆ jƒr|‘qS r&   rL   rI   r!   r&   r'   rK   1  s      )ÚsysÚversion_infor	   Úget_definitionsr
   r$   r"   )r:   rO   rQ   Z	v1_fieldsZv1_field_mapsZv1_definitionsZ	v2_fieldsZv2_field_mapsZv2_definitionsZall_definitionsZall_field_mapsr&   r!   r'   rV     s6    
ý
ý

ý
rV   )r?   rO   Úfield_mappingrQ   r   c                 C   sT   t | tjƒr*ddlm} |j| |||d�S ts2t‚ddlm	} |j| |||d�S d S )Nr   r   )r?   rO   rW   rQ   r   r!   )
r+   r	   r   r#   r    Úget_schema_from_model_fieldr
   r9   r$   r"   )r?   rO   rW   rQ   r    r"   r&   r&   r'   rX   :  s     
üürX   c                 C   s0   t | tjƒrdS tr,ddlm} t | |jƒS dS r*   )r+   r	   r   r
   r$   r"   r,   r&   r&   r'   Ú_is_model_fieldY  s    rY   c                 C   s0   t | tjƒrdS tr,ddlm} t | |jƒS dS r*   )r   r	   r   r
   r$   r"   r,   r&   r&   r'   Ú_is_model_classc  s    rZ   )r/   )=rT   Ú	functoolsr   Útypingr   r   r   r   r   r   r#   r	   Zfastapi._compat.sharedr
   r   Zfastapi.typesr   Zpydanticr   Ztyping_extensionsr   Zmodel_fieldr   r"   r   r   r   r   r   r   r   r   r   r   r   r    r(   ÚobjectÚboolr-   r.   r3   Ú	Exceptionr5   r8   Ústrr<   r>   r@   rB   rC   rD   rE   rF   rG   rP   ZJsonSchemaValuerV   rX   rY   rZ   r&   r&   r&   r'   Ú<module>   s´    	
 ÿ  þ
 þ  þ$üÿÿüÿû7øÿÿ
÷
