o
    àej»i  ã                !   @   s„  U d dl Z d dlZd dlZd dl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mZmZmZ d dlmZmZ d dlmZmZmZmZ d dl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' d dl(m)Z) d dl*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5m6Z6 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!d"i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/d0d1d2œZ?e@eAeAf eBd3< d4ed5eCe@eAef eDe@eAef  f fd6d7„ZEd8d9œd:ed;e2d<e@eCee	d= f e@eAef f d>eFd5eDe@eAef  f
d?d@„ZGd8d9œdAedB d;e2d<e@eCee	d= f e@eAef f d>eFd5e@eAef dB f
dBdC„ZHdDejIdEeAd5eAfdFdG„ZJdDejIdEeAd5eAfdHdI„ZKdDejIdEeAdJeLeA d5e@eAef fdKdL„ZMd8d9œdDejIdJeLeA d;e2d<e@eCee	d= f e@eAef f d>eFd5eCe@eAef e@eAef e@eAef f fdMdN„ZNdOejOd5ejIdB fdPdQ„ZPdRee<ejOB  d5eDe fdSdT„ZQdUddddddddd8ddVœd!eAdWeAdXeAdYeAdB dZeAdB dRee<ejOB  d[ee<ejOB  dB d\eDe@eAef  dB d]eDe@eAeAeB f  dB d^eAdB d_e@eAeAeB f dB d`e@eAeAeB f dB d>eFdae@eAef dB d5e@eAef fdbdc„ZRdS )dé    N)ÚSequence)ÚAnyÚLiteralÚcast)Úrouting)Ú
ModelFieldÚget_definitionsÚget_flat_models_from_fieldsÚget_model_name_mapÚget_schema_from_model_fieldÚlenient_issubclass)ÚDefaultPlaceholderÚ_Unset)Ú	DependantÚ_get_oauth_scopesÚ_get_security_dependenciesÚ_get_security_scheme)Ú_get_flat_fields_from_paramsÚget_flat_dependantÚget_flat_paramsÚget_validation_alias)Újsonable_encoder)ÚFastAPIDeprecationWarning)ÚMETHODS_WITH_BODYÚ
REF_PREFIX)ÚOpenAPI)ÚBodyÚ
ParamTypes)ÚResponse)Ú_SSE_EVENT_SCHEMA)ÚModelNameMap)Údeep_dict_updateÚgenerate_operation_id_for_pathÚis_body_allowed_for_status_code)Ú	BaseModel)ÚJSONResponse)Ú	BaseRouteÚValidationErrorÚobjectÚLocationÚarrayÚanyOfÚtypeÚstringÚinteger)Útitler,   ÚitemsÚMessage)r/   r,   z
Error Typer/   ÚInputÚContext)ÚlocÚmsgr,   ÚinputÚctx)r4   r5   r,   )r/   r,   Ú
propertiesÚrequiredÚHTTPValidationErrorÚdetailÚDetailú$ref)r/   r,   r8   ÚInformationÚSuccessÚRedirectionzClient ErrorzServer ErrorzDefault Response)Ú1XXÚ2XXÚ3XXÚ4XXÚ5XXÚDEFAULTÚstatus_code_rangesÚflat_dependantÚreturnc           	      C   s”   i }i }t | d�D ]3}t|d�}t|jddd�}|j}|||< ||vr'g ||< t|d�D ]}||| vr;||  |¡ q,q	dd„ | ¡ D ƒ}||fS )N)Ú	dependantT©Úby_aliasÚexclude_nonec                 S   s   g | ]\}}||i‘qS © rN   )Ú.0ÚnameÚscopesrN   rN   úU/var/www/html/choboyeo/PHP/venv/lib/python3.10/site-packages/fastapi/openapi/utils.pyÚ
<listcomp>k   s    ÿz4get_openapi_security_definitions.<locals>.<listcomp>)r   r   r   ÚmodelÚscheme_namer   Úappendr0   )	rH   Úsecurity_definitionsÚoperation_security_dictÚsecurity_dependencyÚsecurity_schemeÚsecurity_definitionÚsecurity_nameÚscopeÚoperation_securityrN   rN   rR   Ú get_openapi_security_definitionsV   s,   
ý€þÿr_   T)Úseparate_input_output_schemasrJ   Úmodel_name_mapÚfield_mapping)Ú
validationÚserializationr`   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rJ|jd }t|jjtƒrJt|jddƒ}|
D ]z\}}|D ]s}|j}t|ddƒs^qRt||||d�}t|ƒ}t|jd|ƒ}|tj	kr„||jkr„|r„|j dd	¡}||j|j ¡ |d
œ}|jr—|j|d< t|dd ƒ}t|dd ƒ}|r¬t|ƒ|d< n
|tur¶t|ƒ|d< t|dd ƒrÀd|d< | |¡ qRqL|S )NT©Úskip_repeatsé   r   Úconvert_underscoresÚinclude_in_schema©Úfieldra   rb   r`   Ú_ú-)rP   Úinr9   ÚschemaÚdescriptionÚopenapi_examplesÚexampleÚexamplesÚ
deprecated)r   r   Úpath_paramsÚquery_paramsÚheader_paramsÚcookie_paramsr   ÚpathÚqueryÚheaderÚcookieÚlenr   Ú
field_infoÚ
annotationr$   Úgetattrr   r   rP   ÚreplaceÚvalueÚis_requiredrp   r   r   rV   )rJ   ra   rb   r`   Ú
parametersrH   ru   rv   rw   rx   Úparameter_groupsÚdefault_convert_underscoresÚfirst_fieldÚ
param_typeÚparam_groupÚparamr~   Úparam_schemarP   rh   Ú	parameterrq   rr   rN   rN   rR   Ú!_get_openapi_operation_parametersq   st   	



