
    df                          d dl 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mZmZmZmZ d dlmZ  G d	 d
      Zy)    N)is_async_callable)run_in_threadpool)HTTPExceptionWebSocketException)Request)PlainTextResponseResponse)ASGIAppMessageReceiveScopeSend)	WebSocketc            
          e Zd Z	 	 ddedej
                  ej                  ej                  ej                  e	e
gef   f      deddfdZdej                  eej                   e
   f   dej                  e	e
gef   ddfd	Zd
e
dej
                  ej                     fdZdedededdfdZde	d
edefdZded
eddfdZy)ExceptionMiddlewareNapphandlersdebugreturnc                     || _         || _        i | _        t        | j                  t
        | j                  i| _        |+|j                         D ]  \  }}| j                  ||        y y N)
r   r   _status_handlersr   http_exceptionr   websocket_exception_exception_handlersitemsadd_exception_handler)selfr   r   r   keyvalues         X/home/api-vastappli/venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py__init__zExceptionMiddleware.__init__   sv     
CE 4.. 8 8
 	  &nn. 7
U**367      exc_class_or_status_codehandlerc                     t        |t              r|| j                  |<   y t        |t              sJ || j
                  |<   y r   )
isinstanceintr   
issubclass	Exceptionr   )r   r$   r%   s      r!   r   z)ExceptionMiddleware.add_exception_handler"   s?    
 .4>ED!!":;6	BBAHD$$%=>r#   excc                 v    t        |      j                  D ]!  }|| j                  v s| j                  |   c S  y r   )type__mro__r   )r   r+   clss      r!   _lookup_exception_handlerz-ExceptionMiddleware._lookup_exception_handler-   sA     9$$ 	5Cd...//44	5 r#   scopereceivesendc                   K   |d   dvr| j                  ||       d {    y ddt        dd ffd}	 | j                  |||       d {    y 7 37 # t        $ r}d }t        |t              r%| j
                  j                  |j                        }|| j                  |      }||rd}t        |      ||d   dk(  rUt        ||	      }t        |      r |||       d {  7  }	nt        |||       d {  7  }	 |	|||       d {  7   nY|d   d
k(  rLt        ||      }
t        |      r ||
|       d {  7   nt        ||
|       d {  7   Y d }~y Y d }~y Y d }~y Y d }~y d }~ww xY ww)Nr-   )http	websocketFmessager   c                 F   K   | d   dk(  rd |        d {    y 7 w)Nr-   zhttp.response.startT )r7   response_startedr3   s    r!   senderz,ExceptionMiddleware.__call__.<locals>.sender<   s)      v"77#' w-s   !!z7Caught handled exception, but response already started.r5   )r2   r6   )r2   r3   )r   r   r*   r'   r   r   getstatus_coder0   RuntimeErrorr   r   r   r   )r   r1   r2   r3   r;   r+   r%   msgrequestresponser6   r:   s      `       @r!   __call__zExceptionMiddleware.__call__5   s    = 55((5'4000 	 ' 	 d 	 	E((5'6222 1 3 	EG#}-//33COOD88=	O"3'S0V}&!%9$W-%,Wc%:::H%6w%MMMHugv666v+-%eW4H	$W-!)S111+GYDDD 2 . 7-	Es   FAFA AA FA 
F$B
E=.C1/E=DE=D3E=EE=#E&$E=)F=FFr@   c                     |j                   dv r!t        |j                   |j                        S t        |j                  |j                   |j                        S )N>   0     )r=   headers)r=   r	   rF   r   detail)r   r@   r+   s      r!   r   z"ExceptionMiddleware.http_exceptionc   sC    ??j(MM JJCOOS[[
 	
r#   r6   c                 n   K   |j                  |j                  |j                         d {    y 7 w)N)codereason)closerI   rJ   )r   r6   r+   s      r!   r   z'ExceptionMiddleware.websocket_exceptionj   s&      oo388CJJo???s   +535)NF)__name__
__module____qualname__r
   typingOptionalMappingAnyCallabler   r*   r	   boolr"   Unionr(   Typer   r0   r   r   r   rB   r   r   r   r   r   r9   r#   r!   r   r      s9    77 //NN6::v7KX7U'VVW
7 7 
7*	I"(,,sFKK	4J/J"K	I '9!5x!?@	I 
		I		),EE ,EG ,E4 ,ED ,E\
g 
M 
h 
@"@);@	@r#   r   )rO   starlette._utilsr   starlette.concurrencyr   starlette.exceptionsr   r   starlette.requestsr   starlette.responsesr   r	   starlette.typesr
   r   r   r   r   starlette.websocketsr   r   r9   r#   r!   <module>r^      s.     . 3 B & ; B B *a@ a@r#   