+
    jh8                         ^ RI HtHtHtHtHt ^ RIHtHtH	t	H
t
Ht ^ RIt^ RIt^ RIHt ^ RIHt ]P"                  ! ]4      t ! R R4      tRR R	 lltRR
 R lltRR R lltRR R lltR R ltR# )    )jsonifyResponsegrequestcurrent_app)DictAnyOptionalUnionListN)datetimewrapsc                     a  ] tR t^
t o Rt/ tRt]R2V 3R lR ll4       t]R2V 3R lR ll4       t	]R3V 3R lR	 ll4       t
]R3V 3R
 lR ll4       t]R3V 3R lR ll4       t]R2V 3R lR ll4       t]R3V 3R lR ll4       t]R3V 3R lR ll4       t]R3V 3R lR ll4       t]R3V 3R lR ll4       t]R3V 3R lR ll4       t]R3V 3R lR ll4       t]R3V 3R lR ll4       t]R3V 3R lR ll4       t]R3V 3R  lR! ll4       t]R3V 3R" lR# ll4       t]R4V 3R$ lR% ll4       t]R4V 3R& lR' ll4       t]R5V 3R( lR) ll4       t]R6V 3R* lR+ ll4       t]R6V 3R, lR- ll4       t]R3V 3R. lR/ ll4       t]R0 4       tR1tV t R# )7ApiResponsezq
