o
    FXhs                    @   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 ddl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/Z0e-j1Z2h d0Z3d1d2 Z4G d3d4 d4e5Z6d5d6 Z7G d7d8 d8e*Z8G d9d: d:e*Z9G d;d< d<e9Z:e;e:j<Z=G d=d> d>e5Z>d?d@ Z?G dAdB dBe9Z@G dCdD dDe@e:ZAdEdF ZBdGdH ZCdIdJ ZDG dKdL dLe*ZEdMdN ZFe.dddddfddOdPdQZG		ddRdSZHe.dddddfddOdTdUZIG dVdW dWe*ZJdXdY ZKdZd[ ZLeGeI_*eJeI_MeHeI_NeLeI_Od\eI_Pd]ZQd^ZRd_Sd`da eRT D ZUd_Sdbda eRT D ZVh dcZWddde ZXdfd d_SeQeReUeVgT D ZYh dgZZdhhZ[eZe[B Z\eYeWB Z]e]e\B Z^h diZ_djdk dldk dmdk dndk doZ`eaeaeaeadpddddqdrddpddsZbdtdu Zcdvdw Zddxdy Zedzd{ Zfecedeeefd|Zgd}d~ ZhG dd de9ZiG dd deie:ZjG dd deiZkG dd deieAZlG dd de9ZmG dd de9ZnG dd denekeAZoG dd de*Zpep Zqdd ZrG dd desZtetddZu		dddOddZvdd ZwG dd de*ZxeyeveyeqjzfZ{da|dd Z}dddZ~G dd deAZdd ZG dd dZd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partial)RLockc                   @      e Zd ZdS )InvalidSpecErrorN__name__
__module____qualname__ r   r   7/opt/python-3.10.19/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_obj4   s
   

r2   c                 C   s   t | dd r
t| S dS )N__code__F)r.   r   funcr   r   r    _is_async_func<   s   r6   c                 C   s   t t| tS N)
issubclasstyper   r0   r   r   r    r+   C   s   r+   c                 C   s   t | tpt | tot| tS r7   )r,   BaseExceptionr9   r8   r0   r   r   r    _is_exceptionI   s   
r;   c                 C   s   t | trt| dr| jS | S Nmock)r,   FunctionTypesr-   r=   r0   r   r   r    _extract_mockP   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,   r9   __init__r>   __call__AttributeErrorr   r/   	signature
ValueError)r5   Zas_instanceZeat_selfZsig_funcr   r   r    _get_signature_objectY   s$   

rF   Fc                    sN   t | ||  d u rd S  \}   fdd}t| | |t|_ t|_d S )Nc                   s    j |i | d S r7   bindselfargskwargssigr   r    checksig{      z"_check_signature.<locals>.checksig)rF   _copy_func_detailsr9   _mock_check_sig__signature__)r5   r=   	skipfirstinstancerO   r   rM   r    _check_signaturev   s   

rV   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.   rC   )r5   funcopy	attributer   r   r    rQ      s   rQ   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 )NTrB   F)r,   r9   staticmethodclassmethodr   	_callabler*   r.   r0   r   r   r    r`      s   

r`   c                 C   s   t | ttfv S r7   )r9   listtupler0   r   r   r    _is_list   s   rc   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 )NrB   TF)r,   r9   r.   __mro____dict__get)r1   baser   r   r    _instance_callable   s   
rh   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 r7   rG   rK   rL   rM   r   r    rO      rP   z _set_signature.<locals>.checksigr\   )Z
_checksig_r=   zYdef %s(*args, **kwargs):
    _checksig_(*args, **kwargs)
    return mock(*args, **kwargs))r,   r9   rF   rQ   r   isidentifierexec_setup_func)r=   originalrU   rT   resultr5   rO   r'   contextsrcr\   r   rM   r    _set_signature   s$   



