a
    dxI                     @   s  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
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 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"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.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/< eeee?ef e	ee?ef  f d0d1d2ZAee. eeee, ee f e?f e	ee?ef  d3d4d5ZBe
e. eeee, ee f e?f e
ee?ef  d6d7d8ZCejDe?e?d9d:d;ZEejDe?e?d9d<d=ZFejDe?ee? ee?ef d>d?d@ZGejDeeHe?f ee? eee?ef ee?ef ee?ef f dAdBdCZIee9 eeee, ee f  dDdEdFZJdGdddddddHe?e?e?e
e? ee9 e
e	ee?ef   e
e	ee?ee?ef f   e
e? e
ee?ee?ef f  e
ee?ee?ef f  ee?ef dIdJdKZKdS )L    N)Enum)
AnyDictListOptionalSequenceSetTupleTypeUnioncast)routing)DefaultPlaceholder)	Dependant)get_flat_dependantget_flat_params)jsonable_encoder)METHODS_WITH_BODY
REF_PREFIX)OpenAPI)BodyParam)Response)deep_dict_updategenerate_operation_id_for_pathget_model_definitionsis_body_allowed_for_status_code)	BaseModel)
ModelField	Undefined)field_schemaget_flat_models_from_fieldsget_model_name_map)lenient_issubclass)JSONResponse)	BaseRoute)HTTP_422_UNPROCESSABLE_ENTITYValidationErrorobjectZLocationarrayZanyOftypestringinteger)titler*   itemsMessage)r-   r*   z
Error Type)locmsgr*   )r-   r*   
propertiesrequiredHTTPValidationErrorZdetailZDetail$ref)r-   r*   r2   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modelZscheme_nameappendZscopes)r9   security_definitionsoperation_securityZsecurity_requirementZsecurity_definitionZsecurity_name r@   ^/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/fastapi/openapi/utils.py get_openapi_security_definitionsG   s    
rB   )all_route_paramsmodel_name_mapr:   c              	   C   s   g }| D ]}|j }tt|}|js$q|j|jj|jt||t	dd d}|j
rX|j
|d< |jrnt|j|d< n|jtkrt|j|d< |jr|j|d< || q|S )NrD   Z
ref_prefixr   )nameinr3   schemadescriptionexamplesexample
deprecated)
field_infor   r   include_in_schemaaliasZin_valuer3   r    r   rI   rJ   r   rK   r   rL   r=   )rC   rD   
parametersparamrM   Z	parameterr@   r@   rA    get_openapi_operation_parametersX   s2    



