o
    ;ήcٔ                     @   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l8m9Z9m:Z:m;Z; d dl<m=Z= d dl>m?Z?m@Z@mAZAmBZB G dd de+ZCd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)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dkd1d2Zd3ed4e d5e!d*df fd6d7Z"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'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)	dld:e
d;ed<ef dKee
 d*dfdQdRZ*	dld: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-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.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/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`Z0d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Z1d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Z2d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Z3d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Z4d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  Z6S )m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_functionr0   r1   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   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 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/)r1   dependency_overrides_providerr@   rA   r9   r8   rI   rJ   rK   rH   rM   )(_debugr2   r3   r4   rB   rC   rD   r5   r6   rG   r:   r;   r<   r=   rL   r7   rN   openapi_versionopenapi_schemar   warningrF   r    statedependency_overridesr   	APIRouterrouterdictr?   
setdefaultr!   r   r   r   listuser_middlewarebuild_middleware_stackmiddleware_stacksetup) selfr0   r1   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    ra   ;/tmp/pip-target-vg8gfxp4/lib/python/fastapi/applications.py__init__/   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  )handlerr0   )handlersr0   appra   )r0   r?   items	Exceptionr"   r#   r\   r$   r   rX   reversed)
r`   r0   error_handlerr?   keyvaluer>   rf   clsoptionsra   ra   rb   r]      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)
r2   r4   rR   r3   rB   rC   rD   r1   tagsr7   )rS   r   r2   r4   rR   r3   rB   rC   rD   r1   r6   r7   r`   ra   ra   rb   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_datara   ra   rb   	<genexpr>   s    z FastAPI.setup.<locals>.<genexpr>c                 S   s   h | ]}|r|qS ra   ra   )rt   rr   ra   ra   rb   	<setcomp>   s    z FastAPI.setup.<locals>.<setcomp>reqrO   c                    sP   | j ddd}|vr"|r" jr" jdd|i | t  S )NrF   r/   /r   rr   )	scopers   rstriprG   r7   insertaddr'   rq   )rx   rF   r`   server_urlsra   rb   rq      s   

zFastAPI.setup.<locals>.openapiF)rK   c                    sN   | j ddd}| j } j}|r|| }t| jd | j jdS )NrF   r/   ry   z - Swagger UI)r5   r2   oauth2_redirect_url
init_oauthrL   )	rz   rs   r{   r5   r<   r   r2   r=   rL   )rx   rF   r5   r   rp   ra   rb   swagger_ui_html   s   
z&FastAPI.setup.<locals>.swagger_ui_htmlc                    s   t  S N)r   )rx   ra   ra   rb   swagger_ui_redirect   s   z*FastAPI.setup.<locals>.swagger_ui_redirectc                    s2   | j ddd}| j }t| jd dS )NrF   r/   ry   z - ReDoc)r5   r2   )rz   rs   r{   r5   r   r2   )rx   rF   r5   rp   ra   rb   
redoc_html  s   

z!FastAPI.setup.<locals>.redoc_html)	r5   r7   r%   r'   	add_router:   r&   r<   r;   )r`   urlsrq   r   r   r   ra   r~   rb   r_      s&   zFastAPI.setuprz   receivesendc                    s,   | j r	| j |d< t |||I d H  d S )NrF   )rF   super__call__)r`   rz   r   r   	__class__ra   rb   r     s   
zFastAPI.__call__zSuccessful Response)response_modelstatus_codero   r8   summaryr3   response_descriptionrH   rJ   methodsoperation_idresponse_model_includeresponse_model_excluderesponse_model_by_aliasresponse_model_exclude_unsetresponse_model_exclude_defaultsresponse_model_exclude_nonerK   response_classnameopenapi_extrarM   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   r8   r   r3   r   rH   rJ   r   r   r   r   r   r   r   r   rK   r   r   r   rM   rX   add_api_route)r`   r   r   r   r   ro   r8   r   r3   r   rH   rJ   r   r   r   r   r   r   r   r   rK   r   r   r   rM   ra   ra   rb   r     sb    	
zFastAPI.add_api_routec                   sH   dt dt f 	
fdd}|S )NfuncrO   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   r8   r   r3   r   rH   rJ   r   r   r   r   r   r   r   r   rK   r   r   r   rM   r   r   r8   rJ   r3   rM   rK   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rH   r`   r   r   ro   ra   rb   	decoratorh  sb   	
z$FastAPI.api_route.<locals>.decoratorr   )r`   r   r   r   ro   r8   r   r3   r   rH   rJ   r   r   r   r   r   r   r   r   rK   r   r   r   rM   r   ra   r   rb   	api_routeK  s   DzFastAPI.api_routec                 C   s   | j j|||d d S N)r   )rX   add_api_websocket_route)r`   r   r   r   ra   ra   rb   r     s   zFastAPI.add_api_websocket_routec                    s   dt dt f fdd}|S )Nr   rO   c                    s   j |  d | S r   )r   r   r   r   r`   ra   rb   r     s   z$FastAPI.websocket.<locals>.decoratorr   )r`   r   r   r   ra   r   rb   	websocket  s   zFastAPI.websocket	prefixro   r8   rH   rJ   rK   r9   rI   rM   rX   r   c       	         C   s$   | j j|||||||||	|
d
 d S )Nr   )rX   include_router)r`   rX   r   ro   r8   rH   rJ   rK   r9   rI   rM   ra   ra   rb   r     s   
zFastAPI.include_router)r   r   ro   r8   r   r3   r   rH   rJ   r   r   r   r   r   r   r   rK   r   r   rI   r   rM   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   r8   r   r3   r   rH   rJ   r   r   r   r   r   r   r   rK   r   r   rI   r   rM   )rX   rs   r`   r   r   r   ro   r8   r   r3   r   rH   rJ   r   r   r   r   r   r   r   rK   r   r   rI   r   rM   ra   ra   rb   rs     ^   	
zFastAPI.getc                C   r   r   )rX   putr   ra   ra   rb   r     r   zFastAPI.putc                C   r   r   )rX   postr   ra   ra   rb   r      r   zFastAPI.postc                C   r   r   )rX   deleter   ra   ra   rb   r   W  r   zFastAPI.deletec                C   r   r   )rX   rn   r   ra   ra   rb   rn     r   zFastAPI.optionsc                C   r   r   )rX   headr   ra   ra   rb   r     r   zFastAPI.headc                C   r   r   )rX   patchr   ra   ra   rb   r     r   zFastAPI.patchc                C   r   r   )rX   tracer   ra   ra   rb   r   3  r   zFastAPI.trace)rO   Nr   )7__name__
__module____qualname__r   r'   r   boolr	   r   r)   strr   r   r   r
   r   r   r(   r"   intrh   r   r%   r   r   APIRouterc   r*   r]   rq   r_   r,   r+   r-   r   r   r   r   r   r   r   r   r   r   rW   r   rs   r   r   r   rn   r   r   r   __classcell__ra   ra   r   rb   r.   .   s   
	


 
!"#$%()
f1
5

	


?
	


=



	


!
	


;
	


;
	


;
	


;
	


;
	


;
	


;
	

r.   N)D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.errorsr#   starlette.middleware.exceptionsr$   starlette.requestsr%   starlette.responsesr&   r'   r(   starlette.routingr)   starlette.typesr*   r+   r,   r-   r.   ra   ra   ra   rb   <module>   s2    0