o
     d                     @   s  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mZ d dlmZmZ d dl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 m!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z<m=Z= d dl>m?Z? d dl@mAZAmBZBmCZCmDZD G dd de+ZEdS )    )Enum)
Any	AwaitableCallable	CoroutineDictListOptionalSequenceTypeUnion)routing)DefaultDefaultPlaceholder)DictIntStrAny	SetIntStr)http_exception_handler$request_validation_exception_handler)RequestValidationError)logger)AsyncExitStackMiddleware)get_redoc_htmlget_swagger_ui_html#get_swagger_ui_oauth2_redirect_html)get_openapi)DependsDecoratedCallable)generate_unique_id)	Starlette)State)HTTPException)
Middleware)BaseHTTPMiddleware)ServerErrorMiddleware)ExceptionMiddleware)Request)HTMLResponseJSONResponseResponse)	BaseRoute)ASGIAppReceiveScopeSendc                A       s  e Zd Zddd ddddddeedddddddddddddd	dddd	deed
dedeee	  de
de
de
dee
 deeee
ef   deeee
ee
ef f   deee  dee dee
 dee
 dee
 deee
ef  deee  deeeeee f eeegeeeef f f  deeeg ef   deeeg ef   dee
 deee
ee
ef f  deee
ee
ef f  d e
d!e
d"ed#eeeee
f ee
ef f  d$eee	  d%ee d&ed'eee
ef  d(eejge
f d)ed*df@d+d,Zd*efd-d.Zd*ee
ef fd/d0Zdvd1d2Zd3ed4e d5e!d*df fd6d7Z"eddddddd8ddddddd	dddd	eeddeed9d:e
d;ed<eeeef f d=ed>ee d?eeee
e#f   deee  d@ee
 dee
 dAe
d#eeeee
f ee
ef f  d%ee dBeee
  dCee
 dDeee$e%f  dEeee$e%f  dFedGedHedIed&edJeee e&f dKee
 dLeee
