o
    ߭h                     @   s~   d dl 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mZ d dlmZmZmZmZ d dlmZ G dd	 d	ZdS )
    N)ExceptionHandlersStatusHandlerswrap_app_handling_exceptions)HTTPExceptionWebSocketException)Request)PlainTextResponseResponse)ASGIAppReceiveScopeSend)	WebSocketc                
   @   s   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dZd	ejeeje
 f d
eje	e
gef ddfddZdedededdfddZde	de
defddZdede
ddfddZdS )ExceptionMiddlewareNFapphandlersdebugreturnc                 C   sR   || _ || _i | _t| jt| ji| _|d ur%| D ]\}}| 	|| qd S d S N)
r   r   _status_handlersr   http_exceptionr   websocket_exception_exception_handlersitemsadd_exception_handler)selfr   r   r   keyvalue r   d/var/www/html/stock_analysis/be/venv/lib/python3.10/site-packages/starlette/middleware/exceptions.py__init__   s   zExceptionMiddleware.__init__exc_class_or_status_codehandlerc                 C   s4   t |tr|| j|< d S t|tsJ || j|< d S r   )
isinstanceintr   
issubclass	Exceptionr   )r   r!   r"   r   r   r   r   #   s   
z)ExceptionMiddleware.add_exception_handlerscopereceivesendc                    sz   |d dvr|  |||I d H  d S | j| jf|d< |d dkr(t|||}nt|||}t| j ||||I d H  d S )Ntype)http	websocketzstarlette.exception_handlersr+   )r   r   r   r   r   r   )r   r'   r(   r)   connr   r   r   __call__.   s   zExceptionMiddleware.__call__requestexcc                 C   s<   t |tsJ |jdv rt|j|jdS t|j|j|jdS )N>   0     )status_codeheaders)r#   r   r3   r	   r4   r   detail)r   r/   r0   r   r   r   r   @   s   
z"ExceptionMiddleware.http_exceptionr,   c                    s,   t |tsJ |j|j|jdI d H  d S )N)codereason)r#   r   closer6   r7   )r   r,   r0   r   r   r   r   H   s   z'ExceptionMiddleware.websocket_exception)NF)__name__
__module____qualname__r
   typingOptionalMappingAnyCallabler   r&   r	   boolr    Unionr$   Typer   r   r   r   r.   r   r   r   r   r   r   r   r      s0    

r   )r<   starlette._exception_handlerr   r   r   starlette.exceptionsr   r   starlette.requestsr   starlette.responsesr   r	   starlette.typesr
   r   r   r   starlette.websocketsr   r   r   r   r   r   <module>   s    