rq   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 r7   )assert_called_withri   r=   r   r    rs         z'_setup_func.<locals>.assert_called_withc                     rr   r7   )assert_calledri   rt   r   r    rv      ru   z"_setup_func.<locals>.assert_calledc                     rr   r7   )assert_not_calledri   rt   r   r    rw      ru   z&_setup_func.<locals>.assert_not_calledc                     rr   r7   )assert_called_onceri   rt   r   r    rx      ru   z'_setup_func.<locals>.assert_called_oncec                     rr   r7   )assert_called_once_withri   rt   r   r    ry      ru   z,_setup_func.<locals>.assert_called_once_withc                     rr   r7   )assert_has_callsri   rt   r   r    rz      ru   z%_setup_func.<locals>.assert_has_callsc                     rr   r7   )assert_any_callri   rt   r   r    r{      ru   z$_setup_func.<locals>.assert_any_callc                     sB   t   _t   _   j} t| r| ur|   d S d S d S r7   )	_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_childrenrs   ry   rz   r{   r   rv   rw   rx   rS   _mock_delegate)r\   r=   rN   rs   rv   rw   rx   ry   rz   r{   r   r   r   r    rl      s8   
rl   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 r7   )r.   r=   )attrrK   rL   rt   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_listr[   r   )r=   r   r]   r   rt   r    _setup_async_mock   s   
r   c                 C   s   d| dd  | kS )N__%s__   r   r'   r   r   r    	_is_magic  rP   r   c                   @   &   e Zd Z	 dd Zdd Zdd ZdS )_SentinelObjectc                 C   s
   || _ d S r7   r   rJ   r'   r   r   r    rA        
z_SentinelObject.__init__c                 C   
   d| j  S Nzsentinel.%sr   rJ   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   rA   r   r   r   r   r   r    r     s
    r   c                   @   r   )	_Sentinelc                 C   s
   i | _ d S r7   )
_sentinelsr   r   r   r    rA   '  r   z_Sentinel.__init__c                 C   s   |dkrt | j|t|S )N	__bases__)rC   r   
setdefaultr   r   r   r   r    __getattr__*  s   z_Sentinel.__getattr__c                 C      dS )Nr   r   r   r   r   r    r   0     z_Sentinel.__reduce__N)r   r   r   rA   r   r   r   r   r   r    r   %  s
    r   >   r   _mock_new_name
_mock_name_mock_parent_mock_return_value_mock_new_parent_mock_side_effectr   c                 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 r7   )r   r.   )rJ   r'   	_the_namerN   r   r   r    _getE  s   

z"_delegating_property.<locals>._getc                 S   s,   | j }|d u r|| j|< d S t||| d S r7   )r   re   r[   )rJ   valuer'   r   rN   r   r   r    _setJ  s   z"_delegating_property.<locals>._set)_allowed_namesaddproperty)r'   r   r   r   r   r   r    _delegating_propertyB  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,   ra   __contains__lenrange)rJ   r   Z	len_valueZlen_selfiZsub_listr   r   r    r   W  s   
z_CallList.__contains__c                 C   s   t t| S r7   )pprintZpformatra   r   r   r   r    r   e     z_CallList.__repr__N)r   r   r   r   r   r   r   r   r    r|   U  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_parenti  s(   

r   c                   @   r   )	_MockIterc                 C   s   t || _d S r7   )iterr1   )rJ   r1   r   r   r    rA     r   z_MockIter.__init__c                 C   s
   t | jS r7   )nextr1   r   r   r   r    __next__  r   z_MockIter.__next__N)r   r   r   rA   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 r7   r   rI   r   r   r    rA     r   zBase.__init__)r   r   r   r   r   r   rA   r   r   r   r    r     s    r   c                   @   sr  e Zd Z	 e 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specrW   )r8   AsyncMockMixin	_MOCK_SIGZbind_partialZ	argumentsrf   r2   r9   r   rW   _safe_superr   __new__)clsrK   kwbasesZ
bound_argsZspec_argnewrU   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   )re   _mock_add_specr|   configure_mockr   r   rA   )rJ   r   r   r'   r   r   _spec_state	_new_name_new_parent_spec_as_instance	_eat_selfunsaferL   re   r   r   r    rA     s<   




