+
    5)iJ                     L    R t ^ RIHtHtHtHt ^ RIHt ^ RIt ! R R]	4      t
R# )z
Laravel-style validation exception for Flask API with Pydantic
Similar to Laravel's ValidationException for consistent error handling
)DictListAnyOptional)ValidationErrorNc                     a a ] tR t^t oRtRV3R lV 3R lllt]RV3R lR ll4       t]RV3R lR ll4       tV3R lR	 lt	V3R
 lR lt
V3R lR ltV3R lR ltV3R lR ltV3R lR ltV3R lR ltRtVtV ;t# )ValidationExceptionz
Laravel-style validation exception that converts Pydantic validation errors
to Laravel's format for consistent API responses.
c                R   < V ^8  d   QhRS[ S[S[S[,          3,          RS[RS[/# )   errorsmessagestatus_code)r   strr   int)format__classdict__s   "PD:\Projects\python\client-ideal-oms_pyapi\app\exceptions\validation_exception.py__annotate__ ValidationException.__annotate__   s0     ' 'tCcN3 'c 'ps '    c                ^   < Wn         W n        W0n        \        SV `  V P                  4       R# )z
Initialize ValidationException

Args:
    errors: Dictionary of field validation errors
    message: Main error message
    status_code: HTTP status code (default: 422)
N)r   r   r   super__init__)selfr   r   r   	__class__s   &&&&r   r   ValidationException.__init__   s&     &&r   c                *   < V ^8  d   QhRS[ RS[RR/# )r
   validation_errorr   returnr   )r   r   )r   r   s   "r   r   r       s'     0$ 0$? 0$S 0$  vK 0$r   c                z   / pVP                  4        EF  pRP                  R VR,           4       4      pVP                  RR4      pVP                  RR4      pVR8X  d   R	pEM*VR
8X  d   TpEMVR8X  d   VP                  RR4      pRV R2pMVR9   dJ   VP                  R/ 4      P                  RVP                  R/ 4      P                  RR4      4      p	RV	 R2pMVR9   dJ   VP                  R/ 4      P                  RVP                  R/ 4      P                  RR4      4      p	RV	 R2pM_VR8X  d*   VP                  R/ 4      P                  RR4      p
RV
 R2pM/VR8X  d)   VP                  R/ 4      P                  RR4      pRV R2pWS9  d   . W5&   W5,          P                  V4       EK  	  V ! W24      # )z
Convert Pydantic ValidationError to Laravel-style ValidationException

Args:
    validation_error: Pydantic ValidationError instance
    message: Custom error message

Returns:
    ValidationException instance
.c              3   8   "   T F  p\        V4      x  K  	  R # 5i)Nr   ).0locs   & r   	<genexpr>:ValidationException.from_pydantic_error.<locals>.<genexpr>/   s     !Cls#c((ls   r$   msgzValidation failedtype missingzThis field is required.value_error
type_error
input_typezvalid valuezThis field must be a valid ctxgtgez This field must be greater than ltlezThis field must be less than string_too_short
min_lengthzThis field must be at least z characters.string_too_long
max_lengthzThis field must not exceed )greater_thangreater_than_equal)	less_thanless_than_equal)r   joingetappend)clsr   r   r   error
field_path	error_msg
error_typeexpected_typelimitr4   r6   s   &&&         r   from_pydantic_error'ValidationException.from_pydantic_error   s    %,,.E!CeEl!CCJ 		%)<=I 62.JY&5	},%	|+ %		, F9-J	EE		%,00uyy7K7O7OPTVX7YZ>ugQG	??		%,00uyy7K7O7OPTVX7YZ;E7!D	11"YYub155lBG
::,lS	00"YYub155lBG
9*\R	 '%'"%%i0C /F 6##r   c                P   < V ^8  d   QhRS[ S[S[S[,          3,          RS[RR/# )r
   r   r   r   r   )r   r   r   )r   r   s   "r   r   r   S   s4     $ $S$s)^(< $s $  pE $r   c                    V ! W4      # )z
Create ValidationException from custom error dictionary

Args:
    errors: Dictionary of field errors
    message: Main error message

Returns:
    ValidationException instance
 )r>   r   r   s   &&&r   from_custom_errors&ValidationException.from_custom_errorsR   s     6##r   c                    < V ^8  d   QhRS[ /# r
   r   )bool)r   r   s   "r   r   r   `   s     ! !D !r   c                ,    \        V P                  4      # )z!Check if exception has any errors)rN   r   r   s   &r   
has_errorsValidationException.has_errors`   s    DKK  r   c                6   < V ^8  d   QhRS[ RS[S[ ,          /# )r
   fieldr   )r   r   )r   r   s   "r   r   r   d   s     * *# *$s) *r   c                :    V P                   P                  V. 4      # )zGet errors for a specific field)r   r<   )r   rT   s   &&r   get_errors_for_field(ValidationException.get_errors_for_fieldd   s    {{ub))r   c                *   < V ^8  d   QhRS[ RS[ RR/# )r
   rT   r?   r   Nr"   )r   r   s   "r   r   r   h   s"     ) )s )3 )4 )r   c                    WP                   9  d   . V P                   V&   V P                   V,          P                  V4       R# )z!Add an error for a specific fieldN)r   r=   )r   rT   r?   s   &&&r   	add_errorValidationException.add_errorh   s1    #!#DKKE!!%(r   c                6   < V ^8  d   QhRS[ S[S[3,          /# rM   )r   r   r   )r   r   s   "r   r   r   n   s     
 
c3h 
r   c                6    RV P                   RV P                  /# )z6Convert exception to dictionary for JSON serializationr   r   r   r   rP   s   &r   to_dictValidationException.to_dictn   s      t||dkk
 	
r   c                    < V ^8  d   QhRS[ /# rM   r"   )r   r   s   "r   r   r   u   s     > > >r   c                N    \         P                  ! V P                  4       RR7      # )z Convert exception to JSON stringF)ensure_ascii)jsondumpsr_   rP   s   &r   to_jsonValidationException.to_jsonu   s    zz$,,.u==r   c                    < V ^8  d   QhRS[ /# rM   r"   )r   r   s   "r   r   r   y   s     N N Nr   c                :    R V P                    RV P                   2# )zValidationException: z - Errors: r^   rP   s   &r   __str__ValidationException.__str__y   s    &t||nK}MMr   c                    < V ^8  d   QhRS[ /# rM   r"   )r   r   s   "r   r   r   |   s     v v# vr   c                V    R V P                    RV P                   RV P                   R2# )zValidationException(message='z
', errors=z, status_code=))r   r   r   rP   s   &r   __repr__ValidationException.__repr__|   s/    .t||nJt{{mSabfbrbrasstuur   )r   r   r   )The given data was invalid.i  )rq   )__name__
__module____qualname____firstlineno____doc__r   classmethodrE   rJ   rQ   rV   rZ   r_   rf   rj   ro   __static_attributes____classdictcell____classcell__)r   r   s   @@r   r   r      s     
' ' 0$ 0$ 0$d $ $ $! !* *) )
 
> >N Nv v vr   r   )rv   typingr   r   r   r   pydanticr   rd   	Exceptionr   rI   r   r   <module>r~      s(   
 - , $ rv) rvr   