a
    њh]                     @   s  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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&m'Z' d d
l(m)Z) d dl*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<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-ZAeeBeBf eCd.< eeeeBef eeeBef  f d/d0d1ZDd2d3eee0eeee>d4 f ef eEeeeBef  d5d6d7ZFd2d3ee ee0eeee>d4 f ef eEeeeBef  d8d9d:ZGejHeBeBd;d<d=ZIejHeBeBd;d>d?ZJejHeBe
eB eeBef d@dAdBZKd2d3ejHe
eB ee0eeee>d4 f ef eEeeeBef eeBef eeBef f dCdDdEZLe	e: ee dFdGdHZMdIddddddddd2dJ
eBeBeBeeB eeB e	e: ee	e:  eeeeBef   eeeeBeeBef f   eeB eeeBeeBef f  eeeBeeBef f  eEeeBef dKdLdMZNdS )N    N)
AnyDictListOptionalSequenceSetTupleTypeUnioncast)routing)GenerateJsonSchema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REF_TEMPLATE)OpenAPI)Body
ParamTypes)Response)ModelNameMap)deep_dict_updategenerate_operation_id_for_pathis_body_allowed_for_status_code)	BaseModel)JSONResponse)	BaseRoute)HTTP_422_UNPROCESSABLE_ENTITY)LiteralValidationErrorobjectZLocationarrayZanyOftypestringinteger)titler.   itemsMessage)r1   r.   z
Error Type)locmsgr.   )r1   r.   
propertiesrequiredHTTPValidationErrordetailZDetail$ref)r1   r.   r6   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 ]6}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 rF   P/wd/webapps/venvs/v2025_4um/lib/python3.9/site-packages/fastapi/openapi/utils.py get_openapi_security_definitionsN   s    
rH   T)separate_input_output_schemas)Z
validationZserialization)	dependantschema_generatormodel_name_mapfield_mappingrI   r?   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r|jd }t|jtrt|jdd}|D ] \}}|D ]}|j}t|ddsqt|||||d}|j}t|jd|}|tj	kr|j|jkr|r|jdd	}||j|j|d
}|jr4|j|d< t|dd }t|dd }|r`t||d< n|tkrvt||d< t|dd rd|d< || qq|S )NTZskip_repeats   r   convert_underscoresinclude_in_schemafieldrK   rL   rM   rI   _-)nameinr7   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   aliasrV   replacevaluer7   rY   r   r   rC   )rJ   rK   rL   rM   rI   
parametersr>   r^   r_   r`   ra   Zparameter_groupsZdefault_convert_underscoresZfirst_fieldZ
param_typeZparam_groupparamri   Zparam_schemarV   rP   Z	parameterrZ   r[   rF   rF   rG   !_get_openapi_operation_parameters_   sx    








ro   )
body_fieldrK   rL   rM   rI   r?   c                 C   s   | sd S t | tsJ t| ||||d}tt| j}|j}| j}i }	|rP||	d< d|i}
|jrnt	|j|
d< n|j
tkrt	|j
|
d< ||
i|	d< |	S )NrR   r7   rX   r\   r[   content)
isinstancer   r   r   r   ri   
media_typer7   rZ   r   r[   r   )rp   rK   rL   rM   rI   Zbody_schemari   Zrequest_media_typer7   request_body_oaiZrequest_media_contentrF   rF   rG   "get_openapi_operation_request_body   s2    


ru   )routemethodr?   c                 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 soon   
stacklevel)rV   rb   rw   )warningswarnDeprecationWarningoperation_idpath_formatr$   rV   )rv   rw   rb   rF   rF   rG   generate_operation_id   s    r   c                 C   s   | j r| j S | jdd S )NrT    )summaryrV   rk   r1   rv   rw   rF   rF   rG   generate_operation_summary   s    r   )rv   rw   operation_idsr?   c                 C   s   i }| j r| j |d< t| |d|d< | jr4| j|d< | jp>| j}||v rd| d| jj  }t| jdi d}|r|d	| 7 }t	j
|d
d || ||d< | jr| j|d< |S )Ntagsr   r   rY   zDuplicate Operation ID z for function __globals____file__z at rO   ry   ZoperationIdr]   )r   r   rY   r~   	unique_idZendpoint__name__rh   getr{   r|   addr]   )rv   rw   r   	operationr~   message	file_namerF   rF   rG   get_openapi_operation_metadata   s*    




r   )rv   r   rK   rL   rM   rI   r?   c           +   
      s@  i }i }i }| j d usJ dt| jtr4| jj}	n| j}	|	sFJ d|	j}
| jr6| j D ]}t| ||d g }t| j	dd}t
|d\}}|r dg | |r|| t| j	||||d}|| |rd	d
 |D }dd
 |D }|| t|  d< |tv r8t| j||||d}|r8| d< | jri }| jD ]>}t|tjrJt||||||d\}}}|j|i||j< qJ| d< | jd urt| j}n:t|	j}|j d}|d urt|j!t"rt|j!}| j# di |i d< |