zNonCallableMock.__init__c                 C   s2   	 t |}d |_d |_d|_d |_t| || d S Nr   )r?   r   r   r   r   r[   )rJ   r=   r]   Z
inner_mockr   r   r    attach_mock  s   zNonCallableMock.attach_mockc                 C   s   	 |  || d S r7   )r   rJ   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.   appendrc   r,   r9   rF   re   )rJ   r   r   r   r   r   r   r   r   resre   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)rJ   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   )rJ   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 r7   )r   r9   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 r7   )r   r   r   callabler,   r   r;   )rJ   	delegatedZsfr   r   r    Z__get_side_effect4  s   z!NonCallableMock.__get_side_effectc                 C   s*   t |}| j}|d u r|| _d S ||_d S r7   )	_try_iterr   r   r   )rJ   r   r   r   r   r    Z__set_side_effect?  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+   )rJ   Zvisitedr   r   childr   r   r   r    r   J  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>u  s    z0NonCallableMock.configure_mock.<locals>.<lambda>)keyr   )sorteditemssplitpopr.   r[   )rJ   rL   argvalrK   finalr1   r  r   r   r    r   h  s   
zNonCallableMock.configure_mockc                 C   s  |dv rt || jd ur|| jvs|tv rt d| nt|r%t || js?| jr0|| jvr?|dr?t |d|dtj | j	|}|t
u rQt ||d u rrd }| jd urbt| j|}| j| |||| d}|| j|< nJt|trzt|j|j|j|j|j}W n  ty   | jd p| }td|d	|d
| d|jd	w || j|< W d    |S W d    |S W d    |S 1 sw   Y  |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=])rC   r   _all_magicsr   r   r%   r   _lockr   rf   r   r   r.   r   r,   r   r   r   r   rU   r   r'   r   re   )rJ   r'   rn   r   target_namer   r   r    r   ~  sr   






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   ra   reversedr   r   join)rJ   Z
_name_listr   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   r9   r   )rJ   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   r9   ra   re   r   r  r  set)rJ   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 r7   r   rK   r   rm   rJ   r   r    r        z-NonCallableMock.__setattr__.<locals>.<lambda>r   r   zCannot set )r   r  __setattr__r   r   re   rC   _unsupported_magicsr  r+   r[   r9   _get_methodr   r   r   r   r-   r  )rJ   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 r7   )r  r9   re   delattrr   rf   _missingr   r   __delattr__r   rC   )rJ   r'   r1   r   r   r    r*    s   

zNonCallableMock.__delattr__c                 C   s   | j pd}t|||S r<   )r   _format_call_signaturerJ   rK   rL   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   )rJ   rK   rL   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   rf   r,   r   r?   )rJ   r'   rN   nameschildrenr   r   r   r    _get_call_signature_from_name6  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,   rb   r   r5  r   rH   r   rK   rL   	TypeErrorwith_traceback)rJ   _callrN   r'   rK   rL   Z
bound_callr  r   r   r    _call_matcherW  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rJ   r&  r   r   r    rw   r     
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   r<  r=  r   r   r    rv   |  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=   r:  r=  r   r   r    rx     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 r7   r1  r&  rK   rL   rJ   r   r    _error_message  s   z:NonCallableMock.assert_called_with.<locals>._error_messageTtwo)r   r-  r<  r9  _Callr,   	Exception)rJ   rK   rL   expectedactualZerror_messagerB  causer   rA  r    rs     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   r;  r<  rs   rJ   rK   rL   r&  r   r   r    ry     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   r9  r&   cr   r   r    r    r"  z4NonCallableMock.assert_has_calls.<locals>.<listcomp>c                 s       | ]
}t |tr|V  qd S r7   r,   rF  r  r   r   r    	<genexpr>      z3NonCallableMock.assert_has_calls.<locals>.<genexpr>c                 3       | ]}  |V  qd S r7   rL  rM  r   r   r    rQ        zCalls not found.z+Error processing expected calls.
Errors: {}c                 S      g | ]}t |tr|nd qS r7   rP  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~   formatr<  r;  rstripra   removerE   r   r   rb   )	rJ   calls	any_orderrG  rI  Z	all_callsproblem	not_foundkallr   r   r    rz     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 )NTrC  c                    rK  r   rL  rM  r   r   r    r    r"  z3NonCallableMock.assert_any_call.<locals>.<listcomp>z%s call not found)r9  rE  r,   rF  r   _AnyComparerr-  r<  rJ   rK   rL   rG  rI  rH  r0  r   r   r    r{     s   zNonCallableMock.assert_any_callc                K   s   	 | j rd|v rd|d  nd}|  | }t||d}|| jd v r.tdi |S 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   )r   r  rC   rf   re   r	   r9   r8   r   _async_method_magicsr   _all_sync_magicsr   CallableMixinr   r   r   rd   )rJ   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   )rJ   rX  r   r   r    r;    s   zNonCallableMock._calls_repr)NNNNNNr   NFNFF)FFr7   )r   )ri  ).r   r   r   r   r  r   rA   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-  r1  r5  r9  rw   rv   rx   rs   ry   rz   r{   r   r;  r   r   r   r    r     sd    
-
	


