a
    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@mAZAmBZBmCZCmDZDmEZE G dd de+ZFd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LifespanReceiveScopeSendc                #       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	deed
eeee	  e
e
e
ee
 eeee
ef   eeee
ee
ef f   eee  ee ee
 ee
 ee
 eee
ef  eee  eeeeee f eeegeeeef f f  eeeg ef   eeeg ef   ee ee
 eee
ee
ef f  eee
ee
ef f  e
e
eeeeee
f ee
ef f  eee	  ee eeee
ef  eejge
f edd!ddZedddZee
ef dddZddddZe e!e"dd fddZ#edddddddddddddd	dddd	eeddeede
edeeeef f eee eeee
e$f   eee  ee
 ee
 e
eeeee
f ee
ef f  ee eee
  ee
 eee%e&f  eee%e&f  eeeeeeee e'f ee
 eee
ef  eejge
f ddddZ(edddddddddddddd	dddd	eeddeede
eee eeee
e$f   eee  ee
 ee
 e
eeeee
f ee
ef f  ee eee
  ee
 eee%e&f  eee%e&f  eeeeeee ee
 eee
ef  eejge
f ee)ge)f ddd Z*dHe
edef ee
 dd!d"d#Z+dIe
ee
 ee)ge)f d$d%d&Z,dddddd	eedeed'	ej-e
eeee
e$f   eee  eeeee
f ee
ef f  ee eee eee	  eejge
f dd(d)d*Z.eddddddddddddd	dddd	eedddeed+e
eee eeee
e$f   eee  ee
 ee
 e
eeeee
f ee
ef f  ee ee
 eee%e&f  eee%e&f  eeeeeee ee
 eee	  eee
ef  eejge
f ee)ge)f d,d-d.Z/eddddddddddddd	dddd	eedddeed+e
eee eeee
e$f   eee  ee
 ee
 e
eeeee
f ee
ef f  ee ee
 eee%e&f  eee%e&f  eeeeeee ee
 eee	  eee
ef  eejge
f ee)ge)f d,d/d0Z0eddddddddddddd	dddd	eedddeed+e
eee eeee
e$f   eee  ee
 ee
 e
eeeee
f ee
ef f  ee ee
 eee%e&f  eee%e&f  eeeeeee ee
 eee	  eee
ef  eejge
f ee)ge)f d,d1d2Z1eddddddddddddd	dddd	eedddeed+e
eee eeee
e$f   eee  ee
 ee
 e
eeeee
f ee
ef f  ee ee
 eee%e&f  eee%e&f  eeeeeee ee
 eee	  eee
ef  eejge
f ee)ge)f d,d3d4Z2eddddddddddddd	dddd	eedddeed+e
eee eeee
e$f   eee  ee
 ee
 e
eeeee
f ee
ef f  ee ee
 eee%e&f  eee%e&f  eeeeeee ee
 eee	  eee
ef  eejge
f ee)ge)f d,d5d6Z3eddddddddddddd	dddd	eedddeed+e
eee eeee
e$f   eee  ee
 ee
 e
eeeee
f ee
ef f  ee ee
 eee%e&f  eee%e&f  eeeeeee ee
 eee	  eee
ef  eejge
f ee)ge)f d,d7d8Z4eddddddddddddd	dddd	eedddeed+e
eee eeee
e$f   eee  ee
 ee
 e
eeeee
f ee
ef f  ee ee
 eee%e&f  eee%e&f  eeeeeee ee
 eee	  eee
ef  eejge
f ee)ge)f d,d9d:Z5eddddddddddddd	dddd	eedddeed+e
eee eeee
e$f   eee  ee
 ee
 e
eeeee
f ee
ef f  ee ee
 eee%e&f  eee%e&f  eeeeeee ee
 eee	  eee
