o
    K[Wi\                  !   @   sB  U 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	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 d dl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+m,Z, d dl-m.Z.m/Z/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8 dddddddiddigiddddd ddd!g d!d"Z9d#dd$d%dd&e#d idid'Z:d(d)d*d+d,d-d.Z;e<e=e=f e>d/< d0ed1e?e<e=ef e@e<e=ef  f fd2d3ZAd4d5d6ed7e,d8e<e?ee8d9 f e<e=ef f d:eBd1e@e<e=ef  f
d;d<ZCd4d5d=ee d7e,d8e<e?ee8d9 f e<e=ef f d:eBd1ee<e=ef  f
d>d?ZDd@ejEdAe=d1e=fdBdCZFd@ejEdAe=d1e=fdDdEZGd@ejEdAe=dFeHe= d1e<e=ef fdGdHZId4d5d@ejEdFeHe= d7e,d8e<e?ee8d9 f e<e=ef f d:eBd1e?e<e=ef e<e=ef e<e=ef f fdIdJZJdKee6 d1e@e fdLdMZKdNddddddddd4ddOdPe=dQe=dRe=dSee= dTee= dKee6 dUeee6  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:eBd[ee<e=ef  d1e<e=ef fd\d]ZLdS )^    N)Sequence)AnyOptionalUnioncast)routing)
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get_validation_alias)jsonable_encoder)FastAPIDeprecationWarning)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ValidationErrorobjectLocationarrayanyOftypestringinteger)titler)   itemsMessage)r,   r)   z
Error Type)locmsgr)   )r,   r)   
propertiesrequiredHTTPValidationErrordetailDetail$ref)r,   r)   r1   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 }| j D ]0}t|jjddd}|jj}|||< ||vr"g ||< |jp&g D ]}||| vr6|| | q'qdd | D }||fS )NTby_aliasexclude_nonec                 S   s   g | ]\}}||iqS  rF   ).0namescopesrF   rF   Y/var/www/html/asistente-voz-ia/venv/lib/python3.10/site-packages/fastapi/openapi/utils.py
<listcomp>b   s    z4get_openapi_security_definitions.<locals>.<listcomp>)_security_dependenciesr   _security_schememodelscheme_nameoauth_scopesappendr-   )rA   security_definitionsoperation_security_dictsecurity_dependencysecurity_definitionsecurity_namescopeoperation_securityrF   rF   rJ    get_openapi_security_definitionsN   s*   
rY   T)separate_input_output_schemas	dependantmodel_name_mapfield_mapping)
validationserializationrZ   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}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krt||d< t|dd rd|d< || qQqK|S )NTskip_repeats   r   convert_underscoresinclude_in_schemafieldr\   r]   rZ   _-)rH   inr2   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   r   rH   replacevaluer2   rk   r   r	   rQ   )r[   r\   r]   rZ   
parametersrA   rp   rq   rr   rs   parameter_groupsdefault_convert_underscoresfirst_field
param_typeparam_groupparamr{   param_schemarH   rc   	parameterrl   rm   rF   rF   rJ   !_get_openapi_operation_parametersh   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r6t	|j|	d< n|j
tkrBt	|j
|	d< ||	i|d< |S )Nre   r2   rj   rn   rm   content)
isinstancer   r   r   r   r{   
media_typer2   rl   r   rm   r	   )
r   r\   r]   rZ   body_schemar{   request_media_typer2   request_body_oairequest_media_contentrF   rF   rJ   "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)rH   rt   r   )warningswarnr   operation_idpath_formatr   rH   )r   r   rt   rF   rF   rJ   generate_operation_id   s   r   c                 C   s   | j r| j S | jdd S )Nrg    )summaryrH   r|   r,   r   r   rF   rF   rJ   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   rk   zDuplicate Operation ID z for function __globals____file__z at rb   )r   operationIdro   )r   r   rk   r   	unique_idendpoint__name__rz   getr   r   addro   )r   r   r   	operationr   r   	file_namerF   rF   rJ   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)r   r   r   Tr`   )rA   security)r[   r\   r]   rZ   c                 S   s   i | ]}|d  |d f|qS )ri   rH   rF   rG   r   rF   rF   rJ   
<dictcomp>-  s    z$get_openapi_path.<locals>.<dictcomp>c                 S   s(   i | ]}| d r|d |d f|qS )r2   ri   rH   )r   r   rF   rF   rJ   r   0  s    r~   )r   r\   r]   rZ   requestBodyr   r   r\   r]   rZ   	callbacksstatus_code	responsesrk   r)   r*   re   r   rj   rN   r?   defaultz%An additional response must be a dictzapplication/jsonzAdditional Response422c                 3   s    | ]	}| d  v V  qdS )r   NrF   )rG   statusr   rF   rJ   	<genexpr>  s
    