0'
!


-&r   c                   @   s   e Zd Z	 dd ZdS )rb  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&   rG  rH  r   r   r    r  +  s    z-_AnyComparer.__contains__.<locals>.<listcomp>TF)allzip)rJ   itemr8  r   r   r    r   (  s   z_AnyComparer.__contains__N)r   r   r   r   r   r   r   r    rb  #  s    rb  c                 C   sF   | d u r| S t | r| S t| r| S zt| W S  ty"   |  Y S w r7   )r;   r`   r   r6  r0   r   r   r    r   3  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 )rf  Nr   c              	   K   s:   || j d< tt| j|||||||	|
fi | || _d S )Nr   )re   r   rf  rA   r   )rJ   r   r   r   r   r'   r   r   r   r   r   rL   r   r   r    rA   D  s   



zCallableMixin.__init__c                O   r   r7   r   rI   r   r   r    rR   P  s   zCallableMixin._mock_check_sigc                O   s0   | j |i | | j|i | | j|i |S r7   )rR   _increment_mock_call
_mock_callrI   r   r   r    rB   U  s   zCallableMixin.__call__c                O   s   | j |i |S r7   )_execute_mock_callrI   r   r   r    rp  ]  ru   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   rC  r   r   r   )r   r   rE  r   r   r   r   r   r   r~   r   r}   )rJ   rK   rL   r8  Zdo_method_callsZmethod_call_nameZmock_call_nameZ	is_a_callr   Zthis_mock_callr  r   r   r    ro  `  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 r7   )r   r;   r`   r   r   r   r   r   )rJ   rK   rL   effectrn   r   r   r    rq    s"   

z CallableMixin._execute_mock_call)
r   r   r   r   rA   rR   rB   rp  ro  rq  r   r   r   r    rf  B  s    
.rf  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 r7   )r.   rC   
__import__)thingcompimport_pathr   r   r    _dot_lookup  s   rw  c                 C   sB   |  d}|d}t|}|D ]}|d| 7 }t|||}q|S )Nr   r   z.%s)r  r  rs  rw  )target
componentsrv  rt  ru  r   r   r    	_importer  s   

rz  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   r|  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   rE   r|  r+   r   getterr]   r   new_callabler   createZ	has_localr   autospecrL   additional_patchers)rJ   r  r]   r   r   r  r   r  r  rL   r   r   r   r    rA     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>)r}  r  r]   r   r   r  r   r  r  rL   attribute_namer  )rJ   patcherr   r   r    r  &  s   z_patch.copyc                 C   2   t |tr
| |S t|r| |S | |S r7   r,   r9   decorate_classr/   r   decorate_async_callabledecorate_callablerJ   r5   r   r   r    rB   3  
   




z_patch.__call__c                 C   sN   t |D ] }|tjsqt||}t|dsq|  }t|||| q|S NrB   )r   r%   r   TEST_PREFIXr.   r-   r  r[   )rJ   rh  r   
attr_valuer  r   r   r    r  ;  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 r7   )

