
    i`                        d dl Zd dlmc mZ d dlZd dl Z d dlZd dlZd dl	Z
d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlZddl m!Z! ddl m"Z"  ed      Z#e
jH                  jJ                  Z&ee
jH                  jN                  e
jH                  jJ                  e
jH                  jP                  f   Z) G d de*      Z+e G d d             Z,e G d d             Z- G d d      Z.ded ee.ddf   fd!Z/  ej`                         e/      Z1  ej`                  d"#      e/      Z2  ej`                  d$#      e/      Z3  ej`                  d%#      e/      Z4  ej`                  d&#      e/      Z5g Z6i Z7d'ed(ef   d)ed*ed dfd+Z8d'ed(ef   d)ed*ed dfd,Z9d)ed*ed dfd-Z:d)ed*ed dfd.Z;d)ed*ed dfd/Z<d)ed*ed dfd0Z=d)ed*ed dfd1Z>d)ed*ed dfd2Z?d)ed*ed dfd3Z@d)ed*ed dfd4ZAd)ed*ed dfd5ZBd)ed*ed dfd6ZCd)ed*ed dfd7ZDd)ed*ed dfd8ZEd)ed*ed dfd9ZFd)ed*ed dfd:ZGd;ed dfd<ZHdAd=ZId>ed dfd?ZJd;ed dfd@ZKy)B    N)	dataclass)field)Any)Callable)Dict)	Generator)Iterable)Iterator)List)Mapping)Optional)Tuple)Type)TypeVar)Union)cast)overload   )get_mock_module)parse_ini_boolean_Tc                       e Zd ZdZy)PytestMockWarningz3Base class for all warnings emitted by pytest-mock.N)__name__
__module____qualname____doc__     K/home/work/apex_v16/venv/lib/python3.12/site-packages/pytest_mock/plugin.pyr   r   (   s    =r   r   c                   ,    e Zd ZU eed<   dZee   ed<   y)MockCacheItemmockNpatch)r   r   r   MockType__annotations__r$   r   r   r   r   r    r"   r"   ,   s    
NE8C=r   r"   c                       e Zd ZU dZ ee      Zee   e	d<   de
defdZde
dedefdZde
dd	fd
ZddZdee   fdZy	)	MockCachezJ
    Cache MagicMock and Patcher instances so we can undo them later.
    )default_factorycacher#   returnc                 ^    | j                   D ]  }|j                  |u s|c S  t        d      )Nz"This mock object is not registered)r*   r#   
ValueErrorselfr#   	mock_items      r    _findzMockCache._find:   s5     	!I~~%  	! =>>r   kwargsc                 l    | j                   j                  t        dd|i|       | j                   d   S )Nr#   r   )r*   appendr"   )r/   r#   r2   s      r    addzMockCache.add@   s/    

-<T<V<=zz"~r   Nc                     | j                  |      }|j                  r|j                  j                          | j                  j	                  |       y N)r1   r$   stopr*   remover.   s      r    r:   zMockCache.removeD   s9    JJt$	??OO  "

)$r   c                     t        | j                        D ])  }|j                  |j                  j                          + | j                  j	                          y r8   )reversedr*   r$   r9   clear)r/   r0   s     r    r=   zMockCache.clearJ   sF    !$**- 	'I*$$&	' 	

r   c                 ,    t        | j                        S r8   )iterr*   r/   s    r    __iter__zMockCache.__iter__P   s    DJJr   r+   N)r   r   r   r   r   listr*   r   r"   r&   r%   r1   r   r6   r:   r=   r
   rA   r   r   r    r(   r(   2   ss     "'t!<E4<?( ?} ? C M %8 % % (=1  r   r(   c                      e Zd ZdZdeddfdZ	 ddeded	ed
edef
dZddddededdfdZ	ddZ
dej                  j                  ddfdZdededefdZddee   dej                  j                  fdZddee   defdZ G d d      Zy)MockerFixturez
    Fixture that provides the same interface to functions in the mock module,
    ensuring that they are uninstalled at the end of each test.
    configr+   Nc                 R   t               | _        t        |      x| _        }| j	                  | j                  |      | _        |j                  | _        |j                  | _        |j                  | _        |j                  | _	        |j                  | _
        t        |d      r|j                  | _        |j                  | _        |j                  | _        |j                  | _        |j                   | _        |j"                  | _        t        |d      r|j$                  | _        y y )N	AsyncMockseal)r(   _mock_cacher   mock_module_Patcherr$   Mock	MagicMockNonCallableMockNonCallableMagicMockPropertyMockhasattrrH   callANYDEFAULTsentinel	mock_openrI   )r/   rF   rK   s      r    __init__zMockerFixture.__init__Z   s    &/k)8)@@;]]4#3#3[A