ef  eejge
f ee)ge)f d,d;d<Z6dJe
ee
df ee)ge)f d$d=d>Z7e
ee)ge)f d?d@dAZ8e
ee)ge)f dBdCdDZ9eeee f ee)ge)f dEdFdGZ:  Z;S )K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lifespan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_function)!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   rP   extrareturnc          !      K   s>  || _ || _|| _|| _|| _|| _|| _|| _|| _|| _	|| _
|| _|| _|| _|| _|p`g | _| | _d| _d | _| jr| jsJ d| jsJ d|rtd |p|| _t | _i | _tj|| ||||
|	|||||d| _|d u ri nt|| _| jtt  | jt!t" |d u r"g 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/)r3   Zdependency_overrides_providerrB   rC   rD   r;   r:   rL   rM   rN   rK   rP   )'r2   r4   r5   r6   rE   rF   rG   r7   r8   rJ   r<   r=   r>   r?   rO   r9   rQ   openapi_versionopenapi_schemar   warningrI   r    stateZdependency_overridesr   	APIRouterrouterdictrA   
setdefaultr!   r   r   r   listuser_middlewareZmiddleware_stacksetup)!selfr2   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   rP   rQ    r_   ]/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/fastapi/applications.py__init__0   sj    +

zFastAPI.__init__)rR   c           
      C   s   | j }d }i }| j D ]"\}}|dtfv r2|}q|||< qtt||dg| j tt||dttg }| j	}t
|D ]\}}	|f d|i|	}qv|S )Ni  )handlerr2   )handlersr2   app)r2   rA   items	Exceptionr"   r$   r\   r%   r   rX   reversed)
r^   r2   Zerror_handlerrA   keyvaluer@   rd   clsoptionsr_   r_   r`   build_middleware_stack   s*    
zFastAPI.build_middleware_stackc                 C   s>   | j s8t| j| j| j| j| j| j| j| j	| j
| jd
| _ | j S )N)
r4   r6   rS   r5   rE   rF   rG   r3   tagsr9   )rT   r   r4   r6   rS   r5   rE   rF   rG   r3   r8   r9   r^   r_   r_   r`   openapi   s    zFastAPI.openapic                    s    j rLdd  jD }dd |D ttd fdd} j j |dd	  j r jrttd fd
d} j j|dd	  jrttddd} j j|dd	  j r؈ jrttd fdd} j j|dd	 d S )Nc                 s   s   | ]}| d V  qdS )urlN)get).0Zserver_datar_   r_   r`   	<genexpr>       z FastAPI.setup.<locals>.<genexpr>c                 S   s   h | ]}|r|qS r_   r_   )rr   rp   r_   r_   r`   	<setcomp>   rt   z FastAPI.setup.<locals>.<setcomp>)reqrR   c                    sN   | j ddd}|vrB|rB jrB jdd|i | t  S )NrI   r1   /r   rp   )	scoperq   rstriprJ   r9   insertaddr(   ro   )rv   rI   r^   Zserver_urlsr_   r`   ro      s    

zFastAPI.setup.<locals>.openapiF)rN   c                    sL   | j ddd}| j } j}|r0|| }t| jd | j jdS )NrI   r1   rw   z - Swagger UI)r7   r4   oauth2_redirect_urlZ
init_oauthrO   )	rx   rq   ry   r7   r>   r   r4   r?   rO   )rv   rI   r7   r}   rn   r_   r`   swagger_ui_html   s    
z&FastAPI.setup.<locals>.swagger_ui_htmlc                    s   t  S N)r   )rv   r_   r_   r`   swagger_ui_redirect   s    z*FastAPI.setup.<locals>.swagger_ui_redirectc                    s0   | j ddd}| j }t| jd dS )NrI   r1   rw   z - ReDoc)r7   r4   )rx   rq   ry   r7   r   r4   )rv   rI   r7   rn   r_   r`   
redoc_html  s
    

z!FastAPI.setup.<locals>.redoc_html)	r7   r9   r&   r(   Z	add_router<   r'   r>   r=   )r^   urlsro   r~   r   r   r_   r|   r`   r]      s$    zFastAPI.setup)rx   receivesendrR   c                    s*   | j r| j |d< t |||I d H  d S )NrI   )rI   super__call__)r^   rx   r   r   	__class__r_   r`   r     s    
zFastAPI.__call__zSuccessful Responseresponse_modelstatus_coderm   r:   summaryr5   response_descriptionrK   rM   methodsoperation_idresponse_model_includeresponse_model_excluderesponse_model_by_aliasresponse_model_exclude_unsetresponse_model_exclude_defaultsresponse_model_exclude_nonerN   response_classnameopenapi_extrarP   .)pathendpointr   r   rm   r:   r   r5   r   rK   rM   r   r   r   r   r   r   r   r   rN   r   r   r   rP   rR   c                C   s@   | j j|||||||||	|
||||||||||||||d d S )N)r   r   r   rm   r:   r   r5   r   rK   rM   r   r   r   r   r   r   r   r   rN   r   r   r   rP   rX   add_api_route)r^   r   r   r   r   rm   r:   r   r5   r   rK   rM   r   r   r   r   r   r   r   r   rN   r   r   r   rP   r_   r_   r`   r     s4     zFastAPI.add_api_route)r   r   r   rm   r:   r   r5   r   rK   rM   r   r   r   r   r   r   r   r   rN   r   r   r   rP   rR   c                   sF   t t d 	
fdd}|S )NfuncrR   c                    s@   j j	|  
d | S )Nr   r   r   r:   rM   r5   rP   rN   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rK   r^   r   r   rm   r_   r`   	decoratork  s6    z$FastAPI.api_route.<locals>.decoratorr   )r^   r   r   r   rm   r:   r   r5   r   rK   rM   r   r   r   r   r   r   r   r   rN   r   r   r   rP   r   r_   r   r`   	api_routeN  s    BzFastAPI.api_route)r   r   r   rR   c                 C   s   | j j|||d d S N)r   )rX   add_api_websocket_route)r^   r   r   r   r_   r_   r`   r     s    zFastAPI.add_api_websocket_route)r   r   rR   c                    s   t t d fdd}|S )Nr   c                    s   j |  d | S r   )r   r   r   r   r^   r_   r`   r     s    z$FastAPI.websocket.<locals>.decoratorr   r^   r   r   r   r_   r   r`   	websocket  s    zFastAPI.websocket	prefixrm   r:   rK   rM   rN   r;   rL   rP   )rX   r   rm   r:   rK   rM   rN   r;   rL   rP   rR   c       	         C   s$   | j j|||||||||	|
d
 d S )Nr   )rX   include_router)r^   rX   r   rm   r:   rK   rM   rN   r;   rL   rP   r_   r_   r`   r     s    zFastAPI.include_routerr   r   rm   r:   r   r5   r   rK   rM   r   r   r   r   r   r   r   rN   r   r   rL   r   rP   )r   r   r   rm   r:   r   r5   r   rK   rM   r   r   r   r   r   r   r   rN   r   r   rL   r   rP   rR   c                C   s:   | j j|||||||||	|