contextlib	ExitStack	patchingsenter_contextr  updater   r   r   rb   )rJ   patchedrK   keywargs
extra_args
exit_stackpatchingr  r   r   r    decoration_helperI  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 r7   r  rK   r  ZnewargsZnewkeywargsr5   r  rJ   r   r    r  ^  s   $z)_patch.decorate_callable.<locals>.patchedr-   r  r   r   r  r   r  r    r  X     
z_patch.decorate_callablec                    r  )Nr  c                     sL    | |\}} |i |I d H W  d    S 1 sw   Y  d S r7   r  r  r  r   r    r  o  s   $z/_patch.decorate_async_callable.<locals>.patchedr  r  r   r  r    r  i  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   re   rC   KeyErrorr.   	_builtinsr,   r   r  )rJ   rx  r'   rm   localr   r   r    get_originalz  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=TruerB   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  rL   r  r  rx  r6  r  r   r,   r9   r2   r	   r   rc   r   r   r8   r   r]   r  r+   rh   r  r   boolr   r.   r   temp_originalis_localr  r  _exit_stackr[   r  r  r  __exit__sysexc_info)rJ   r   r   r   r  rL   r  rm   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)rW   r   rY   __annotations__rZ   )r  r  r   r[   rx  r]   r(  r  r-   r  r  )rJ   r  r  r   r   r    r  $  s   

z_patch.__exit__c                 C   s   	 |   }| j|  |S r7   )r  _active_patchesr   rJ   rn   r   r   r    start9     z_patch.startc                 C   s6   	 z| j |  W n
 ty   Y d S w | d d d S r7   )r  r[  rE   r  r   r   r   r    stop@     z_patch.stop)r   r   r   r  r  rA   r  rB   r  r  contextmanagerr  r  r  r  r  r  r  r  r   r   r   r    r}    s$    %
 r}  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 r7   rz  r   rx  r   r    r  R      z_get_target.<locals>.<lambda>)rsplitr6  rE   rC   )rx  r]   r  r   r  r    _get_targetL  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 r7   r   r   r  r   r    r  l      z_patch_object.<locals>.<lambda>r~  )r9   strr6  r}  )rx  r]   r   r   r  r   r  r  r   rL   r  r   r  r    _patch_objectV  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  r7   r  r   r  r   r    r    r  z!_patch_multiple.<locals>.<lambda>c                      r  r7   r   r   r  r   r    r    r  z=Must supply at least one keyword argument with patch.multipler   r   )	r9   r  rE   ra   r  r}  r  r  r   )rx  r   r  r   r  r  rL   r  r  r]   r   r  Zthis_patcherr   r  r    _patch_multiples  s.   r  c                K   s*   	 t | \}	}
t|	|
||||||||d
S )Nr~  )r  r}  )rx  r   r   r  r   r  r  r   rL   r  r]   r   r   r    r     s   G

r   c                   @   sh   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d Zdd ZdS )_patch_dictr   Fc                 K   s,   || _ t|| _| j| || _d | _d S r7   )in_dictdictr   r  clear	_original)rJ   r  r   r  rL   r   r   r    rA     s
   

z_patch_dict.__init__c                 C   r  r7   r  )rJ   fr   r   r    rB     r  z_patch_dict.__call__c                       t   fdd}|S )Nc                     s,      z | i |W   S   w r7   r  _unpatch_dictr   r  rJ   r   r    _inner%  s   z-_patch_dict.decorate_callable.<locals>._innerr   rJ   r  r  r   r  r    r  $     z_patch_dict.decorate_callablec                    r  )Nc                     s4      z | i |I d H W   S   w r7   r  r   r  r   r    r  1  s
   z3_patch_dict.decorate_async_callable.<locals>._innerr  r  r   r  r    r  0  r  z#_patch_dict.decorate_async_callablec                 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  r[   )rJ   rh  r   r  Z	decoratorZ	decoratedr   r   r    r  <  s   
z_patch_dict.decorate_classc                 C   s   	 |    | jS r7   )r  r  r   r   r   r    r  G  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 r7   )r   r,   r  r  rz  r  r  rC   r  _clear_dictr  )rJ   r   r  r  rm   r  r   r   r    r  M  s.   z_patch_dict._patch_dictc                 C   sP   | j }| j}t| z|| W d S  ty'   |D ]}|| ||< qY d S w r7   )r  r  r  r  rC   )rJ   r  rm   r  r   r   r    r  i  s   z_patch_dict._unpatch_dictc                 G   s   	 | j d ur
|   dS NF)r  r  )rJ   rK   r   r   r    r  v  s   
z_patch_dict.__exit__c                 C   s   	 |   }tj|  |S r7   )r  r}  r  r   r  r   r   r    r  }  r  z_patch_dict.startc                 C   s6   	 zt j|  W n
 ty   Y d S w | d d d S r7   )r}  r  r[  rE   r  r   r   r   r    r    r  z_patch_dict.stopN)r   F)r   r   r   rA   rB   r  r  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 r7   )r  rC   ra   )r  keysr  r   r   r    r    s   r  c                  C   s   	 t tjD ]} |   qd S r7   )r  r}  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    rQ        rQ  c                 c   r  )zr%sNr   r  r   r   r    rQ    r  >   