ef  d(eejge
f d*df2dMdNZ'eddddddd8ddddddd	dddd	eeddeed9d:e
d=ed>ee d?eeee
e#f   deee  d@ee
 dee
 dAe
d#eeeee
f ee
ef f  d%ee dBeee
  dCee
 dDeee$e%f  dEeee$e%f  dFedGedHedIed&edJee dKee
 dLeee
ef  d(eejge
f d*ee(ge(f f0dOdPZ)	dwd:e
d;ed<ef dKee
 d*dfdQdRZ*	dwd:e
dKee
 d*ee(ge(f fdSdTZ+dddddd	eedeedU	dVej,dWe
d?eeee
e#f   deee  d#eeeee
f ee
ef f  d%ee d&edee d$eee	  d(eejge
f d*dfdXdYZ-eddddddd8dddddd	dddd	eedddeedZd:e
d=ed>ee d?eeee
e#f   deee  d@ee
 dee
 dAe
d#eeeee
f ee
ef f  d%ee dCee
 dDeee$e%f  dEeee$e%f  dFedGedHedIed&edJee dKee
 d$eee	  dLeee
ef  d(eejge
f d*ee(ge(f f0d[d\Z.eddddddd8dddddd	dddd	eedddeedZd:e
d=ed>ee d?eeee
e#f   deee  d@ee
 dee
 dAe
d#eeeee
f ee
ef f  d%ee dCee
 dDeee$e%f  dEeee$e%f  dFedGedHedIed&edJee dKee
 d$eee	  dLeee
ef  d(eejge
f d*ee(ge(f f0d]d^Z/eddddddd8dddddd	dddd	eedddeedZd:e
d=ed>ee d?eeee
e#f   deee  d@ee
 dee
 dAe
d#eeeee
f ee
ef f  d%ee dCee
 dDeee$e%f  dEeee$e%f  dFedGedHedIed&edJee dKee
 d$eee	  dLeee
ef  d(eejge
f d*ee(ge(f f0d_d`Z0eddddddd8dddddd	dddd	eedddeedZd:e
d=ed>ee d?eeee
e#f   deee  d@ee
 dee
 dAe
d#eeeee
f ee
ef f  d%ee dCee
 dDeee$e%f  dEeee$e%f  dFedGedHedIed&edJee dKee
 d$eee	  dLeee
ef  d(eejge
f d*ee(ge(f f0dadbZ1eddddddd8dddddd	dddd	eedddeedZd:e
d=ed>ee d?eeee
e#f   deee  d@ee
 dee
 dAe
d#eeeee
f ee
ef f  d%ee dCee
 dDeee$e%f  dEeee$e%f  dFedGedHedIed&edJee dKee
 d$eee	  dLeee
ef  d(eejge
f d*ee(ge(f f0dcddZ2eddddddd8dddddd	dddd	eedddeedZd:e
d=ed>ee d?eeee
e#f   deee  d@ee
 dee
 dAe
d#eeeee
f ee
ef f  d%ee dCee
 dDeee$e%f  dEeee$e%f  dFedGedHedIed&edJee dKee
 d$eee	  dLeee
ef  d(eejge
f d*ee(ge(f f0dedfZ3eddddddd8dddddd	dddd	eedddeedZd:e
d=ed>ee d?eeee
e#f   deee  d@ee
 dee
 dAe
d#eeeee
f ee
ef f  d%ee dCee
 dDeee$e%f  dEeee$e%f  dFedGedHedIed&edJee dKee
 d$eee	  dLeee
ef  d(eejge
f d*ee(ge(f f0dgdhZ4eddddddd8dddddd	dddd	eedddeedZd:e
d=ed>ee d?eeee
e#f   deee  d@ee
 dee
 dAe
d#eeeee
f ee
ef f  d%ee dCee
 dDeee$e%f  dEeee$e%f  dFedGedHedIed&edJee dKee
 d$eee	  dLeee
ef  d(eejge
f d*ee(ge(f f0didjZ5	dwd:e
dKee
df d*ee(ge(f fdkdlZ6dme
d*ee(ge(f fdndoZ7dpe
d*ee(ge(f fdqdrZ8dseeee f d*ee(ge(f fdtduZ9  Z:S )xFastAPIFN z0.1.0z/openapi.jsonz/docsz/redocz/docs/oauth2-redirectT)debugroutestitledescriptionversionopenapi_urlopenapi_tagsserversdependenciesdefault_response_classdocs_url	redoc_urlswagger_ui_oauth2_redirect_urlswagger_ui_init_oauth
middlewareexception_handlers
on_startupon_shutdownterms_of_servicecontactlicense_infoopenapi_prefix	root_pathroot_path_in_servers	responses	callbacks
deprecatedinclude_in_schemaswagger_ui_parametersgenerate_unique_id_functionr1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   extrareturnc                 K   s:  || _ || _|| _|| _|| _|| _|| _|| _|| _|| _	|| _
|| _|| _|| _|| _|p0g | _|| _d| _d | _| jrL| jsEJ d| jsLJ d|rStd |pV|| _t | _i | _tj|| |||
|	|||||d| _|d u rvi nt|| _| jtt  | jt!t" |d u rg nt#|| _$d | _%| &  d S )Nz3.0.2z4A title must be provided for OpenAPI, e.g.: 'My API'z5A version must be provided for OpenAPI, e.g.: '2.1.0'z"openapi_prefix" has been deprecated in favor of "root_path", which follows more closely the ASGI standard, is simpler, and more automatic. Check the docs at https://fastapi.tiangolo.com/advanced/sub-applications/)r2   dependency_overrides_providerrA   rB   r:   r9   rJ   rK   rL   rI   rN   )'r1   r3   r4   r5   rC   rD   rE   r6   r7   rH   r;   r<   r=   r>   rM   r8   rO   openapi_versionopenapi_schemar   warningrG   r    statedependency_overridesr   	APIRouterrouterdictr@   
setdefaultr!   r   r   r   listuser_middlewaremiddleware_stacksetup) selfr1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO    r`   ?/usr/local/lib/python3.10/dist-packages/fastapi/applications.py__init__0   sh   *

zFastAPI.__init__c           
      C   s   | j }d }i }| j D ]\}}|dtfv r|}q|||< qtt||dg| j tt||dttg }| j	}t
|D ]\}}	|dd|i|	}q;|S )Ni  )handlerr1   )handlersr1   appr`   )r1   r@   items	Exceptionr"   r$   r\   r%   r   rX   reversed)
r_   r1   error_handlerr@   keyvaluer?   re   clsoptionsr`   r`   ra   build_middleware_stack   s*   
zFastAPI.build_middleware_stackc                 C   s>   | j st| j| j| j| j| j| j| j| j	| j
| jd
| _ | j S )N)
r3   r5   rR   r4   rC   rD   rE   r2   tagsr8   )rS   r   r3   r5   rR   r4   rC   rD   rE   r2   r7   r8   r_   r`   r`   ra   openapi   s   zFastAPI.openapic                    s    j r'dd  jD }dd |D dtdtf fdd} j j |d	d
  j rV jrVdtdtf fdd} j j|d	d
  jrVdtdtfdd} j j|d	d
  j rr jrtdtdtf fdd} j j|d	d
 d S d S d S )Nc                 s   s    | ]}| d V  qdS )urlN)get).0server_datar`   r`   ra   	<genexpr>   s    z FastAPI.setup.<locals>.<genexpr>c                 S   s   h | ]}|r|qS r`   r`   )rt   rr   r`   r`   ra   	<setcomp>   s    z FastAPI.setup.<locals>.<setcomp>reqrP   c                    sP   | j ddd}|vr"|r" jr" jdd|i | t  S )NrG   r0   /r   rr   )	scopers   rstriprH   r8   insertaddr(   rq   )rx   rG   r_   server_urlsr`   ra   rq      s   

