o
    bi7B                     @   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)typecontentMediaTypeserializationbase64contentEncoding)mode_configser_json_bytesval_json_bytesupdate_with_validationsValidationsMappingbytes)selfr&   json_schema
bytes_mode r8   T/sda-disk/www/egybert/egybert_env/lib/python3.10/site-packages/fastapi/_compat/v2.pybytes_schema/   s   

zGenerateJsonSchema.bytes_schemaN)__name__
__module____qualname__r"   r!   r:   r8   r8   r8   r9   r    ,   s    r    default.default_factoryaliasalias_priorityvalidation_aliasserialization_aliastitlefield_title_generatordescriptionexamplesexclude
exclude_ifdiscriminator
deprecatedjson_schema_extrafrozenvalidate_defaultT)reprinit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	UndefinedrT   rU   )rS   rV   attrvaluer8   r8   r9   asdictW   s   r\   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
ModelFieldrS   name
validationr_   r+   r.   Nconfigr'   c                 C   s   | j j}|d ur
|S | jS N)rS   r@   r^   )r5   ar8   r8   r9   r@   k   s   zModelField.aliasc                 C   s   | j j}t|tr|r|S d S rb   )rS   rB   
isinstancestr)r5   var8   r8   r9   rB   p   s   zModelField.validation_aliasc                 C   s   | j j}|pd S rb   )rS   rC   )r5   sar8   r8   r9   rC   w   s   zModelField.serialization_aliasc                 C   s   |   S rb   )get_defaultr5   r8   r8   r9   r>   |      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)categoryrT   rU   rV   )ra   r8   )warningscatch_warningsr   PYDANTIC_VERSION_MINOR_TUPLEpydantic.warningsrm   simplefilterr\   rS   r   r   r   ra   _type_adapter)r5   rm   
field_dictannotated_argsr8   r8   r9   __post_init__   s$   



"zModelField.__post_init__c                 C   s   | j  rtS | j jddS )NT)call_default_factory)rS   is_requiredrY   rh   ri   r8   r8   r9   rh      s   
zModelField.get_defaultr8   )locr[   valuesr{   .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)from_attributesFinclude_url)errors
loc_prefix)ru   validate_pythonr   _regenerate_error_with_locr   )r5   r[   r|   r{   excr8   r8   r9   validate   s   zModelField.validatejsonTFr.   includerH   by_aliasexclude_unsetexclude_defaultsexclude_none)r   pythonr   rH   r   r   r   r   c          	   
   C   s   | j j||||||||dS )Nr   )ru   dump_python)	r5   r[   r.   r   rH   r   r   r   r   r8   r8   r9   	serialize   s   zModelField.serializer   rH   r   r   r   r   c             	   C   s   | j j|||||||dS )Nr   )ru   	dump_json)r5   r[   r   rH   r   r   r   r   r8   r8   r9   serialize_json   s   zModelField.serialize_jsonc                 C      t | S rb   )idri   r8   r8   r9   __hash__   s   zModelField.__hash__)r'   N)r;   r<   r=   r   __annotations__re   r.   r
   ra   r   propertyr@   rB   rC   r	   r>   rx   rh   dicttupleintlistr   r   boolr   r4   r   r   r8   r8   r8   r9   r]   d   s   
 


	

	

