o
    jr                  !   @   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	 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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*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7 d dl8m9Z9m:Z:m;Z; d dl<m=Z= d dl>m?Z? d dl@mAZA 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'ZBd(dd)d*dd+e+d idid,ZCd-d.d/d0d1d2d3ZDeEeFeFf eGd4< eG d5d6 d6ZHd7ed8eHfd9d:ZId;eJeKeeJeF f  d8eKeEeFef eJeEeFef  f fd<d=ZLd>d?d@eHdAe7dBeEeKeedC f eEeFef f dDeMd8eJeEeFef  f
dEdFZNd>d?dGedB dAe7dBeEeKeedC f eEeFef f dDeMd8eEeFef dB f
dHdIZOdJejPdKeFd8eFfdLdMZQdJejPdKeFd8eFfdNdOZRdJejPdKeFdPeSeF d8eEeFef fdQdRZTd>d?dJejPdPeSeF dAe7dBeEeKeedC f eEeFef f dDeMd8eKeEeFef eEeFef eEeFef f fdSdTZUdUejVd8ejPdB fdVdWZWdXeeAejVB  d8eJe fdYdZZXd[ddddddddd>dd\d"eFd]eFd^eFd_eFdB d`eFdB dXeeAejVB  daeeAejVB  dB dbeJeEeFef  dB dceJeEeFeFeB f  dB ddeFdB deeEeFeFeB f dB dfeEeFeFeB f dB dDeMdgeEeFef dB d8eEeFef fdhdiZYdS )j    N)Sequence)	dataclassfield)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_cache_key_get_oauth_scopes_get_security_scheme_is_security_scheme_UsesScopesCache)_get_flat_fields_from_paramsget_flat_paramsget_validation_alias)jsonable_encoder)FastAPIDeprecationWarning)METHODS_WITH_BODY
REF_PREFIX)OpenAPI)Body
ParamTypes)Response)_SSE_EVENT_SCHEMA)DependencyCacheKey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)titler0   itemsMessage)r3   r0   z
Error Typer3   InputContext)locmsgr0   inputctx)r8   r9   r0   )r3   r0   
propertiesrequiredHTTPValidationErrordetailDetail$ref)r3   r0   r<   InformationSuccessRedirectionzClient ErrorzServer ErrorzDefault Response)1XX2XX3XX4XX5XXDEFAULTstatus_code_rangesc                   @   s   e Zd ZU eedZee ed< eedZee ed< eedZ	ee ed< eedZ
ee ed< eedZeeeee f  ed< dS )_OpenAPIDependencyData)default_factorypath_paramsquery_paramsheader_paramscookie_paramssecurity_dependenciesN)__name__
__module____qualname__r   listrN   r	   __annotations__rO   rP   rQ   rR   tupler   str rZ   rZ   S/home/djax/ivt_ai_plugin/venv/lib/python3.10/site-packages/fastapi/openapi/utils.pyrL   X   s   
 "rL   	dependantreturnc           
         s   t  }g }i }| g dfg}|rw| \}}}t||d}||v r!q|| |j|j |j|j |j|j |j|j |	  t
|dD ]}	|	 vrV |	 qK|sft|drf|j| f | fddt|jD  |s|S )NT)r\   uses_scopes_cacher\   c                 3   s    | ]}| d fV  qdS )FNrZ   ).0sub_dependantoauth_scopesrZ   r[   	<genexpr>}   s
    
