
    i                     (   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 d dlmZmZmZ d dlmZ d d	lmZ d d
lmZ  ee          Zdededz  fdZdededefdZ	 ddededededz  ddf
dZdededefdZdededefdZdededefdZ dS )    N)Request)JSONResponse)HTTPExceptionRequestValidationError)status)REQUEST_ID_HEADER)
is_dev_envis_prod_envis_staging_env)error_payload)
get_logger)notify_errorrequestreturnc                 t    t          | j        dd           }|r|S | j                            t                    S )N
request_id)getattrstateheadersgetr   )r   r   s     /code/app/handlers/errors.py_get_request_idr      s:    d;;J ?0111    responsec                 F    t          |           }|r||j        t          <   |S N)r   r   r   )r   r   r   s      r   _with_request_id_headerr      s*     ))J 9.8*+Or   messagestatus_codeerrorc                 j  K   |rt          |          j        nd }|rt          |          nd }|rt          j                    nd }|p|}|||| j        | j        j        t          |           | j	        
                    d          | j        r| j        j        nd |||d}t          |           d {V  d S )Nz
user-agent)titler   r   methodpathr   
user_agent	client_ip
error_nameerror_messageerror_stack)type__name__str	traceback
format_excr#   urlr$   r   r   r   clienthostr   )	r   r   r   r    r'   r(   r)   slack_messagecontexts	            r   _notify_slackr4      s       */8e%%DJ"'1CJJJTM,1;)&(((tK!,WM ". %g..o)),77,3NDW^(( &" G w

r   excc                 :  K   t          |j                  }t                      st                      r|j        dk    rd}|j        dk    rt          | ||j        |           d {V  t          |          }t          |j        |          }t          | |          S )Ni  Internal Server Errorr   content)	r,   detailr
   r   r   r4   r   r   r   )r   r5   r   payloadr   s        r   http_exception_handlerr<   7   s      #*ooG *)) *s#/E/E)
#GWcosCCCCCCCCCG$$GIIIH"7H555r   c                 @  K   d }t                      rdt          j                    i}t                              d|           t          | dt          j        |           d {V  t          d|          }t          t          j        |          }t          | |          S )NstackzUnhandled exception: %sr7   r8   )r	   r-   r.   logger	exceptionr4   r   HTTP_500_INTERNAL_SERVER_ERRORr   r   r   )r   r5   error_detailsr;   r   s        r   unhandled_exception_handlerrC   C   s      M|| : )"6"8"89
.444
(&*OQT         3]CCG97  H #7H555r   c                    K   t          dd|                                i          }t          t          j        |          }t          | |          S )NzValidation Errorerrorsr8   )r   rE   r   r   HTTP_422_UNPROCESSABLE_ENTITYr   )r   r5   r;   r   s       r   $request_validation_exception_handlerrG   R   sZ       	3::<<  G 8'  H #7H555r   r   )!r-   fastapir   fastapi.responsesr   fastapi.exceptionsr   r   	starletter   app.middleware.request_idr   app.utils.envr	   r
   r   app.utils.responser   app.utils.loggerr   )app.services.notifications.slack_notifierr   r+   r?   r,   r   r   int	Exceptionr4   r<   rC   rG    r   r   <module>rT      s             * * * * * * D D D D D D D D       7 7 7 7 7 7 A A A A A A A A A A , , , , , , ' ' ' ' ' ' B B B B B B	H		2W 2t 2 2 2 2W       #	        t	 
 
       4	6' 	6 	6, 	6 	6 	6 	66w 6Y 6< 6 6 6 6
6
61
6
6 
6 
6 
6 
6 
6r   