zFastAPI.setup.<locals>.openapiF)rL   c                    sN   | j ddd}| j } j}|r|| }t| jd | j jdS )NrG   r0   ry   z - Swagger UI)r6   r3   oauth2_redirect_url
init_oauthrM   )	rz   rs   r{   r6   r=   r   r3   r>   rM   )rx   rG   r6   r   rp   r`   ra   swagger_ui_html   s   
z&FastAPI.setup.<locals>.swagger_ui_htmlc                    s   t  S N)r   )rx   r`   r`   ra   swagger_ui_redirect   s   z*FastAPI.setup.<locals>.swagger_ui_redirectc                    s2   | j ddd}| j }t| jd dS )NrG   r0   ry   z - ReDoc)r6   r3   )rz   rs   r{   r6   r   r3   )rx   rG   r6   rp   r`   ra   
redoc_html  s   

z!FastAPI.setup.<locals>.redoc_html)	r6   r8   r&   r(   	add_router;   r'   r=   r<   )r_   urlsrq   r   r   r   r`   r~   ra   r^      s&   zFastAPI.setuprz   receivesendc                    s,   | j r	| j |d< t |||I d H  d S )NrG   )rG   super__call__)r_   rz   r   r   	__class__r`   ra   r     s   
zFastAPI.__call__zSuccessful Response)response_modelstatus_codero   r9   summaryr4   response_descriptionrI   rK   methodsoperation_idresponse_model_includeresponse_model_excluderesponse_model_by_aliasresponse_model_exclude_unsetresponse_model_exclude_defaultsresponse_model_exclude_nonerL   response_classnameopenapi_extrarN   pathendpoint.r   r   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   c                C   s   | j j|fi d|d|d|d|d|d|d|d|	d	|
d
|d|d|d|d|d|d|d|d|d|d|d|d|d| d S )Nr   r   r   ro   r9   r   r4   r   rI   rK   r   r   r   r   r   r   r   r   rL   r   r   r   rN   rX   add_api_route)r_   r   r   r   r   ro   r9   r   r4   r   rI   rK   r   r   r   r   r   r   r   r   rL   r   r   r   rN   r`   r`   ra   r     sb    	
zFastAPI.add_api_routec                   sH   dt dt f 	
fdd}|S )NfuncrP   c                    s   j j	| fi dddd ddddd	d
ddddddddd
ddd | S )Nr   r   ro   r9   r   r4   r   rI   rK   r   r   r   r   r   r   r   r   rL   r   r   r   rN   r   r   r9   rK   r4   rN   rL   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rI   r_   r   r   ro   r`   ra   	decoratori  sb   	
z$FastAPI.api_route.<locals>.decoratorr   )r_   r   r   r   ro   r9   r   r4   r   rI   rK   r   r   r   r   r   r   r   r   rL   r   r   r   rN   r   r`   r   ra   	api_routeL  s   DzFastAPI.api_routec                 C   s   | j j|||d d S N)r   )rX   add_api_websocket_route)r_   r   r   r   r`   r`   ra   r     s   zFastAPI.add_api_websocket_routec                       dt dt f fdd}|S )Nr   rP   c                    s   j |  d | S r   )r   r   r   r   r_   r`   ra   r     s   z$FastAPI.websocket.<locals>.decoratorr   r_   r   r   r   r`   r   ra   	websocket     zFastAPI.websocket	prefixro   r9   rI   rK   rL   r:   rJ   rN   rX   r   c       	         C   s$   | j j|||||||||	|
d
 d S )Nr   )rX   include_router)r_   rX   r   ro   r9   rI   rK   rL   r:   rJ   rN   r`   r`   ra   r     s   