r]   fieldc                 C   s$   | j jdi dg }t|dkS )Nr&   computed_fieldsr   )ru   core_schemagetlen)r   r   r8   r8   r9   _has_computed_fields   s   r   separate_input_output_schemasmodel_name_mapfield_mappingr`   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 )Nr_   z$ref_ rD   )r   r.   rB   r@   rC   rS   rD   replace)r   r   r   r   override_modefield_aliasr6   r8   r8   r9   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)ref_templatec                 S      g | ]	}|j d kr|qS r_   r.   .0r   r8   r8   r9   
<listcomp>      z#get_definitions.<locals>.<listcomp>c                 S   r   )r+   r   r   r8   r8   r9   r     r   known_modelsc                 S   "   g | ]}t t|d |jddqS )rT   r_   rS   r^   r.   r]   r   r;   r   modelr8   r8   r9   r   "      c                 S   r   )r   r+   r   r   r   r8   r8   r9   r   *  r   c                 S   s   h | ]}|j jqS r8   rS   rT   r   fr8   r8   r9   	<setcomp>3  s    z"get_definitions.<locals>.<setcomp>c                    s   h | ]
}|j j vr|qS r8   r   r   )input_typesr8   r9   r   4  s    c                    s,   g | ]}| st |r|jnd |jjfqS r   )r   r.   ru   r   r   r   r8   r9   r   7  s    
)inputsrF   r   )r    r   get_flat_models_from_fieldssetr   generate_definitionsr   r   re   r	   r|   split)r   r   r   schema_generatorvalidation_fieldsserialization_fieldsflat_validation_modelsflat_serialization_modelsflat_validation_model_fieldsflat_serialization_model_fieldsflat_model_fieldsunique_flat_model_fieldsr   r   definitionsitem_defitem_descriptionr8   )r   r   r9   get_definitions  s<   
	


"r   c                 C   s*   ddl m} t| jjot| j|j S )Nr   )params)fastapir   r   field_annotation_is_scalarrS   rT   rd   Body)r   r   r8   r8   r9   is_scalar_fieldP  s   r   rT   c                 C   s.   t | }||}t| }|j|_|j|_|S rb   )r)   from_annotationr   rU   rT   )rS   rT   clsmerged_field_infonew_field_infor8   r8   r9   copy_field_infoX  s   
r   r[   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 rb   )r   rS   rT   r   r   r   r)   
issubclassr   sequence_typessequence_annotation_to_type)r   r[   origin_type
union_args	union_argr8   r8   r9   serialize_sequence_valuea  s   r   r{   c                 C   s.   t dd| i dgjddd }d |d< |S )NzField requiredmissing)r)   r{   inputFr~   r   r   )r   from_exception_datar   )r{   errorr8   r8   r9   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 r8   )r^   rS   rT   r   r8   r8   r9   
<dictcomp>y  s    z%create_body_model.<locals>.<dictcomp>)r   )r   r   field_params	BodyModelr8   r8   r9   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)rS   r^   ra   )
model_fieldsitemsrT   r   r   r   r   model_configappendr]   )r   r   r^   rS   type_r   r8   r8   r9   get_model_fields~  s   r   c                 C   r   rb   )r   )r   r8   r8   r9   get_cached_model_fields  rj   r   r   r^   c                 C   s   t dd| S )Nz[^a-zA-Z0-9.\-_]r   )resub)r^   r8   r8   r9   normalize_name  s   r   unique_modelsc                 C   s2   i }| D ]}t |j}|||< qdd | D S )Nc                 S   s   i | ]\}}||qS r8   r8   )r   kvr8   r8   r9   r     s    z&get_model_name_map.<locals>.<dictcomp>)r   r;   r   )r   name_model_mapr   r   r8   r8   r9   get_model_name_map  s
   

r   r   c                 C   s"   |pt  }t| }t||d |S Nr   )r   r   r   )r   r   r   r8   r8   r9   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)rT   r   originargr8   r8   r9   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  )rS   rT   r   r   r  r  r   r  )r   r   
field_typer8   r8   r9   get_flat_models_from_field  s   



r  c                 C   s   | D ]}t ||d q|S r  )r  )r   r   r   r8   r8   r9   r     s   r   r   r   c                    s    fdd| D }|S )Nc              	      s(   g | ]}i |d  | d d iqS )r{   r8   )r   )r   errr   r8   r9   r     s    z._regenerate_error_with_loc.<locals>.<listcomp>r8   )r   r   updated_loc_errorsr8   r
  r9   r     s   
r   rb   )Wr   rp   collections.abcr   r   dataclassesr   r   enumr   	functoolsr   typingr   r	   r
   r   r   r   r   fastapi._compatr   r   fastapi.openapi.constantsr   fastapi.typesr   r   r   pydanticr   r   r   r   r   r   r   r   ,pydantic._internal._schema_generation_sharedr    pydantic._internal._typing_extrar   pydantic.fieldsr   pydantic.json_schemar    _GenerateJsonSchemar!   pydantic_corer"   r#   r$   pydantic_core.core_schemar%   RequiredParamrY   evaluate_forwardrefrW   r   re   r\   r]   r   r   r   r   r   r   r   r   r   r   r)   r   r   r   r   TypeModelOrEnumr   TypeModelSetr   r   r  r  r  r   r   r8   r8   r8   r9   <module>   s6   $
	
 

#
@	&
	
	