High-performance API response handler for Flask applications.
Mimics Laravel's ApiResponse trait functionality.
i  Nc          	      X   < V ^8  d   QhRS[ RS[RS[S[S[S[3,          ,          RS[/# )   datastatus_codeheadersreturn)r	   intr
   r   strr   )format__classdict__s   "FD:\Projects\python\client-ideal-oms_pyapi\app\utils\response_helper.py__annotate__ApiResponse.__annotate__   s8     : :s : :xSRUX?W :ck :    c                   ^Tu;8*  ;'       d    R8  Mu p\         P                  P                  RR4      pRpV'       d   \        \	        V 4      T\	        T;'       g    / 4      34      pV\
        P                  9   d^   \        \
        P                  4      \
        P                  8  d2   \
        P                  V,          p\        P                  RV 24       V# VR8  d=   \        P                  RV RV  24       VR8  d   \        P                  R	V  2R
R7       \        V \        4      '       d   T MRV /p^Tu;8*  ;'       d    R8  Mu VR&   \        V4      pWn        V'       d(   VP!                  4        F  w  rWP"                  V	&   K  	  RVP"                  R&   RVP"                  R&   \%        \&        R4      '       d   \&        P(                  VP"                  R&   \*        P,                  ! 4       P/                  4       VP"                  R&   V'       dH   V'       d@   \        \
        P                  4      \
        P                  8  d   V\
        P                  V&   V# )z7
Create optimized Flask response with caching support.
  DEBUGFNzResponse cache hit for status zError response :   zServer error details: Texc_infor   successnosniffzX-Content-Type-OptionsDENYzX-Frame-Options
request_idzX-Request-IDzX-Timestamp)r   configgethashr   r   _response_cachelen_cache_max_sizeloggerdebugerror
isinstancedictr   r   itemsr   hasattrr   r*   r   now	isoformat)r   r   r   should_cacheis_debug	cache_keycached_responseresponse_dataresponsekeyvalues   &&&        r   _create_responseApiResponse._create_response   s    k//C/ %%))'59	c$ic'--R6HIJI K777C@[@[<\_j_z_z<z"-"="=i"H=k]KL&& #LL?;-r$@Ac!5dV<tL !+4 6 6VTN#&+#;#;#;i  =)* %mmo
(-  % . 6?12.4*+ 1l##/0||H^, +3,,.*B*B*D' I#k.I.I*J[MhMh*h5=K''	2r   c          	      h   < V ^8  d   QhRS[ RS[S[,          RS[S[S[S[ 3,          S[ 3,          /# r   r   messager   )r	   r
   r   r   r   )r   r   s   "r   r   r   R   s9     2 2C 2(3- 25c3hQTAT;U 2r   c                    Vf   V # RVRV /# )z{
Generate response body.
When message is provided produces {"message": ..., "data": ...}.
When omitted returns data as-is.
rF   r    r   rF   s   &&r   _bodyApiResponse._bodyQ   s     ?K7FD11r   c          	      h   < V ^8  d   QhRS[ RS[S[,          RS[S[S[S[3,          ,          RS[/# r   r   rF   r   r   r	   r
   r   r   r   )r   r   s   "r   r   r   ]   sD     I I Ihsm IXdSVX[S[nE] Iiq Ir   c                Z    \         P                  W4      p\         P                  V^V4      # )zG
Send successful response (HTTP 200).
Equivalent to PHP's ok() method.
r   rJ   rB   r   rF   r   r>   s   &&& r   okApiResponse.ok\   )     $))$8++M3HHr   c          	      h   < V ^8  d   QhRS[ RS[S[,          RS[S[S[S[3,          ,          RS[/# rM   rN   )r   r   s   "r   r   r   f   sF     I Ic I8C= I(SWX[]`X`SaJb Inv Ir   c                Z    \         P                  W4      p\         P                  V^V4      # )z,
Send resource created response (HTTP 201).
rP   rQ   s   &&& r   createdApiResponse.createde   )    
 $))$8++M3HHr   c          	      h   < V ^8  d   QhRS[ RS[S[,          RS[S[S[S[3,          ,          RS[/# rM   rN   )r   r   s   "r   r   r   n   F     I Is IHSM I8TXY\^aYaTbKc Iow Ir   c                Z    \         P                  W4      p\         P                  V^V4      # )z$
Send accepted response (HTTP 202).
rP   rQ   s   &&& r   acceptedApiResponse.acceptedm   rY   r   c                L   < V ^8  d   QhRS[ S[S[S[3,          ,          RS[/# )r   r   r   )r
   r   r   r   )r   r   s   "r   r   r   v   s(     > >HT#s(^4 > >r   c                0    \         P                  / ^V 4      # )z&
Send no content response (HTTP 204).
r   rB   )r   s   &r   
no_contentApiResponse.no_contentu   s    
 ++BW==r   c          	      h   < V ^8  d   QhRS[ RS[S[,          RS[S[S[S[3,          ,          RS[/# rM   rN   )r   r   s   "r   r   r   }   sF     I I# Ix} IhW[\_ad\dWeNf Irz Ir   c                Z    \         P                  W4      p\         P                  VRV4      # )zM
Send bad request error (HTTP 400).
Equivalent to PHP's badRequest() method.
r!   rP   rQ   s   &&& r   bad_requestApiResponse.bad_request|   rT   r   c          	      h   < V ^8  d   QhRS[ RS[S[,          RS[S[S[S[3,          ,          RS[/# rM   rN   )r   r   s   "r   r   r      F     I I3 I IxX\]`be]eXfOg Is{ Ir   c                Z    \         P                  W4      p\         P                  VRV4      # )zO
Send unauthorized error (HTTP 401).
Equivalent to PHP's unauthorize() method.
i  rP   rQ   s   &&& r   unauthorizedApiResponse.unauthorized   rT   r   c          	      h   < V ^8  d   QhRS[ RS[S[,          RS[S[S[S[3,          ,          RS[/# rM   rN   )r   r   s   "r   r   r      sF     I I IXc] IHUYZ]_bZbUcLd Ipx Ir   c                Z    \         P                  W4      p\         P                  VRV4      # )zJ
Send forbidden error (HTTP 403).
Equivalent to PHP's forbidden() method.
i  rP   rQ   s   &&& r   	forbiddenApiResponse.forbidden   rT   r   c          	      x   < V ^8  d   QhRS[ S[,          RS[ S[,          RS[ S[S[S[3,          ,          RS[/# rM   r
   r	   r   r   r   )r   r   s   "r   r   r      sO     	I 	I 	Ix} 	IV^_cdgildl_mVn 	I  {C 	Ir   c                j    V f   RR/p \         P                  W4      p\         P                  VRV4      # )zI
Send not found error (HTTP 404).
Equivalent to PHP's notFound() method.
rF   zNo data foundi  rP   rQ   s   &&& r   	not_foundApiResponse.not_found   s8     </D#))$8++M3HHr   c          	      h   < V ^8  d   QhRS[ RS[S[,          RS[S[S[S[3,          ,          RS[/# rM   rN   )r   r   s   "r   r   r      sK     I I Ihsm IU]^bcfhkck^lUm I  zB Ir   c                Z    \         P                  W4      p\         P                  VRV4      # )z+
Send method not allowed error (HTTP 405).
i  rP   rQ   s   &&& r   method_not_allowedApiResponse.method_not_allowed   rY   r   c          	      h   < V ^8  d   QhRS[ RS[S[,          RS[S[S[S[3,          ,          RS[/# rM   rN   )r   r   s   "r   r   r      r[   r   c                Z    \         P                  W4      p\         P                  VRV4      # )z!
Send conflict error (HTTP 409).
i  rP   rQ   s   &&& r   conflictApiResponse.conflict   rY   r   c          	      h   < V ^8  d   QhRS[ RS[S[,          RS[S[S[S[3,          ,          RS[/# rM   rN   )r   r   s   "r   r   r      sK     I I3 I IW_`dehjmem`nWo I  |D Ir   c                Z    \         P                  W4      p\         P                  VRV4      # )z#
Send validation error (HTTP 422).
  rP   rQ   s   &&& r   unprocessable_entity ApiResponse.unprocessable_entity   rY   r   c          	      h   < V ^8  d   QhRS[ RS[S[,          RS[S[S[S[3,          ,          RS[/# rM   rN   )r   r   s   "r   r   r      sK     I I IXc] IT\]abegjbj]kTl I  yA Ir   c                Z    \         P                  W4      p\         P                  VRV4      # )z#
Send rate limit error (HTTP 429).
i  rP   rQ   s   &&& r   too_many_requestsApiResponse.too_many_requests   rY   r   c          	      h   < V ^8  d   QhRS[ RS[S[,          RS[S[S[S[3,          ,          RS[/# rM   rN   )r   r   s   "r   r   r      ri   r   c                Z    \         P                  W4      p\         P                  VRV4      # )zI
Send server error (HTTP 500).
Equivalent to PHP's serverError() method.
r$   rP   rQ   s   &&& r   server_errorApiResponse.server_error   rT   r   c          	      h   < V ^8  d   QhRS[ RS[S[,          RS[S[S[S[3,          ,          RS[/# rM   rN   )r   r   s   "r   r   r      sK     I I# Ix} IV^_cdgildl_mVn I  {C Ir   c                Z    \         P                  W4      p\         P                  VRV4      # )z,
Send service unavailable error (HTTP 503).
i  rP   rQ   s   &&& r   service_unavailableApiResponse.service_unavailable   rY   r   c          	      X   < V ^8  d   QhRS[ RS[RS[S[S[ S[ 3,          ,          RS[/# )r   rF   r   r   r   r   r   r
   r   r   )r   r   s   "r   r   r      s>     X Xs X XXd3PS8n=U Xai Xr   c                2    \         P                  RV /W4      # )zG
Send error response with message.
Equivalent to PHP's error() method.
rF   ra   )rF   r   r   s   &&&r   r3   ApiResponse.error   s     ++Y,@+WWr   c          	      X   < V ^8  d   QhRS[ RS[RS[S[S[ S[ 3,          ,          RS[/# )r   rF   coder   r   r   )r   r   s   "r   r   r      s@     Q QC Qs Q8DQTVYQYNC[ Qgo Qr   c                2    \         P                  RV /W4      # )zX
Send error response with fixed message.
Equivalent to PHP's errorWithMessage() method.
rF   ra   )rF   r   r   s   &&&r   error_with_messageApiResponse.error_with_message   s     ++Y,@$PPr   c                X   < V ^8  d   QhRS[ S[S[S[,          3,          RS[RS[RS[/# )r   errorsrF   r   r   )r   r   r   r   r   )r   r   s   "r   r   r      s>     ? ?S$s)^$?? ? 
	?r   c                8    RVRV /p\         P                  W24      # )a
  
Send Laravel-style validation error response with detailed field errors.

Args:
    errors: Dictionary of field names to lists of error messages
    message: General error message
    status_code: HTTP status code (default: 422)

Returns:
    Flask Response object
rF   r   ra   )r   rF   r   r   s   &&& r   validation_errorApiResponse.validation_error   s(    $ wf

 ++D>>r   c                   < V ^8  d   QhRS[ S[,          RS[S[S[3,          RS[S[,          RS[S[S[S[3,          ,          RS[/# )r   r   pagination_inforF   r   r   )r   r	   r   r   r
   r   )r   r   s   "r   r   r      sz     	I 	Ic 	IT#s(^ 	IV^_bVc 	Iu}  C  DG  IL  DL  M  vN 	I  Zb 	Ir   c                <    RV RV/p\         P                  V^V4      # )z(
Send paginated response with metadata.
r   
paginationra   )r   r   rF   r   r>   s   &&&& r   paginated_responseApiResponse.paginated_response   s,     D/

 ++M3HHr   c          	         < V ^8  d   QhRS[ S[S[S[3,          ,          RS[S[,          RS[S[S[S[3,          ,          RS[/# )r   resultsrF   r   r   )r   r   r   r	   r
   r   )r   r   s   "r   r   r   	  sX     Q QtDcN3 Qhsm Q]efjknpsksft]u Q  BJ Qr   c           	         \        R V  4       4      p\        V 4      V,
          pRV RR\        V 4      RVRV//pV^ 8X  d   ^M^p\        P                  WVV4      # )z
Send bulk operation response.
c              3   X   "   T F   qP                  R R4      '       g   K  ^x  K"  	  R# 5i)r'   FN)r,   ).0results   & r   	<genexpr>,ApiResponse.bulk_response.<locals>.<genexpr>  s     TG&zz)U7SAAGs   *
*r   summarytotalr'   failed)sumr/   r   rB   )r   rF   r   success_countfailure_countr>   r   s   &&&    r   bulk_responseApiResponse.bulk_response  sn    
 TGTTG}4 wW=-
 +a/cS++MPPr   c          	      x   < V ^8  d   QhRS[ S[,          RS[ S[,          RS[ S[S[S[3,          ,          RS[/# rM   rr   )r   r   s   "r   r   r     sO     	I 	IHSM 	I8C= 	IZbcghkmphpcqZr 	I  G 	Ir   c                    V f   \         P                  V4      # \         P                  W4      p\         P                  V^V4      # )zV
Send no content found response (HTTP 204).
Equivalent to PHP's noDataFound() method.
)r   rb   rJ   rB   rQ   s   &&& r   no_data_foundApiResponse.no_data_found  s?     <))'22#))$8++M3HHr   c                 l    \         P                  P                  4        \        P	                  R4       R# )z-
Clear response cache for memory management.
zApiResponse cache clearedN)r   r.   clearr1   inforH   r   r   clear_cacheApiResponse.clear_cache(  s#    
 	##))+/0r   rH   )N)NNN)r!   N)zThe given data was invalid.r   )NN)!__name__
__module____qualname____firstlineno____doc__r.   r0   staticmethodrB   rJ   rR   rW   r]   rb   rf   rk   ro   rt   rx   r|   r   r   r   r   r3   r   r   r   r   r   r   __static_attributes____classdictcell__)r   s   @r   r   r   
   s     OO: : :x 2 2 2 I I I I I I I I I > > > I I I I I I I I I 	I 	I 	I I I I I I I I I I I I I I I I I I I X X X Q Q Q ? ? ?. 	I 	I 	I Q Q Q& 	I 	I 	I 1 1r   r   c          	          V ^8  d   QhR\         R\        \        ,          R\        \        \        \        3,          ,          /# )r   r   r@   r   )r   r
   r   r   )r   s   "r   r   r   2  s7     & &c &hsm &XVZ[^`c[cVdMe &r   c                   a aa VVV 3R lpV# )z2
Decorator for automatic API response formatting.
c                 8   <a  \        S 4      V VVV3R  l4       pV# )c            	      
  <  S! V / VB p\        V\        4      '       d   \        V4      ^8X  d   V# \        P	                  \        P                  VS4      S	S4      #   \         d   p\        P                  P                  RR4      p\        P                  RSP                   R\        T4       2RR7       T'       d   RRR	SP                  R
\        T4      RR/pMRR/p\        P                  T4      u Rp?# Rp?ii ; i)r   r"   FzUnhandled exception in r#   Tr%   rF   zInternal server errorfunctionr3   
debug_modeN)r4   tupler/   r   rB   rJ   	Exceptionr   r+   r,   r1   r3   r   r   r   )
argskwargsr   er;   
error_datafuncr   r@   r   s
   *,    r   wrapper0api_response.<locals>.decorator.<locals>.wrapper7  s    <t.v. fe,,V1A!M #33%%fc2 
  <&--11'5A 6t}}oRAxP[_` !#:"DMMQ$d	"J #,-D!EJ"//
;;!<s(   A A *A D)BC=7D=Dr   )r   r   r   r@   r   s   f r   	decoratorapi_response.<locals>.decorator6  s     	t	< 
	<> r   rH   )r   r@   r   r   s   fff r   api_responser   2  s    !D r   c                <    V ^8  d   QhR\         R\        R\        /# rE   )r	   r   r   )r   s   "r   r   r   \  s!     > >3 > >X >r   c                4    \         P                  RV RV/4      # )+Legacy function for backward compatibility.r   rF   )r   rR   rI   s   &&r   success_responser   \  s    >>64G<==r   c                <    V ^8  d   QhR\         R\        R\        /# )r   rF   r   r   )r   r   r   )r   s   "r   r   r   `  s!     9 9C 9S 98 9r   c                ,    \         P                  W4      # )r   )r   r   )rF   r   s   &&r   error_responser   `  s    ))'88r   c                0    V ^8  d   QhR\         R\        /# )r   rF   r   )r   r   )r   s   "r   r   r   d  s     7 7 7x 7r   c                0    \         P                  RV /4      # )r   rF   )r   rt   )rF   s   &r   not_found_responser   d  s      )W!566r   c                h    V ^8  d   QhR\         \        \        \        3,          ,          R\        /# )r   r   r   )r   r   r   r	   r   )r   s   "r   r   r   h  s+     E Ed4S>&: Ex Er   c                .    \         P                  RV 4      # )r   zValidation errors)r   r   )r   s   &r   validation_error_responser   h  s    ''(;VDDr   )   NN)Success)zAn error occurredr!   )zResource not found)flaskr   r   r   r   r   typingr   r	   r
   r   r   jsonloggingr   	functoolsr   	getLoggerr   r1   r   r   r   r   r   r   rH   r   r   <module>r      sU    < < 3 3    			8	$d1 d1P	&T>97Er   