rnt$| jrnddi}t%|	t&rF| j'rBt(| j'||||d}ni }| di |i di |
i d< | j)r di }| j)* D ]
\}}|+ } | ,dd  t|- }!|!dkrd}!||!i }"t| t.sJ d| j/ |}#d }$|#r<t(|#||||d}$|
pd}%| di |%i di }&t0|&|$ t1 t|- p`t2j3j) t"|}'|  dp|" dp|'pd}(t0|"|  |(|"d< qtt4})t5| j	}*|*s| jrt6 fdd |)d!dfD sd"ddd#t7d$ iiid% d |)< d&|vr|t8t9d' | j:r(t0 | j:  ||; < qZ|||fS )(NzMethods must be a listz.A response class is needed to generate OpenAPI)rv   rw   r   TrN   )r>   security)rJ   rK   rL   rM   rI   c                 S   s   i | ]}|d  |d f|qS )rW   rV   rF   .0rn   rF   rF   rG   
<dictcomp>*  s   z$get_openapi_path.<locals>.<dictcomp>c                 S   s(   i | ] }| d r|d |d f|qS )r7   rW   rV   )r   r   rF   rF   rG   r   -  s   
rm   )rp   rK   rL   rM   rI   ZrequestBodyrv   r   rK   rL   rM   rI   	callbacksstatus_code	responsesrY   r.   r/   rR   rq   rX   rA   r<   defaultz%An additional response must be a dictzapplication/jsonzAdditional Responsec                 3   s   | ]}| d  v V  qdS )r   NrF   )r   statusr   rF   rG   	<genexpr>  s   z#get_openapi_path.<locals>.<genexpr>r;   zValidation Errorr:   r8   )rY   rq   r+   )r+   r8   )<methodsrr   response_classr   rl   rs   rQ   r   r   rJ   rH   
setdefaultextendupdatero   listvaluesr   ru   rp   r   r   APIRouteget_openapi_pathrb   rV   r   strinspect	signature__init__rm   r   r   intZresponse_descriptionr%   r   r'   response_fieldr   r   r2   copypopupperdictresponse_fieldsr#   r=   httpclientr)   r   anyr   validation_error_definition$validation_error_response_definitionZopenapi_extralower)+rv   r   rK   rL   rM   rI   rb   security_schemesdefinitionsZcurrent_response_classZroute_response_media_typerw   rm   r>   rD   rE   Zoperation_parametersZall_parametersZrequired_parametersrt   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_responserS   Zadditional_field_schemars   Zadditional_schemaZstatus_textrY   Zhttp422Zall_route_paramsrF   r   rG   r      sZ   






	









r   )routesr?   c                 C   s   g }g }g }g }| D ]}t |dd rt|tjr|jrVt|jtsJJ d||j |jrh||j |jr~|	|j
  |jr|	t|j t|j}|	| q|t|| |  }|S )NrQ   z'A request body must be a Pydantic Field)rh   rr   r   r   rp   r   rC   r   r   r   r   r   get_fields_from_routesr   rJ   r   )r   Zbody_fields_from_routesZresponses_from_routesZrequest_fields_from_routesZcallback_flat_modelsrv   paramsZflat_modelsrF   rF   rG   r     s2    

r   z3.1.0)
openapi_versionr   rY   webhooksr   serversterms_of_servicecontactlicense_inforI   )r1   versionr   r   rY   r   r   r   r   r   r   r   rI   r?   c              	      s  | |d}|r||d< |r"||d< |	r.|	|d< |
r:|
|d< |rF||d< ||d}|r\||d< i }i }i }t  }tt|pxg t|pg  }t|}ttd	}t||||d
\} |pg D ]r}t|tj	rt
||||||d}|r|\}}}|r||ji | |r|di | |r | q|p4g D ]z}t|tj	r6t
||||||d}|r6|\}}}|r||ji | |r|di | |r6 | q6 r҇ fddt D |d< |r||d< ||d< |r||d< |r||d< ttf i |dddS )N)r1   r   r   rY   ZtermsOfServicer   license)Zopenapiinfor   )Zref_template)fieldsrK   rL   rI   r   ZsecuritySchemesc                    s   i | ]}| | qS rF   rF   )r   kr   rF   rG   r   1      zget_openapi.<locals>.<dictcomp>Zschemas
componentspathsr   r   Tr@   )setr   r   r   r   r   r   rr   r   r   r   r   r   r   sortedr   r   )r1   r   r   r   rY   r   r   r   r   r   r   r   rI   r   outputr   r   Zwebhook_pathsr   Z
all_fieldsrL   rK   rM   rv   resultrb   r   Zpath_definitionsZwebhookrF   r   rG   get_openapi  s    





r   )Ohttp.clientr   r   r{   typingr   r   r   r   r   r   r   r	   r
   r   Zfastapir   Zfastapi._compatr   r   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   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starlette.statusr)   Ztyping_extensionsr*   r   r   r=   r   __annotations__rH   boolro   ru   r   r   r   r   r   r   r   rF   rF   rF   rG   <module>   s   
0(
	
S&
#$ B#

