U
    uiBM                     @   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   L/home/lhs5088/backend/venv/lib/python3.8/site-packages/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rtt|d dd }||d< qt|||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rt||d||< qt|t	rg }|D ]0}t|trt||d}	|
|	 q|
| q|||< q|S )Nr   /r   r   r   )r   itemsrW   rX   r   r   formatdict_replace_refsr   append)
r   r   
new_schemakeyrC   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   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'   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


&

.	 	   

   