__format____getnewargs_ex____get____getstate____getformat____missing____getnewargs__r   __reversed____setformat____subclasses____setstate__
__delete____reduce_ex__r  r   __set____getinitargs__c                    s   	  fdd}| |_ |S )Nc                   s    | g|R i |S r7   r   rJ   rK   r   r4   r   r    method  r   z_get_method.<locals>.method)r   )r'   r5   r  r   r4   r    r%    s   r%  c                 C   s   h | ]}d | qS )r   r   )r&   r  r   r   r    r(     r  >   	__anext__	__aexit__
__aenter__	__aiter__>   __instancecheck__r   __subclasscheck__r   r#  __prepare__rA   __del__c                 C   
   t | S r7   )r  __hash__r   r   r   r    r       
 r  c                 C   r  r7   )r  __str__r   r   r   r    r    r  c                 C   r  r7   )r  
__sizeof__r   r   r   r    r    r  c                 C   s"   t | j d|   dt|  S )N/)r9   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   )rJ   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   )rJ   r  r   r   r    _get_ne  s   r  c                    r  )Nc                     s     j j} | tu rtg S t| S r7   )__iter__r   r   r   r  r   r   r    r    s   z_get_iter.<locals>.__iter__r   )rJ   r  r   r   r    	_get_iter  r  r  c                    r  )Nc                     s(    j j} | tu rttg S tt| S r7   )r  r   r   _AsyncIteratorr   r  r   r   r    r    s   z"_get_async_iter.<locals>.__aiter__r   )rJ   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 r7   )_return_valuesrf   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 r7   )_mock_set_magicsr   r  rA   r  r   r   r    rA   =     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   )_magicsrd  r.   intersectionr   r  r9   re   r(  r[   
MagicProxy)rJ   Zorig_magicsZthese_magicsZremove_magicsr  rg  r   r   r    r  C  s   
zMagicMixin._mock_set_magicsN)r   r   r   rA   r  r   r   r   r    r  <  s    r  c                   @      e Zd Z	 dddZdS )r   Fc                 C      	 |  || |   d S r7   r   r  r   r   r   r    r   ]     z"NonCallableMagicMock.mock_add_specNrk  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  r7   )r  r   r'  rA   r  r   r   r    rA   h  r  zAsyncMagicMixin.__init__Nr   r   r   rA   r   r   r   r    r'  g  s    r'  c                   @   r"  )r   Fc                 C   r#  r7   r$  r   r   r   r    r   x  r%  zMagicMock.mock_add_specNrk  r&  r   r   r   r    r   m  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 r7   r'   r   )rJ   r'   r   r   r   r    rA     s   
zMagicProxy.__init__c                 C   s8   | j }| j}|j|||d}t||| t||| |S )N)r'   r   r   )r'   r   r   r[   r  )rJ   r  r   mr   r   r    create_mock  s   zMagicProxy.create_mockNc                 C   s   |   S r7   )r+  )rJ   r1   rg  r   r   r    r    s   zMagicProxy.__get__r7   )r   r   r   rA   r+  r  r   r   r   r    r!    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   r3   r	   r   rY   rZ   r  )superrA   r   r   r   re   r|   r   r   r/   ZCO_COROUTINEco_flagsrb   )rJ   rK   rL   	code_mockr   r   r    rA     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 )NTrC  r   )rE  r   r   r   r   r   r;   r`   r   StopIterationStopAsyncIterationr   r   r   r   r   )rJ   rK   rL   r8  rr  rn   r   r   r    rq    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   r<  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   r3  r=   z$ to have been awaited once. Awaited  times.r4  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@  rA  r   r    rB    s   z:AsyncMockMixin.assert_awaited_with.<locals>._error_messageTrC  )r   r-  r<  r9  rE  r,   rF  )rJ   rK   rL   rG  rB  rH  rI  r   rA  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 r5  )r   r   r<  r   rJ  r   r   r    r     s   
z'AsyncMockMixin.assert_awaited_once_withc                   ra  )NTrC  c                    rK  r   rL  rM  r   r   r    r  
	  r"  z3AsyncMockMixin.assert_any_await.<locals>.<listcomp>z%s await not found)r9  rE  r,   rF  r   rb  r-  r<  rc  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                    rK  r   rL  rM  r   r   r    r  	  r"  z4AsyncMockMixin.assert_has_awaits.<locals>.<listcomp>c                 s   rO  r7   rP  r  r   r   r    rQ  	  rR  z3AsyncMockMixin.assert_has_awaits.<locals>.<genexpr>c                 3   rS  r7   rL  rM  r   r   r    rQ  	  rT  zAwaits not found.z,Error processing expected awaits.
Errors: {}c                 S   rU  r7   rP  r  r   r   r    r  '	  rV  rW  z	
Actual: z%r not all found in await list)
r   r|   r   rY  r<  ra   r[  rE   r   rb   )	rJ   r\  r]  rG  rI  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   r3  r=   z# to not have been awaited. Awaited r6  r4  r=  r   r   r    r   =	  r7  z!AsyncMockMixin.assert_not_awaitedc                   s,   	 t  j|i | d| _d | _t | _d S Nr   )r-  r   r   r   r|   r   rI   r0  r   r    r   F	  s
   zAsyncMockMixin.reset_mockrk  )r   r   r   r   r   r   r   rA   rq  r   r   r   r   r   r   r   r   __classcell__r   r   r0  r    r     s    (	
,	r   c                   @   r   )r	   Nr   r   r   r   r    r	   P	  r!   r	   c                   @   r   )_ANYc                 C   r   r@   r   rJ   r  r   r   r    r	  ~	  r   z_ANY.__eq__c                 C   r   r  r   r<  r   r   r    r  	  r   z_ANY.__ne__c                 C   r   )Nz<ANY>r   r   r   r   r    r   	  r   z_ANY.__repr__N)r   r   r   r	  r  r   r   r   r   r    r;  {	  s
    r;  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  	  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    )r  r  )r'   rK   rL   r/  Zformatted_argsargs_stringZkwargs_stringr   r   r    r+  	  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 )rE  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  rb   r   )r   r   r'   r   rD  	from_kallrK   rL   _lenfirstsecondr   r   r    r   	  s.   



z_Call.__new__c                 C   s   || _ || _|| _d S r7   )r   r   _mock_from_kall)rJ   r   r'   r   rD  r@  r   r   r    rA   	  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   r?  r   )r   r6  r
  r.   r   r,   rb   r  )rJ   r  Z	len_otherZ	self_nameZ	self_argsZself_kwargsZ
other_nameZ
other_argsZother_kwargsr   rB  rC  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   rE  r,  r   r   r    rB   
  s   

z_Call.__call__c                 C   s2   | j d u rt|ddS d| j |f }t|| ddS )NF)r'   r@  z%s.%s)r'   r   r@  rE  )rJ   r   r'   r   r   r    r   
  s   
z_Call.__getattr__c                 C   s   |t jv rtt | |S r7   )rb   re   rC   __getattribute__)rJ   r   r   r   r    rF  
  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 r9  rG  r   r   r   r    rK   ,
     z
_Call.argsc                 C   rH  )Nr   rI  r   r   r   r    rL   0
  rJ  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)rD  r   r%   r   r+  )rJ   r'   rK   rL   r   r   r    r   4
  s   





z_Call.__repr__c                 C   s<   	 g }| }|d ur|j r|| |j}|d us	tt|S r7   )rD  r   r   r|   r  )rJ   Zvalsrt  r   r   r    	call_listI
  s   
z_Call.call_list)r   r   NFT)r   NNFT)r   r   r   r   rA   r	  r  r  rB   r   rF  rG  r   rK   rL   r   rK  r   r   r   r    rE  	  s(    
 
5

rE  )r@  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   )rU   r  r   r   )r   r'   r   r   )rT   r   )!rc   r9   r,   r+   r   r6   r|  r  r   r/   Zisdatadescriptorr{  r	   r`   r   rh   r  r>   rq   r   rV   r   r   r   r   r   r.   rC   r   r=   
_must_skipr   r[   )r   r   rU   r   r  r   rL   is_typeZis_async_funcr  r  r   r=   r  rm   r   r   rT   Zchild_klassr   r   r    r   Y
  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 )Nre   F)r,   r9   r.   r   rd   re   rf   r   r^   r_   r>   )r   r  rM  rh  rn   r   r   r    rL  
  s   


