o
    JAf                    @   s  d 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ZddlmZ ddl	m
Z
mZmZ ddlmZ ddlmZmZ G dd deZd	d
 eeD ZdZeZdd Zdd Zdd Zdd Zdd Zdd ZdddZdd Z dd Z!dd  Z"d!d" Z#dd#d$Z$d%d& Z%d'd( Z&d)d* Z'G d+d, d,e(Z)G d-d. d.e(Z*e* Z+e+j,Z,e+j-Z.e+j/Z0h d/Z1d0d1 Z2G d2d3 d3e3Z4d4d5 Z5G d6d7 d7e(Z6G d8d9 d9e(Z7G d:d; d;e7Z8e9e8j:Z;G d<d= d=e3Z<d>d? Z=G d@dA dAe7Z>G dBdC dCe>e8Z?dDdE Z@dFdG ZAdHdI ZBG dJdK dKe(ZCdLdM ZDe,dddddfddNdOdPZE		ddQdRZFe,dddddfddNdSdTZGG dUdV dVe(ZHdWdX ZIdYdZ ZJeEeG_(eHeG_KeFeG_LeJeG_Md[eG_Nd\ZOd]ZPd^Qd_d` ePR D ZSd^Qdad` ePR D ZTh dbZUdcdd ZVded
 d^QeOePeSeTgR D ZWh dfZXdghZYeXeYB ZZeWeUB Z[e[eZB Z\h dhZ]didj dkdj dldj dmdj dnZ^e_e_e_e_doddddpdqddoddrZ`dsdt Zadudv Zbdwdx Zcdydz Zdeaebecedd{Zed|d} ZfG d~d de7ZgG dd dege8ZhG dd degZiG dd dege?ZjG dd de7ZkG dd de7ZlG dd deleie?ZmG dd de(Znen Zodd ZpG dd deqZrerddZs		dddNddZtdd ZuG dd de(ZveweteweojxfZydazdd Z{dddZ|G dd de?Z}dd Z~G dd dZdS ))Mock	MagicMockpatchsentinelDEFAULTANYcallcreate_autospec	AsyncMock
FILTER_DIRNonCallableMockNonCallableMagicMock	mock_openPropertyMockseal    N)iscoroutinefunction)CodeType
ModuleType
MethodType)	safe_repr)wrapspartialc                   @      e Zd ZdS )InvalidSpecErrorN__name__
__module____qualname__ r   r   $/usr/lib/python3.10/unittest/mock.pyr   '       r   c                 C   s   h | ]	}| d s|qS _
startswith).0namer   r   r   	<setcomp>+       r'   Tc                 C   s<   t | rt| tsdS t| drt| d} t| pt| S )NF__func__)_is_instance_mock
isinstancer	   hasattrgetattrr   inspectZisawaitableobjr   r   r   _is_async_obj3   s
   

r1   c                 C   s   t | dd r
t| S dS )N__code__F)r-   r   funcr   r   r   _is_async_func;   s   r5   c                 C   s   t t| tS N)
issubclasstyper   r/   r   r   r   r*   B   s   r*   c                 C   s   t | tpt | tot| tS r6   )r+   BaseExceptionr8   r7   r/   r   r   r   _is_exceptionH   s   
r:   c                 C   s   t | trt| dr| jS | S Nmock)r+   FunctionTypesr,   r<   r/   r   r   r   _extract_mockO   s   r>   c                 C   s   	 t | tr|s| j} d}nt | ts#z| j} W n
 ty"   Y d S w |r+t| d }n| }z| t|fW S  t	y?   Y d S w NT)
r+   r8   __init__r=   __call__AttributeErrorr   r.   	signature
ValueError)r4   Zas_instanceZeat_selfZsig_funcr   r   r   _get_signature_objectX   s$   

rE   Fc                    sN   t | ||  d u rd S  \}   fdd}t| | |t|_ t|_d S )Nc                   s    j |i | d S r6   bindselfargskwargssigr   r   checksigz      z"_check_signature.<locals>.checksig)rE   _copy_func_detailsr8   _mock_check_sig__signature__)r4   r<   	skipfirstinstancerN   r   rL   r   _check_signatureu   s   

rU   c              	   C   s6   dD ]}zt ||t| | W q ty   Y qw d S )N)r   __doc____text_signature__r   __defaults____kwdefaults__)setattrr-   rB   )r4   funcopy	attributer   r   r   rP      s   rP   c                 C   s@   t | trdS t | tttfrt| jS t| dd d urdS dS )NTrA   F)r+   r8   staticmethodclassmethodr   	_callabler)   r-   r/   r   r   r   r_      s   

r_   c                 C   s   t | ttfv S r6   )r8   listtupler/   r   r   r   _is_list   s   rb   c                 C   sH   	 t | tst| dd d uS | f| j D ]}|jdd ur! dS qdS )NrA   TF)r+   r8   r-   __mro____dict__get)r0   baser   r   r   _instance_callable   s   
rg   c                    s   t |t}t|||}|d u r| S |\}  fdd}t|| |j}| s)d}|| d}d| }	t|	| || }
t|
|   |
S )Nc                     s    j | i | d S r6   rF   rJ   rK   rL   r   r   rN      rO   z _set_signature.<locals>.checksigr[   )Z
_checksig_r<   zYdef %s(*args, **kwargs):
    _checksig_(*args, **kwargs)
    return mock(*args, **kwargs))r+   r8   rE   rP   r   isidentifierexec_setup_func)r<   originalrT   rS   resultr4   rN   r&   contextsrcr[   r   rL   r   _set_signature   s$   



rp   c                    s    _ fdd}fdd}fdd}fdd}fd	d
}fdd}fdd}	 fdd}
d _d _d  _t  _t  _t  _j _j	 _	j
 _
| _| _| _|	 _|
 _| _| _| _| _ _d S )Nc                         j | i |S r6   )assert_called_withrh   r<   r   r   rr         z'_setup_func.<locals>.assert_called_withc                     rq   r6   )assert_calledrh   rs   r   r   ru      rt   z"_setup_func.<locals>.assert_calledc                     rq   r6   )assert_not_calledrh   rs   r   r   rv      rt   z&_setup_func.<locals>.assert_not_calledc                     rq   r6   )assert_called_oncerh   rs   r   r   rw      rt   z'_setup_func.<locals>.assert_called_oncec                     rq   r6   )assert_called_once_withrh   rs   r   r   rx      rt   z,_setup_func.<locals>.assert_called_once_withc                     rq   r6   )assert_has_callsrh   rs   r   r   ry      rt   z%_setup_func.<locals>.assert_has_callsc                     rq   r6   )assert_any_callrh   rs   r   r   rz      rt   z$_setup_func.<locals>.assert_any_callc                     sB   t   _t   _   j} t| r| ur|   d S d S d S r6   )	_CallListmethod_calls
mock_calls
reset_mockreturn_valuer*   )retr[   r<   r   r   r~      s   z_setup_func.<locals>.reset_mockFr   )r<   called
call_count	call_argsr{   call_args_listr|   r}   r   side_effect_mock_childrenrr   rx   ry   rz   r~   ru   rv   rw   rR   _mock_delegate)r[   r<   rM   rr   ru   rv   rw   rx   ry   rz   r~   r   r   r   rk      s8   
rk   c                    sJ   t jj _d _d  _t  _ fdd}dD ]}t |t|| qd S )Nr   c                   s   t  j| |i |S r6   )r-   r<   )attrrJ   rK   rs   r   r   wrapper     z"_setup_async_mock.<locals>.wrapper)assert_awaitedassert_awaited_onceassert_awaited_withassert_awaited_once_withassert_any_awaitassert_has_awaitsassert_not_awaited)	asyncio
coroutines_is_coroutineawait_count
await_argsr{   await_args_listrZ   r   )r<   r   r\   r   rs   r   _setup_async_mock   s   
r   c                 C   s   d| dd  | kS )N__%s__   r   r&   r   r   r   	_is_magic  rO   r   c                   @   &   e Zd Z	 dd Zdd Zdd ZdS )_SentinelObjectc                 C   s
   || _ d S r6   r   rI   r&   r   r   r   r@        
z_SentinelObject.__init__c                 C   
   d| j  S Nzsentinel.%sr   rI   r   r   r   __repr__  r   z_SentinelObject.__repr__c                 C   r   r   r   r   r   r   r   
__reduce__   r   z_SentinelObject.__reduce__N)r   r   r   r@   r   r   r   r   r   r   r     s
    r   c                   @   r   )	_Sentinelc                 C   s
   i | _ d S r6   )
_sentinelsr   r   r   r   r@   &  r   z_Sentinel.__init__c                 C   s   |dkrt | j|t|S )N	__bases__)rB   r   
setdefaultr   r   r   r   r   __getattr__)  s   z_Sentinel.__getattr__c                 C      dS )Nr   r   r   r   r   r   r   /     z_Sentinel.__reduce__N)r   r   r   r@   r   r   r   r   r   r   r   $  s
    r   >   
_mock_name_mock_parentr   _mock_return_value_mock_new_namer   _mock_new_parent_mock_side_effectc                 C   s8   t |  d|  }| |fdd}| |fdd}t||S )NZ_mock_c                 S   s"   | j }|d u rt| |S t||S r6   )r   r-   )rI   r&   	_the_namerM   r   r   r   _getD  s   

z"_delegating_property.<locals>._getc                 S   s,   | j }|d u r|| j|< d S t||| d S r6   )r   rd   rZ   )rI   valuer&   r   rM   r   r   r   _setI  s   z"_delegating_property.<locals>._set)_allowed_namesaddproperty)r&   r   r   r   r   r   r   _delegating_propertyA  s
   

r   c                   @      e Zd Zdd Zdd ZdS )r{   c                 C   sl   t |tst| |S t|}t| }||krdS td|| d D ]}| |||  }||kr3 dS q"dS )NFr      T)r+   r`   __contains__lenrange)rI   r   Z	len_valueZlen_selfiZsub_listr   r   r   r   V  s   
z_CallList.__contains__c                 C   s   t t| S r6   )pprintZpformatr`   r   r   r   r   r   d     z_CallList.__repr__N)r   r   r   r   r   r   r   r   r   r{   T  s    r{   c                 C   s   t |}t|s
dS |js|js|jd us|jd urdS | }|d ur/||u r(dS |j}|d us"|r7| |_||_|r?| |_||_dS )NFT)r>   r*   r   r   r   r   )parentr   r&   new_name_parentr   r   r   _check_and_set_parenth  s(   

r   c                   @   r   )	_MockIterc                 C   s   t || _d S r6   )iterr0   )rI   r0   r   r   r   r@     r   z_MockIter.__init__c                 C   s
   t | jS r6   )nextr0   r   r   r   r   __next__  r   z_MockIter.__next__N)r   r   r   r@   r   r   r   r   r   r     s    r   c                   @   s   e Zd ZeZdZdd ZdS )BaseNc                O      d S r6   r   rH   r   r   r   r@     r   zBase.__init__)r   r   r   r   r   r   r@   r   r   r   r   r     s    r   c                   @   sl  e Zd Z	 dd Z			dKddZdd	 ZdLd
dZ		dMddZdd Zdd Z	dZ
eee	e
Zedd ZedZedZedZedZedZdd Zdd ZeeeZdNddddd Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 ZdOd2d3Z d4d5 Z!d6d7 Z"d8d9 Z#d:d; Z$d<d= Z%d>d? Z&d@dA Z'dLdBdCZ(dDdE Z)dFdG Z*dPdIdJZ+dS )Qr   c                O   s|   | f}t | ts*tj| g|R i |j}|d|d}|d ur*t|r*t| f}t| j|d| j	i}t
t| |}|S )Nspec_setspecrV   )r7   AsyncMockMixin	_MOCK_SIGZbind_partialZ	argumentsre   r1   r8   r   rV   _safe_superr   __new__)clsrJ   kwbasesZ
bound_argsZspec_argnewrT   r   r   r   r     s   
zNonCallableMock.__new__N Fc                 K   s   |d u r|}| j }||d< ||d< ||d< ||d< d|d< |d ur%|}d}|
d u r-|d u}
| |||	|
 i |d< ||d	< d |d
< d|d< d |d< d|d< t |d< t |d< t |d< ||d< |rj| jdi | tt| |||||| d S )Nr   r   r   r   F_mock_sealedTr   _mock_wrapsr   Z_mock_calledZ_mock_call_argsr   Z_mock_call_countZ_mock_call_args_listZ_mock_mock_callsr|   _mock_unsafer   )rd   _mock_add_specr{   configure_mockr   r   r@   )rI   r   r   r&   r   r   _spec_state	_new_name_new_parent_spec_as_instance	_eat_selfunsaferK   rd   r   r   r   r@     s<   




zNonCallableMock.__init__c                 C   s2   	 t |}d |_d |_d|_d |_t| || d S Nr   )r>   r   r   r   r   rZ   )rI   r<   r\   Z
inner_mockr   r   r   attach_mock  s   zNonCallableMock.attach_mockc                 C   s   	 |  || d S r6   )r   rI   r   r   r   r   r   mock_add_spec  s   zNonCallableMock.mock_add_specc                 C   s   d }d }g }t |D ]}tt||d r|| q
|d ur>t|s>t|tr*|}nt|}t|||}	|	o9|	d }t |}| j}
||
d< ||
d< ||
d< ||
d< ||
d< d S )Nr   _spec_class	_spec_set_spec_signature_mock_methods_spec_asyncs)	dirr   r-   appendrb   r+   r8   rE   rd   )rI   r   r   r   r   r   r   r   r   resrd   r   r   r   r     s,   

zNonCallableMock._mock_add_specc                 C   s8   | j }| jd ur| jj}|tu r| j| dd}|| _|S )N()r   r   )r   r   r   r   _get_child_mock)rI   r   r   r   r   Z__get_return_value  s   
z"NonCallableMock.__get_return_valuec                 C   s.   | j d ur|| j _d S || _t| |d d d S )Nr   )r   r   r   r   )rI   r   r   r   r   Z__set_return_value  s   
z"NonCallableMock.__set_return_valuez1The value to be returned when the mock is called.c                 C   s   | j d u r	t| S | j S r6   )r   r8   r   r   r   r   	__class__  s   
zNonCallableMock.__class__r   r   r   r   r}   c                 C   sN   | j }|d u r
| jS |j}|d ur%t|s%t|ts%t|s%t|}||_|S r6   )r   r   r   callabler+   r   r:   )rI   	delegatedZsfr   r   r   Z__get_side_effect+  s   z!NonCallableMock.__get_side_effectc                 C   s*   t |}| j}|d u r|| _d S ||_d S r6   )	_try_iterr   r   r   )rI   r   r   r   r   r   Z__set_side_effect6  s
   

z!NonCallableMock.__set_side_effectr   r   c                C   s   	 |d u rg }t | |v rd S |t |  d| _d | _d| _t | _t | _t | _|r0t	| _
|r5d | _| j D ]}t|tsE|tu rFq:|j|||d q:| j
}t|ra|| urc|| d S d S d S )NFr   r   )idr   r   r   r   r{   r}   r   r|   r   r   r   r   valuesr+   
_SpecState_deletedr~   r*   )rI   Zvisitedr   r   childr   r   r   r   r~   A  s0   zNonCallableMock.reset_mockc                K   sZ   	 t | dd dD ]\}}|d}| }| }|D ]}t||}qt||| qd S )Nc                 S   s   | d  dS )Nr   .)count)entryr   r   r   <lambda>l  s    z0NonCallableMock.configure_mock.<locals>.<lambda>)keyr   )sorteditemssplitpopr-   rZ   )rI   rK   argvalrJ   finalr0   r   r   r   r   r   _  s   
zNonCallableMock.configure_mockc                 C   sF  |dv rt || jd ur|| jvs|tv rt d| nt|r%t || js7|dr7t |d|d| j|}|tu rEt ||d u rgd }| j	d urVt
| j	|}| j| |||| d}|| j|< |S t|trzt|j|j|j|j|j}W n  ty   | jd p| }td|d	|d
| d|jd	w || j|< |S )N>   r   r   zMock object has no attribute %r)assertZassretZasertZaseertZassrtz6 is not a valid assertion. Use a spec for the mock if z is meant to be an attribute.)r   r&   r   r   r   r   Cannot autospec attr  from target , as it has already been mocked out. [target=, attr=])rB   r   _all_magicsr   r   r$   r   re   r   r   r-   r   r+   r   r   r   r   rT   r   r&   r   rd   )rI   r&   rm   r   target_namer   r   r   r   u  s`   





