
    Bi4                         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dS )    N)Flaskjsonifyrequest)HTTPException)envc            
       X    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	dS )ErrorHandleru   에러 처리 클래스appc                    |                      d          d             }|                      d          d             }|                      d          d             }|                      d          d             }|                      d	          d
             }|                      d          d             }|                      t                    d             }dS )u   에러 핸들러 등록  c                 V    t                               dddt          |                     S )NBAD_REQUESTu   잘못된 요청입니다.r   r	   _create_error_responsestrerrors    Q/var/www/html/web/mlink/mlink_AI_Server/mlink-backend/src/utils/error_handlers.pybad_requestz9ErrorHandler.register_error_handlers.<locals>.bad_request   s,    66,E

	        c                 V    t                               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                 V    t                               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                 V    t                               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                 V    t                               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                 V    t                               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                              dddt          j        d          dk    rt          |           n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   si    MISZZIITXYYYY66"@!gm44EEE


4	  r   N)errorhandler	Exception)r
   r   r   r   r"   r&   r*   r2   s           r   register_error_handlersz$ErrorHandler.register_error_handlers
   s2    
		#			 	 
		 
		#			 	 
		 
		#			 	 
		 
		#			 	 
		 
		#			 	 
		 
		#			 	 
		 
		)	$	$	 	 
%	$	 	 	r   N
error_codemessagestatus_codedetailsc                    d| |t                                                                           t          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   s     ""%\\^^5577%o11.)LL	 
 
  	3sw}-->>+2HWi(x  +--r   N)
__name__
__module____qualname____doc__staticmethodr   r5   r   intr    r   r   r	   r	      s        !!AU A A 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 기본 예외 클래스Nr'   r7   r6   r8   c                     || _         |pd| _        || _        t                                          | j                    d S )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                 N    t                                          |dd           d S )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   sJ        !!; ; ; ; ; ; ; ; ; ; ;r   rX   c                   (     e Zd ZdZdef fdZ xZS )AuthenticationErroru   인증 오류r7   c                 N    t                                          |dd           d S )NAUTHENTICATION_ERRORr   r[   r\   s     r   rR   zAuthenticationError.__init__p   s&    "8#>>>>>r   r]   rV   s   @r   r_   r_   n   sJ        ? ? ? ? ? ? ? ? ? ? ?r   r_   c                   (     e Zd ZdZdef fdZ xZS )AuthorizationErroru   권한 오류r7   c                 N    t                                          |dd           d S )NAUTHORIZATION_ERRORr   r[   r\   s     r   rR   zAuthorizationError.__init__u   s&    "7=====r   r]   rV   s   @r   rc   rc   s   sJ        > > > > > > > > > > >r   rc   c                   (     e Zd ZdZdef fdZ xZS )ResourceNotFoundErroru   리소스 없음 오류r7   c                 N    t                                          |dd           d S )NRESOURCE_NOT_FOUNDr   r[   r\   s     r   rR   zResourceNotFoundError.__init__z   s&    "6<<<<<r   r]   rV   s   @r   rg   rg   x   sJ        !!= = = = = = = = = = =r   rg   c                   .     e Zd ZdZddedef fdZ xZS )ExternalAPIErroru   외부 API 오류Nr7   servicec                 \    t                                          |dd           || _        d S )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   }   sV          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      s    ) ) ) ) ) ) ) ) ) ) - - - - - - % % % % % %W. W. W. W. W. W. W. W.t' ' ' ' ' ' ' '; ; ; ; ;j ; ; ;
? ? ? ? ?* ? ? ?
> > > > > > > >
= = = = =J = = =
    z     r   