o
    fW                     @   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  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/ d dl0m1Z1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 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 e@d-< d.ed/eee?ef eee?ef  f fd0d1ZAd2d3d4e	e d5ed6e/d7eeee;d8 f ef d9eBd/eee?ef  fd:d;ZCd2d3d<ee d5ed6e/d7eeee;d8 f ef d9eBd/eee?ef  fd=d>ZDd?ejEd@e?d/e?fdAdBZFd?ejEd@e?d/e?fdCdDZGd?ejEd@e?dEe
e? d/ee?ef fdFdGZHd2d3d?ejEdEe
e? d5ed6e/d7eeee;d8 f ef d9eBd/eee?ef ee?ef ee?ef f fdHdIZIdJe	e7 d/ee fdKdLZJdMddddddddd2dN
dOe?dPe?dQe?dRee? dSee? dJe	e7 dTee	e7  dUeeee?ef   dVeeee?ee?ef f   dWee? dXeee?ee?ef f  dYeee?ee?ef f  d9eBd/ee?ef fdZd[ZKdS )\    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_dependantget_flat_params)jsonable_encoder)METHODS_WITH_BODY
REF_PREFIXREF_TEMPLATE)OpenAPI)BodyParam)Response)ModelNameMap)deep_dict_updategenerate_operation_id_for_pathis_body_allowed_for_status_code)JSONResponse)	BaseRoute)HTTP_422_UNPROCESSABLE_ENTITY)LiteralValidationErrorobjectLocationarrayanyOftypestringinteger)titler.   itemsMessage)r1   r.   z
Error Type)locmsgr.   )r1   r.   
propertiesrequiredHTTPValidationErrordetailDetail$ref)r1   r.   r6   InformationSuccessRedirectionzClient ErrorzServer ErrorzDefault Response)1XX2XX3XX4XX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by_aliasexclude_none)security_requirementsr   security_schememodelscheme_nameappendscopes)rF   security_definitionsoperation_securitysecurity_requirementsecurity_definitionsecurity_name rV   M/var/www/NoticeGen/venv/lib/python3.10/site-packages/fastapi/openapi/utils.py get_openapi_security_definitionsI   s   
rX   T)separate_input_output_schemasall_route_paramsschema_generatormodel_name_mapfield_mapping)
validationserializationrY   c           
      C   s   g }| D ]M}|j }tt|}|jsqt|||||d}|j|jj|j|d}	|j	r.|j	|	d< |j
r9t|j
|	d< n|jtkrEt|j|	d< |jrLd|	d< ||	 q|S )Nfieldr[   r\   r]   rY   )nameinr7   schemadescriptionexamplesexampleT
deprecated)
field_infor   r   include_in_schemar   aliasin_valuer7   re   openapi_examplesr   rg   r   rh   rO   )
rZ   r[   r\   r]   rY   
parametersparamri   param_schema	parameterrV   rV   rW    get_openapi_operation_parametersZ   s8   