zNonCallableMock.__getattr__c                 C   s   | j g}| j}| }d}|dgkrd}|d ur0|}||j |  d}|j dkr)d}|j}|d ustt|}|jp:d}t|dkrK|d dvrK|d7 }||d< d|S )Nr   r   r   r<   r   )r   z().r   )r   r   r   r`   reversedr   r   join)rI   Z
_name_listr   ZlastdotZ_firstr   r   r   _extract_mock_name  s*   




z"NonCallableMock._extract_mock_namec                 C   s^   |   }d}|dvrd| }d}| jd ur"d}| jrd}|| jj }dt| j||t| f S )Nr   )r<   zmock.z name=%rz spec=%rz spec_set=%rz<%s%s%s id='%s'>)r  r   r   r   r8   r   )rI   r&   Zname_stringZspec_stringr   r   r   r     s    
zNonCallableMock.__repr__c                 C   sx   	 t st| S | jpg }tt| }t| j}dd | j	 D }dd |D }dd |D }t
t|| | | S )Nc                 S   s   g | ]
\}}|t ur|qS r   )r   )r%   Zm_nameZm_valuer   r   r   
<listcomp>  s
    z+NonCallableMock.__dir__.<locals>.<listcomp>c                 S   s   g | ]	}| d s|qS r!   r#   r%   er   r   r   r    r(   c                 S   s"   g | ]}| d rt|r|qS r!   )r$   r   r  r   r   r   r    s    
)r
   object__dir__r   r   r8   r`   rd   r   r  r  set)rI   extrasZ	from_typeZ	from_dictZfrom_child_mocksr   r   r   r    s   


