
    g	C                        d dl Z d dlZd dlmZ ddlmZmZ ddlmZ ddl	m
Z
 d dlmZmZmZmZmZ  G d d	e      Z G d
 de      Z ej(                  deej*                  f      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 Z G d de      Zd Zd Z d Z! G d de      Z" G d d e      Z#y)!    N)deque   )matchers	signatureverification)contains_strict)AnyCallableDequeDictTuplec                       e Zd Zy)InvocationErrorN__name__
__module____qualname__     G/var/www/openai/venv/lib/python3.12/site-packages/mockito/invocation.pyr   r           r   r   c                       e Zd Zy)AnswerErrorNr   r   r   r   r   r   #   r   r   r   errisinstancec                       e Zd Zd Zd Zd Zy)
Invocationc                 ^    || _         || _        |j                  | _        d| _        i | _        y )Nr   )mockmethod_namestrictparamsnamed_params)selfr   r    s      r   __init__zInvocation.__init__.   s+    	&kk'),.r   c                      || _         || _        y N)r"   r#   r$   r"   r#   s      r   _remember_paramszInvocation._remember_params6   s    (r   c                 F   | j                   D cg c]  }|t        urt        |      nd }}| j                  j	                         D cg c]   \  }}|t
        j                  ur|d|nd" }}}dj                  ||z         }| j                  d|dS c c}w c c}}w )Nz...=z**kwargsz, ())	r"   Ellipsisreprr#   itemsr   KWARGS_SENTINELjoinr    )r$   pargskeyvalkwargsr"   s          r   __repr__zInvocation.__repr__:   s    &$A H,Q%7$ 	 & #'"3"3"9"9";=";hc3  8 88 !#&>HI"; 	 = 4&=)++V44&=s   B
%BN)r   r   r   r%   r)   r8   r   r   r   r   r   -   s    /)5r   r   c                   0     e Zd Z fdZd Zd Zd Z xZS )RememberedInvocationc                 J    t         t        |   ||       d| _        d| _        y NF)superr:   r%   verifiedverified_inorderr$   r   r    	__class__s      r   r%   zRememberedInvocation.__init__E   s$    "D24E %r   c                     | j                   j                  |      s&t        d|d| j                   j                  d      y )NzYou tried to call a method '' the object () doesn't have.r   
has_methodr   
mocked_objr$   r    s     r   ensure_mocked_object_has_methodz4RememberedInvocation.ensure_mocked_object_has_methodJ   :    yy##K0!&		(<(<>? ? 1r   c                 n    | j                   j                  |      }|sy t        j                  |||       y r'   )r   get_signaturer   match_signaturer$   r    r4   r7   sigs        r   ensure_signature_matchesz-RememberedInvocation.ensure_signature_matchesP   s.    ii%%k2!!#tV4r   c                     | j                   j                  | j                        r|dd  }n|}| j                  r8| j	                  | j                         | j                  | j                  ||       | j                  ||       | j                   j                  |        | j                   j                  D ]I  }|j                  |       s|j                  |        |j                  |         |j                  |i |c S  | j                  rm| j                   j                  D cg c]  }|j                  | j                  k(  r| }}t        d| ddj                  d t        |      D              d      y c c}w )Nr   z
Called but not expected:

    z 

Stubbed invocations are:

    z
    c              3   2   K   | ]  }t        |        y wr'   )str).0invocs     r   	<genexpr>z0RememberedInvocation.__call__.<locals>.<genexpr>~   s      "0MuE
0Ms   z

)r   eat_selfr    r!   rI   rP   r)   rememberstubbed_invocationsmatchesshould_answercapture_argumentsanswer_firstr   r2   reversed)r$   r"   r#   params_without_first_argmatching_invocationrU   rY   s          r   __call__zRememberedInvocation.__call__W   su   99d../'-abz$'-$;;001A1AB))  ":LJ 	6E		4 #'99#@#@"**40#11$7#55d;7*77-+- -	 $A ;; "YY::#:E$$(8(88 :   #
 " MM "089L0M"  & 1#s   %"E;)r   r   r   r%   rI   rP   ra   __classcell__rA   s   @r   r:   r:   D   s    &
