
    i4                         d dl Z d dlmZmZmZ d dlmZ d dlmZ  G d d      Z	 G d de
      Z G d	 d
e      Z G d de      Z G d de      Z G d de      Z G d de      Zy)    N)Flaskjsonifyrequest)HTTPException)envc            
       J    e Zd ZdZedefd       Zed
dedededefd	       Z	y)ErrorHandleru   에러 처리 클래스appc                 N   | j                  d      d        }| j                  d      d        }| j                  d      d        }| j                  d      d        }| j                  d	      d
        }| j                  d      d        }| j                  t              d        }y)u   에러 핸들러 등록  c                 D    t         j                  dddt        |             S )NBAD_REQUESTu   잘못된 요청입니다.r   r	   _create_error_responsestrerrors    M/home/kdj-ubuntu1/mlink_AI_Server/mlink-backend/./src/utils/error_handlers.pybad_requestz9ErrorHandler.register_error_handlers.<locals>.bad_request   s%    66,E
	       c                 D    t         j                  dddt        |             S )NUNAUTHORIZEDu   인증이 필요합니다.r   r   r   s    r   unauthorizedz:ErrorHandler.register_error_handlers.<locals>.unauthorized   s%    66,E
	 r     c                 D    t         j                  dddt        |             S )N	FORBIDDENu    접근이 거부되었습니다.r   r   r   s    r   	forbiddenz7ErrorHandler.register_error_handlers.<locals>.forbidden    s%    662E
	 r     c                 D    t         j                  dddt        |             S )N	NOT_FOUNDu/   요청한 리소스를 찾을 수 없습니다.r   r   r   s    r   	not_foundz7ErrorHandler.register_error_handlers.<locals>.not_found)   s%    66AE
	 r     c                 D    t         j                  dddt        |             S )NRATE_LIMIT_EXCEEDEDuJ   요청 한도를 초과했습니다. 잠시 후 다시 시도해주세요.r#   r   r   s    r   rate_limit_exceededzAErrorHandler.register_error_handlers.<locals>.rate_limit_exceeded2   s%    66%\E
	 r     c                 D    t         j                  dddt        |             S )NINTERNAL_SERVER_ERRORu+   서버 내부 오류가 발생했습니다.r'   r   r   s    r   internal_server_errorzCErrorHandler.register_error_handlers.<locals>.internal_server_error;   s%    66'=E
	 r   c                     t        j                  dt        |        d       t        j	                  dddt        j                  d      dk(  rt        |             S d       S )	Nu    예상치 못한 오류 발생: T)exc_infoUNEXPECTED_ERRORu.   예상치 못한 오류가 발생했습니다.r'   ENVIRONMENTdevelopment)loggingr   r   r	   r   r   getr   s    r   handle_unexpected_errorzEErrorHandler.register_error_handlers.<locals>.handle_unexpected_errorD   sa    MM<SZLITXY66"@!ggm4EE
	  LP	 r   N)errorhandler	Exception)r
   r   r   r   r"   r&   r*   r2   s           r   register_error_handlersz$ErrorHandler.register_error_handlers
   s     
		#		 
	 
		#		 
	 
		#		 
	 
		#		 
	 
		#		 
	 
		#		 
	 
		)	$	 
%	r   N
error_codemessagestatus_codedetailsc                     d| |t         j                         j                         t        j                  j                  dd      dd}|r t        j
                  d      dk(  r||d   d	<   t        |      |fS )
u   에러 응답 생성FzX-Request-IDunknown)coder7   	timestamp
request_id)successr   r.   r/   r   r9   )datetimenow	isoformatr   headersr1   r   r   )r6   r7   r8   r9   responses        r   r   z#ErrorHandler._create_error_responseN   ss     ""%\\^557%oo11.)L	
 sww}->+2HWi(x +--r   N)
__name__
__module____qualname____doc__staticmethodr   r5   r   intr    r   r   r	   r	      sS    !AU A AF .3 . .3 .Y\ . .r   r	   c                   2     e Zd ZdZddededef fdZ xZS )
MLinkErroru   MLink 기본 예외 클래스r7   r6   r8   c                 j    || _         |xs d| _        || _        t        |   | j                          y )NUNKNOWN_ERROR)r7   r6   r8   super__init__)selfr7   r6   r8   	__class__s       r   rR   zMLinkError.__init__c   s/    $7&&r   )Nr'   )rF   rG   rH   rI   r   rK   rR   __classcell__rT   s   @r   rN   rN   a   s%    '' ' '# ' 'r   rN   c                   (     e Zd ZdZdef fdZ xZS )ValidationErroru   유효성 검사 오류r7   c                 (    t         |   |dd       y )NVALIDATION_ERRORr   rQ   rR   rS   r7   rT   s     r   rR   zValidationError.__init__k   s    "4c:r   rF   rG   rH   rI   r   rR   rU   rV   s   @r   rX   rX   i   s    !; ; ;r   rX   c                   (     e Zd ZdZdef fdZ xZS )AuthenticationErroru   인증 오류r7   c                 (    t         |   |dd       y )NAUTHENTICATION_ERRORr   r[   r\   s     r   rR   zAuthenticationError.__init__p   s    "8#>r   r]   rV   s   @r   r_   r_   n   s    ? ? ?r   r_   c                   (     e Zd ZdZdef fdZ xZS )AuthorizationErroru   권한 오류r7   c                 (    t         |   |dd       y )NAUTHORIZATION_ERRORr   r[   r\   s     r   rR   zAuthorizationError.__init__u   s    "7=r   r]   rV   s   @r   rc   rc   s   s    > > >r   rc   c                   (     e Zd ZdZdef fdZ xZS )ResourceNotFoundErroru   리소스 없음 오류r7   c                 (    t         |   |dd       y )NRESOURCE_NOT_FOUNDr   r[   r\   s     r   rR   zResourceNotFoundError.__init__z   s    "6<r   r]   rV   s   @r   rg   rg   x   s    != = =r   rg   c                   .     e Zd ZdZddedef fdZ xZS )ExternalAPIErroru   외부 API 오류r7   servicec                 6    t         |   |dd       || _        y )NEXTERNAL_API_ERRORi  )rQ   rR   rl   )rS   r7   rl   rT   s      r   rR   zExternalAPIError.__init__   s    "6<r   rE   r]   rV   s   @r   rk   rk   }   s     c  r   rk   )r0   flaskr   r   r   werkzeug.exceptionsr   src.config.env_loaderr   r	   r4   rN   rX   r_   rc   rg   rk   rL   r   r   <module>rr      si     ) ) - %W. W.t' ';j ;
?* ?
> >
=J =
z r   