o
    ɝi@                     @   s  d dl Z d dl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mZmZ d dlmZmZ d dlmZ d dlmZmZ d d	l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l,m-Z- d dl,m.Z.m/Z/ d dl,m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5 zd dl6m7Z7 W n e8y   d dl6m9Z7 Y nw e.Z:e.Z;e/Z<e$Z=e	Z>G dd dZ?G dd de@ZAeG dd dZBde	d e(d!eCd"e	fd#d$ZDd%ee d"dfd&d'ZE	(dmd%ed)e3d* d+e	d"e	fd,d-ZFd%ed"e	fd.d/ZGd0d1d2eBd3ed4e
eeBe3d5 f e+f d6eHd"e
eCe	f f
d7d8ZId0d1d9eeB d3ed6eHd"ee
eeBe3d5 f e+f e
eCe
eCe	f f f fd:d;ZJd<e
eCe	f d=e
eCeCf d"e
eCe	f fd>d?ZKd3ed@e
eCe	f d4e
eeBe3d5 f e+f d"ee
eeBe3d5 f e+f e
eCe	f f fdAdBZLd2eBd"eHfdCdDZMd2eBd"eHfdEdFZNd2eBd"eHfdGdHZOd2eBd"eHfdIdJZPd2eBd"eHfdKdLZQd e(de	d"e(fdMdNZRd2eBdOe	d"ee	 fdPdQZSdReeCdSf d"e
eCe	f fdTdUZTd9eeB dVeCd"ee fdWdXZUd%ee d"eeB fdYdZZVeed[ ee f ZWeeW ZXd\eCd"eCfd]d^ZYd_eXd"e
eWeCf fd`daZZ	dnd%ed[ dbeeXdf d"eXfdcddZ[de	dbeXd"eXfdedfZ\d2eBdbeXd"eXfdgdhZ]d9eeB dbeXd"eXfdidjZ^d%eWd"eCfdkdlZ_dS )o    N)copydeepcopy)	dataclass)Enum)	AnyDictListSequenceSetTupleTypeUnioncast)may_v1shared)REF_TEMPLATE)IncExModelNameMap)	BaseModel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_functionc                   @      e Zd ZdS )
BaseConfigN__name__
__module____qualname__ r0   r0   N/var/www/html/ocr-read/venv/lib/python3.10/site-packages/fastapi/_compat/v2.pyr+   6       r+   c                   @   r*   )ErrorWrapperNr,   r0   r0   r0   r1   r3   :   r2   r3   c                   @   sH  e Zd ZU eed< eed< dZed ed< edefddZ	ede
fd	d
Zede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ef df deeeeeeef  df f fddZdddddddddeded  d!eedf d"eedf d#e
d$e
d%e
d&e
defd'd(Zdefd)d*ZdS ),
ModelField
field_infoname
validationr7   serializationmodereturnc                 C   s   | j j}|d ur
|S | jS N)r5   aliasr6   )selfar0   r0   r1   r=   D   s   zModelField.aliasc                 C   s
   | j  S r<   )r5   is_requiredr>   r0   r0   r1   requiredI   s   
zModelField.requiredc                 C   s   |   S r<   )get_defaultrA   r0   r0   r1   defaultM      zModelField.defaultc                 C   s   | j jS r<   )r5   
annotationrA   r0   r0   r1   type_Q   rE   zModelField.type_Nc                 C   sj   t  ' tjdkrddlm} t jd|d tt| j	j
| j	f | _W d    d S 1 s.w   Y  d S )N)      r   ) UnsupportedFieldAttributeWarningignore)category)warningscatch_warningsr   PYDANTIC_VERSION_MINOR_TUPLEpydantic.warningsrJ   simplefilterr   r$   r5   rF   _type_adapter)r>   rJ   r0   r0   r1   __post_init__U   s   

"zModelField.__post_init__c                 C   s   | j  rtS | j jddS )NT)call_default_factory)r5   r@   	UndefinedrC   rA   r0   r0   r1   rC   e   s   
zModelField.get_defaultr0   )locvaluevaluesrV   .c             
   C   sV   z| j j|ddd fW S  ty* } zd tj|jdd|dfW  Y d }~S d }~ww )NT)from_attributesFinclude_url)errors
loc_prefix)rR   validate_pythonr   r   _regenerate_error_with_locr\   )r>   rW   rX   rV   excr0   r0   r1   validatej   s   zModelField.validatejsonTFr:   includeexcludeby_aliasexclude_unsetexclude_defaultsexclude_nonerb   pythonrd   re   rf   rg   rh   ri   c          	   
   C   s   | j j||||||||dS )Nrc   )rR   dump_python)	r>   rW   r:   rd   re   rf   rg   rh   ri   r0   r0   r1   	serialize{   s   zModelField.serializec                 C   s   t | S r<   )idrA   r0   r0   r1   __hash__   s   zModelField.__hash__)r;   N)r-   r.   r/   r   __annotations__strr:   r%   propertyr=   boolrB   r   rD   rG   rS   rC   r   r   r   intr   ra   r   rm   ro   r0   r0   r0   r1   r4   >   sj   
 




	

r4   rF   r5   
field_namer;   c                 C   s   | S r<   r0   )rF   r5   ru   r0   r0   r1   get_annotation_from_field_info   s   rv   modelc                 C   s   |    d S r<   )model_rebuildrw   r0   r0   r1   _model_rebuild      rz   rb   r:   rj   kwargsc                 K   s   | j dd|i|S )Nr:   r0   )
model_dump)rw   r:   r|   r0   r0   r1   _model_dump   s   r~   c                 C   s   | j S r<   )model_configry   r0   r0   r1   _get_model_config   s   r   T)separate_input_output_schemasfieldmodel_name_mapfield_mappingr8   r   c                 C   sH   |rd nd}|| |p| j f }d|vr"| jjp| j dd|d< |S )Nr7   $ref_ title)r:   r5   r   r=   replace)r   r   r   r   override_modejson_schemar0   r0   r1   get_schema_from_model_field   s   

r   fieldsc                    s&  t td}|r	d n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 rtt|d dd }||d< qot|||d\}}||fS )N)ref_templater7   c                 S      g | ]	}|j d kr|qS )r7   r:   .0r   r0   r0   r1   
<listcomp>       z#get_definitions.<locals>.<listcomp>c                 S   r   )r9   r   r   r0   r0   r1   r      r   known_modelsc                 S   "   g | ]}t t|d |jddqS )rF   r7   r5   r6   r:   r4   r   r-   r   rw   r0   r0   r1   r          c                 S   r   )r   r9   r   r   r   r0   r0   r1   r      r   c                 S   s   h | ]}|j qS r0   rG   r   fr0   r0   r1   	<setcomp>   s    z"get_definitions.<locals>.<setcomp>c                    s   h | ]	}|j  vr|qS r0   r   r   )input_typesr0   r1   r      s    c                    s    g | ]}| p	|j |jjfqS r0   )r:   rR   core_schemar   )r   r0   r1   r      s    )inputsdescriptionr   )r   definitionsr   )r   r   get_flat_models_from_fieldssetlistgenerate_definitionsr   r   rq   r   rX   split%_remap_definitions_and_field_mappings)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   r   item_defitem_descriptionnew_mappingnew_definitionsr0   )r   r   r1   get_definitions   sJ   
	


"
r   schemaold_name_to_new_name_mapc           
      C   s   t | }| D ]]\}}|dkr1| d dd }||v r*|| }tj|d|d< n| d |d< qt|tr?t||d||< qt|treg }|D ]}t|tr[t||d}	|	|	 qH|	| qH|||< q|S )Nr   /ry   r   r   )
r   itemsr   r   format
isinstancedict_replace_refsr   append)
r   r   
new_schemakeyrW   ref_namenew_name	new_valueitemnew_itemr0   r0   r1   r     s6   


r   r   c                 C   s   i }|  D ],\}}|d j}|| vrq| | }|d dd }|| d| dhv r.q|||< qi }	|  D ]\}}t||d}
|
|	|< q9i }|  D ]\}}||v r[|| }n|}t||d}|||< qN|	|fS )Nr   r   r   r   z-Inputz-Outputr   )r   rG   r   r   )r   r   r   r   	field_keyr   rw   r   old_namenew_field_mappingr   r   r   rW   new_keyr   r0   r0   r1   r   %  s:   




r   c                 C   s*   ddl m} t| jjot| j|j S )Nr   )params)fastapir   r   field_annotation_is_scalarr5   rF   r   Body)r   r   r0   r0   r1   is_scalar_fieldS  s   r   c                 C      t | jjS r<   )r   field_annotation_is_sequencer5   rF   r   r0   r0   r1   is_sequence_field[     r   c                 C   r   r<   )r   #field_annotation_is_scalar_sequencer5   rF   r   r0   r0   r1   is_scalar_sequence_field_  r   r   c                 C      t | jS r<   )r   $is_bytes_or_nonable_bytes_annotationrG   r   r0   r0   r1   is_bytes_fieldc  r{   r   c                 C   r   r<   )r   is_bytes_sequence_annotationrG   r   r0   r0   r1   is_bytes_sequence_fieldg  r{   r   c                 C   s.   t | }||}t| }|j|_|j|_|S r<   )typefrom_annotationr   metadatarF   )r5   rF   clsmerged_field_infonew_field_infor0   r0   r1   copy_field_infok  s   
r   rW   c                 C   s2   t | jjp	| jj}t|tjsJ tj| |S r<   )r'   r5   rF   
issubclassr   sequence_typessequence_annotation_to_type)r   rW   origin_typer0   r0   r1   serialize_sequence_valuet  s   r   rV   .c                 C   s.   t dd| i dgjddd }d |d< |S )NzField requiredmissing)r   rV   inputFrZ   r   r   )r   from_exception_datar\   )rV   errorr0   r0   r1   get_missing_field_errorz  s   r   
model_namec                 C   s"   dd | D }t |fi |}|S )Nc                 S   s   i | ]}|j |jj|jfqS r0   )r6   r5   rF   r   r0   r0   r1   
<dictcomp>  s    z%create_body_model.<locals>.<dictcomp>)r   )r   r   field_params	BodyModelr0   r0   r1   create_body_model  s   r   c                 C   s   dd | j  D S )Nc                 S   s   g | ]
\}}t ||d qS ))r5   r6   )r4   )r   r6   r5   r0   r0   r1   r     s    
z$get_model_fields.<locals>.<listcomp>)model_fieldsr   ry   r0   r0   r1   get_model_fields  s   r   r   r6   c                 C   s   t dd| S )Nz[^a-zA-Z0-9.\-_]r   )resub)r6   r0   r0   r1   normalize_name  r   r   unique_modelsc                 C   s   i }t  }| D ]3}t|j}||v rt|}|||< q||v r6|| ||}||t|< ||t|< q|||< qdd | D S )Nc                 S   s   i | ]\}}||qS r0   r0   )r   kvr0   r0   r1   r     s    z&get_model_name_map.<locals>.<dictcomp>)r   r   r-   get_long_model_nameaddpopr   )r   name_model_mapconflicting_namesrw   r   conflicting_modelr0   r0   r1   get_model_name_map  s   




r  r   c                 C   s"   |pt  }t| }t||d |S Nr   )r   r   r   )rw   r   r   r0   r0   r1   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   r  r  get_flat_models_from_annotation)rF   r   originargr0   r0   r1   r	    s   

r	  c                 C   s^   | j }t|tr||v r|S || t||d |S t|tr'|| |S t||d |S r  )rG   r   r   r  r  r   r	  )r   r   
field_typer0   r0   r1   get_flat_models_from_field  s   



r  c                 C   s   | D ]}t ||d q|S r  )r  )r   r   r   r0   r0   r1   r     s   r   c                 C   s   | j  d| j ddS )N__.)r.   r/   r   ry   r0   r0   r1   r     s   r   )rb   r<   )`r   rM   r   r   dataclassesr   enumr   typingr   r   r   r	   r
   r   r   r   r   fastapi._compatr   r   fastapi.openapi.constantsr   fastapi.typesr   r   pydanticr   r   r   r   r   r   ,pydantic._internal._schema_generation_sharedr    pydantic._internal._typing_extrar   pydantic._internal._utilsr   pydantic.fieldsr   pydantic.json_schemar   r   pydantic_corer    r!   r"   r#   typing_extensionsr$   r%   r&   r'   pydantic_core.core_schemar(   ImportErrorr)   RequiredParamrU   UndefinedTypeevaluate_forwardref	Validatorr+   	Exceptionr3   r4   rq   rv   rz   r~   r   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   TypeModelOrEnumTypeModelSetr   r  r  r	  r  r   r   r0   r0   r0   r1   <module>   s<   ,[




<



$


.	"



	