?5-r   r:   c                   (     e Zd ZdZ fdZd Z xZS )RememberedProxyInvocationzRemeber params and proxy to method of original object.

    Calls method on original object and returns it's return value.
    c                 J    t         t        |   ||       d| _        d| _        y r<   )r=   re   r%   r>   r?   r@   s      r   r%   z"RememberedProxyInvocation.__init__   s$    '7kJ %r   c                    | j                  ||       | j                  j                  |        | j                  j                  }	 t	        || j
                        } ||i |S # t        $ r t        d| j
                  d|d      w xY w)NzYou tried to call method 'z	' which 'z' instance does not have.)r)   r   rX   specgetattrr    AttributeError)r$   r"   r#   objmethods        r   ra   z"RememberedProxyInvocation.__call__   s    fl3		4 iinn	3S$"2"23F
 v...	  	3 ++S23 3	3s   A# #&B	)r   r   r   __doc__r%   ra   rb   rc   s   @r   re   re      s    &

/r   re   c                   .    e Zd Zed        Zd Zd Zd Zy)MatchingInvocationc                 j    t        | t        j                        r| j                  |      syy| |k7  ryy)NFT)
isinstancer   MatcherrZ   )p1p2s     r   comparezMatchingInvocation.compare   s4    b(**+::b>  2Xr   c                    t        | j                        D ]A  \  }}t        |t        j                        s!	 |j                  |   }|j                  |       C | j                  j                         D ]A  \  }}t        |t        j                        s!	 |j                  |   }|j                  |       C y # t
        $ r Y w xY w# t        $ r Y _w xY wr'   )
	enumerater"   rq   r   	Capturing
IndexErrorcapture_valuer#   r0   KeyErrorr$   
invocationxrs   rt   r5   s         r   r\   z$MatchingInvocation.capture_arguments   s    t{{+EAr"h001#**1-B   $ , ((..0GC"h001#005B   $ 1 "    s#   B9C9	CC	CCc                    t        |t              r|d   t        us|rt        d      t        |t        j                        rt        d      t        |t        j
                        st        |t        j                        rt        d      d t        fd|D              | _        |j                         D ci c]  \  }}| |       c}}| _
        y c c}}w )Nz/Ellipsis must be the last argument you specify.zargs must be used as *argszkwargs must be used as **kwargsc                 b    | t         u s| t        j                  u rt        j                         S | S r'   )anyr   any_)r3   s    r   wrapz1MatchingInvocation._remember_params.<locals>.wrap   s%    Cx1-}}&Hr   c              3   .   K   | ]  } |        y wr'   r   )rT   r3   r   s     r   rV   z6MatchingInvocation._remember_params.<locals>.<genexpr>   s     4VDGVs   )r	   r.   	TypeErrorr   r4   r7   r1   tupler"   r0   r#   )r$   r"   r#   kvr   s        @r   r)   z#MatchingInvocation._remember_params   s    FH-8+|MNN68==1899 FHOO4vx'?'?@=>>	
 4V444@4F4F4HI4HDAqQQZ4HIIs   =Cc                    | j                   |j                   k7  ryt        | j                        D ]G  \  }}|t        u r y|t        j
                  u r nR	 |j                  |   }| j                  ||      rG y t        | j                        t        |j                        k7  ryt        | j                  j                         d       D ]=  \  }}|t        j                  u r y	 |j                  |   }| j                  ||      r= y t        | j                        t        |j                        k7  ryy# t        $ r Y  yw xY w# t        $ r Y  yw xY w)NFTc                 4    | d   t         j                  u rdS dS Nr   r   )r   r1   )k_vs    r   <lambda>z,MatchingInvocation.matches.<locals>.<lambda>   s    Q8+C+C!CAJJr   )r5   )r    rw   r"   r.   r   ARGS_SENTINELry   ru   lensortedr#   r0   r1   r{   r|   s         r   rZ   zMatchingInvocation.matches   sI   z555t{{+EArX~X+++&&q) <<B' ,  4;;3z'8'8#99##%J
