U
    &%e3                     @   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mZ d dlmZ d dlmZmZ d dlmZ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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, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z<m=Z=m>Z> d dl?m@Z@ d dlAmBZBmCZCmDZDmEZEmFZF edddZGG dd de,ZHdS )    )Enum)Any	AwaitableCallable	CoroutineDictListOptionalSequenceTypeTypeVarUnion)routing)DefaultDefaultPlaceholder)http_exception_handler$request_validation_exception_handler.websocket_request_validation_exception_handler)RequestValidationErrorWebSocketRequestValidationError)logger)AsyncExitStackMiddleware)get_redoc_htmlget_swagger_ui_html#get_swagger_ui_oauth2_redirect_html)get_openapi)Depends)DecoratedCallableIncEx)generate_unique_id)	Starlette)State)HTTPException)
Middleware)BaseHTTPMiddleware)ServerErrorMiddleware)ExceptionMiddleware)Request)HTMLResponseJSONResponseResponse)	BaseRoute)ASGIAppLifespanReceiveScopeSendAppTypeFastAPI)boundc                (       s|  e Zd Zd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ddeedd
#eee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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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j ee eeeeef  eejgef e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' 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' 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+dJdd!eedef ee eee  dd"d#d$Z,dKdd!eee e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' 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' 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-d0d1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' 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-d2d3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' 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-d4d5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' 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-d6d7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' 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-d8d9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' 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;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' 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=Z6dLeeedf ee*ge*f d>d?d@Z7eee*ge*f dAdBdCZ8eee*ge*f dDdEdFZ9eeee f ee*ge*f dGdHdIZ:  Z;S )Mr2   FN z0.1.0z/openapi.jsonTz/docsz/redocz/docs/oauth2-redirect)#debugroutestitlesummarydescriptionversionopenapi_urlopenapi_tagsserversdependenciesdefault_response_classredirect_slashes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webhooks
deprecatedinclude_in_schemaswagger_ui_parametersgenerate_unique_id_functionseparate_input_output_schemas)&selfr5   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   rR   rS   rT   rU   rV   rW   extrareturnc       #   %      K   sj  || _ || _|| _|| _|| _|| _|| _|| _|| _|| _	|| _
|| _|| _|| _|| _|!| _|	pfg | _|#| _|$| _d| _d | _| jr| jstd| jstd|rtd |pt | _|p|| _t | _i | _tj||| |||||
||| ||"d| _|d kri nt || _!| j!"t#t$ | j!"t%t& | j!"t't( |d krNg nt)|| _*d | _+| ,  d S )Nz3.1.0z4A 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/)r6   r@   Zdependency_overrides_providerrG   rH   rI   r?   r>   rQ   rS   rT   rP   rV   )-r5   r7   r8   r9   r:   rJ   rK   rL   r;   r<   rO   rA   rB   rC   rD   rU   r=   rW   rY   openapi_versionopenapi_schemaAssertionErrorr   warningr   	APIRouterrR   rN   r!   stateZdependency_overridesrouterdictrF   
setdefaultr"   r   r   r   r   r   listuser_middlewareZmiddleware_stacksetup)%rX   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   rR   rS   rT   rU   rV   rW   rY    rg   S/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/fastapi/applications.py__init__3   s|    /

 zFastAPI.__init__)rZ   c           
      C   s   | j }d }i }| j D ]"\}}|dtfkr2|}q|||< qtt||dg| j tt||dttg }| j	}t
|D ]\}}	|f d|i|	}qv|S )Ni  )handlerr5   )handlersr5   app)r5   rF   items	Exceptionr#   r%   re   r&   r   ra   reversed)
rX   r5   Zerror_handlerrF   keyvaluerE   rl   clsoptionsrg   rg   rh   build_middleware_stack   s.    
  zFastAPI.build_middleware_stackc                 C   sL   | j sFt| j| j| j| j| j| j| j| j	| j