z#get_openapi_path.<locals>.<genexpr>r=   zValidation Errorr6   r3   )rk   r   r$   )r$   r3   );methodsr   response_classr   r}   r   rd   r   r   r[   rY   
setdefaultextendupdater   listvaluesr   r   r   r   r   APIRouteget_openapi_pathrt   rH   r   strinspect	signature__init__r~   r   r   intresponse_descriptionr   r   r!   response_fieldr   r   r-   copypopupperdictresponse_fieldsr   r@   httpclientr   anyr   validation_error_definition$validation_error_response_definitionopenapi_extralower)*r   r   r\   r]   rZ   rt   security_schemesdefinitionscurrent_response_classroute_response_media_typer   r~   rA   rR   rX   operation_parametersall_parametersrequired_parametersr   r   callbackcb_pathcb_security_schemescb_definitionsr   response_signaturestatus_code_paramresponse_schemaoperation_responsesadditional_status_codeadditional_responseprocess_responsestatus_code_keyopenapi_responserf   additional_field_schemar   additional_schemastatus_textrk   http422all_route_paramsrF   r   rJ   r     sH  


















r   routesc                 C   s   g }g }g }g }| D ]J}t |dd rTt|tjrT|jr+t|jts%J d||j |jr4||j |jr?|	|j
  |jrJ|	t|j t|j}|	| q
|t|| |  }|S )Nrd   z'A request body must be a Pydantic Field)rz   r   r   r   r   r   rQ   r   r   r   r   r   get_fields_from_routesr   r[   r   )r   body_fields_from_routesresponses_from_routesrequest_fields_from_routescallback_flat_modelsr   paramsflat_modelsrF   rF   rJ   r     s4   


r   z3.1.0)openapi_versionr   rk   webhooksr   serversterms_of_servicecontactlicense_inforZ   external_docsr,   versionr   r   rk   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)r,   r   r   rk   termsOfServicer   license)openapiinfor   )fieldsr\   rZ   r   securitySchemesc                    s   i | ]}| | qS rF   rF   )rG   kr   rF   rJ   r   -  s    zget_openapi.<locals>.<dictcomp>schemas
componentspathsr   r   externalDocsTrC   rF   )setr   r   r
   r   r   r   r   r   r   r   r   sortedr   r   )r,   r   r   r   rk   r   r   r   r   r   r   r   rZ   r   r  outputr  r	  webhook_pathsr   
all_fieldsr\   r]   r   resultrt   r   path_definitionswebhookrF   r  rJ   get_openapi  s   






r  )Mhttp.clientr   r   r   collections.abcr   typingr   r   r   r   fastapir   fastapi._compatr   r	   r
   r   r   r   fastapi.datastructuresr   fastapi.dependencies.modelsr   fastapi.dependencies.utilsr   r   r   r   fastapi.encodersr   fastapi.exceptionsr   fastapi.openapi.constantsr   r   fastapi.openapi.modelsr   fastapi.paramsr   r   fastapi.responsesr   fastapi.typesr   fastapi.utilsr   r   r   pydanticr    starlette.responsesr!   starlette.routingr"   typing_extensionsr#   r   r   r@   r   r   __annotations__tupler   rY   boolr   r   r   r   r   r  r   r   r   r  rF   rF   rF   rJ   <module>   sF  
  	


!
P
#


"$	
 ;
#
	