rS   )
body_fieldrD   r:   c           	      C   s   | sd S t | tsJ t| |td\}}}tt| j}|j}| j}i }|rR||d< d|i}|j	rpt
|j	|d< n|jtkrt
|j|d< ||i|d< |S )NrE   r3   rH   rJ   rK   content)
isinstancer   r    r   r   r   rM   
media_typer3   rJ   r   rK   r   )	rT   rD   Zbody_schema_rM   Zrequest_media_typer3   request_body_oaiZrequest_media_contentr@   r@   rA   "get_openapi_operation_request_bodyw   s&    
rZ   )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)rF   pathr\   )warningswarnDeprecationWarningoperation_idpath_formatr   rF   )r[   r\   r_   r@   r@   rA   generate_operation_id   s    re   c                 C   s   | j r| j S | jdd S )NrX    )summaryrF   replacer-   r[   r\   r@   r@   rA   generate_operation_summary   s    rj   )r[   r\   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	
| || ||d
< | jr| j|d< |S )Ntagsri   rg   rI   zDuplicate Operation ID z for function __globals____file__z at ZoperationIdrL   )rl   rj   rI   rc   Z	unique_idZendpoint__name__getattrgetr`   ra   addrL   )r[   r\   rk   	operationrc   message	file_namer@   r@   rA   get_openapi_operation_metadata   s*    





rv   )r[   rD   rk   r:   c           )         s0  i }i }i }| j d usJ dt| jtr4| jj}n| j}|sFJ d|j}| jr&| j D ]}t| ||d g }	t| j	dd}
t
|
d\}}|r dg | |r|| t| j	}t||d}|	| |	rd	d
 |	D }dd
 |	D }|| t|  d< |tv r4t| j|d}|r4| d< | jri }| jD ]8}t|tjrFt|||d\}}}|j|i||j< qF| d< | jd urt| j}n:t|j}|j !d}|d urt|j"t#rt|j"}| j$ di |i d< |rft%| jrfddi}t&|t'r>| j(r:t)| j(|t*d\}}}ni }| di |i di |i d< | j+r di }| j+, D ]\}}|- }|.dd  t|/ } | dkrd} || i }!t|t0sJ d| j1!|}"d }#|"r6t)|"|t*d\}#}}|pd}$|di |$i di }%t2|%|# t3!t|/ pZt4j5j+!t#|}&|!dp||!!dp||&p|d}'t2|!| |'|!d< qtt6}(|s| jrt7 fdd |(d!dfD sd"ddd#t*d$ iiid% d |(< d&|vr|t8t9d' | j:rt2 | j:  ||; < qZ|||fS )(NzMethods must be a listz.A response class is needed to generate OpenAPI)r[   r\   rk   T)Zskip_repeats)r9   security)rC   rD   c                 S   s   i | ]}|d  |d f|qS )rG   rF   r@   .0rR   r@   r@   rA   
<dictcomp>   s   z$get_openapi_path.<locals>.<dictcomp>c                 S   s(   i | ] }| d r|d |d f|qS )r3   rG   rF   )rq   rx   r@   r@   rA   rz      s   
rQ   )rT   rD   ZrequestBodyr[   rD   rk   	callbacksstatus_code	responsesrI   r*   r+   rE   rU   rH   r<   r7   defaultz%An additional response must be a dictzapplication/jsonzAdditional Responsec                    s   g | ]}| d  v qS )r~   r@   )ry   statusrs   r@   rA   
<listcomp>O  s   z$get_openapi_path.<locals>.<listcomp>r6   zValidation Errorr5   r4   )rI   rU   r'   )r'   r4   )<methodsrV   response_classr   rP   rW   rN   rv   r   	dependantrB   
setdefaultextendupdater   rS   listvaluesr   rZ   rT   r|   r   APIRouteget_openapi_pathr_   rF   r}   strinspect	signature__init__rQ   rq   r   intZresponse_descriptionr   r#   r$   response_fieldr    r   r~   r.   copypopupperdictresponse_fieldsr   r8   httpclientr&   anyvalidation_error_definition$validation_error_response_definitionZopenapi_extralower))r[   rD   rk   r_   security_schemesdefinitionsZcurrent_response_classZroute_response_media_typer\   rQ   r9   r>   r?   rC   Zoperation_parametersZall_parametersZrequired_parametersrY   r|   callbackZcb_pathZcb_security_schemesZcb_definitionsr}   Zresponse_signatureZstatus_code_paramZresponse_schemarX   Zoperation_responsesZadditional_status_codeZadditional_responseprocess_responseZstatus_code_keyZopenapi_responsefieldZadditional_field_schemarW   Zadditional_schemaZstatus_textrI   Zhttp422r@   r   rA   r      s@   
















r   )routesr:   c                 C   s   g }g }g }t  }| D ]}t|dd rt|tjr|jrXt|jtsLJ d||j |jrj||j |j	r|
|j	  |jr|t|jO }t|j}|
| q|t|| | t  dB }|S )NrN   z'A request body must be a Pydantic Field)Zknown_models)setrp   rV   r   r   rT   r   r=   r   r   r   r   r|   get_flat_models_from_routesr   r   r!   )r   Zbody_fields_from_routesZresponses_from_routesZrequest_fields_from_routesZcallback_flat_modelsr[   paramsflat_modelsr@   r@   rA   r   i  s8    

r   z3.0.2)openapi_versionrI   rl   serversterms_of_servicecontactlicense_info)r-   versionr   rI   r   rl   r   r   r   r   r:   c        
            sD  | |d}
|r||
d< |r"||
d< |r.||
d< |	r:|	|
d< ||
d}|rP||d< i }i }t  }t|}t|}t||d |D ]h}t|tjr~t|||d	}|r~|\}}}|r||j	i 
| |r|d
i 
| |r~ 
| q~ r fddt D |d< |r||d< ||d< |r,||d< ttf i |dddS )N)r-   r   rI   ZtermsOfServicer   license)Zopenapiinfor   )r   rD   r{   ZsecuritySchemesc                    s   i | ]}| | qS r@   r@   )ry   kr   r@   rA   rz         zget_openapi.<locals>.<dictcomp>Zschemas
componentspathsrl   Tr;   )r   r   r"   r   rV   r   r   r   r   rd   r   sortedr   r   )r-   r   r   rI   r   rl   r   r   r   r   r   outputr   r   rk   r   rD   r[   resultr_   r   Zpath_definitionsr@   r   rA   get_openapi  sV    


r   )Lhttp.clientr   r   r`   enumr   typingr   r   r   r   r   r   r	   r
   r   r   Zfastapir   Zfastapi.datastructuresr   Zfastapi.dependencies.modelsr   Zfastapi.dependencies.utilsr   r   Zfastapi.encodersr   Zfastapi.openapi.constantsr   r   Zfastapi.openapi.modelsr   Zfastapi.paramsr   r   Zfastapi.responsesr   Zfastapi.utilsr   r   r   r   Zpydanticr   Zpydantic.fieldsr   r   Zpydantic.schemar    r!   r"   Zpydantic.utilsr#   Zstarlette.responsesr$   Zstarlette.routingr%   Zstarlette.statusr&   r   r   r8   r   __annotations__rB   rS   rZ   r   re   rj   rv   r*   r   r   r   r@   r@   r@   rA   <module>   s   
0	
!
$ +$
