o
    liZ                  !   @   s6  U d dl Zd dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZmZ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 d dlmZ d dlmZ d dl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)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z: ddl;m<Z< dddddddiddigiddddd ddd!g d!d"Z=d#dd$d%dd&e%d idid'Z>d(d)d*d+d,d-d.Z?ee@e@f eAd/< d0ed1eee@ef eee@ef  f fd2d3ZBd4d5d6ed7e.d8eeee:d9 f ef d:eCd1eee@ef  f
d;d<ZDd4d5d=ee d7e.d8eeee:d9 f ef d:eCd1eee@ef  f
d>d?ZEd@ejFdAe@d1e@fdBdCZGd@ejFdAe@d1e@fdDdEZHd@ejFdAe@dFe
e@ d1ee@ef fdGdHZId4d5d@ejFdFe
e@ d7e.d8eeee:d9 f ef d:eCd1eee@ef ee@ef ee@ef f fdIdJZJdKe	e8 d1ee fdLdMZKdNddddddddd4ddOdPe@dQe@dRe@dSee@ dTee@ dKe	e8 dUee	e8  dVeeee@ef   dWeeee@ee@ef f   dXee@ dYeee@ee@ef f  dZeee@ee@ef f  d:eCd[eee@ef  d1ee@ef fd\d]ZLdS )^    N)
AnyDictListOptionalSequenceSetTupleTypeUnioncast)routing)JsonSchemaValue
ModelField	Undefinedget_compat_model_name_mapget_definitionsget_schema_from_model_fieldlenient_issubclass)DefaultPlaceholder)	Dependant)_get_flat_fields_from_paramsget_flat_dependantget_flat_params)jsonable_encoder)METHODS_WITH_BODY
REF_PREFIX)OpenAPI)Body
ParamTypes)Response)ModelNameMap)deep_dict_updategenerate_operation_id_for_pathis_body_allowed_for_status_code)	BaseModel)JSONResponse)	BaseRoute)Literal   )_is_model_fieldValidationErrorobjectZLocationarrayZanyOftypestringinteger)titler-   itemsMessage)r0   r-   z
Error Type)locmsgr-   )r0   r-   
propertiesrequiredHTTPValidationErrordetailZDetail$ref)r0   r-   r5   ZInformationZSuccessZRedirectionzClient ErrorzServer ErrorzDefault Response)Z1XXZ2XXZ3XX4XXZ5XXDEFAULTstatus_code_rangesflat_dependantreturnc                 C   sN   i }g }| j D ]}t|jjddd}|jj}|||< |||ji q||fS )NTZby_aliasZexclude_none)Zsecurity_requirementsr   Zsecurity_schememodelscheme_nameappendZscopes)r=   security_definitionsoperation_securityZsecurity_requirementZsecurity_definitionZsecurity_name rE   \/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/fastapi/openapi/utils.py get_openapi_security_definitionsN   s   
rG   T)separate_input_output_schemas	dependantmodel_name_mapfield_mapping)Z
validationZserializationrH   c                 C   s  g }t | dd}t|j}t|j}t|j}t|j}	tj|ftj|ftj	|ftj
|	fg}
d}t|jdkrI|jd }t|jtrIt|jdd}|
D ]x\}}|D ]q}|j}t|dds]qQt||||d}|j}t|jd|}|tj	kr|j|jkr|r|jdd	}||j|j|d
}|jr|j|d< t|dd }t|dd }|rt||d< n
|tkrt||d< t|dd rd|d< || qQqK|S )NTZskip_repeats   r   convert_underscoresinclude_in_schemafieldrJ   rK   rH   _-)nameinr6   schemadescriptionopenapi_examplesexampleexamples
deprecated)r   r   path_paramsquery_paramsheader_paramscookie_paramsr   pathqueryheadercookielenr   type_r$   getattr
field_infor   aliasrT   replacevaluer6   rW   r   r   rB   )rI   rJ   rK   rH   
parametersr=   r\   r]   r^   r_   Zparameter_groupsZdefault_convert_underscoresZfirst_fieldZ
param_typeZparam_groupparamrg   Zparam_schemarT   rN   Z	parameterrX   rY   rE   rE   rF   !_get_openapi_operation_parameters_   st   	






)rm   
body_fieldc           
      C   s   | sd S t | s