zNonCallableMock.__dir__c                    sJ  |t v rt||S jr#jd ur#|jvr#|jvr#td| |tv r/d| }t||tv rqjd urC|jvrCtd| t	|s\t
t|t|| |  fdd}n*t|d | t
t|| |j|< n|dkrz|_d S t|||r|j|< jrt|s  d| }td| t||S )Nz!Mock object has no attribute '%s'z.Attempting to set unsupported magic method %r.c                     s    g| R i |S r6   r   rJ   r   rl   rI   r   r   r        z-NonCallableMock.__setattr__.<locals>.<lambda>r   r   zCannot set )r   r  __setattr__r   r   rd   rB   _unsupported_magicsr  r*   rZ   r8   _get_methodr   r   r   r   r,   r  )rI   r&   r   msg	mock_namer   r  r   r     s8   


zNonCallableMock.__setattr__c                 C   s   |t v r|t| jv rtt| | || jvrd S | j|t}|| jv r.tt| 	| n|t
u r6t||tur>| j|= t
| j|< d S r6   )r  r8   rd   delattrr   re   _missingr   r   __delattr__r   rB   )rI   r&   r0   r   r   r   r'    s   

zNonCallableMock.__delattr__c                 C   s   | j pd}t|||S r;   )r   _format_call_signaturerI   rJ   rK   r&   r   r   r   _format_mock_call_signature  s   
z+NonCallableMock._format_mock_call_signaturer   c                 C   s.   d}|  ||}| j}| j | }||||f S )Nz.expected %s not found.
Expected: %s
Actual: %s)r*  r   )rI   rJ   rK   actionmessageexpected_stringr   Zactual_stringr   r   r   _format_mock_failure_message$  s
   
z,NonCallableMock._format_mock_failure_messagec                 C   sl   	 |s| j S d }|ddd}| j}|D ]}||}|d u s&t|tr) |S t|}|j}|j }q|S )Nr   r   r   )r   replacer  r   re   r+   r   r>   )rI   r&   rM   nameschildrenr   r   r   r   _get_call_signature_from_name,  s   

	z-NonCallableMock._get_call_signature_from_namec              
   C   s   	 t |trt|dkr| |d }n| j}|d urVt|dkr(d}|\}}n|\}}}z|j|i |}t||j|jW S  t	yU } z|
d W  Y d }~S d }~ww |S )Nr   r   r   )r+   ra   r   r2  r   rG   r   rJ   rK   	TypeErrorwith_traceback)rI   _callrM   r&   rJ   rK   Z
bound_callr  r   r   r   _call_matcherM  s"   