GC h... ,,S1 <<B'
 4$$%Z-D-D)EE7  $  s$   D9'E	9	EE		EEN)r   r   r   staticmethodru   r\   r)   rZ   r   r   r   ro   ro      s$     %(J6)r   ro   c                   $     e Zd Z fdZd Z xZS )VerifiableInvocationc                 <    t         t        |   ||       || _        y r'   )r=   r   r%   r   )r$   r   r    r   rA   s       r   r%   zVerifiableInvocation.__init__  s    "D24E(r   c                    | j                  ||       g }| j                  j                  D ]6  }| j                  |      s| j	                  |       |j                  |       8 | j                  j                  | t        |             |D ]	  }d|_	         t        | j                        rF| j                  j                  D ],  }|j                  |       s| j                  |      s&d|_        . y y )NT)r)   r   invocationsrZ   r\   appendr   verifyr   r>   $verification_has_lower_bound_of_zerorY   allow_zero_invocations)r$   r"   r#   matched_invocationsr}   stubs         r   ra   zVerifiableInvocation.__call__  s    fl3 ))//J||J'&&z2#**:6 0
 	  s+>'?@ .J"&J . 00A0AB		55 <<%d);26D/	 6 Cr   )r   r   r   r%   ra   rb   rc   s   @r   r   r     s    )7r   r   c                     t        | t        j                        r| j                  dk(  ryt        | t        j                        r| j
                  dk(  ryyNr   TF)rq   verificationModuleTimeswanted_countBetweenwanted_fromr   s    r   r   r     sK    <!3!9!9:%%* 	<!3!;!;<$$)r   c                   `     e Zd Zd fd	Zd Zd Zd Zd Zd Zd Z	d	e
d
dfdZd Zd Z xZS )StubbedInvocationNc                     t         t        |   ||       || _        ||| _        t               | _        d| _        t        |      rd| _	        y d| _	        y r   )
r=   r   r%   r   r!   CompositeAnsweranswersusedr   r   )r$   r   r    r   r!   rA   s        r   r%   zStubbedInvocation.__init__0  sY    /kB ) DK&(
 	 0=*.D'*/D'r   c                     | j                   j                  |      s&t        d|d| j                   j                  d      y )NzYou tried to stub a method 'rC   rD   rE   rH   s     r   rI   z1StubbedInvocation.ensure_mocked_object_has_methodI  rJ   r   c                 n    | j                   j                  |      }|sy t        j                  |||       y r'   )r   rL   r   %match_signature_allowing_placeholdersrN   s        r   rP   z*StubbedInvocation.ensure_signature_matchesO  s.    ii%%k277T6Jr   c                 D   | j                   r8| j                  | j                         | j                  | j                  ||       | j	                  ||       | j
                  j                  | j                         | j
                  j                  |        t        |       S r'   )	r!   rI   r    rP   r)   r   r   finish_stubbingAnswerSelectorr(   s      r   ra   zStubbedInvocation.__call__V  s{    ;;001A1AB))  &,8fl3		t''(		!!$'d##r   c                 :    | j                   j                  |        y r'   )r   forget_stubbed_invocationr$   s    r   forget_selfzStubbedInvocation.forget_selfa  s    		++D1r   c                 :    | j                   j                  |       y r'   )r   addr$   answers     r   
add_answerzStubbedInvocation.add_answerd  s     r   c                 d    | xj                   dz  c_          | j                  j                  |i |S Nr   )r   r   r   )r$   r4   r7   s      r   r]   zStubbedInvocation.answer_firstg  s+    		Q	"t||""D3F33r   r}   returnc                    | j                   }|sy | j                  dz   }t        |t        j                        r)||j
                  kD  rt        d|j
                  |fz        t        |t        j                        r)||j
                  kD  rht        d|j
                  |fz        t        |t        j                        r4||j                  kD  r%t        d|j                  |j                  |fz        d|_        y )Nr   z#
Wanted times: %i, actual times: %iz%
Wanted at most: %i, actual times: %iz+
Wanted between: [%i, %i], actual times: %iT)r   r   rq   r   r   r   r   AtMostr   	wanted_tor   r>   )r$   r}   r   actual_counts       r   r[   zStubbedInvocation.should_answerk  s   (( yy1}l$6$<$<=l777%:#00,?@A A &8&?&?@l777%<#00,?@A A &8&@&@Al444%B#//#--#%%& & #
r   c                 j    | j                   r'| j                   j                  | | j                         y y r'   )r   r   r   r   s    r   r   zStubbedInvocation.verify  s*    $$T4995 r   c                     | j                   s;| j                  t        | j                        k  rt	        j
                  d| z        y y )Nz
Unused stub: %s)r   r   r   r   r   VerificationErrorr   s    r   
check_usedzStubbedInvocation.check_used  sC    **tyy3t||;L/L$66#d*, , 0M*r   )NN)r   r   r   r%   rI   rP   ra   r   r   r]   r:   r[   r   r   rb   rc   s   @r   r   r   /  sF    02?K	$2!4!#(< !# !#F6,r   r   c                       fd}|S )Nc                      S r'   r   )akwvalues     r   r   zreturn_.<locals>.answer  s    r   r   )r   r   r   r   s   `   r   return_r     s    Mr   c                       fd}|S )Nc                      r'   r   )r   r   	exceptions     r   r   zraise_.<locals>.answer  s    r   r   )r   r   r   r   s   `   r   raise_r     s    Mr   c                       fd}|S )Nc                      | dd  }  | i |S r   r   )r4   r7   functions     r   function_without_selfz+discard_self.<locals>.function_without_self  s    ABx(((r   r   )r   r   s   ` r   discard_selfr     s    ) ! r   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
r   c                 f    || _         |j                  j                  |j                        | _        y r'   )r}   r   rW   r    discard_first_arg)r$   r}   s     r   r%   zAnswerSelector.__init__  s)    $OO$$Z%;%;< 	r   c                 L    |D ]  }t        |      }| j                  |         | S r'   )r   _AnswerSelector__then)r$   return_valuesreturn_valuer   s       r   
thenReturnzAnswerSelector.thenReturn  s)    )L\*FKK * r   c                 L    |D ]  }t        |      }| j                  |         | S r'   )r   r   )r$   
exceptionsr   r   s       r   	thenRaisezAnswerSelector.thenRaise  s)    #II&FKK $ r   c                 h    |D ],  }|}| j                   rt        |      }| j                  |       . | S r'   )r   r   r   )r$   	callablescallabler   s       r   
thenAnswerzAnswerSelector.thenAnswer  s7    !HF%%%f-KK	 "
 r   c                    | j                   j                  j                  | j                   j                        }|sDt	        d| j                   j                  j
                  d| j                   j                  d      t        |t              s%t        |t              st        j                  |      r|j                  }| j                  |       | S )N'z&' has no original implementation for 'z'.)r}   r   get_original_methodr    r   rG   rq   classmethodr   inspectismethod__func__r   r   s     r   thenCallOriginalImplementationz-AnswerSelector.thenCallOriginalImplementation  s    %%99OO''
 %%00$//2M2MO  v{+z&,/O'__FFr   c                 :    | j                   j                  |       y r'   )r}   r   r   s     r   __thenzAnswerSelector.__then  s    ""6*r   c                      y r'   r   r   s    r   	__enter__zAnswerSelector.__enter__  s    r   c                 8    | j                   j                          y r'   )r}   r   )r$   exc_infos     r   __exit__zAnswerSelector.__exit__  s    ##%r   N)r   r   r   r%   r   r   r   r   r   r   r   r   r   r   r   r     s*    =