rs   
body_fieldc                 C   s   | sd S t | tsJ t| ||||d}tt| j}|j}| j}i }	|r(||	d< d|i}
|jr7t	|j|
d< n|j
tkrCt	|j
|
d< ||
i|	d< |	S )Nr`   r7   rd   rf   rg   content)
isinstancer   r   r   r   ri   
media_typer7   rn   r   rg   r   )rt   r[   r\   r]   rY   body_schemari   request_media_typer7   request_body_oairequest_media_contentrV   rV   rW   "get_openapi_operation_request_body   s2   


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   
stacklevel)rb   pathr~   )warningswarnDeprecationWarningoperation_idpath_formatr#   rb   )r}   r~   r   rV   rV   rW   generate_operation_id   s   r   c                 C   s   | j r| j S | jdd S )N_ )summaryrb   replacer1   r}   r~   rV   rV   rW   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   re   zDuplicate Operation ID z for function __globals____file__z at    r   operationIdrh   )r   r   re   r   	unique_idendpoint__name__getattrgetr   r   addrh   )r}   r~   r   	operationr   message	file_namerV   rV   rW   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	}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||||||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< |
r2t%| jr2d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r\d}"||"i }#t|!t/slJ d| j0!|}$d }%|$rt)|$||||d}%|
pd}&|!di |&i di }'t1|'|% t2!t|. pt3j4j*!t#|}(|!!dp|#!dp|(pd})t1|#|! |)|#d< qAtt5}*|s| jrt6 fdd |*d!dfD sd"ddd#t7d$ iiid% d |*< d&|vr|t8t9d' | j:r	t1 | j:  ||; < q-|||fS )(NzMethods must be a listz.A response class is needed to generate OpenAPI)r}   r~   r   T)skip_repeats)rF   security)rZ   r[   r\   r]   rY   c                 S   s   i | ]}|d  |d f|qS )rc   rb   rV   .0rp   rV   rV   rW   
<dictcomp>  s    z$get_openapi_path.<locals>.<dictcomp>c                 S   s(   i | ]}| d r|d |d f|qS )r7   rc   rb   )r   r   rV   rV   rW   r     s    ro   )rt   r[   r\   r]   rY   requestBodyr}   r   r[   r\   r]   rY   	callbacksstatus_code	responsesre   r.   r/   r`   ru   rd   rM   rD   defaultz%An additional response must be a dictzapplication/jsonzAdditional Responsec                 3   s    | ]	}| d  v V  qdS )r   NrV   )r   statusr   rV   rW   	<genexpr>~  s
    

z#get_openapi_path.<locals>.<genexpr>rB   zValidation Errorr;   r8   )re   ru   r)   )r)   r8   )<methodsrv   response_classr   rm   rw   rj   r   r   	dependantrX   
setdefaultextendupdater   rs   listvaluesr   r|   rt   r   r   APIRouteget_openapi_pathr   rb   r   strinspect	signature__init__ro   r   r   intresponse_descriptionr$   r   r%   response_fieldr   r   r2   copypopupperdictresponse_fieldsr"   rE   httpclientr'   anyr   validation_error_definition$validation_error_response_definitionopenapi_extralower)+r}   r   r[   r\   r]   rY   r   security_schemesdefinitionscurrent_response_classroute_response_media_typer~   ro   rF   rQ   rR   rZ   operation_parametersall_parametersrequired_parametersrz   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_responsera   additional_field_schemarw   additional_schemastatus_textre   http422rV   r   rW   r      sV  






	










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 )Nrj   z'A request body must be a Pydantic Field)r   rv   r   r   rt   r   rO   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_modelsrV   rV   rW   r     s8   


r   z3.1.0)
openapi_versionr   re   webhooksr   serversterms_of_servicecontactlicense_inforY   r1   versionr   r   re   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td	}t||||d
\} |p[g D ]7}t|tj	rt
||||||d}|r|\}}}|r||ji | |r|di | |r | q\|pg D ]7}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< ttdi |dddS )N)r1   r   r   re   termsOfServicer   license)openapiinfor   )ref_template)fieldsr[   r\   rY   r   securitySchemesc                    s   i | ]}| | qS rV   rV   )r   kr   rV   rW   r   
  s    zget_openapi.<locals>.<dictcomp>schemas
componentspathsr   r   TrH   rV   )setr   r   r   r   r   r   rv   r   r   r   r   r   r   sortedr   r   )r1   r   r   r   re   r   r   r   r   r   r   r   rY   r   outputr   r   webhook_pathsr   
all_fieldsr\   r[   r]   r}   resultr   r   path_definitionswebhookrV   r   rW   get_openapi  s   







r  )Lhttp.clientr   r   r   typingr   r   r   r   r   r   r   r	   r
   r   fastapir   fastapi._compatr   r   r   r   r   r   r   r   fastapi.datastructuresr   fastapi.dependencies.modelsr   fastapi.dependencies.utilsr   r   fastapi.encodersr   fastapi.openapi.constantsr   r   r   fastapi.openapi.modelsr   fastapi.paramsr   r   fastapi.responsesr    fastapi.typesr!   fastapi.utilsr"   r#   r$   starlette.responsesr%   starlette.routingr&   starlette.statusr'   typing_extensionsr(   r   r   rE   r   __annotations__rX   boolrs   r|   r   r   r   r   r   r   r  rV   rV   rV   rW   <module>   sH  
 0(
	


	
1	
%


#	$

 A
#
	