J t| |||d}tt| j}|j}| j}i }|r&||d< d|i}	|jr5t|j|	d< n|j	t
krAt|j	|	d< ||	i|d< |S )NrP   r6   rV   rZ   rY   content)r)   r   r   r   rg   
media_typer6   rX   r   rY   r   )
rn   rJ   rK   rH   Zbody_schemarg   Zrequest_media_typer6   request_body_oaiZrequest_media_contentrE   rE   rF   "get_openapi_operation_request_body   s0   	

rr   routemethodc                 C   s2   t jdtdd | jr| jS | j}t| j||dS )Nzqfastapi.openapi.utils.generate_operation_id() was deprecated, it is not used internally, and will be removed soonr(   
stacklevel)rT   r`   rt   )warningswarnDeprecationWarningoperation_idpath_formatr"   rT   )rs   rt   r`   rE   rE   rF   generate_operation_id   s   r|   c                 C   s   | j r| j S | jdd S )NrR    )summaryrT   ri   r0   rs   rt   rE   rE   rF   generate_operation_summary   s   r   operation_idsc                 C   s   i }| j r
| j |d< t| |d|d< | jr| j|d< | jp| j}||v rId| d| jj  }t| jdi d}|rB|d	| 7 }t	j
|d
d || ||d< | jrZ| j|d< |S )Ntagsr   r~   rW   zDuplicate Operation ID z for function __globals____file__z at rM   ru   ZoperationIdr[   )r   r   rW   rz   	unique_idZendpoint__name__rf   getrw   rx   addr[   )rs   rt   r   	operationrz   message	file_namerE   rE   rF   get_openapi_operation_metadata   s*   




r   c           *   	      s  i }i }i }| j d usJ dt| jtr| jj}n| j}|s#J d|j}	| jr
| j D ]}
t| |
|d g }t| j	dd}t
|d\}}|rR dg | |rY|| t| j	|||d}|| |rd	d
 |D }dd
 |D }|| t|  d< |
tv rt| j|||d}|r| d< | jri }| jD ]}t|tjrt|||||d\}}}|j|i||j< q| d< | jd urt| j}nt|j}|j d}|d urt|j!t"rt|j!}| j# di |i d< |	r*t$| jr*ddi}t%|t&r| j'rt(| j'|||d}ni }| di |i di |	i d< | j)r di }| j)* D ]\}}|+ }|,dd  t|- } | dkrTd} || i }!t|t.sdJ d| j/ |}"d }#|"rt(|"|||d}#|	p{d}$|di |$i di }%t0|%|# t1 t|- pt2j3j) t"|}&| dp|! dp|&pd}'t0|!| |'|!d< q9d}(t4| j	})|)s| jrt5 fd d!|(d"dfD sd#ddd$t6d% iiid& d |(< d'|vr|t7t8d( | j9rt0 | j9  ||
: < q-|||fS ))NzMethods must be a listz.A response class is needed to generate OpenAPI)rs   rt   r   TrL   )r=   security)rI   rJ   rK   rH   c                 S   s   i | ]}|d  |d f|qS )rU   rT   rE   .0rl   rE   rE   rF   
<dictcomp>$  s    z$get_openapi_path.<locals>.<dictcomp>c                 S   s(   i | ]}| d r|d |d f|qS )r6   rU   rT   )r   r   rE   rE   rF   r   '  s    rk   )rn   rJ   rK   rH   ZrequestBodyrs   r   rJ   rK   rH   	callbacksstatus_code	responsesrW   r-   r.   rP   ro   rV   r@   r;   defaultz%An additional response must be a dictzapplication/jsonzAdditional ResponseZ422c                 3   s    | ]	}| d  v V  qdS )r   NrE   )r   statusr   rE   rF   	<genexpr>  s
    