zFastAPI.include_router)r   r   ro   r9   r   r4   r   rI   rK   r   r   r   r   r   r   r   rL   r   r   rJ   r   rN   c                C      | j j|fi d|d|d|d|d|d|d|d|	d	|
d
|d|d|d|d|d|d|d|d|d|d|d|d|S Nr   r   ro   r9   r   r4   r   rI   rK   r   r   r   r   r   r   r   rL   r   r   rJ   r   rN   )rX   rs   r_   r   r   r   ro   r9   r   r4   r   rI   rK   r   r   r   r   r   r   r   rL   r   r   rJ   r   rN   r`   r`   ra   rs     ^   	
zFastAPI.getc                C   r   r   )rX   putr   r`   r`   ra   r     r   zFastAPI.putc                C   r   r   )rX   postr   r`   r`   ra   r   !  r   zFastAPI.postc                C   r   r   )rX   deleter   r`   r`   ra   r   X  r   zFastAPI.deletec                C   r   r   )rX   rm   r   r`   r`   ra   rm     r   zFastAPI.optionsc                C   r   r   )rX   headr   r`   r`   ra   r     r   zFastAPI.headc                C   r   r   )rX   patchr   r`   r`   ra   r     r   zFastAPI.patchc                C   r   r   )rX   tracer   r`   r`   ra   r   4  r   zFastAPI.tracec                    r   )Nr   rP   c                    s   j j|  d | S r   )rX   add_websocket_router   r   r`   ra   r   n  s   z*FastAPI.websocket_route.<locals>.decoratorr   r   r`   r   ra   websocket_routek  r   zFastAPI.websocket_route
event_typec                 C   s   | j |S r   )rX   on_event)r_   r   r`   r`   ra   r   t  s   zFastAPI.on_eventmiddleware_typec                    s   dt dt f fdd}|S )Nr   rP   c                    s    j t| d | S )N)dispatch)add_middlewarer#   r   rp   r`   ra   r   |  s   z%FastAPI.middleware.<locals>.decoratorr   )r_   r   r   r`   rp   ra   r?   y  s   zFastAPI.middlewareexc_class_or_status_codec                    s   dt dt f fdd}|S )Nr   rP   c                    s     |  | S r   )add_exception_handlerr   r   r_   r`   ra   r     s   z,FastAPI.exception_handler.<locals>.decoratorr   )r_   r   r   r`   r   ra   exception_handler  s   zFastAPI.exception_handler)rP   Nr   );__name__
__module____qualname__r   r(   r   boolr	   r   r*   strr   r   r   r
   r   r   r)   r"   intrg   r   r&   r   r   APIRouterb   r+   rn   rq   r^   r-   r,   r.   r   r   r   r   r   r   r   r   r   r   rW   r   rs   r   r   r   rm   r   r   r   r   r   r?   r   __classcell__r`   r`   r   ra   r/   /   s*   
	


 
!"#$%()
f1
5

	


?
	


=



	


!
	


;
	


;
	


;
	


;
	


;
	


;
	


;
	


8

	

	r/   N)Fenumr   typingr   r   r   r   r   r   r	   r
   r   r   fastapir   fastapi.datastructuresr   r   fastapi.encodersr   r   fastapi.exception_handlersr   r   fastapi.exceptionsr   fastapi.loggerr   !fastapi.middleware.asyncexitstackr   fastapi.openapi.docsr   r   r   fastapi.openapi.utilsr   fastapi.paramsr   fastapi.typesr   fastapi.utilsr   starlette.applicationsr   starlette.datastructuresr    starlette.exceptionsr!   starlette.middlewarer"   starlette.middleware.baser#   starlette.middleware.errorsr$   starlette.middleware.exceptionsr%   starlette.requestsr&   starlette.responsesr'   r(   r)   starlette.routingr*   starlette.typesr+   r,   r-   r.   r/   r`   r`   r`   ra   <module>   s4    0