$$	$..*::$/$D$D!'44;,(22DN$$	??"**#,,$..;'#((DI (r   Fspecspec_setinstancer2   c                 z     | j                   j                  |||fi |}| j                  j                  |       |S r8   )rK   create_autospecrJ   r6   )r/   rY   rZ   r[   r2   ms         r    r]   zMockerFixture.create_autospecn   sF     7d&&66(H
(.
 	Qr   return_valueside_effectr`   ra   c                   t        | d      r| j                  | j                  f}n| j                  f}| j                  D ]  }t        |j                  d      st        |j                  d      rg |j                  _        t        |j                  |      r|j                  j                  ||       u|j                  j                           y)z
        Call reset_mock() on all patchers started by this fixture.

        :param bool return_value: Reset the return_value of mocks.
        :param bool side_effect: Reset the side_effect of mocks.
        rH   
reset_mockspy_return_listr_   N)rR   rM   rH   rJ   r#   rd   
isinstancerc   )r/   r`   ra   supports_reset_mock_with_argsr0   s        r    resetallzMockerFixture.resetallw   s     4%-1YY,G)-1YYL))) 	,I9>><8y~~'8913	.)..*GH))!-; *  ))+	,r   c                 8    | j                   j                          y)zi
        Stop all patchers started by this fixture. Can be safely called multiple
        times.
        N)rJ   r=   r@   s    r    stopallzMockerFixture.stopall   s    
 	 r   r#   c                 :    | j                   j                  |       y)zp
        Stops a previous patch or spy call by passing the ``MagicMock`` object
        returned by it.
        N)rJ   r:   )r/   r#   s     r    r9   zMockerFixture.stop   s    
 	%r   objnamec                 ~   t        ||      fd}fd}t        j                        rt        j                  |      }nt        j                  |      }t        j                        xs t        j                        }| j                  j                  ||||      d_
        g _        d_        S )a  
        Create a spy of method. It will run method normally, but it is now
        possible to use `mock` call features with it, like call count.

        :param obj: An object.
        :param name: A method in object.
        :return: Spy object.
        c                      d _         d _        	  | i |}|_         j                  j                  |       |S # t        $ r}|_         d }~ww xY wr8   
spy_returnspy_exceptionrd   r5   BaseExceptionargsr2   remethodspy_objs       r    wrapperz"MockerFixture.spy.<locals>.wrapper   sg    !%G$(G!2D+F+
 &'"''..q1H ! ()%s   = 	AAAc                     K   d _         d _        	  | i | d {   }|_         j                  j                  |       |S 7 (# t        $ r}|_         d }~ww xY wwr8   ro   rs   s       r    async_wrapperz(MockerFixture.spy.<locals>.async_wrapper   sp     !%G$(G!2 $1&11
 &'"''..q1H 2  ()%s7   A"A	 AA	 $A"A	 		AAAA")ra   autospecN)getattrasyncioiscoroutinefunction	functoolsupdate_wrapperinspectismethod
isfunctionr$   objectrp   rd   rq   )	r/   rk   rl   ry   r{   wrappedr|   rw   rx   s	          @@r    spyzMockerFixture.spy   s     d#		 &&v...}fEG..w?G##F+Iw/A/A&/I**##C7X#V!"$ $r   c                     t        t        j                  j                  | j                  j                  d |            S )z
        Create a stub method. It accepts any arguments. Ideal to register to
        callbacks in tests.

        :param name: the constructed stub's name as used in repr
        :return: Stub object.
        c                       y r8   r   rt   r2   s     r    <lambda>z$MockerFixture.stub.<locals>.<lambda>       r   rY   rl   )r   unittestr#   rN   rK   r/   rl   s     r    stubzMockerFixture.stub   s8     MM##&&,Ht&T
 	
