o
    i7B                     @   sR  d dl Z d dlZd dl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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l0m1Z1 d dl0m2Z2 d dl0m3Z3 d dl4m5Z5 e2Z6e2Z7e)Z8G dd de.Z-i ddddddddddd dd!dd"dd#dd$dd%dd&dd'dd(dd)dd*dd+dd,dddd-Z9d.e+d/e:e;ef fd0d1Z<eG d2d3 d3Z=d4e=d/e>fd5d6Z?d,d7d4e=d8ed9e:e@e=ed: f e/f d;e>d/e:e;ef f
d<d=ZAd,d7d>ee= d8ed;e>d/e@e:e@e=ed: f e/f e:e;e:e;ef f f fd?d@ZBd4e=d/e>fdAdBZCd.e+dCed/e+fdDdEZDd4e=dFed/ee fdGdHZEdIe@eFe;B df d/e:e;ef fdJdKZGd>ee= dLe;d/eHe fdMdNZIdOeHe d/eJe= fdPdQZKedOeHe d/eJe= fdRdSZLeHdT eHe	 B ZMeNeM ZOdUe;d/e;fdVdWZPdXeOd/e:eMe;f fdYdZZQ	dhdOeHdT d[eOdB d/eOfd\d]ZRdCed[eOd/eOfd^d_ZSd4e=d[eOd/eOfd`daZTd>ee= d[eOd/eOfdbdcZUddee dee@e;eFB df d/eJe:e;ef  fdfdgZVdS )i    N)Sequence)copy)	dataclassis_dataclass)Enum)	lru_cache)	AnnotatedAnyLiteralUnioncastget_args
get_origin)lenient_issubclassshared)REF_TEMPLATE)IncExModelNameMap	UnionType)	BaseModel
ConfigDictFieldTypeAdaptercreate_model)PydanticSchemaGenerationError)PydanticUndefinedAnnotation)ValidationError)GetJsonSchemaHandler)eval_type_lenient)	FieldInfo)GenerateJsonSchema)JsonSchemaValue)
CoreSchema)PydanticUndefined)Url)"with_info_plain_validator_functionc                   @   s   e Zd ZdedefddZdS )r    schemareturnc                 C   sJ   ddd}| j dkr| jjn| jj}|dkrd|d< | ||| jj |S )Nstringzapplication/octet-stream)typeZcontentMediaTypeserializationbase64ZcontentEncoding)mode_configZser_json_bytesZval_json_bytesZupdate_with_validationsZValidationsMappingbytes)selfr&   json_schemaZ
bytes_mode r1   I/home/app/Keep/.python/lib/python3.10/site-packages/fastapi/_compat/v2.pybytes_schema/   s   

zGenerateJsonSchema.bytes_schemaN)__name__
__module____qualname__r"   r!   r3   r1   r1   r1   r2   r    ,   s    r    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_defaultT)reprinitZinit_varkw_only
field_infor'   c                 C   s:   i }t D ]}t| |t}|tur|||< q| j| j|dS )N)
annotationmetadata
attributes)_Attrsgetattr	UndefinedrE   rF   )rD   rG   attrvaluer1   r1   r2   asdictW   s   rM   c                   @   s  e Zd ZU eed< eed< dZed ed< dZe	dB ed< e
defd	d
Ze
dedB fddZe
dedB fddZe
defddZd/ddZdefddZi fdddedeeef deeeB df deeeeeef  f fddZdddddddd deded! d"edB d#edB d$ed%ed&ed'edefd(d)Zddddddd*ded"edB d#edB d$ed%ed&ed'edefd+d,Zdefd-d.ZdS )0
ModelFieldrD   name
validationrP   r*   r,   Nconfigr'   c                 C   s   | j j}|d ur
|S | jS N)rD   r9   rO   )r/   ar1   r1   r2   r9   k   s   zModelField.aliasc                 C   s   | j j}t|tr|r|S d S rS   )rD   r:   
isinstancestr)r/   var1   r1   r2   r:   p   s   zModelField.validation_aliasc                 C   s   | j j}|pd S rS   )rD   r;   )r/   sar1   r1   r2   r;   w   s   zModelField.serialization_aliasc                 C   s   |   S rS   )get_defaultr/   r1   r1   r2   r7   |      zModelField.defaultc                 C   s   t  = tjdkrddlm} t jd|d t| j}|d g|d t	d
i |d R }t
t| | jd	| _W d    d S 1 sDw   Y  d S )N)      r   ) UnsupportedFieldAttributeWarningignore)categoryrE   rF   rG   )rR   r1   )warningscatch_warningsr   ZPYDANTIC_VERSION_MINOR_TUPLEZpydantic.warningsr^   simplefilterrM   rD   r   r   r   rR   _type_adapter)r/   r^   Z
field_dictZannotated_argsr1   r1   r2   __post_init__   s$   



"zModelField.__post_init__c                 C   s   | j  rtS | j jddS )NT)Zcall_default_factory)rD   Zis_requiredrJ   rY   rZ   r1   r1   r2   rY      s   
zModelField.get_defaultr1   )locrL   valuesrf   .c             
   C   sT   z| j j|ddg fW S  ty) } zd t|jdd|dfW  Y d }~S d }~ww )NT)Zfrom_attributesFZinclude_url)errors
loc_prefix)rd   Zvalidate_pythonr   _regenerate_error_with_locri   )r/   rL   rg   rf   excr1   r1   r2   validate   s   zModelField.validatejsonTFr,   includer>   by_aliasexclude_unsetexclude_defaultsexclude_none)rn   pythonrp   r>   rq   rr   rs   rt   c          	   
   C   s   | j j||||||||dS )Nro   )rd   Zdump_python)	r/   rL   r,   rp   r>   rq   rr   rs   rt   r1   r1   r2   	serialize   s   zModelField.serializerp   r>   rq   rr   rs   rt   c             	   C   s   | j j|||||||dS )Nrw   )rd   Z	dump_json)r/   rL   rp   r>   rq   rr   rs   rt   r1   r1   r2   serialize_json   s   zModelField.serialize_jsonc                 C      t | S rS   )idrZ   r1   r1   r2   __hash__   s   zModelField.__hash__)r'   N)r4   r5   r6   r   __annotations__rV   r,   r
   rR   r   propertyr9   r:   r;   r	   r7   re   rY   dicttupleintlistrm   r   boolrv   r.   rx   r{   r1   r1   r1   r2   rN   d   s   
 


	

	

rN   fieldc                 C   s$   | j jdi dg }t|dkS )Nr&   computed_fieldsr   )rd   core_schemagetlen)r   r   r1   r1   r2   _has_computed_fields   s   r   separate_input_output_schemasmodel_name_mapfield_mappingrQ   r   c                 C   sp   |st | rd nd}| jdkr| jp| jn| jp| j}|| |p!| jf }d|vr6| jjp3| dd|d< |S )NrP   z$ref_ r<   )r   r,   r:   r9   r;   rD   r<   replace)r   r   r   r   Zoverride_modeZfield_aliasr0   r1   r1   r2   get_schema_from_model_field   s"   


r   fieldsc                    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|v rtt|d dd }||d< qi|tttttt	f f |fS )N)Zref_templatec                 S      g | ]	}|j d kr|qS rP   r,   .0r   r1   r1   r2   
<listcomp>      z#get_definitions.<locals>.<listcomp>c                 S   r   )r*   r   r   r1   r1   r2   r     r   known_modelsc                 S   "   g | ]}t t|d |jddqS )rE   rP   rD   rO   r,   rN   r   r4   r   modelr1   r1   r2   r   "      c                 S   r   )r   r*   r   r   r   r1   r1   r2   r   *  r   c                 S   s   h | ]}|j jqS r1   rD   rE   r   fr1   r1   r2   	<setcomp>3  s    z"get_definitions.<locals>.<setcomp>c                    s   h | ]
}|j j vr|qS r1   r   r   )input_typesr1   r2   r   4  s    c                    s,   g | ]}| st |r|jnd |jjfqS r   )r   r,   rd   r   r   r   r1   r2   r   7  s    
)inputsr=   r   )r    r   get_flat_models_from_fieldssetr   Zgenerate_definitionsr   r~   rV   r	   rg   split)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   ZdefinitionsZitem_defZitem_descriptionr1   )r   r   r2   get_definitions  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_scalarrD   rE   rU   ZBody)r   r   r1   r1   r2   is_scalar_fieldP  s   r   rE   c                 C   s.   t | }||}t| }|j|_|j|_|S rS   )r)   Zfrom_annotationr   rF   rE   )rD   rE   clsZmerged_field_infoZnew_field_infor1   r1   r2   copy_field_infoX  s   
r   rL   c                 C   sr   t | jjp	| jj}|tu s|tu r*t| jj}|D ]}|td u r#qt |p(|} t|tj	s2J tj
| |S rS   )r   rD   rE   r   r   r   r)   
issubclassr   Zsequence_typesZsequence_annotation_to_type)r   rL   Zorigin_typeZ
union_argsZ	union_argr1   r1   r2   serialize_sequence_valuea  s   r   rf   c                 C   s.   t dd| i dgjddd }d |d< |S )NzField requiredmissing)r)   rf   inputFrh   r   r   )r   Zfrom_exception_datari   )rf   errorr1   r1   r2   get_missing_field_errorn  s   r   
model_namec                 C   s"   dd | D }t |fi |}|S )Nc                 S   s   i | ]}|j |jj|jfqS r1   )rO   rD   rE   r   r1   r1   r2   
<dictcomp>y  s    z%create_body_model.<locals>.<dictcomp>)r   )r   r   Zfield_paramsZ	BodyModelr1   r1   r2   create_body_modelv  s   r   r   c                 C   sX   g }| j  D ]"\}}|j}t|ttfst|rd }n| j}|t	|||d q|S )N)rD   rO   rR   )
model_fieldsitemsrE   r   r   r~   r   model_configappendrN   )r   r   rO   rD   type_r   r1   r1   r2   get_model_fields~  s   r   c                 C   ry   rS   )r   )r   r1   r1   r2   get_cached_model_fields  r[   r   r   rO   c                 C   s   t dd| S )Nz[^a-zA-Z0-9.\-_]r   )resub)rO   r1   r1   r2   normalize_name  s   r   unique_modelsc                 C   s2   i }| D ]}t |j}|||< qdd | D S )Nc                 S   s   i | ]\}}||qS r1   r1   )r   kvr1   r1   r2   r     s    z&get_model_name_map.<locals>.<dictcomp>)r   r4   r   )r   Zname_model_mapr   r   r1   r1   r2   get_model_name_map  s
   

r   r   c                 C   s"   |pt  }t| }t||d |S Nr   )r   r   r   )r   r   r   r1   r1   r2   get_flat_models_from_model  s   
r   c                 C   sf   t | }|d ur1t| D ]$}t|ttfr*||vr)|| t|tr)t||d qt||d q|S r   )r   r   r   r   r   addr   get_flat_models_from_annotation)rE   r   originargr1   r1   r2   r     s   

r   c                 C   s`   | j j}t|tr||v r|S || t||d |S t|tr(|| |S t||d |S r   )rD   rE   r   r   r   r   r   r   )r   r   Z
field_typer1   r1   r2   get_flat_models_from_field  s   



r   c                 C   s   | D ]}t ||d q|S r   )r   )r   r   r   r1   r1   r2   r     s   r   ri   rj   c                    s    fdd| D }|S )Nc              	      s(   g | ]}i |d  | d d iqS )rf   r1   )r   )r   errrj   r1   r2   r     s    z._regenerate_error_with_loc.<locals>.<listcomp>r1   )ri   rj   Zupdated_loc_errorsr1   r   r2   rk     s   
rk   rS   )Wr   ra   collections.abcr   r   dataclassesr   r   enumr   	functoolsr   typingr   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.fieldsr   Zpydantic.json_schemar    Z_GenerateJsonSchemar!   Zpydantic_corer"   r#   r$   Zpydantic_core.core_schemar%   ZRequiredParamrJ   Zevaluate_forwardrefrH   r~   rV   rM   rN   r   r   r   r   r   r   r   r   r   r   r)   r   r   r   r   ZTypeModelOrEnumr   ZTypeModelSetr   r   r   r   r   r   rk   r1   r1   r1   r2   <module>   s6   $
	
 

#
@	&
	
	