,+&r   r   c                   $    e Zd Zd Zd Zd Zd Zy)r   c                 0    t               | _        d| _        y )Nr   )r   r   answer_countr   s    r   r%   zCompositeAnswer.__init__  s    (- r   c                 .    t        d| j                        S r   )maxr   r   s    r   __len__zCompositeAnswer.__len__  s    1d''((r   c                 d    | xj                   dz  c_         | j                  j                  |       y r   )r   r   r   r   s     r   r   zCompositeAnswer.add  s%    QF#r   c                     t        | j                        dk(  ry t        | j                        dk(  r| j                  d   }n| j                  j                         } ||i |S r   )r   r   popleft)r$   r4   r7   r   s       r   r   zCompositeAnswer.answer  sV    t||!t||!QA$$&A$!&!!r   N)r   r   r   r%   r   r   r   r   r   r   r   r     s    )$	"r   r   )$r   operatorcollectionsr    r   r   r   r   utilsr	   typingr
   r   r   r   r   rj   r   r   methodcallerr   __tracebackhide__objectr   r:   re   ro   r   r   r   r   r   r   r   r   r   r   r   <module>r     s   *    ! 0 " 4 4	n 		. 	 *H))(::; 5 5.@: @F/
 /.b bJ7- 78 f,* f,R
!7&V 7&t"f "r   