zNonCallableMock._call_matcherc                 C   s2   	 | j dkrd| jpd| j |  f }t|d S )Nr   z9Expected '%s' to not have been called. Called %s times.%sr<   r   r   _calls_reprAssertionErrorrI   r#  r   r   r   rv   h     
z!NonCallableMock.assert_not_calledc                 C   s&   	 | j dkrd| jpd }t|d S )Nr   z"Expected '%s' to have been called.r<   )r   r   r9  r:  r   r   r   ru   r  s   
zNonCallableMock.assert_calledc                 C   s2   	 | j dksd| jpd| j |  f }t|d S )Nr   z:Expected '%s' to have been called once. Called %s times.%sr<   r7  r:  r   r   r   rw   z  r;  z"NonCallableMock.assert_called_oncec                   s   	 j d u r }d}d||f }t| fdd}t fdd}j }||krDt|tr<|nd }t| |d S )Nznot called.z0expected call not found.
Expected: %s
Actual: %sc                     s     } | S r6   r.  r#  rJ   rK   rI   r   r   _error_message  s   z:NonCallableMock.assert_called_with.<locals>._error_messageTtwo)r   r*  r9  r6  _Callr+   	Exception)rI   rJ   rK   expectedactualZerror_messager?  causer   r>  r   rr     s   
z"NonCallableMock.assert_called_withc                O   s>   	 | j dksd| jpd| j |  f }t|| j|i |S )Nr   z3Expected '%s' to be called once. Called %s times.%sr<   )r   r   r8  r9  rr   rI   rJ   rK   r#  r   r   r   rx     s   
z'NonCallableMock.assert_called_once_withc           	   	      s  	  fdd|D }t dd |D d }t fdd jD }|sN||vrL|d u r-d}n
ddd |D }t| d	t|  jd
dd |d S t|}g }|D ]}z|| W qV t	ym   |
| Y qVw |rtd jpvdt||f |d S )Nc                       g | ]}  |qS r   r6  r%   cr   r   r   r    r  z4NonCallableMock.assert_has_calls.<locals>.<listcomp>c                 s       | ]
}t |tr|V  qd S r6   r+   rC  r  r   r   r   	<genexpr>      z3NonCallableMock.assert_has_calls.<locals>.<genexpr>c                 3       | ]}  |V  qd S r6   rI  rJ  r   r   r   rN        zCalls not found.z+Error processing expected calls.
Errors: {}c                 S      g | ]}t |tr|nd qS r6   rM  r  r   r   r   r        
Expected: ZActual)prefixr   z@%r does not contain all of %r in its call list, found %r insteadr<   )r   r{   r}   formatr9  r8  rstripr`   removerD   r   r   ra   )	rI   calls	any_orderrD  rF  Z	all_callsproblem	not_foundkallr   r   r   ry     sX   	z NonCallableMock.assert_has_callsc                   l   	   t||fdd}t|tr|nd } fdd jD }|s'|t|vr4 ||}td| |d S )NTr@  c                    rH  r   rI  rJ  r   r   r   r    r  z3NonCallableMock.assert_any_call.<locals>.<listcomp>z%s call not found)r6  rB  r+   rC  r   _AnyComparerr*  r9  rI   rJ   rK   rD  rF  rE  r-  r   r   r   rz     s   zNonCallableMock.assert_any_callc                K   s   	 | d}|| jd v rtdi |S | jr.d|v r"d|d  nd}|  | }t|t| }t|tr>|t	v r>t}n1t|t
rU|tv sO| jrR|| jv rRt}nt}nt|tsjt|trbt}nt|trit}n|jd }|di |S )Nr   r   r&   r   r   r   r   )re   rd   r	   r   r  rB   r8   r7   r   _async_method_magicsr   _all_sync_magicsr   CallableMixinr   r   r   rc   )rI   r   r   r\   r$  _typeklassr   r   r   r     s4   






zNonCallableMock._get_child_mockCallsc                 C   s$   	 | j sdS d| dt| j  dS )Nr   
z: r   )r}   r   )rI   rU  r   r   r   r8  	  s   zNonCallableMock._calls_repr)NNNNNNr   NFNFF)FFr6   )r   )rf  ),r   r   r   r   r@   r   r   r   Z"_NonCallableMock__get_return_valueZ"_NonCallableMock__set_return_valueZ"_NonCallableMock__return_value_docr   r   r   r   r   r   r   r   r}   Z!_NonCallableMock__get_side_effectZ!_NonCallableMock__set_side_effectr   r~   r   r   r  r   r  r   r'  r*  r.  r2  r6  rv   ru   rw   rr   rx   ry   rz   r   r8  r   r   r   r   r     sb    
-
	


/'
!


-&r   c                   @   s   e Zd Z	 dd ZdS )r_  c                 C   s,   | D ]}t dd t||D r dS qdS )Nc                 S   s   g | ]\}}||kqS r   r   )r%   rD  rE  r   r   r   r  !  s    z-_AnyComparer.__contains__.<locals>.<listcomp>TF)allzip)rI   itemr5  r   r   r   r     s   z_AnyComparer.__contains__N)r   r   r   r   r   r   r   r   r_    s    r_  c                 C   sF   | d u r| S t | r| S t| r| S zt| W S  ty"   |  Y S w r6   )r:   r_   r   r3  r/   r   r   r   r   )  s   
r   c                
   @   sR   e Zd Zddedddddddf
ddZdd Zdd Zd	d
 Zdd Zdd Z	dS )rc  Nr   c              	   K   s:   || j d< tt| j|||||||	|
fi | || _d S )Nr   )rd   r   rc  r@   r   )rI   r   r   r   r   r&   r   r   r   r   r   rK   r   r   r   r@   :  s   



zCallableMixin.__init__c                O   r   r6   r   rH   r   r   r   rQ   F  s   zCallableMixin._mock_check_sigc                O   s0   | j |i | | j|i | | j|i |S r6   )rQ   _increment_mock_call
_mock_callrH   r   r   r   rA   K  s   zCallableMixin.__call__c                O   s   | j |i |S r6   )_execute_mock_callrH   r   r   r   rm  S  rt   zCallableMixin._mock_callc                O   s
  d| _ |  jd7  _t||fdd}|| _| j| | jd u}| j}| j}|dk}| j	td||f | j
}|d ur|rW|jt|||f |jd u}|rW|jd | }t|||f}	|j	|	 |jrz|rld}
nd}
|jdk}|j|
 | }|j
}|d us<d S d S )NTr   r@  r   r   r   )r   r   rB  r   r   r   r   r   r   r}   r   r|   )rI   rJ   rK   r5  Zdo_method_callsZmethod_call_nameZmock_call_nameZ	is_a_callr   Zthis_mock_callr  r   r   r   rl  V  s6   


z"CallableMixin._increment_mock_callc                O   s   | j }|d ur)t|r|t|st|}t|r|n||i |}|tur)|S | jtur1| jS | jd ur>| j|i |S | jS r6   )r   r:   r_   r   r   r   r   r   )rI   rJ   rK   effectrm   r   r   r   rn    s"   

z CallableMixin._execute_mock_call)
r   r   r   r   r@   rQ   rA   rm  rl  rn  r   r   r   r   rc  8  s    
.rc  c                   @   r   )r   Nr   r   r   r   r   r     r    r   c                 C   s2   zt | |W S  ty   t| t | | Y S w r6   )r-   rB   
__import__)thingcompimport_pathr   r   r   _dot_lookup  s   rt  c                 C   sB   |  d}|d}t|}|D ]}|d| 7 }t|||}q|S )Nr   r   z.%s)r  r  rp  rt  )target
componentsrs  rq  rr  r   r   r   	_importer  s   

rw  c                 C   s(   d}|D ]}|| v rt |dqd S )N)Z	autospectZ	auto_specZset_specz5 might be a typo; use unsafe=True if this is intended)RuntimeError)Zkwargs_to_checkZtyposZtypor   r   r   _check_spec_arg_typos  s   ry  c                   @   s   e Zd ZdZg ZddddZdd Zdd	 Zd
d Ze	j
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )_patchNFr   c
                C   s   |d ur|t urtd|d urtd|
st|	 t|r)td|d|dt|r8td|d|d|| _|| _|| _|| _|| _	|| _
d| _|| _|| _|	| _g | _d S )Nz,Cannot use 'new' and 'new_callable' togetherz1Cannot use 'autospec' and 'new_callable' togetherzCannot spec attr z0 as the spec has already been mocked out. [spec=r  z? as the spec_set target has already been mocked out. [spec_set=F)r   rD   ry  r*   r   getterr\   r   new_callabler   createZ	has_localr   autospecrK   additional_patchers)rI   r|  r\   r   r   r~  r   r  r}  rK   r   r   r   r   r@     sD   
z_patch.__init__c              
   C   sH   t | j| j| j| j| j| j| j| j| j		}| j
|_
dd | jD |_|S )Nc                 S   s   g | ]}|  qS r   )copy)r%   pr   r   r   r  #      z_patch.copy.<locals>.<listcomp>)rz  r|  r\   r   r   r~  r   r  r}  rK   attribute_namer  )rI   patcherr   r   r   r    s   z_patch.copyc                 C   s2   t |tr
| |S t|r| |S | |S r6   )r+   r8   decorate_classr.   r   decorate_async_callabledecorate_callablerI   r4   r   r   r   rA   )  s
   




z_patch.__call__c                 C   sN   t |D ] }|tjsqt||}t|dsq|  }t|||| q|S NrA   )r   r$   r   TEST_PREFIXr-   r,   r  rZ   )rI   re  r   
attr_valuer  r   r   r   r  1  s   

z_patch.decorate_classc                 c   s    g }t  4}|jD ]}||}|jd ur|| q|jtu r'|| q|t	|7 }||fV  W d    d S 1 s>w   Y  d S r6   )

contextlib	ExitStack	patchingsenter_contextr  updater   r   r   ra   )rI   patchedrJ   keywargs
extra_args
exit_stackpatchingr  r   r   r   decoration_helper?  s   





"z_patch.decoration_helperc                    >   t  dr j  S t  fddg_S )Nr  c                     sD    | |\}} |i |W  d    S 1 sw   Y  d S r6   r  rJ   r  ZnewargsZnewkeywargsr4   r  rI   r   r   r  T  s   $z)_patch.decorate_callable.<locals>.patchedr,   r  r   r   r  r   r  r   r  N     
z_patch.decorate_callablec                    r  )Nr  c                     sL    | |\}} |i |I d H W  d    S 1 sw   Y  d S r6   r  r  r  r   r   r  e  s   $z/_patch.decorate_async_callable.<locals>.patchedr  r  r   r  r   r  _  r  z_patch.decorate_async_callablec              	   C   s   |   }| j}t}d}z|j| }W n ttfy#   t||t}Y nw d}|tv r2t|t	r2d| _
| j
sA|tu rAtd||f ||fS )NFTz!%s does not have the attribute %r)r|  r\   r   rd   rB   KeyErrorr-   	_builtinsr+   r   r~  )rI   ru  r&   rl   localr   r   r   get_originalp  s"   
z_patch.get_originalc              
   C   s  	 | j | j| j}}}| j| j}}| j}|  | _|du r!d }|du r'd }|du r-d }|d ur9|d ur9td|d usA|d urI|dvrItd| 	 \}}|t
u r/|d u r/d}	|du rj|}|du ri|}d }n|d urw|du rv|}d }n|du r}|}|d us|d ur|t
u rtdt|trd}	|d u rt|rt}
nt}
i }|d ur|}
n)|d us|d ur|}|d ur|}t|rd|v}nt| }t|rt}
n|rt}
|d ur||d< |d ur||d	< t|
trt|
tr| jr| j|d
< || |
di |}|	r.t|r.|}|d ur|}t|st|st}
|d
 |
d|dd||_nl|d ur|t
ur=td|t
u rFtdt|}|du rQ|}t| jrgtd| jd| jd|dt|rt| jd| j}td| jd|d| jd|d	t|f|| jd|}n|rtd|}|| _|| _ t!" | _#z9t$| j| j| | j%d uri }| j t
u r||| j%< | j&D ]}| j#'|}|j t
u r|| q|W S |W S    | j(t)*  s Y d S )NFzCan't specify spec and autospec)TNz6Can't provide explicit spec_set *and* spec or autospecTz!Can't use 'spec' with create=TruerA   r   r   r&   r   r   zBautospec creates the mock for you. Can't specify autospec and new.z%Can't use 'autospec' with create=Truer  z: as the patch target has already been mocked out. [target=r  r  r   r  r  )r   _namez.Can't pass kwargs to a mock we aren't creatingr   )+r   r   r   r  rK   r}  r|  ru  r3  r  r   r+   r8   r1   r	   r   rb   r   r   r7   r   r\   r  r*   rg   r  r   boolr   r-   r   temp_originalis_localr  r  _exit_stackrZ   r  r  r  __exit__sysexc_info)rI   r   r   r   r  rK   r}  rl   r  ZinheritKlass_kwargsZ	this_specZnot_callabler  Znew_attrr  r  r  r   r   r   	__enter__  s  




















z_patch.__enter__c                 G   s   	 | j r| jturt| j| j| j nt| j| j | js2t| j| jr)| jdv r2t| j| j| j | `| ` | `| j	}| `	|j
| S )N)rV   r   rX   __annotations__rY   )r  r  r   rZ   ru  r\   r%  r~  r,   r  r  )rI   r  r  r   r   r   r    s   

z_patch.__exit__c                 C   s   	 |   }| j|  |S r6   )r  _active_patchesr   rI   rm   r   r   r   start/     z_patch.startc                 C   s6   	 z| j |  W n
 ty   Y d S w | d d d S r6   )r  rX  rD   r  r   r   r   r   stop6     z_patch.stop)r   r   r   r  r  r@   r  rA   r  r  contextmanagerr  r  r  r  r  r  r  r  r   r   r   r   rz    s$    %
 rz  c              
      sL   z
  dd\ }W n tttfy   td w  fdd}||fS )Nr   r   z,Need a valid target to patch. You supplied: c                         t  S r6   rw  r   ru  r   r   r  H      z_get_target.<locals>.<lambda>)rsplitr3  rD   rB   )ru  r\   r|  r   r  r   _get_targetB  s   r  r{  c                   sD   	 t  tu rt d fdd}
t|
||||||||	|d
S )Nz3 must be the actual object to be patched, not a strc                          S r6   r   r   r  r   r   r  b      z_patch_object.<locals>.<lambda>r{  )r8   strr3  rz  )ru  r\   r   r   r~  r   r  r}  r   rK   r|  r   r  r   _patch_objectL  s   

r  c                    s   	 t  tu r fdd}n fdd}|stdt| }|d \}	}
t||	|
|||||i 	}|	|_|dd  D ]\}	}
t||	|
|||||i 	}|	|_|j| q;|S )Nc                      r  r6   r  r   r  r   r   r    r  z!_patch_multiple.<locals>.<lambda>c                      r  r6   r   r   r  r   r   r    r  z=Must supply at least one keyword argument with patch.multipler   r   )	r8   r  rD   r`   r  rz  r  r  r   )ru  r   r~  r   r  r}  rK   r|  r  r\   r   r  Zthis_patcherr   r  r   _patch_multiplei  s.   r  c                K   s*   	 t | \}	}
t|	|
||||||||d
S )Nr{  )r  rz  )ru  r   r   r~  r   r  r}  r   rK   r|  r\   r   r   r   r     s   G