| jj
| j| j| jd| _ | j S )N)r7   r:   r[   r8   r9   rJ   rK   rL   r6   rR   tagsr=   rW   )r\   r   r7   r:   r[   r8   r9   rJ   rK   rL   r6   rR   r<   r=   rW   rX   rg   rg   rh   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_datarg   rg   rh   	<genexpr>   s     z FastAPI.setup.<locals>.<genexpr>c                 S   s   h | ]}|r|qS rg   rg   )rz   rx   rg   rg   rh   	<setcomp>   s      z FastAPI.setup.<locals>.<setcomp>)reqrZ   c                    sN   | j ddd}|krB|rB jrB jdd|i | t  S )NrN   r4   /r   rx   )	scopery   rstriprO   r=   insertaddr)   rw   )r}   rN   rX   Zserver_urlsrg   rh   rw      s    

zFastAPI.setup.<locals>.openapiF)rT   c                    sL   | j ddd}| j } j}|r0|| }t| jd | j jdS )NrN   r4   r~   z - Swagger UI)r;   r7   oauth2_redirect_urlZ
init_oauthrU   )	r   ry   r   r;   rC   r   r7   rD   rU   )r}   rN   r;   r   rv   rg   rh   swagger_ui_html   s    
z&FastAPI.setup.<locals>.swagger_ui_htmlc                    s   t  S N)r   )r}   rg   rg   rh   swagger_ui_redirect  s    z*FastAPI.setup.<locals>.swagger_ui_redirectc                    s0   | j ddd}| j }t| jd dS )NrN   r4   r~   z - ReDoc)r;   r7   )r   ry   r   r;   r   r7   )r}   rN   r;   rv   rg   rh   
redoc_html  s    
 z!FastAPI.setup.<locals>.redoc_html)	r;   r=   r'   r)   Z	add_routerA   r(   rC   rB   )rX   urlsrw   r   r   r   rg   r   rh   rf      s$    zFastAPI.setup)r   receivesendrZ   c                    s*   | j r| j |d< t |||I d H  d S )NrN   )rN   super__call__)rX   r   r   r   	__class__rg   rh   r   !  s    
zFastAPI.__call__zSuccessful Responseresponse_modelstatus_coderu   r>   r8   r9   response_descriptionrP   rS   methodsoperation_idresponse_model_includeresponse_model_excluderesponse_model_by_aliasresponse_model_exclude_unsetresponse_model_exclude_defaultsresponse_model_exclude_nonerT   response_classnameopenapi_extrarV   .)pathendpointr   r   ru   r>   r8   r9   r   rP   rS   r   r   r   r   r   r   r   r   rT   r   r   r   rV   rZ   c                C   s@   | j j|||||||||	|
||||||||||||||d d S )N)r   r   r   ru   r>   r8   r9   r   rP   rS   r   r   r   r   r   r   r   r   rT   r   r   r   rV   ra   add_api_route)rX   r   r   r   r   ru   r>   r8   r9   r   rP   rS   r   r   r   r   r   r   r   r   rT   r   r   r   rV   rg   rg   rh   r   &  s4     zFastAPI.add_api_route)r   r   r   ru   r>   r8   r9   r   rP   rS   r   r   r   r   r   r   r   r   rT   r   r   r   rV   rZ   c                   sF   t t d 	
fdd}|S )NfuncrZ   c                    s@   j j	|  
d | S )Nr   r   r   r>   rS   r9   rV   rT   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rP   rX   r   r8   ru   rg   rh   	decorator~  s6    z$FastAPI.api_route.<locals>.decoratorr   )rX   r   r   r   ru   r>   r8   r9   r   rP   rS   r   r   r   r   r   r   r   r   rT   r   r   r   rV   r   rg   r   rh   	api_routea  s    BzFastAPI.api_route)r>   )r   r   r   r>   rZ   c                C   s   | j j||||d d S N)r   r>   )ra   add_api_websocket_route)rX   r   r   r   r>   rg   rg   rh   r     s    zFastAPI.add_api_websocket_route)r   r   r>   rZ   c                   s   t t d fdd}|S )Nr   c                    s   j |  d | S r   )r   r   r>   r   r   rX   rg   rh   r     s    z$FastAPI.websocket.<locals>.decoratorr   )rX   r   r   r>   r   rg   r   rh   	websocket  s    	zFastAPI.websocket	prefixru   r>   rP   rS   rT   r?   rQ   rV   )ra   r   ru   r>   rP   rS   rT   r?   rQ   rV   rZ   c       	         C   s$   | j j|||||||||	|
d
 d S )Nr   )ra   include_router)rX   ra   r   ru   r>   rP   rS   rT   r?   rQ   rV   rg   rg   rh   r     s    zFastAPI.include_routerr   r   ru   r>   r8   r9   r   rP   rS   r   r   r   r   r   r   r   rT   r   r   rQ   r   rV   )r   r   r   ru   r>   r8   r9   r   rP   rS   r   r   r   r   r   r   r   rT   r   r   rQ   r   rV   rZ   c                C   s:   | j j|||||||||	|