ü
ÿüý

ÿü
Ø)r�   Ú
body_fieldc           
      C   s˜   | sd S t | tƒsJ ‚t| |||d�}tt| jƒ}|j}| j ¡ }i }|r)||d< d|i}	|jr8t	|jƒ|	d< n|j
turDt	|j
ƒ|	d< ||	i|d< |S )Nrj   r9   ro   rs   rr   Úcontent)Ú
isinstancer   r   r   r   r~   Ú
media_typerƒ   rq   r   rr   r   )
rŽ   ra   rb   r`   Úbody_schemar~   Úrequest_media_typer9   Úrequest_body_oaiÚrequest_media_contentrN   rN   rR   Ú"get_openapi_operation_request_bodyº   s0   	ü

ÿ
r–   Ú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 sooné   )ÚmessageÚcategoryÚ
stacklevel)rP   ry   r˜   )ÚwarningsÚwarnr   Úoperation_idÚpath_formatr"   rP   )r—   r˜   ry   rN   rN   rR   Úgenerate_operation_idÝ   s   ür¡   c                 C   s   | j r| j S | j dd¡ ¡ S )Nrl   ú )ÚsummaryrP   r�   r/   ©r—   r˜   rN   rN   rR   Ú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 rMt| jddƒ}d|› d|› �}t| jd	i ƒ d
¡}|rF|d|› �7 }tj	|dd� | 
|¡ ||d< | jr^| j|d< |S )NÚtagsr¤   r£   rp   Ú__name__z<unnamed_endpoint>zDuplicate Operation ID z for function Ú__globals__Ú__file__z at rg   )rœ   ÚoperationIdrt   )r§   r¥   rp   rŸ   Ú	unique_idr€   ÚendpointÚgetr�   rž   Úaddrt   )r—   r˜   r¦   Ú	operationrŸ   Úendpoint_namerš   Ú	file_namerN   rN   rR   Ú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�rx| j D �]I}
t| |
|d�‰ g }t| j	dd�}t
|d�\}}|rRˆ  dg ¡ |¡ |rY| |¡ t| j	|||d�}| |¡ |r„d	d
„ |D ƒ}dd
„ |D ƒ}| |¡ t| ¡ ƒˆ d< |
tv r—t| j|||d�}|r—|ˆ d< | jrÄi }| jD ] }t|tjƒr¿tttj|ƒ||||d�\}}}|j|i||j< qŸ|ˆ d< | jd urÏt| jƒ}nt |j ¡}|j! "d¡}|d urêt|j#t$ƒrêt|j#ƒ}| j%ˆ  di ¡ |i ¡d< t&| jƒ�r—| j'�r*i }| j(�rt)| j(|||d�}||d< ni |d< |ˆ  di ¡ |i ¡ di ¡d< nm| j*�rfi }t+ ,t-¡}| j(�rQt)| j(|||d�}dg|d< dd|dœ|d d< ||d< |ˆ  di ¡ |i ¡ di ¡d< n1|	�r—ddi}t.|t/ƒ�rƒ| j0�r�t)| j0|||d�}ni }|ˆ  di ¡ |i ¡ di ¡ |	i ¡d < | j1�r,ˆ  di ¡} | j1 2¡ D ]…\}!}"t+ ,|"¡}#|# 3d!d ¡ t|!ƒ 4¡ }$|$d"k�rÂd#}$|  |$i ¡}%t|#t5ƒ�sÒJ d$ƒ‚| j6 "|!¡}&d }'|&�rýt)|&|||d�}'|	�péd}(|# di ¡ |(i ¡ d i ¡})t7|)|'ƒ t8 "t|!ƒ 4¡ ¡�pt9j:j1 "t$|!ƒ¡}*|# "d¡�p |% "d¡�p |*�p d%}+t7|%|#ƒ |+|%d< �q¦d&},t;| j	ƒ}-|-�s:| j�rgt<‡ fd'd(„|,d)d#fD ƒƒ�sgd*dd d+t=d, iiid-œˆ d |,< d.|v�rg| t>t?d/œ¡ | j@�rqt7ˆ | j@ƒ ˆ ||
 A¡ < q-|||fS )0NzMethods must be a listz.A response class is needed to generate OpenAPI)r—   r˜   r¦   Tre   )rH   Úsecurity)rJ   ra   rb   r`   c                 S   s   i | ]}|d  |d f|“qS )rn   rP   rN   ©rO   rŠ   rN   rN   rR   Ú