r   c                   @   sX   e Zd Z	 dddZdd Zdd Zd	d
 Zdd Zdd Zdd Z	dd Z
dd ZdS )_patch_dictr   Fc                 K   s,   || _ t|| _| j| || _d | _d S r6   )in_dictdictr   r  clear	_original)rI   r  r   r  rK   r   r   r   r@   	  s
   

z_patch_dict.__init__c                    s.   t  tr
 S t  fdd}|S )Nc                     s,      z | i |W   S   w r6   )r  _unpatch_dictr  frI   r   r   _inner  s   z$_patch_dict.__call__.<locals>._inner)r+   r8   r  r   )rI   r  r  r   r  r   rA     s
   

z_patch_dict.__call__c                 C   sX   t |D ]%}t||}|tjr)t|dr)t| j| j| j	}||}t
||| q|S r  )r   r-   r$   r   r  r,   r  r  r   r  rZ   )rI   re  r   r  Z	decoratorZ	decoratedr   r   r   r     s   
z_patch_dict.decorate_classc                 C   s   	 |    | jS r6   )r  r  r   r   r   r   r  +  s   z_patch_dict.__enter__c                 C   s   | j }t| jtrt| j| _| j}| j}z| }W n ty1   i }|D ]}|| ||< q&Y nw || _|r;t	| z|
| W d S  tyX   |D ]}|| ||< qLY d S w r6   )r   r+   r  r  rw  r  r  rB   r  _clear_dictr  )rI   r   r  r  rl   r  r   r   r   r  1  s.   z_patch_dict._patch_dictc                 C   sP   | j }| j}t| z|| W d S  ty'   |D ]}|| ||< qY d S w r6   )r  r  r  r  rB   )rI   r  rl   r  r   r   r   r  M  s   z_patch_dict._unpatch_dictc                 G   s   	 | j d ur
|   dS NF)r  r  )rI   rJ   r   r   r   r  Z  s   
z_patch_dict.__exit__c                 C   s   	 |   }tj|  |S r6   )r  rz  r  r   r  r   r   r   r  a  r  z_patch_dict.startc                 C   s6   	 zt j|  W n
 ty   Y d S w | d d d S r6   )rz  r  rX  rD   r  r   r   r   r   r  h  r  z_patch_dict.stopN)r   F)r   r   r   r@   rA   r  r  r  r  r  r  r  r   r   r   r   r    s    
	r  c                 C   s<   z|    W d S  ty   t| }|D ]}| |= qY d S w r6   )r  rB   r`   )r  keysr  r   r   r   r  s  s   r  c                  C   s   	 t tjD ]} |   qd S r6   )r  rz  r  r  )r   r   r   r   _patch_stopall|  s   
r  testzlt le gt ge eq ne getitem setitem delitem len contains iter hash str sizeof enter exit divmod rdivmod neg pos abs invert complex int float index round trunc floor ceil bool next fspath aiter zHadd sub mul matmul div floordiv mod lshift rshift and xor or pow truediv c                 c       | ]}d | V  qdS )zi%sNr   r%   nr   r   r   rN        rN  c                 c   r  )zr%sNr   r  r   r   r   rN    r  >   __getnewargs____reversed____getinitargs__
__format__r   __get____getformat____reduce_ex____subclasses____set__r   __setformat____getnewargs_ex__r  __setstate__
__delete____missing____getstate__c                    s   	  fdd}| |_ |S )Nc                   s    | g|R i |S r6   r   rI   rJ   r   r3   r   r   method  r   z_get_method.<locals>.method)r   )r&   r4   r  r   r3   r   r"    s   r"  c                 C   s   h | ]}d | qS )r   r   )r%   r  r   r   r   r'     r  >   
__aenter__	__anext__	__aexit__	__aiter__>   __del__r   r   __instancecheck__r@   __subclasscheck__r   __prepare__c                 C   
   t | S r6   )r  __hash__r   r   r   r   r       
 r  c                 C   r  r6   )r  __str__r   r   r   r   r    r  c                 C   r  r6   )r  
__sizeof__r   r   r   r   r    r  c                 C   s"   t | j d|   dt|  S )N/)r8   r   r  r   r   r   r   r   r    s   " )r  r  r  
__fspath__r   y              ?g      ?)__lt____gt____le____ge____int__r   __len__r  __complex__	__float____bool__	__index__r  c                        fdd}|S )Nc                    s$    j j}|tur
|S  | u rdS tS r?   )__eq__r   r   NotImplemented)otherret_valr   r   r   r    s   z_get_eq.<locals>.__eq__r   )rI   r  r   r   r   _get_eq     r  c                    r  )Nc                    s     j jturtS  | u rdS tS r  )__ne__r   r   r  )r   r   r   r   r    s
   z_get_ne.<locals>.__ne__r   )rI   r  r   r   r   _get_ne  s   r  c                    r  )Nc                     s     j j} | tu rtg S t| S r6   )__iter__r   r   r   r  r   r   r   r    s   z_get_iter.<locals>.__iter__r   )rI   r  r   r   r   	_get_iter  r  r  c                    r  )Nc                     s(    j j} | tu rttg S tt| S r6   )r  r   r   _AsyncIteratorr   r  r   r   r   r    s   z"_get_async_iter.<locals>.__aiter__r   )rI   r  r   r   r   _get_async_iter  s   r
  )r  r  r  r  c                 C   sf   t |t}|tur||_d S t|}|d ur!|| }||_d S t|}|d ur1|| |_d S d S r6   )_return_valuesre   r   r   _calculate_return_value_side_effect_methodsr   )r<   r  r&   fixedZreturn_calculatorr   Zside_effectorr   r   r   _set_return_value  s   

r  c                   @   r   )
MagicMixinc                O   *   |    tt| j|i | |    d S r6   )_mock_set_magicsr   r  r@   r  r   r   r   r@   !     zMagicMixin.__init__c                 C   s   t tB }|}t| dd d ur,|| j}t }|| }|D ]}|t| jv r+t| | q|tt| j }t| }|D ]}t	||t
||  q;d S )Nr   )_magicsra  r-   intersectionr   r  r8   rd   r%  rZ   
MagicProxy)rI   Zorig_magicsZthese_magicsZremove_magicsr   rd  r   r   r   r  '  s   
zMagicMixin._mock_set_magicsN)r   r   r   r@   r  r   r   r   r   r     s    r  c                   @      e Zd Z	 dddZdS )r   Fc                 C      	 |  || |   d S r6   r   r  r   r   r   r   r   A     z"NonCallableMagicMock.mock_add_specNrh  r   r   r   r   r   r   r   r   r   ?  s    r   c                   @   s   e Zd Zdd ZdS )AsyncMagicMixinc                O   r  r6   )r  r   r  r@   r  r   r   r   r@   L  r  zAsyncMagicMixin.__init__Nr   r   r   r@   r   r   r   r   r  K  s    r  c                   @   r  )r   Fc                 C   r  r6   r  r   r   r   r   r   \  r  zMagicMock.mock_add_specNrh  r  r   r   r   r   r   Q  s    
r   c                   @   s&   e Zd Zdd Zdd ZdddZdS )	r  c                 C   s   || _ || _d S r6   r&   r   )rI   r&   r   r   r   r   r@   h  s   
zMagicProxy.__init__c                 C   s8   | j }| j}|j|||d}t||| t||| |S )N)r&   r   r   )r&   r   r   rZ   r  )rI   r   r   mr   r   r   create_mockl  s   zMagicProxy.create_mockNc                 C   s   |   S r6   )r   )rI   r0   rd  r   r   r   r  u  s   zMagicProxy.__get__r6   )r   r   r   r@   r   r  r   r   r   r   r  g  s    	r  c                       s   e Zd ZedZedZedZ fddZdd Zdd	 Z	d
d Z
dd Zdd Zdd ZdddZdd Z fddZ  ZS )r   r   r   r   c                   s   t  j|i | tjj| jd< d| jd< d | jd< t | jd< ttd}t	j
|_|| jd< d| jd	< t | jd
< i | jd< d | jd< d S )Nr   r   Z_mock_await_countZ_mock_await_argsZ_mock_await_args_listr   r2   r	   r   rX   rY   r  )superr@   r   r   r   rd   r{   r   r   r.   ZCO_COROUTINEco_flagsra   )rI   rJ   rK   	code_mockr   r   r   r@   ~  s   





zAsyncMockMixin.__init__c                   s
  t ||fdd}|  jd7  _|| _| j| | j}|d ur]t|r&|t|sAzt|}W n	 t	y9   t
w t|r@|nt|rP||i |I d H }n||i |}|tur]|S | jture| jS | jd urt| jrz| j|i |I d H S | j|i |S | jS )NTr@  r   )rB  r   r   r   r   r   r:   r_   r   StopIterationStopAsyncIterationr   r   r   r   r   )rI   rJ   rK   r5  ro  rm   r   r   r   rn    s<   


z!AsyncMockMixin._execute_mock_callc                 C   s*   	 | j dkrd| jpd d}t|d S )Nr   	Expected r<   z to have been awaited.r   r   r9  r:  r   r   r   r     s
   
zAsyncMockMixin.assert_awaitedc                 C   s2   	 | j dksd| jpd d| j  d}t|d S Nr   r(  r<   z$ to have been awaited once. Awaited  times.r)  r:  r   r   r   r        
z"AsyncMockMixin.assert_awaited_oncec                   s   	 j d u r }td| d fdd}t fdd}j }||kr@t|tr8|nd }t| |d S )NzExpected await: z
Not awaitedc                     s   j  dd} | S )Nawait)r+  r<  r=  r>  r   r   r?    s   z:AsyncMockMixin.assert_awaited_with.<locals>._error_messageTr@  )r   r*  r9  r6  rB  r+   rC  )rI   rJ   rK   rD  r?  rE  rF  r   r>  r   r     s   
z"AsyncMockMixin.assert_awaited_withc                O   s>   	 | j dksd| jpd d| j  d}t|| j|i |S r*  )r   r   r9  r   rG  r   r   r   r     s   
z'AsyncMockMixin.assert_awaited_once_withc                   r^  )NTr@  c                    rH  r   rI  rJ  r   r   r   r    r  z3AsyncMockMixin.assert_any_await.<locals>.<listcomp>z%s await not found)r6  rB  r+   rC  r   r_  r*  r9  r`  r   r   r   r     s   zAsyncMockMixin.assert_any_awaitFc           	   	      s   	  fdd|D }t dd |D d }t fdd jD }|sI||vrG|d u r-d}n
ddd |D }t| d	t| d
 j |d S t|}g }|D ]}z|| W qQ tyh   || Y qQw |rutdt	|f |d S )Nc                    rH  r   rI  rJ  r   r   r   r  	  r  z4AsyncMockMixin.assert_has_awaits.<locals>.<listcomp>c                 s   rL  r6   rM  r  r   r   r   rN  	  rO  z3AsyncMockMixin.assert_has_awaits.<locals>.<genexpr>c                 3   rP  r6   rI  rJ  r   r   r   rN  	  rQ  zAwaits not found.z,Error processing expected awaits.