|||||||||||||dS Nr   )ra   ry   rX   r   r   r   ru   r>   r8   r9   r   rP   rS   r   r   r   r   r   r   r   rT   r   r   rQ   r   rV   rg   rg   rh   ry     s2    zFastAPI.getc                C   s:   | j j|||||||||	|
|||||||||||||dS r   )ra   putr   rg   rg   rh   r     s2    zFastAPI.putc                C   s:   | j j|||||||||	|
|||||||||||||dS r   )ra   postr   rg   rg   rh   r   I  s2    zFastAPI.postc                C   s:   | j j|||||||||	|
|||||||||||||dS r   )ra   deleter   rg   rg   rh   r     s2    zFastAPI.deletec                C   s:   | j j|||||||||	|
|||||||||||||dS r   )ra   rs   r   rg   rg   rh   rs     s2    zFastAPI.optionsc                C   s:   | j j|||||||||	|
|||||||||||||dS r   )ra   headr   rg   rg   rh   r     s2    zFastAPI.headc                C   s:   | j j|||||||||	|
|||||||||||||dS r   )ra   patchr   rg   rg   rh   r   %  s2    zFastAPI.patchc                C   s:   | j j|||||||||	|
|||||||||||||dS r   )ra   tracer   rg   rg   rh   r   \  s2    zFastAPI.trace)r   r   rZ   c                    s   t t d fdd}|S )Nr   c                    s   j j|  d | S )N)r   )ra   Zadd_websocket_router   r   r   rX   rg   rh   r     s    z*FastAPI.websocket_route.<locals>.decoratorr   )rX   r   r   r   rg   r   rh   websocket_route  s    zFastAPI.websocket_route)
event_typerZ   c                 C   s   | j |S r   )ra   on_event)rX   r   rg   rg   rh   r     s    zFastAPI.on_event)middleware_typerZ   c                    s   t t d fdd}|S )Nr   c                    s    j t| d | S )N)dispatch)Zadd_middlewarer$   r   rv   rg   rh   r     s    z%FastAPI.middleware.<locals>.decoratorr   )rX   r   r   rg   rv   rh   rE     s    zFastAPI.middleware)exc_class_or_status_coderZ   c                    s   t t d fdd}|S )Nr   c                    s     |  | S r   )Zadd_exception_handlerr   r   rX   rg   rh   r     s    z,FastAPI.exception_handler.<locals>.decoratorr   )rX   r   r   rg   r   rh   exception_handler  s    zFastAPI.exception_handler)N)N)N)<__name__
__module____qualname__r   r)   r   r1   boolr	   r   r+   strr   r   r   r
   r   r   r*   r#   intrn   r   r'   r   r-   r   r_   ZAPIRouteri   r,   rt   rw   rf   r/   r.   r0   r   r   r   r   r   r   r   r   r   r   ry   r   r   r   rs   r   r   r   r   r   rE   r   __classcell__rg   rg   r   rh   r2   2   s  




u15


?

@ 

 


!

;

;

;

;

;

;

;

8  


N)Ienumr   typingr   r   r   r   r   r   r	   r
   r   r   r   Zfastapir   Zfastapi.datastructuresr   r   Zfastapi.exception_handlersr   r   r   Zfastapi.exceptionsr   r   Zfastapi.loggerr   Z!fastapi.middleware.asyncexitstackr   Zfastapi.openapi.docsr   r   r   Zfastapi.openapi.utilsr   Zfastapi.paramsr   Zfastapi.typesr   r   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/   r0   r1   r2   rg   rg   rg   rh   <module>   s2   4