r   c                 Z    t        t        | j                  j                  d |            S )z
        Create a async stub method. It accepts any arguments. Ideal to register to
        callbacks in tests.

        :param name: the constructed stub's name as used in repr
        :return: Stub object.
        c                       y r8   r   r   s     r    r   z*MockerFixture.async_stub.<locals>.<lambda>   r   r   r   )r   AsyncMockTyperK   rH   r   s     r    
async_stubzMockerFixture.async_stub   s.     &&,Ht&T
 	
r   c                   b   e Zd ZdZ e       Zd Zdedededede	f
dZ
ed	d
d	d	d	fdedededee   dedee   dee   dedede	fdZed	d
d	d	d	fdej                  dedej                  deej                     dedeej                     deej                     dej                  dede	fdZ	 	 	 	 	 ddej                  deej                     dedeej                     deej                     deej                     dedeee	f   fdZ	 	 d deeeef   ef   deeeef   eeeef      f   dededef
dZe	 	 	 	 	 	 d!dedd	deej                     dedeej                     deej                     dd	dede	fd       Ze	 	 	 	 	 d"dededeej                     dedeej                     deej                     dd	dedefd       Zededd	deej                     dedeej                     deej                     deg ef   dedefd       Ze	 	 	 	 	 d"dedd	deej                     dedeej                     deej                     deg ef   dedefd       Zed	d
d	d	d	fdedej                  deej                     dedeej                     deej                     deeg ef      dedefdZy	)#MockerFixture._Patcherz
        Object to provide the same interface as mock.patch, mock.patch.object,
        etc. We need this indirection to keep the same API of the mock package.
        c                      || _         || _        y r8   )_Patcher__mock_cacherK   )r/   
mock_cacherK   s      r    rX   zMockerFixture._Patcher.__init__   s     *D*Dr   	mock_funcwarn_on_mock_enterrt   r2   r+   c                      ||i |}|j                         }| j                  j                  ||       t        |d      r t        |d      r|rd |j                  _        |S )zPatches something by calling the given function from the mock
            module, registering the patch to stop it later and returns the
            mock object resulting from the mock call.
            )r#   r$   rc   	__enter__c                  :    t        j                  dt        d      S )Na0  Mocks returned by pytest-mock do not need to be used as context managers. The mocker fixture automatically undoes mocking at the end of a test. This warning can be ignored if it was triggered by mocking a context manager. https://pytest-mock.readthedocs.io/en/latest/remarks.html#usage-as-context-manager   )
stacklevel)warningswarnr   r   r   r    r   z5MockerFixture._Patcher._start_patch.<locals>.<lambda>  s    8==m *#$< r   )startr   r6   rR   r   ra   )r/   r   r   rt   r2   pmockeds          r    _start_patchz#MockerFixture._Patcher._start_patch   sg     4*6*A wwyF!!vQ!7v|, 6;/4F4F$$0 Mr   NFtarget	attributenewrY   createrZ   r|   new_callablec	           
          || j                   u r| j                  j                   } | j                  | j                  j                  j                  d||f||||||d|	S )zAPI to mock.patch.objectTr   rY   r   rZ   r|   r   rU   rK   r   r$   r   
r/   r   r   r   rY   r   rZ   r|   r   r2   s
             r    r   zMockerFixture._Patcher.object  sw     dll"&&..$4$$  &&--	
 !!)  r   c	           
          || j                   u r| j                  j                   } | j                  | j                  j                  j                  d||f||||||d|	S )zThis is equivalent to mock.patch.object except that the returned mock
            does not issue a warning when used as a context manager.Fr   r   r   s
             r    context_managerz&MockerFixture._Patcher.context_manager/  sw     dll"&&..$4$$  &&--	
 !!)  r   c           	      t     | j                   | j                  j                  j                  d|f|||||d|S )zAPI to mock.patch.multipleT)rY   r   rZ   r|   r   )r   rK   r$   multiple)r/   r   rY   r   rZ   r|   r   r2   s           r    r   zMockerFixture._Patcher.multipleM  sT     %4$$  &&//
 !!)
 
 