z#get_openapi_path.<locals>.<genexpr>r:   zValidation Errorr9   r7   )rW   ro   r*   )r*   r7   );methods
isinstanceresponse_classr   rj   rp   rO   r   r   rI   rG   
setdefaultextendupdaterm   listvaluesr   rr   rn   r   r   APIRouteget_openapi_pathr`   rT   r   strinspect	signature__init__rk   r   r   intZresponse_descriptionr#   r   r%   response_fieldr   r   r1   copypopupperdictresponse_fieldsr!   r<   httpclientr   anyr   validation_error_definition$validation_error_response_definitionZopenapi_extralower)*rs   r   rJ   rK   rH   r`   security_schemesdefinitionsZcurrent_response_classZroute_response_media_typert   rk   r=   rC   rD   Zoperation_parametersZall_parametersZrequired_parametersrq   r   callbackZcb_pathZcb_security_schemesZcb_definitionsr   Zresponse_signatureZstatus_code_paramZresponse_schemaZoperation_responsesZadditional_status_codeZadditional_responseprocess_responseZstatus_code_keyZopenapi_responserQ   Zadditional_field_schemarp   Zadditional_schemaZstatus_textrW   Zhttp422Zall_route_paramsrE   r   rF   r      sH  


















r   routesc                 C   s   g }g }g }g }| D ]I}t |dd rSt|tjrS|jr*t|js$J d||j |jr3||j |jr>|	|j
  |jrI|	t|j t|j}|	| q
|t|| |  }|S )NrO   z'A request body must be a Pydantic Field)rf   r   r   r   rn   r)   rB   r   r   r   r   r   get_fields_from_routesr   rI   r   )r   Zbody_fields_from_routesZresponses_from_routesZrequest_fields_from_routesZcallback_flat_modelsrs   paramsZflat_modelsrE   rE   rF   r     s4   


r   z3.1.0)openapi_versionr~   rW   webhooksr   serversterms_of_servicecontactlicense_inforH   external_docsr0   versionr   r~   rW   r   r   r   r   r   r   r   c                    s  | |d}|r||d< |r||d< |	r|	|d< |
r|
|d< |r#||d< ||d}|r.||d< i }i }i }t  }tt|p<g t|pAg  }t|}t|||d	\} |pUg D ]6}t|tjrt|||||d
}|r|\}}}|rz|	|j
i | |r|	di | |r | qV|pg D ]6}t|tjrt|||||d
}|r|\}}}|r|	|j
i | |r|	di | |rǈ | q rׇ fddt D |d< |r||d< ||d< |r||d< |r||d< |r||d< ttdi |dddS )N)r0   r   r~   rW   ZtermsOfServicer   license)Zopenapiinfor   )fieldsrJ   rH   r   ZsecuritySchemesc                    s   i | ]}| | qS rE   rE   )r   kr   rE   rF   r   $  s    zget_openapi.<locals>.<dictcomp>Zschemas
componentspathsr   r   ZexternalDocsTr?   rE   )setr   r   r   r   r   r   r   r   r   r{   r   sortedr   r   )r0   r   r   r~   rW   r   r   r   r   r   r   r   rH   r   r   outputr   r   Zwebhook_pathsr   Z
all_fieldsrJ   rK   rs   resultr`   r   Zpath_definitionsZwebhookrE   r   rF   get_openapi  s   






r   )Mhttp.clientr   r   rw   typingr   r   r   r   r   r   r   r	   r
   r   Zfastapir   Zfastapi._compatr   r   r   r   r   r   r   Zfastapi.datastructuresr   Zfastapi.dependencies.modelsr   Zfastapi.dependencies.utilsr   r   r   Zfastapi.encodersr   Zfastapi.openapi.constantsr   r   Zfastapi.openapi.modelsr   Zfastapi.paramsr   r   Zfastapi.responsesr   Zfastapi.typesr    Zfastapi.utilsr!   r"   r#   Zpydanticr$   Zstarlette.responsesr%   Zstarlette.routingr&   Ztyping_extensionsr'   _compatr)   r   r   r<   r   __annotations__rG   boolrm   rr   r   r|   r   r   r   r   r   rE   rE   rE   rF   <module>   sD  
 0$		



P
#


"$	
 ;
#
	

