
    2YhD                         d dl mZmZmZmZ d dlmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ  G d de      Zd	ed
edefdZd	ed
edefdZd
edeee   ef   fdZd	ed
edefdZy)    )DictListTupleUnion)HTTPExceptionRequestValidationError)status)Request)JSONResponse)ErrorResponseModelc            	       @    e Zd Z	 	 d	dedeeef   dedefdZdefdZ	y)
APIExceptionmoduleerrorstatus_codemessagec                 <    || _         || _        || _        || _        y N)r   r   r   r   )selfr   r   r   r   s        M/var/www/html/wine-match-dev/backend/winematch-backend/src/core/exceptions.py__init__zAPIException.__init__   s!     
&    returnc                     | j                   S r   )r   )r   s    r   __str__zAPIException.__str__   s    ||r   N)i  zSomething went wrong!)
__name__
__module____qualname__strr   r   r   intr   r    r   r   r   r      sJ    
 .

 T4Z 
 	

 
 r   r   requestexcr   c                    K   |j                   }t        |j                  ||j                        }t	        ||j                               S w)zmCustom error handler for all API errors

    Maintains uniform response structure throughout application
    )r   r   r   r   content)r   r   r   r   r   
model_dumpr"   r#   coder   s       r   APIErrorHandlerr*      s=     
 ??DSYYD#++VED%2B2B2DEE   A
Ac                    K   |j                   }t        ||j                  |j                        }t	        ||j                               S w)z:This is obsolete. Planning to remove this from applicationr   r   r   r%   )r   r   __dict__detailr   r'   r(   s       r   HttpErrorHandlerr0   (   s;     ??D4s||SZZXED%2B2B2DEEr+   c                    g }d}| j                         D ]  }|j                  dg       d   }|j                  d|      j                  dt        |            j                  dt        |            j                  dt        |            }|j	                  t        |      dj                  |j                  dg       D cg c]  }t        |       c}      j                  d	d
      |d       |} ||fS c c}w )zLParses validation errors of Pydantic schema (dto) into custom error responsezRequest validation failedlocmsgz
this valuevaluevalues.zbody. )namer2   r   )errorsgetreplacer   appendjoin)r#   parsed_errorslast_error_message_err
field_namefield_error_msgr2   s          r   parse_validation_errorrD   /   s     "M9

 -XXeR(,
HHU./W\3z?3WWc*o.WXs:/	 	 	JxxTXXeR5H IcS IJRRSZ\^_(	
 -!-" ,,, !Js   >C6c                    K   t         j                  }t        |      \  }}t        |||      }t	        ||j                               S w)zvREQUEST VALIDATION ERROR HANDLER

    Typically takes effect when a pydantic schema (dto) validation error occurs
    r-   r%   )r	   HTTP_422_UNPROCESSABLE_ENTITYrD   r   r   r'   )r"   r#   r)   r?   r@   r   s         r   ValidationErrorHandlerrG   H   sH     
 //D(>s(C%M%4}N`aED%2B2B2DEEs   AA
N)typingr   r   r   r   fastapi.exceptionsr   r   	starletter	   starlette.requestsr
   starlette.responsesr   src.utils.helpers.responser   	Exceptionr   r*   r0   r   rD   rG   r!   r   r   <module>rO      s    + + D  & , 99 $F7 F F, FFG F- FL F- 6 -5dS;Q -2F' F8N FS_ Fr   