Errors: {}c                 S   rR  r6   rM  r  r   r   r   r  	  rS  rT  z	
Actual: z%r not all found in await list)
r   r{   r   rV  r9  r`   rX  rD   r   ra   )	rI   rY  rZ  rD  rF  Z
all_awaitsr[  r\  r]  r   r   r   r     sP   z AsyncMockMixin.assert_has_awaitsc                 C   s2   	 | j dkrd| jpd d| j  d}t|d S )Nr   r(  r<   z# to not have been awaited. Awaited r+  r)  r:  r   r   r   r   !	  r,  z!AsyncMockMixin.assert_not_awaitedc                   s,   	 t  j|i | d| _d | _t | _d S Nr   )r"  r~   r   r   r{   r   rH   r%  r   r   r~   *	  s
   zAsyncMockMixin.reset_mockrh  )r   r   r   r   r   r   r   r@   rn  r   r   r   r   r   r   r   r~   __classcell__r   r   r%  r   r   y  s    (	
,	r   c                   @   r   )r	   Nr   r   r   r   r   r	   4	  r    r	   c                   @   r   )_ANYc                 C   r   r?   r   rI   r   r   r   r   r  b	  r   z_ANY.__eq__c                 C   r   r  r   r1  r   r   r   r  e	  r   z_ANY.__ne__c                 C   r   )Nz<ANY>r   r   r   r   r   r   h	  r   z_ANY.__repr__N)r   r   r   r  r  r   r   r   r   r   r0  _	  s
    r0  c                 C   s`   d|  }d}d dd |D }d dd | D }|r |}|r,|r(|d7 }||7 }|| S )Nz%s(%%s)r   z, c                 S   s   g | ]}t |qS r   )repr)r%   r  r   r   r   r  r	  s    z*_format_call_signature.<locals>.<listcomp>c                 S   s   g | ]