r   in_dictvaluesr=   c                 n     | j                   | j                  j                  j                  d|f||d|S )zAPI to mock.patch.dictT)r   r=   )r   rK   r$   dict)r/   r   r   r=   r2   s        r    r   zMockerFixture._Patcher.dictd  sK     %4$$  &&++   r   c                      y r8   r   	r/   r   r   rY   r   rZ   r|   r   r2   s	            r    __call__zMockerFixture._Patcher.__call__u  s     r   c                      y r8   r   r   s	            r    r   zMockerFixture._Patcher.__call__       r   c                      y r8   r   r   s	            r    r   zMockerFixture._Patcher.__call__  r   r   c                     y r8   r   r   s	            r    r   zMockerFixture._Patcher.__call__  s     r   c           
          || j                   u r| j                  j                   } | j                  | j                  j                  d|f||||||d|S )zAPI to mock.patchTr   )rU   rK   r   r$   r   s	            r    r   zMockerFixture._Patcher.__call__  sn     dll"&&..$4$$  && !!)  r   )NFNNN)r   F)......).....)r   r   r   r   r   rU   rX   r   boolr%   r   strr   builtinsr   r   r   r   r   r	   r   r   r   r   r   r   r   r   r    rL   r      sy   	
 (	+	 	6:	CF	RU		8 "%) )-)-#'		 	 		
 6"	 	 v&	 v&	 !	 	 	B $+.2 2626,0	OO	 	 		
 8??+	 	 x/	 x/	 #//	 	 	B /3 26266:	OO	 8??+	 		
 x/	 x/	 #8??3	 	 #x- 	4 KM		738,c12	 '#s(+XeCHo-FFG	 		
 	 	" 
 .12525!$
	
	 
	 8??+	
	
 
	 x/
	 x/
	 
	 
	 
	 

	 

 /22525!$
	
	 
	 8??+	
	
 
	 x/
	 x/
	 
	 
	 
	 

	 

	
	 
	 8??+	
	
 
	 x/
	 x/
	 #2r6*
	 
	 
	 

	 
 .12525		 	 8??+		
 	 x/	 x/	 #2r6*	 	 	 
	  $+.2 26268<		 	 8??+		
 	 x/	 x/	 #8BG#45	 	 	r   rL   )FFrB   r8   )r   r   r   r   r   rX   r   r%   r]   rg   ri   r   r#   rN   r9   r   r   r   r   r   r   r   rL   r   r   r    rE   rE   T   s    
)s )t )* CH#';?SV	 ',,#,:>,	,:!&00 &T &0v 0S 0X 0d
# 
(--2I2I 

x} 
 
U Ur   rE   pytestconfigr+   c              #   J   K   t        |       }| |j                          yw)z
    Return an object that has the same interface to the `mock` module, but
    takes care of automatically undoing all patches after each test method.
    N)rE   ri   )r   results     r    _mockerr     s!     
 <(F
L
NNs   !#class)scopemodulepackagesession__wrapped_mock_method__.rt   r2   c                    d}	  | |i | y # t         $ r5}t        |dd      rt        |      }n|d   }t        |      }|j                  |j                  \  }}d}		 |dd  }
||
k(  }|st	        j
                  d|fd||
f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |
      d	z  }d
d|iz  }t        t	        j                  |            d x}}
n'# t         $ r}|	dt        |      z   z  }	Y d }~nd }~ww xY w	 ||k(  }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      nddt        j                         v st	        j                  |      rt	        j                  |      nddz  }dd|iz  }t        t	        j                  |            d }n'# t         $ r}|	dt        |      z   z  }	Y d }~nd }~ww xY w|	r|d|	z   z  }t        |      }d|_        |d }~ww xY w)NT_mock_introspection_appliedr    r   ==)z%(py0)s == %(py3)sactual_args)py0py3zassert %(py5)spy5
Args:
z%(py0)s == %(py2)sactual_kwargsr2   r   py2assert %(py4)spy4	
Kwargs:
 