z/_get_openapi_dependency_data.<locals>.<genexpr>)rL   popr   appendrN   extendrO   rP   rQ   copyr   r   rR   reverseddependencies)
r\   dependency_datavisitedr^   
dependantscurrent_dependantparent_oauth_scopesis_root	cache_keyscoperZ   rb   r[   _get_openapi_dependency_datac   s>   

rs   rR   c           
      C   s   i }i }| D ]2\}}t |d}t|jddd}|j}|||< ||vr&g ||< |D ]}||| vr7|| | q(qdd | D }	||	fS )Nr_   Tby_aliasexclude_nonec                 S   s   g | ]\}}||iqS rZ   rZ   )r`   namescopesrZ   rZ   r[   
<listcomp>   s    z5_get_openapi_security_definitions.<locals>.<listcomp>)r   r   modelscheme_namerf   r4   )
rR   security_definitionsoperation_security_dictsecurity_dependencyrc   security_schemesecurity_definitionsecurity_namerr   operation_securityrZ   rZ   r[   !_get_openapi_security_definitions   s,   
r   T)separate_input_output_schemasrk   model_name_mapfield_mapping)
validationserializationr   c                 C   s  g }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rD| jd }t|jjtrDt|jdd}
|	D ]z\}}|D ]s}|j}t|ddsXqLt||||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 }|rt||d< n
|turt||d< t|dd rd|d< || qLqF|S )NT   r   convert_underscoresinclude_in_schemar   r   r   r   _-)rw   inr=   schemadescriptionopenapi_examplesexampleexamples
deprecated)r   rN   rO   rP   rQ   r    pathqueryheadercookielenr   
field_info
annotationr(   getattrr   r   rw   replacevalueis_requiredr   r   r   rf   )rk   r   r   r   
parametersrN   rO   rP   rQ   parameter_groupsdefault_convert_underscoresfirst_field
param_typeparam_groupparamr   param_schemarw   r   	parameterr   r   rZ   rZ   r[   !_get_openapi_operation_parameters   sr   	







)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 )Nr   r=   r   r   r   content)
isinstancer	   r   r   r   r   
media_typer   r   r   r   r   )
r   r   r   r   body_schemar   request_media_typer=   request_body_oairequest_media_contentrZ   rZ   r[   "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)rw   r   r   )warningswarnr   operation_idpath_formatr&   rw   )r   r   r   rZ   rZ   r[   generate_operation_id
  s   r   c                 C   s   | j r| j S | jdd S )Nr    )summaryrw   r   r3   r   r   rZ   rZ   r[   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   r   rS   z<unnamed_endpoint>zDuplicate Operation ID z for function __globals____file__z at r   )r   operationIdr   )r   r   r   r   	unique_idr   endpointgetr   r   addr   )r   r   r   	operationr   endpoint_namer   	file_namerZ   rZ   r[   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rt| j}
dd |
j	|
j
|
j|
jfD }| j D ]=}t| ||d g }t|
jd\}}|r` dg | |rg|| t|
|||d}|| |rd	d
 |D }dd
 |D }|| t|  d< |tv rt| j|||d}|r| d< | jri }| jD ] }t|tjrtttj|||||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< t+| j!r| j,r7i }| j-r"t.| j-|||d}||d< ni |d< | di |i di d< nm| j/rsi }t01t2}| j-r^t.| j-|||d}dg|d< dd|d|d d< ||d< | di |i di d< n1|	rddi} t3|t4r| j5rt.| j5|||d} ni } |  di |i di |	i d < | j6r9 di }!| j67 D ]\}"}#t01|#}$|$8d!d  t"|"9 }%|%d"krd#}%|!|%i }&t|$t:sJ d$| j;'|"}'d }(|'r