<dictcomp>4  s    ÿz$get_openapi_path.<locals>.<dictcomp>c                 S   s(   i | ]}|  d ¡r|d |d f|“qS )r9   rn   rP   )r®   rµ   rN   rN   rR   r¶   7  s    ýÿr„   )rŽ   ra   rb   r`   ÚrequestBody©r—   r¦   ra   rb   r`   Ú	callbacksÚstatus_codeÚ	responsesrp   rj   Ú
itemSchemar�   zapplication/jsonlÚdatar9   r-   zapplication/json)r,   ÚcontentMediaTypeÚcontentSchemar8   ztext/event-streamr,   ro   rT   rF   Údefaultz%An additional response must be a dictzAdditional ResponseÚ422c                 3   s   � | ]	}|ˆ d  v V  qdS )r»   NrN   )rO   Ústatus©r°   rN   rR   Ú	<genexpr>Î  s
   € 
ÿ
ÿz#get_openapi_path.<locals>.<genexpr>rD   zValidation Errorr=   r:   )rp   r�   r'   )r'   r:   )BÚmethodsr�   Úresponse_classr   r‚   r‘   ri   r³   r   rJ   r_   Ú
setdefaultÚextendÚupdater�   ÚlistÚvaluesr   r–   rŽ   r¹   r   ÚAPIRouteÚget_openapi_pathr   Ú_APIRouteLikery   rP   rº   ÚstrÚinspectÚ	signatureÚ__init__r„   r®   rÀ   ÚintÚresponse_descriptionr#   Úis_json_streamÚstream_item_fieldr   Úis_sse_streamÚcopyÚdeepcopyr   r   r%   Úresponse_fieldr»   r0   ÚpopÚupperÚdictÚresponse_fieldsr!   rG   ÚhttpÚclientr   Úanyr   Úvalidation_error_definitionÚ$validation_error_response_definitionÚopenapi_extraÚlower).r—   r¦   ra   rb   r`   ry   Úsecurity_schemesÚdefinitionsÚcurrent_response_classÚroute_response_media_typer˜   r„   rH   rW   r^   Úoperation_parametersÚall_parametersÚrequired_parametersr”   r¹   ÚcallbackÚcb_pathÚcb_security_schemesÚcb_definitionsrº   Úresponse_signatureÚstatus_code_paramÚjsonl_contentÚitem_schemaÚsse_contentÚcontent_schemaÚresponse_schemaÚoperation_responsesÚadditional_status_codeÚadditional_responseÚprocess_responseÚstatus_code_keyÚopenapi_responserk   Úadditional_field_schemar‘   Úadditional_schemaÚstatus_textrp   Úhttp422Úall_route_paramsrN   rÃ   rR   rÍ   
  s˜  