pytest introspection follows:
)AssertionErrorr}   r   	call_args
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_saferepr_format_explanationr   )r   rt   r2   __tracebackhide__rv   msg__mock_selfr   r   introspection@py_assert2@py_assert1@py_format4@py_format6e_args@py_format3@py_format5e_kwargss                     r    assert_wrapperr     s    00 13Q7a&Cq'Ka&C$$0-8-B-B*] "?*.qr(2;(2222;(222222;222;222(2222222% ?![3v;%>>M?C(F2222=F222222=222=222222F222F2222222% C!]S]%BBMC @=PPC3(,%+sk    
IAI B)D
	I
	D.D)$I)D..I2CHI	H&H!I!H&&!IIc           	         d}	  | |i | y # t         $ r}|j                  dd      }t        |dd      s|rt        |      }nu|d   }t        |      }|j                  Xt        |j                        }|d   }	d}
ddlm}  |||	      D ]  \  }}||\  }}nt               }i }||\  }}}nt               }i }	 ||k(  }|st        j                  d	|fd
||f      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d }n'# t         $ r}|
dt        |      z   z  }
Y d }~nd }~ww xY w	 ||k(  }|st        j                  d	|fd
||f      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d }# t         $ r}|
dt        |      z   z  }
Y d }~d }~ww xY w |
r|d|
z   z  }t        |      }d|_        |d }~ww xY w)NT	any_orderFr   r   r   r   )zip_longestr   r   r   expect_argsr   r   r   r   r   expect_kwargsr   r   )r   getr}   r   call_args_listrC   	itertoolsr   tupler   r   r   r   r   r   r   r   )r   rt   r2   r   rv   r   r   r   actual_callsexpect_callsr   r   actual_callexpect_callr   r   _r   r   r   r   r   r   r   s                           r    assert_has_calls_wrapperr    s@    )00 &JJ{E2	13Q79a&Cq'Ka&C))5#K$>$>?#Aw "10;L,0W G,K".5@2]&+g(*".8C5;&+g(*C*k9999{k999999{999{999999k999k9999999) C%s6{)BBCG,====}======}===}================) G%X)FFG'G* !@=PPC3(,%M&sk    
KB&K>CFK	F2F-(K-F22K6CJK	J,J'!K'J,,"KKc                  4    d}t        t        d   g| i | y )NTassert_not_calledr   _mock_module_originalsrt   r2   r   s      r    wrap_assert_not_calledr	  *  !    )*=>PPPr   c                  4    d}t        t        d   g| i | y )NTassert_called_withr  r  s      r    wrap_assert_called_withr  /  !    )*>?Q$Q&Qr   c                  4    d}t        t        d   g| i | y )NTassert_called_oncer  r  s      r    wrap_assert_called_oncer  4  r  r   c                  4    d}t        t        d   g| i | y )NTassert_called_once_withr  r  s      r    wrap_assert_called_once_withr  9  s!    )*CDVtVvVr   c                  4    d}t        t        d   g| i | y )NTassert_has_calls)r  r  r  s      r    wrap_assert_has_callsr  >  s)    1259=Cr   c                  4    d}t        t        d   g| i | y )NTassert_any_callr  r  s      r    wrap_assert_any_callr  E  s!    )*;<NtNvNr   c                  4    d}t        t        d   g| i | y )NTassert_calledr  r  s      r    wrap_assert_calledr  J  s     )/:LTLVLr   c                  4    d}t        t        d   g| i | y )NTassert_not_awaitedr  r  s      r    wrap_assert_not_awaitedr   O  r  r   c                  4    d}t        t        d   g| i | y )NTassert_awaited_withr  r  s      r    wrap_assert_awaited_withr#  T  !    )*?@R4R6Rr   c                  4    d}t        t        d   g| i | y )NTassert_awaited_oncer  r  s      r    wrap_assert_awaited_oncer'  Y  r$  r   c                  4    d}t        t        d   g| i | y )NTassert_awaited_once_withr  r  s      r    wrap_assert_awaited_once_withr*  ^  s"    )*DEWWPVWr   c                  4    d}t        t        d   g| i | y )NTassert_has_awaitsr  r  s      r    wrap_assert_has_awaitsr-  c  r
  r   c                  4    d}t        t        d   g| i | y )NTassert_any_awaitr  r  s      r    wrap_assert_any_awaitr0  h  s!    )*<=OOOr   c                  4    d}t        t        d   g| i | y )NTassert_awaitedr  r  s      r    wrap_assert_awaitedr3  m  s!    )*:;MdMfMr   rF   c                 P   t         ryt        |       }t        t        t        t
        t        t        t        d}|j                         D ]q  \  }}	 t        |j                  |      }|t         |<   |j                  j                  |j                  ||      }|j                          t         j#                  |       s t%        |d      rt&        t(        t*        t,        t.        t0        t2        d}|j                         D ]q  \  }}	 t        |j4                  |      }|t         |<   |j                  j                  |j4                  ||      }|j                          t         j#                  |       s | j7                  t8               y# t        $ r Y Lw xY w# t        $ r Y w xY w)z
    Wrap assert methods of mock module so we can hide their traceback and
    add introspection information to specified argument asserts.
    N)r  r  r  r  r  r  r  rH   )r2  r&  r"  r)  r/  r,  r  )r  r   r  r  r  r  r  r  r	  itemsr}   rO   AttributeErrorr$   r   r   _mock_module_patchesr5   rR   r3  r'  r#  r*  r0  r-  r   rH   add_cleanupunwrap_assert_methods)rF   rK   wrappersrw   ry   originalpatcherasync_wrapperss           r    wrap_assert_methodsr>  r  s    !&)K ,55#?/13H $>>+ -	{::FCH *2v&##**;+F+FPWX##G,- {K(1#;#;(E 5!7"9
  .335 	1OFG";#8#8&A .6"6*!''..{/D/DfgVGMMO ''0	1 ,-7  		( " s$   F	F		FF	F%$F%c                      t         D ]  } 	 | j                           g t         d d  t        j                          y # t        $ r}t        |      dk(  rn Y d }~Rd }~ww xY w)Nz stop called on unstarted patcher)r7  r9   RuntimeErrorr   r  r=   )r<  rv   s     r    r9  r9    sd    ' 
	LLN !  "  	
 1v;; 	s   ;	AAAparserc                 T    | j                  ddd       | j                  ddd       y )Nmock_traceback_monkeypatchzRMonkeypatch the mock library to improve reporting of the assert_called_... methodsTdefaultmock_use_standalone_modulezPUse standalone "mock" (from PyPI) instead of builtin "unittest.mock" on Python 3F)addini)rA  s    r    pytest_addoptionrH    s<    