\}}d ||f qS )z%s=%rr   )r%   r  r   r   r   r   r  s	  s    )r  r  )r&   rJ   rK   r,  Zformatted_argsargs_stringZkwargs_stringr   r   r   r(  o	  s   
r(  c                   @   s   e Zd Z	 		dddZ		ddd	Zd
d ZejZdd Zdd Z	dd Z
dd Zedd Zedd Zdd Zdd ZdS )rB  r   r   NFTc                 C   s   d}i }t |}|dkr|\}}}n9|dkr2|\}	}
t|	tr,|	}t|
tr)|
}n"|
}n|	|
}}n|dkrK|\}t|trA|}n
t|trI|}n|}|rUt| ||fS t| |||fS )Nr      r   r   )r   r+   r  ra   r   )r   r   r&   r   rA  	from_kallrJ   rK   _lenfirstsecondr   r   r   r   	  s.   



z_Call.__new__c                 C   s   || _ || _|| _d S r6   )r   r   _mock_from_kall)rI   r   r&   r   rA  r5  r   r   r   r@   	  s   
z_Call.__init__c                 C   sR  zt |}W n ty   t Y S w d}t | dkr| \}}n| \}}}t| dd r8t|dd r8| j|jkr8dS d}|dkrDdi }}nU|dkrN|\}}}nK|dkrq|\}	t|	tr_|	}i }n:t|	trl|	}di }}n-d}|	}n(|dkr|\}
}t|
tr|
}t|tr|i }}nd|}}n|
|}}ndS |r||krdS ||f||fkS )	Nr   r   r   Fr   r   r4  r   )r   r3  r  r-   r   r+   ra   r  )rI   r   Z	len_otherZ	self_nameZ	self_argsZself_kwargsZ
other_nameZ
other_argsZother_kwargsr   r7  r8  r   r   r   r  	  sN   





z_Call.__eq__c                O   s<   | j d u rtd||fddS | j d }t| j ||f|| dS )Nr   r   r   r  r   rB  r)  r   r   r   rA   	  s   

z_Call.__call__c                 C   s2   | j d u rt|ddS d| j |f }t|| ddS )NF)r&   r5  z%s.%s)r&   r   r5  r:  )rI   r   r&   r   r   r   r   	  s   
z_Call.__getattr__c                 C   s   |t jv rtt | |S r6   )ra   rd   rB   __getattribute__)rI   r   r   r   r   r;  
  s   
z_Call.__getattribute__c                 C   s.   t | dkr| \}}||fS | \}}}||fS )Nr   )r   r)  r   r   r   _get_call_arguments
  s
   