ÿ
ÿ
ü
ÿþ
ü

ûü€

þÿü
þÿ
þ
ü
ýþÿ
þüüÿ
ÿüý

ÿÿü

ý

ÿþÿþü


þÿÿþ
þÿ
rÍ   Úroute_contextc                 C   s   t | jtjƒrttj| ƒS d S )N)r�   Úoriginal_router   rÌ   r   rÎ   )r  rN   rN   rR   Ú_get_api_route_for_openapiç  s   r  Úroutesc           	      C   sÚ   g }g }g }g }t  | ¡D ]S}t|ƒ}|d u rq|jr`|jr.t|jtƒs(J dƒ‚| |j¡ |jr7| |j¡ |j	rB| 
|j	 ¡ ¡ |jrK| |j¡ |jrV| 
t|jƒ¡ t|jƒ}| 
|¡ q|t|| | ƒ }|S )Nz'A request body must be a Pydantic Field)r   Úiter_route_contextsr  ri   rŽ   r�   r   rV   rÚ   rÞ   rÈ   rË   rÖ   r¹   Úget_fields_from_routesr   rJ   rÊ   )	r  Úbody_fields_from_routesÚresponses_from_routesÚrequest_fields_from_routesÚcallback_flat_modelsr  Ú	api_routeÚparamsÚflat_modelsrN   rN   rR   r  ï  s:   ÿ

€
ÿr  z3.1.0)Úopenapi_versionr£   rp   Úwebhooksr§   ÚserversÚterms_of_serviceÚcontactÚlicense_infor`   Úexternal_docsÚversionr  r£   rp   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|ƒt|p?g ƒ ƒ}t|t ƒ d	�}t|ƒ}t|||d
�\}‰ t |¡D ]8}t|ƒ}|d ur”t	|||||d�}|r”|\}}}|r‚| 
|ji ¡ |¡ |r�| 
di ¡ |¡ |r”ˆ  |¡ q\t |pšg ¡D ]8}t|ƒ}|d urÔt	|||||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)r/   r  r£   rp   ÚtermsOfServicer  Úlicense)ÚopenapiÚinfor  )Úknown_models)Úfieldsra   r`   r¸   ÚsecuritySchemesc                    s   i | ]}|ˆ | “qS rN   rN   )rO   Úk©rç   rN   rR   r¶   e  s    zget_openapi.<locals>.<dictcomp>ÚschemasÚ
componentsÚpathsr  r§   ÚexternalDocsTrK   rN   )Úsetr  rÊ   r	   r
   r   r   r  r  rÍ   rÇ   r    rÉ   Úsortedr   r   ) r/   r  r  r£   rp   r  r  r§   r  r  r  r  r`   r  r  Úoutputr"  r#  Úwebhook_pathsr¦   Ú
all_fieldsr  ra   rb   r  r  Úresultry   ræ   Úpath_definitionsÚwebhook_contextÚapi_webhookrN   r   rR   Úget_openapi  s    


ýû
ÿ
€û
ÿ
€r.  )SrØ   Úhttp.clientrß   rÐ   r�   Úcollections.abcr   Útypingr   r   r   Úfastapir   Úfastapi._compatr   r   r	   r
   r   r   Úfastapi.datastructuresr   r   Úfastapi.dependencies.modelsr   r   r   r   Úfastapi.dependencies.utilsr   r   r   r   Úfastapi.encodersr   Úfastapi.exceptionsr   Úfastapi.openapi.constantsr   r   Úfastapi.openapi.modelsr   Úfastapi.paramsr   r   Úfastapi.responsesr   Úfastapi.sser   Úfastapi.typesr    Úfastapi.utilsr!   r"   r#   Úpydanticr$   Ústarlette.responsesr%   Ústarlette.routingr&   râ   rã   rG   rÝ   rÏ   Ú__annotations__ÚtuplerÊ   r_   Úboolr�   r–   rÎ   r¡   r¥   r%  r³   rÍ   ÚRouteContextr  r  r.  rN   rN   rN   rR   Ú<module>   sV  
  ý÷ò
ýÿýú
ÿ
þ"ùþýÿüù
øPùþýÿüù
ø#ÿÿ
þÿÿÿ

þ øþýüÿûø$	
÷ ^ÿ
þÿ
þ&ñþýüûúùø	÷
öõôóòñ
ð