o
    㥵i	                     @  s   d dl mZ d dl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mZ g dZejejgejf ZG dd dee ZdS )    )annotationsN)
HTTPStatus)	Annotated   )ExceptionMiddlewareBaseHTTPExceptionRequestValidationError)SyncViewType   )request)HttpResponseJSONResponsePlainTextResponse)ExceptionMiddlewareErrorHandlerTyper   r   c                   @  s8   e Zd ZdddZdddZedddZdddZdS )r   endpointr	   returnc                   s   d fdd}|S )Nr   
typing.Anyc               
     sJ   z  W S  t y$ }  z| }|d u r || W  Y d } ~ S d } ~ ww N)BaseExceptionlookup_handler)exchandlerr   self G/home/ubuntu/.local/lib/python3.10/site-packages/kui/wsgi/exceptions.pywrapper   s   
z-ExceptionMiddleware.__call__.<locals>.wrapper)r   r   r   )r   r   r   r   r   r   __call__   s   
zExceptionMiddleware.__call__Nonec                 C  s    |  t| j |  t| j d S r   )add_exception_handlerr   http_exceptionr   validation_error)r   r   r   r   _init_internal_handlers%   s   z+ExceptionMiddleware._init_internal_handlersr   r   r   c                 C  sF   | j dv rt| j | jdS tj| jd ur| jnt| j j| j | jS )N>   0     )status_codeheaders)	r&   r   r'   r   appresponse_convertercontentr   description)r   r   r   r   r!   )   s   


z"ExceptionMiddleware.http_exceptionr   OAnnotated[HttpResponse, JSONResponse[422, {}, RequestValidationError.schema()]]c                 C  sH   |j dkrtdd}| |}|d u rtd||S t| dddS )Npathi  )r&   z1No exception handler found for HTTPException(404)i  zapplication/json)r&   
media_type)in_r   r   RuntimeErrorr   json)r   r   r!   r   r   r   r   r"   6   s   



z$ExceptionMiddleware.validation_errorN)r   r	   r   r	   )r   r   )r   r   r   r   )r   r   r   r,   )__name__
__module____qualname__r   r#   staticmethodr!   r"   r   r   r   r   r      s    

r   )
__future__r   typinghttpr   typing_extensionsr   
exceptionsr   r   r   routingr	   requestsr   	responsesr   r   r   __all__CallableAnyr   r   r   r   r   r   <module>   s    