|||||||||||||dS Nr   )rX   rq   r^   r   r   r   rm   r:   r   r5   r   rK   rM   r   r   r   r   r   r   r   rN   r   r   rL   r   rP   r_   r_   r`   rq     s2    zFastAPI.getc                C   s:   | j j|||||||||	|
|||||||||||||dS r   )rX   putr   r_   r_   r`   r     s2    zFastAPI.putc                C   s:   | j j|||||||||	|
|||||||||||||dS r   )rX   postr   r_   r_   r`   r   #  s2    zFastAPI.postc                C   s:   | j j|||||||||	|
|||||||||||||dS r   )rX   deleter   r_   r_   r`   r   Z  s2    zFastAPI.deletec                C   s:   | j j|||||||||	|
|||||||||||||dS r   )rX   rk   r   r_   r_   r`   rk     s2    zFastAPI.optionsc                C   s:   | j j|||||||||	|
|||||||||||||dS r   )rX   headr   r_   r_   r`   r     s2    zFastAPI.headc                C   s:   | j j|||||||||	|
|||||||||||||dS r   )rX   patchr   r_   r_   r`   r     s2    zFastAPI.patchc                C   s:   | j j|||||||||	|
|||||||||||||dS r   )rX   tracer   r_   r_   r`   r   6  s2    zFastAPI.tracec                    s   t t d fdd}|S )Nr   c                    s   j j|  d | S r   )rX   Zadd_websocket_router   r   r_   r`   r   p  s    z*FastAPI.websocket_route.<locals>.decoratorr   r   r_   r   r`   websocket_routem  s    zFastAPI.websocket_route)
event_typerR   c                 C   s   | j |S r   )rX   on_event)r^   r   r_   r_   r`   r   v  s    zFastAPI.on_event)middleware_typerR   c                    s   t t d fdd}|S )Nr   c                    s    j t| d | S )N)dispatch)Zadd_middlewarer#   r   rn   r_   r`   r   ~  s    z%FastAPI.middleware.<locals>.decoratorr   )r^   r   r   r_   rn   r`   r@   {  s    zFastAPI.middleware)exc_class_or_status_coderR   c                    s   t t d fdd}|S )Nr   c                    s     |  | S r   )Zadd_exception_handlerr   r   r^   r_   r`   r     s    z,FastAPI.exception_handler.<locals>.decoratorr   )r^   r   r   r_   r   r`   exception_handler  s    zFastAPI.exception_handler)N)N)N)<__name__
__module____qualname__r   r(   r   boolr	   r   r*   strr   r   r   r
   r   r   r)   r"   intrf   r   r&   r   r,   r   ZAPIRoutera   r+   rl   ro   r]   r.   r-   r/   r   r   r   r   r   r   r   r   r   r   rW   r   rq   r   r   r   rk   r   r   r   r   r   r@   r   __classcell__r_   r_   r   r`   r0   /   s  



h15


?

=  

!

;

;

;

;

;

;

;

8 

r0   N)Genumr   typingr   r   r   r   r   r   r	   r
   r   r   Zfastapir   Zfastapi.datastructuresr   r   Zfastapi.encodersr   r   Zfastapi.exception_handlersr   r   Zfastapi.exceptionsr   Zfastapi.loggerr   Z!fastapi.middleware.asyncexitstackr   Zfastapi.openapi.docsr   r   r   Zfastapi.openapi.utilsr   Zfastapi.paramsr   Zfastapi.typesr   Zfastapi.utilsr   Zstarlette.applicationsr   Zstarlette.datastructuresr    Zstarlette.exceptionsr!   Zstarlette.middlewarer"   Zstarlette.middleware.baser#   Zstarlette.middleware.errorsr$   Zstarlette.middleware.exceptionsr%   Zstarlette.requestsr&   Zstarlette.responsesr'   r(   r)   Zstarlette.routingr*   Zstarlette.typesr+   r,   r-   r.   r/   r0   r_   r_   r_   r`   <module>   s2   0