t.|'|||d}(|	pd})|$di |)i d i }*t<|*|( t='t"|"9 pt>j?j6't)|"}+|$'dp-|&'dp-|+p-d%},t<|&|$ |,|&d< qd&}-|sB| jrot@ fd'd(|-d)d#fD sod*dd d+tAd, iiid- d |-< d.|vro|tBtCd/ | jDryt< | jD  ||E < qA|||fS )0NzMethods must be a listz.A response class is needed to generate OpenAPIc                 S   s   g | ]}t |D ]}|qqS rZ   )r   )r`   fieldsr   rZ   rZ   r[   ry   M  s    z$get_openapi_path.<locals>.<listcomp>)r   r   r   )rR   security)rk   r   r   r   c                 S   s   i | ]}|d  |d f|qS )r   rw   rZ   r`   r   rZ   rZ   r[   
<dictcomp>m  s    z$get_openapi_path.<locals>.<dictcomp>c                 S   s(   i | ]}| d r|d |d f|qS )r=   r   rw   )r   r   rZ   rZ   r[   r   p  s    r   )r   r   r   r   requestBodyr   r   r   r   r   	callbacksstatus_code	responsesr   r   
itemSchemar   zapplication/jsonldatar=   r1   zapplication/json)r0   contentMediaTypecontentSchemar<   ztext/event-streamr0   r   rz   rJ   defaultz%An additional response must be a dictzAdditional Response422c                 3   s    | ]	}| d  v V  qdS )r   NrZ   )r`   statusr   rZ   r[   rd     s
    

z#get_openapi_path.<locals>.<genexpr>rH   zValidation ErrorrA   r>   )r   r   r+   )r+   r>   )Fmethodsr   response_classr   r   r   r   rs   r\   rN   rO   rP   rQ   r   r   rR   
setdefaultrg   updater   rV   valuesr   r   r   r   r   APIRouteget_openapi_pathr   _APIRouteLiker   rw   r   rY   inspect	signature__init__r   r   r   intresponse_descriptionr'   is_json_streamstream_item_fieldr   is_sse_streamrh   deepcopyr"   r   r)   response_fieldr   r4   re   upperdictresponse_fieldsr%   rK   httpclientanyr   validation_error_definition$validation_error_response_definitionopenapi_extralower).r   r   r   r   r   r   security_schemesdefinitionscurrent_response_classroute_response_media_typerk   all_route_paramsr   r   r|   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_responser   additional_field_schemar   additional_schemastatus_textr   http422rZ   r   r[   r   7  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  rZ   rZ   r[   _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  r   r   r   r	   rf   r   r   rg   r   r   r   get_fields_from_routesr   r\   rV   )	r  body_fields_from_routesresponses_from_routesrequest_fields_from_routescallback_flat_modelsr  	api_routeparamsflat_modelsrZ   rZ   r[   r  '  s:   


r  z3.1.0)openapi_versionr   r   webhooksr   serversterms_of_servicecontactlicense_infor   external_docsversionr'  r   r   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rt	|||||d}|r|\}}}|r|
|ji | |r|
di | |r | q\t|pg D ]8}t|}|d u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)r3   r.  r   r   termsOfServicer+  license)openapiinfor)  )known_models)r   r   r   r   securitySchemesc                    s   i | ]}| | qS rZ   rZ   )r`   kr   rZ   r[   r     s    zget_openapi.<locals>.<dictcomp>schemas
componentspathsr(  r   externalDocsTrt   rZ   )setr  rV   r   r   r
   r   r  r  r   r   r   r   sortedr   r   ) r3   r.  r'  r   r   r  r(  r   r)  r*  r+  r,  r   r-  r2  outputr8  r9  webhook_pathsr   
all_fieldsr&  r   r   r  r$  resultr   r   path_definitionswebhook_contextapi_webhookrZ   r6  r[   get_openapiI  s   






rD  )Zrh   http.clientr   r   r   collections.abcr   dataclassesr   r   typingr   r   r   fastapir   fastapi._compatr	   r
   r   r   r   r   fastapi.datastructuresr   r   fastapi.dependencies.modelsr   r   r   r   r   r   fastapi.dependencies.utilsr   r   r   fastapi.encodersr   fastapi.exceptionsr   fastapi.openapi.constantsr   r   fastapi.openapi.modelsr   fastapi.paramsr   r    fastapi.responsesr!   fastapi.sser"   fastapi.typesr#   r$   fastapi.utilsr%   r&   r'   pydanticr(   starlette.responsesr)   starlette.routingr*   r   r   rK   r   rY   rW   rL   rs   rV   rX   r   boolr   r   r   r   r   r;  r   r   RouteContextr  r  rD  rZ   rZ   rZ   r[   <module>   s^  
   


!
"
O
#


 $	
 i

&	