rL  c                   @   s   e Zd Z		dddZdS )r   FNc                 C   s(   || _ || _|| _|| _|| _|| _d S r7   )r   idsr   r   rU   r'   )rJ   r   r   r   r'   rN  rU   r   r   r    rA     s   
z_SpecState.__init__)FNNNFr(  r   r   r   r    r     s    r   c                 C   s   t | tr
t| S t| S r7   )r,   bytesioBytesIOStringIO)	read_datar   r   r    
_to_stream  s   


rT  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 r9  )	readlinesr   ri   _statehandler   r    _readlines_side_effect.     z)mock_open.<locals>._readlines_side_effectc                     rU  r9  )readr   ri   rW  r   r    _read_side_effect3  r[  z$mock_open.<locals>._read_side_effectc                  ?   s(      E d H  	 d j | i |V  qNTr   )readlineri   )_iter_side_effectrX  r   r    _readline_side_effect8  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 r^  )r_  r   )linerW  r   r    r`  =  s   
z$mock_open.<locals>._iter_side_effectc                      s    j jd ur
j jS t d S r9  )r_  r   r   r   rW  r   r    _next_side_effectD  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   )rT  r_  r   r   ri   )ra  rX  rY  rS  r   r    
reset_data`  s
   
zmock_open.<locals>.reset_data)rT  	file_spec_iora   r  r   TextIOWrapperunionrQ  r   rd  r  r   writer\  r_  rV  r   r  r   )r=   rS  Z
_read_datarZ  r]  rc  rg  re  r   )r`  ra  rX  rY  rS  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   )rJ   rL   r   r   r    r   v  r   zPropertyMock._get_child_mockNc                 C   s   |  S r7   r   )rJ   r1   Zobj_typer   r   r    r  y  s   zPropertyMock.__get__c                 C   s   | | d S r7   r   )rJ   r1   r	  r   r   r    r  {  s   zPropertyMock.__set__r7   )r   r   r   r   r  r  r   r   r   r    r   m  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.   rC   r,   r   r   rf   r   r   r   )r=   r   r*  r   r   r    r     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,  r3   )iteratorr   r   r/   ZCO_ITERABLE_COROUTINEr.  re   )rJ   rk  r/  r   r   r    rA     s   
z_AsyncIterator.__init__c                    s$   zt | jW S  ty   Y tw r7   )r   rk  r1  r2  r   r   r   r    r    s   z_AsyncIterator.__anext__N)r   r   r   rA   r  r   r   r   r    r    s    r  rk  )NFNNN)FFNNr   )__all__r   r  rP  r/   r   r  builtinsr   typesr   r   r   Zunittest.utilr   	functoolsr   r   	threadingr   rF  r   r   r  r
   r-  r   r2   r6   r+   r;   r?   rF   rV   rQ   r`   rc   rh   rq   rl   r   r   r  r   r   r   r   MISSINGr)  ZDELETEDr   r   r   ra   r|   r   r   r   r   rD   rA   r   rb  r   rf  r   rw  rz  r|  r}  r  r  r  r   r  r  r  r  ZmultipleZstopallr  Zmagic_methodsZnumericsr  r  ZinplacerightZ_non_defaultsr%  r  rd  Z_sync_async_magicsZ_async_magicsre  r  r$  r  r
  r  r  r  r  r  r  r  r  r   r'  r   r!  r   r	   r;  r   r+  rb   rE  r   r   rL  r   r9   r	  r>   rf  rT  r   r   r   r  r   r   r   r    <module>   sD  	


1     h4	  R
2R 		
	
		 <+ 
: 
N