o
    㥵iN	                     @  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ej f ZG dd dee ZdS )    )annotationsN)
HTTPStatus)	Annotated   )ExceptionMiddlewareBaseHTTPExceptionRequestValidationError)AsyncViewType   )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               
     sX   z  I d H W S  t y+ }  z| }|d u r || I d H 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/asgi/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                   sH   | 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                   sP   |j dkrtdd}| |}|d u rtd||I d H 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Any	Awaitabler   r   r   r   r   r   <module>   s    