MM$	$	   MM$		  r   c                     | j                  dd      }t        | j                  d            r|dk7  rt        |        y y y )Nz--tbautorD  rC  native)	getoptionr   getinir>  )rF   tbs     r    pytest_configurerO    sC    			&&		1B&--(DEF(NF#  	Gr   rB   )Lr   r   _pytest.assertion.rewrite	assertionrewriter   r~   r   r   unittest.mockr   r   dataclassesr   r   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   pytest_utilr   r   r   r#   rH   r   rN   rP   r%   UserWarningr   r"   r(   rE   r   fixturemockerclass_mockermodule_mockerpackage_mockersession_mockerr7  r  r   r  r	  r  r  r  r  r  r  r   r#  r'  r*  r-  r0  r3  r>  r9  rH  rO  r   r   r    <module>r_     s           !                  " $T]''MMMMMM&&(> >      
      Bo od# )M4,E"F  
	'	",~v~~G,W5.X.w70i090i09   %c3h/8;GJ	>-%c3h/-8;-GJ-	-`Q# Q Q Q
R3 R# R$ R
R3 R# R$ R
W Ws Wt W
   O Os Ot O
Mc MS MT M
R3 R# R$ R
SC S3 S4 S
SC S3 S4 S
X X X X
Q# Q Q Q
P P P P
Ns Nc Nd N
2. 2. 2.j#"S T $S $T $r   