z_Call._get_call_argumentsc                 C      |   d S r.  r<  r   r   r   r   rJ   
     z
_Call.argsc                 C   r=  )Nr   r>  r   r   r   r   rK   
  r?  z_Call.kwargsc                 C   s|   | j s| jpd}|drd| }|S t| dkr d}| \}}n| \}}}|s*d}n|ds4d| }nd| }t|||S )Nr   r   zcall%sr   zcall.%s)r9  r   r$   r   r(  )rI   r&   rJ   rK   r   r   r   r   
  s   





z_Call.__repr__c                 C   s<   	 g }| }|d ur|j r|| |j}|d us	tt|S r6   )r9  r   r   r{   r  )rI   Zvalsrq  r   r   r   	call_list-
  s   
z_Call.call_list)r   r   NFT)r   NNFT)r   r   r   r   r@   r  r  r  rA   r   r;  r<  r   rJ   rK   r   r@  r   r   r   r   rB  	  s(    
 
5

rB  )r5  c             	   K   sj  	 t | r	t| } t| t}t| rtd| dt| }d| i}	|r)d| i}	n| d u r/i }	|	r7|r7d|	d< |s=t| |	| t}
t	
| rLi }	n|rW|rTtdt}
nt| s^t}
n
|rh|rht| sht}
|	d|}|}|d u rvd	}|
d||||d
|	}t| trt|| }|rt| nt| ||| |d ur|s||j|< |r|sd|vrt| |dd|d|_t| D ]w}t|rqzt| |}W n	 ty   Y qw d|i}|rd|i}t|tst|||||}||j|< n6|}t| tr|j}t| ||}||d< t|rt}nt}|d||||d|}||j|< t|||d t|tr2t ||| q|S )Nz'Cannot autospec a Mock object. [object=r  r   r   Tr   zJInstance can not be True when create_autospec is mocking an async functionr&   r   )r   r   r   r&   r   r   )rT   r  r   r   )r   r&   r   r   )rS   r   )!rb   r8   r+   r*   r   r5   ry  r  r   r.   Zisdatadescriptorrx  r	   r_   r   rg   r  r=   rp   r   rU   r   r   r   r   r   r-   rB   r   r<   
_must_skipr   rZ   )r   r   rT   r   r  r   rK   is_typeZis_async_funcr  r  r   r<   r   rl   r   r   rS   Zchild_klassr   r   r   r   =
  s   













r   c                 C   sx   	 t | ts|t| di v rdS | j} | jD ]#}|j|t}|tu r$qt |tt	fr. dS t |t
r7|  S  dS |S )Nrd   F)r+   r8   r-   r   rc   rd   re   r   r]   r^   r=   )r   r   rB  re  rm   r   r   r   rA  
  s   


rA  c                   @   s   e Zd Z		dddZdS )r   FNc                 C   s(   || _ || _|| _|| _|| _|| _d S r6   )r   idsr   r   rT   r&   )rI   r   r   r   r&   rC  rT   r   r   r   r@   
  s   
z_SpecState.__init__)FNNNFr  r   r   r   r   r   
  s    r   c                 C   s   t | tr
t| S t| S r6   )r+   bytesioBytesIOStringIO)	read_datar   r   r   
_to_stream
  s   


rI  r   c                    s(  	 t }|d gfdd}fdd} fddfdd fd	d
}td u rEdd l}ttt|jtt|ja| d u rOt	dt
d} t	tdj_d j_d j_d j_d j_|j_ d< d j_|j_ j_|j_fdd}|| _| _| S )Nc                     (   j jd ur
j jS  d j | i |S r.  )	readlinesr   rh   _statehandler   r   _readlines_side_effect     z)mock_open.<locals>._readlines_side_effectc                     rJ  r.  )readr   rh   rL  r   r   _read_side_effect  rP  z$mock_open.<locals>._read_side_effectc                  ?   s(      E d H  	 d j | i |V  qNTr   )readlinerh   )_iter_side_effectrM  r   r   _readline_side_effect  s
   z(mock_open.<locals>._readline_side_effectc                  3   s4    j jd ur	 j jV  q d D ]} | V  qd S rS  )rT  r   )linerL  r   r   rU  !  s   
z$mock_open.<locals>._iter_side_effectc                      s    j jd ur
j jS t d S r.  )rT  r   r   r   rL  r   r   _next_side_effect(  s   z$mock_open.<locals>._next_side_effectr   open)r&   r   )r   r   c                     s6   t d< jjd kr  d< d j_tS )Nr   r   )rI  rT  r   r   rh   )rV  rM  rN  rH  r   r   
reset_dataD  s
   
zmock_open.<locals>.reset_data)rI  	file_spec_ior`   r  r   TextIOWrapperunionrF  r   rY  r  r   writerQ  rT  rK  r   r  r   )r<   rH  Z
_read_datarO  rR  rX  r\  rZ  r   )rU  rV  rM  rN  rH  r   r     s:   "

r   c                   @   s(   e Zd Z	 dd ZdddZdd ZdS )	r   c                K   s   t di |S )Nr   )r   )rI   rK   r   r   r   r   Z  r   zPropertyMock._get_child_mockNc                 C   s   |  S r6   r   )rI   r0   Zobj_typer   r   r   r  ]  s   zPropertyMock.__get__c                 C   s   | | d S r6   r   )rI   r0   r  r   r   r   r  _  s   zPropertyMock.__set__r6   )r   r   r   r   r  r  r   r   r   r   r   Q  s
    
r   c              	   C   sn   	 d| _ t| D ],}zt| |}W n	 ty   Y qw t|ts!qt|j|tr+q|j	| u r4t
| qd S r?   )r   r   r-   rB   r+   r   r   re   r   r   r   )r<   r   r  r   r   r   r   c  s    	

r   c                   @   s   e Zd Z	 dd Zdd ZdS )r	  c                 C   s&   || _ ttd}tj|_|| jd< d S )Nr!  r2   )iteratorr   r   r.   ZCO_ITERABLE_COROUTINEr#  rd   )rI   r`  r$  r   r   r   r@     s   
z_AsyncIterator.__init__c                    s$   zt | jW S  ty   Y tw r6   )r   r`  r&  r'  r   r   r   r   r    s   z_AsyncIterator.__anext__N)r   r   r   r@   r  r   r   r   r   r	  {  s    r	  rh  )NFNNN)FFNNr   )__all__r   r  rE  r.   r   r  builtinsr   typesr   r   r   Zunittest.utilr   	functoolsr   r   rC  r   r   r  r
   r"  r   r1   r5   r*   r:   r>   rE   rU   rP   r_   rb   rg   rp   rk   r   r   r  r   r   r   r   MISSINGr&  ZDELETEDr   r   r   r`   r{   r   r   r   r   rC   r@   r   r_  r   rc  r   rt  rw  ry  rz  r  r  r  r   r  r  r  r  ZmultipleZstopallr  Zmagic_methodsZnumericsr  r  ZinplacerightZ_non_defaultsr"  r  ra  Z_sync_async_magicsZ_async_magicsrb  r  r!  r  r  r  r  r  r  r
  r  r  r  r   r  r   r  r   r	   r0  r   r(  ra   rB  r   r   rA  r   r8   r  r=   r[  rI  r   r   r   r	  r   r   r   r   <module>   sB  	


1     
h4	  R
2R 		
	
		 <+ 
: 
N