a
    ze                    @   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 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-Z.h d-Z/d.d/ Z0G d0d1 d1e1Z2d2d3 Z3G d4d5 d5e&Z4G d6d7 d7e&Z5G d8d9 d9e5Z6e7e6j8Z9G d:d; d;e1Z:d<d= Z;G d>d? d?e5Z<G d@dA dAe<e6Z=dBdC Z>dDdE Z?G dFdG dGe&Z@dHdI ZAe*dddddfdJdKZBddLdMZCe*dddddfdNdOZDG dPdQ dQe&ZEdRdS ZFdTdU ZGeBeD_&eEeD_HeCeD_IeGeD_JdVeD_KdWZLdXZMdYNdZd[ eMO D ZPdYNd\d[ eMO D ZQh d]ZRd^d_ ZSd`d dYNeLeMePeQgO D ZTh daZUdbhZVeUeVB ZWeTeRB ZXeXeWB ZYh dcZZddde dfde dgde dhde diZ[e\e\e\e\djddddkdld	djddmZ]dndo Z^dpdq Z_drds Z`dtdu Zae^e_e`eadvZbdwdx ZcG dydz dze5ZdG d{d| d|ede6ZeG d}d~ d~edZfG dd dede=ZgG dd de5ZhG dd de5ZiG dd deiefe=ZjG dd de&Zkek Zldd ZmG dd denZoeoddZpdddZqdd ZrG dd de&ZseteqeteljufZvdawdd ZxdddZyG dd de=Zzdd 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                 C   s   h | ]}| d s|qS _
startswith).0name r   #/usr/lib/python3.9/unittest/mock.py	<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_obj/   s
    

r*   c                 C   s   t | dd rt| S dS d S )N__code__F)r&   r   funcr   r   r   _is_async_func7   s    r.   c                 C   s   t t| tS N)
issubclasstyper   r(   r   r   r   r#   >   s    r#   c                 C   s   t | tpt | tot| tS r/   )r$   BaseExceptionr1   r0   r(   r   r   r   _is_exceptionD   s    
r3   c                 C   s"   t | trt| dr| jS | S d S Nmock)r$   FunctionTypesr%   r5   r(   r   r   r   _extract_mockK   s    r7   c                 C   s   t | tr|s| j} d}n*t | tsDz
| j} W n tyB   Y d S 0 |rTt| d }n| }z| t|fW S  t	y|   Y d S 0 d S NT)
r$   r1   __init__r6   __call__AttributeErrorr   r'   	signature
ValueError)r-   Zas_instanceZeat_selfZsig_funcr   r   r   _get_signature_objectT   s    

r>   Fc                    sN   t | ||  d u rd S  \}   fdd}t| | |t|_ t|_d S )Nc                   s    j |i | d S r/   bindselfargskwargssigr   r   checksigv   s    z"_check_signature.<locals>.checksig)r>   _copy_func_detailsr1   _mock_check_sig__signature__)r-   r5   	skipfirstinstancerG   r   rE   r   _check_signatureq   s    

rM   c              	   C   s8   dD ].}zt ||t| | W q ty0   Y q0 qd S )N)__name____doc____text_signature__
__module____defaults____kwdefaults__)setattrr&   r;   )r-   funcopy	attributer   r   r   rH   }   s
    rH   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 )NTr:   F)r$   r1   staticmethodclassmethodr   	_callabler"   r&   r(   r   r   r   rY      s    

rY   c                 C   s   t | ttfv S r/   )r1   listtupler(   r   r   r   _is_list   s    r\   c                 C   sF   t | tst| dd d uS | f| j D ]}|jdd ur& dS q&dS )Nr:   TF)r$   r1   r&   __mro____dict__get)r)   baser   r   r   _instance_callable   s    
ra   c                    s   t |t}t|||}|d u r"| S |\}  fdd}t|| |j}| sRd}|| d}d| }	t|	| || }
t|
|   |
S )Nc                     s    j | i | d S r/   r?   rC   rD   rE   r   r   rG      s    z _set_signature.<locals>.checksigrU   )Z
_checksig_r5   zYdef %s(*args, **kwargs):
    _checksig_(*args, **kwargs)
    return mock(*args, **kwargs))r$   r1   r>   rH   rN   isidentifierexec_setup_func)r5   originalrL   rK   resultr-   rG   r   contextsrcrU   r   rE   r   _set_signature   s$    



rj   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                     s    j | i |S r/   )assert_called_withrb   r5   r   r   rk      s    z'_setup_func.<locals>.assert_called_withc                     s    j | i |S r/   )assert_calledrb   rl   r   r   rm      s    z"_setup_func.<locals>.assert_calledc                     s    j | i |S r/   )assert_not_calledrb   rl   r   r   rn      s    z&_setup_func.<locals>.assert_not_calledc                     s    j | i |S r/   )assert_called_oncerb   rl   r   r   ro      s    z'_setup_func.<locals>.assert_called_oncec                     s    j | i |S r/   )assert_called_once_withrb   rl   r   r   rp      s    z,_setup_func.<locals>.assert_called_once_withc                     s    j | i |S r/   )assert_has_callsrb   rl   r   r   rq      s    z%_setup_func.<locals>.assert_has_callsc                     s    j | i |S r/   )assert_any_callrb   rl   r   r   rr      s    z$_setup_func.<locals>.assert_any_callc                     s:   t   _t   _   j} t| r6| ur6|   d S r/   )	_CallListmethod_calls
mock_calls
reset_mockreturn_valuer#   )retrU   r5   r   r   rv      s    z_setup_func.<locals>.reset_mockFr   )r5   called
call_count	call_argsrs   call_args_listrt   ru   rw   side_effect_mock_childrenrk   rp   rq   rr   rv   rm   rn   ro   rJ   _mock_delegate)rU   r5   rF   rk   rm   rn   ro   rp   rq   rr   rv   r   ry   r   re      s8    re   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 r/   )r&   r5   )attrrC   rD   rl   r   r   wrapper   s    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_argsrs   await_args_listrT   r   )r5   r   rV   r   rl   r   _setup_async_mock   s    
r   c                 C   s   d| dd  | kS )N__%s__   r   r   r   r   r   	_is_magic  s    r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )_SentinelObjectc                 C   s
   || _ d S r/   r   rB   r   r   r   r   r9     s    z_SentinelObject.__init__c                 C   s
   d| j  S Nzsentinel.%sr   rB   r   r   r   __repr__  s    z_SentinelObject.__repr__c                 C   s
   d| j  S r   r   r   r   r   r   
__reduce__  s    z_SentinelObject.__reduce__N)rN   rQ   __qualname__r9   r   r   r   r   r   r   r     s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )	_Sentinelc                 C   s
   i | _ d S r/   )
_sentinelsr   r   r   r   r9   "  s    z_Sentinel.__init__c                 C   s   |dkrt | j|t|S )N	__bases__)r;   r   
setdefaultr   r   r   r   r   __getattr__%  s    z_Sentinel.__getattr__c                 C   s   dS )Nr   r   r   r   r   r   r   +  s    z_Sentinel.__reduce__N)rN   rQ   r   r9   r   r   r   r   r   r   r      s   r   >   _mock_new_parentrw   _mock_side_effectr~   
_mock_name_mock_return_value_mock_new_name_mock_parentc                 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 r/   )r   r&   )rB   r   	_the_namerF   r   r   r   _get@  s    
z"_delegating_property.<locals>._getc                 S   s*   | j }|d u r|| j|< nt||| d S r/   )r   r^   rT   )rB   valuer   r   rF   r   r   r   _setE  s    z"_delegating_property.<locals>._set)_allowed_namesaddproperty)r   r   r   r   r   r   r   _delegating_property=  s
    
r   c                   @   s   e Zd Zdd Zdd ZdS )rs   c                 C   sl   t |tst| |S t|}t| }||kr2dS td|| d D ]"}| |||  }||krD dS qDdS )NFr      T)r$   rZ   __contains__lenrange)rB   r   Z	len_valueZlen_selfiZsub_listr   r   r   r   R  s    
z_CallList.__contains__c                 C   s   t t| S r/   )pprintZpformatrZ   r   r   r   r   r   `  s    z_CallList.__repr__N)rN   rQ   r   r   r   r   r   r   r   rs   P  s   rs   c                 C   s|   t |}t|sdS |js4|js4|jd us4|jd ur8dS | }|d urX||u rPdS |j}q<|rh| |_||_|rx| |_||_dS )NFT)r7   r#   r   r   r   r   )parentr   r   new_name_parentr   r   r   _check_and_set_parentd  s*    r   c                   @   s   e Zd Zdd Zdd ZdS )	_MockIterc                 C   s   t || _d S r/   )iterr)   )rB   r)   r   r   r   r9     s    z_MockIter.__init__c                 C   s
   t | jS r/   )nextr)   r   r   r   r   __next__  s    z_MockIter.__next__N)rN   rQ   r   r9   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   s   d S r/   r   rA   r   r   r   r9     s    zBase.__init__)rN   rQ   r   r   r   r   r9   r   r   r   r   r     s   r   c                   @   s`  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'dPdBdCZ(dDdE Z)dFdG Z*dQdIdJZ+dS )Rr   c                O   s|   | f}t | tsTtj| g|R i |j}|d|d}|d urTt|rTt| f}t| j|d| j	i}t
t| |}|S )Nspec_setspecrO   )r0   AsyncMockMixin	_MOCK_SIGZbind_partialZ	argumentsr_   r*   r1   rN   rO   _safe_superr   __new__)clsrC   kwbasesZ
bound_argsZspec_argnewrL   r   r   r   r     s    
zNonCallableMock.__new__N Fc                 K   s   |d u r|}| j }||d< ||d< ||d< ||d< d|d< |d urJ|}d}|
d u rZ|d u}
| |||	|
 i |d< ||d	< d |d
< d|d< d |d< d|d< t |d< t |d< t |d< ||d< |r| jf 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_callsrt   _mock_unsafe)r^   _mock_add_specrs   configure_mockr   r   r9   )rB   r   r   r   r   r   _spec_state	_new_name_new_parent_spec_as_instance	_eat_selfZunsaferD   r^   r   r   r   r9     s<    




zNonCallableMock.__init__c                 C   s0   t |}d |_d |_d|_d |_t| || d S )Nr   )r7   r   r   r   r   rT   )rB   r5   rV   Z
inner_mockr   r   r   attach_mock  s    zNonCallableMock.attach_mockc                 C   s   |  || d S r/   )r   rB   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rT|}nt|}t|||}	|	or|	d }t |}| j}
||
d< ||
d< ||
d< ||
d< ||
d< d S )Nr   _spec_class	_spec_set_spec_signature_mock_methods_spec_asyncs)	dirr   r&   appendr\   r$   r1   r>   r^   )rB   r   r   r   r   r   r   r   r   resr^   r   r   r   r     s*    
zNonCallableMock._mock_add_specc                 C   s8   | j }| jd ur| jj}|tu r4| j| dd}|| _|S )N()r   r   )r   r   rw   r   _get_child_mock)rB   rx   r   r   r   Z__get_return_value  s    
z"NonCallableMock.__get_return_valuec                 C   s,   | j d ur|| j _n|| _t| |d d d S )Nr   )r   rw   r   r   )rB   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 r/   )r   r1   r   r   r   r   	__class__  s    
zNonCallableMock.__class__rz   r{   r|   r}   ru   c                 C   sN   | j }|d u r| jS |j}|d urJt|sJt|tsJt|sJt|}||_|S r/   )r   r   r~   callabler$   r   r3   )rB   	delegatedZsfr   r   r   Z__get_side_effect'  s    z!NonCallableMock.__get_side_effectc                 C   s(   t |}| j}|d u r|| _n||_d S r/   )	_try_iterr   r   r~   )rB   r   r   r   r   r   Z__set_side_effect2  s
    z!NonCallableMock.__set_side_effectrw   r~   c                C   s   |d u rg }t | |v rd S |t |  d| _d | _d| _t | _t | _t | _|r^t	| _
|rhd | _| j D ](}t|tsr|tu rqr|j|||d qr| j
}t|r|| ur|| d S )NFr   r   )idr   rz   r|   r{   rs   ru   r}   rt   r   r   r   r   valuesr$   
_SpecState_deletedrv   r#   )rB   Zvisitedrw   r~   childrx   r   r   r   rv   =  s,    zNonCallableMock.reset_mockc                K   sX   t | dd dD ]>\}}|d}| }| }|D ]}t||}q6t||| qd S )Nc                 S   s   | d  dS )Nr   .)count)entryr   r   r   <lambda>h  r!   z0NonCallableMock.configure_mock.<locals>.<lambda>)keyr   )sorteditemssplitpopr&   rT   )rB   rD   argvalrC   finalr)   r   r   r   r   r   [  s    	
zNonCallableMock.configure_mockc                 C   s   |dv rt |n:| jd ur<|| jvs.|tv rLt d| nt|rLt || jsd|drdt d| j|}|tu rt |np|d u rd }| j	d urt
| j	|}| j| |||| d}|| j|< n.t|trt|j|j|j|j|j}|| j|< |S )N>   r   r   zMock object has no attribute %r)assertZassretz1Attributes cannot start with 'assert' or 'assret')r   r   r   r   r   )r;   r   _all_magicsr   r   r   r   r_   r   r   r&   r   r$   r   r   r   r   rL   r   r   )rB   r   rg   r   r   r   r   r   q  s:    






zNonCallableMock.__getattr__c                 C   s   | j g}| j}| }d}|dgkr$d}|d urZ|}||j |  d}|j dkrRd}|j}q$tt|}|jpnd}t|dkr|d dvr|d7 }||d< d|S )Nr   r   r   r5   r   )r   z().r   )r   r   r   rZ   reversedr   r   join)rB   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rDd}| jr8d}|| jj }dt| j||t| f S )Nr   )r5   zmock.z name=%rz spec=%rz spec_set=%rz<%s%s%s id='%s'>)r   r   r   rN   r1   r   )rB   r   Zname_stringZspec_stringr   r   r   r     s     
zNonCallableMock.__repr__c                 C   sv   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   r1   rZ   r^   r   r   r   set)rB   extrasZ	from_typeZ	from_dictZfrom_child_mocksr   r   r   r    s    


zNonCallableMock.__dir__c                    sT  |t v rt||S jrHjd urH|jvrH|jvrHtd| n|tv rbd| }t|n|tv rjd ur|jvrtd| t	|st
t|t|| |  fdd}n(t|d | t
t|| |j|< n,|dkr|_d S t|||r|j|< jrFt|sF  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 r/   r   rC   r   rf   rB   r   r   r     r!   z-NonCallableMock.__setattr__.<locals>.<lambda>r   r   zCannot set )r   r  __setattr__r   r   r^   r;   _unsupported_magicsr   r#   rT   r1   _get_methodr   r   r   r   r%   r   )rB   r   r   msg	mock_namer   r  r   r    s<    

zNonCallableMock.__setattr__c                 C   s   |t v r2|t| jv r2tt| | || jvr2d S | j|t}|| jv r\tt| 	| n|t
u rlt||tur|| j|= t
| j|< d S r/   )r   r1   r^   delattrr   r_   _missingr   r   __delattr__r   r;   )rB   r   r)   r   r   r   r    s    

zNonCallableMock.__delattr__c                 C   s   | j pd}t|||S r4   )r   _format_call_signaturerB   rC   rD   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|   )rB   rC   rD   actionmessageexpected_stringr|   Zactual_stringr   r   r   _format_mock_failure_message  s
    
z,NonCallableMock._format_mock_failure_messagec                 C   sj   |s
| j S d }|ddd}| j}|D ]:}||}|d u sJt|trP qfq*t|}|j}|j }q*|S )Nr   r   r   )r   replacer   r   r_   r$   r   r7   )rB   r   rF   namesZ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rt|dkrNd}|\}}n
|\}}}z"|j|i |}t||j|jW S  t	y } z|
d W  Y d }~S d }~0 0 n|S d S )Nr   r   r   )r$   r[   r   r  r   r@   r   rC   rD   	TypeErrorwith_traceback)rB   _callrF   r   rC   rD   Z
bound_callr   r   r   r   _call_matcherA  s    

"zNonCallableMock._call_matcherc                 C   s0   | j dkr,d| jpd| j |  f }t|d S )Nr   z9Expected '%s' to not have been called. Called %s times.%sr5   r{   r   _calls_reprAssertionErrorrB   r
  r   r   r   rn   \  s    
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.r5   )r{   r   r  r   r   r   r   rm   f  s
    
zNonCallableMock.assert_calledc                 C   s0   | 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.%sr5   r  r   r   r   r   ro   n  s    
z"NonCallableMock.assert_called_oncec                   s   j d u r. }d}d||f }t| fdd}t fdd}j }||krt|trv|nd }t| |d S )Nznot called.z0expected call not found.
Expected: %s
Actual: %sc                     s     } | S r/   r  r
  rC   rD   rB   r   r   _error_message  s    z:NonCallableMock.assert_called_with.<locals>._error_messageTtwo)r|   r  r  r  _Callr$   	Exception)rB   rC   rD   expectedactualZerror_messager$  causer   r#  r   rk   x  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.%sr5   )r{   r   r  r  rk   rB   rC   rD   r
  r   r   r   rp     s    
z'NonCallableMock.assert_called_once_withc           	   	      s   fdd|D }t dd |D d }t fdd jD }|s||vr|d u rXd}nddd |D }t| d	t|  jd
dd |d S t|}g }|D ]0}z|| W q t	y   |
| Y q0 q|rtd jpdt||f |d S )Nc                    s   g | ]}  |qS r   r  r   cr   r   r   r     r!   z4NonCallableMock.assert_has_calls.<locals>.<listcomp>c                 s   s   | ]}t |tr|V  qd S r/   r$   r(  r   r   r   r   	<genexpr>  r!   z3NonCallableMock.assert_has_calls.<locals>.<genexpr>c                 3   s   | ]}  |V  qd S r/   r-  r.  r   r   r   r1    r!   zCalls not found.z+Error processing expected calls.
Errors: {}c                 S   s   g | ]}t |tr|nd qS r/   r0  r   r   r   r   r     s   
Expected: ZActual)prefixr   z@%r does not contain all of %r in its call list, found %r insteadr5   )r   rs   ru   formatr  r  rstriprZ   remover=   r   r   r[   )	rB   calls	any_orderr)  r+  Z	all_callsproblem	not_foundkallr   r   r   rq     sN    
z NonCallableMock.assert_has_callsc                   sj     t||fdd}t|tr$|nd } fdd jD }|sL|t|vrf ||}td| |d S )NTr%  c                    s   g | ]}  |qS r   r-  r.  r   r   r   r     r!   z3NonCallableMock.assert_any_call.<locals>.<listcomp>z%s call not found)r  r'  r$   r(  r}   _AnyComparerr  r  rB   rC   rD   r)  r+  r*  r  r   r   r   rr     s    zNonCallableMock.assert_any_callc                K   s   | d}|| jd v r&tf i |S | jrZd|v rBd|d  nd}|  | }t|t| }t|trz|t	v rzt}nbt|t
r|tv s| jr|| jv rt}qt}n4t|tst|trt}qt|trt}n
|jd }|f i |S )Nr   r   r   r   r   r   )r_   r^   r	   r   r   r;   r1   r0   r   _async_method_magicsr   _all_sync_magicsr   CallableMixinr   r   r   r]   )rB   r   r   rV   r  _typeklassr   r   r   r     s2    





zNonCallableMock._get_child_mockCallsc                 C   s"   | j s
dS d| dt| j  dS )Nr   
z: r   )ru   r   )rB   r3  r   r   r   r    s    zNonCallableMock._calls_repr)NNNNNNr   NFNF)F)FF)N)r   )F)rC  ),rN   rQ   r   r   r9   r   r   r   Z"_NonCallableMock__get_return_valueZ"_NonCallableMock__set_return_valueZ"_NonCallableMock__return_value_docr   rw   r   r   rz   r{   r|   r}   ru   Z!_NonCallableMock__get_side_effectZ!_NonCallableMock__set_side_effectr~   rv   r   r   r   r   r  r  r  r  r  r  r  rn   rm   ro   rk   rp   rq   rr   r   r  r   r   r   r   r     s^      
-
	  


''
!


-&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   r)  r*  r   r   r   r     s   z-_AnyComparer.__contains__.<locals>.<listcomp>TF)allzip)rB   itemr  r   r   r   r     s    z_AnyComparer.__contains__N)rN   rQ   r   r   r   r   r   r   r<    s   r<  c                 C   sJ   | d u r| S t | r| S t| r$| S z
t| W S  tyD   |  Y S 0 d S r/   )r3   rY   r   r  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 )r@  Nr   c              	   K   s:   || j d< tt| j|||||||	|
fi | || _d S )Nr   )r^   r   r@  r9   r~   )rB   r   r~   rw   r   r   r   r   r   r   r   rD   r   r   r   r9   .  s    


zCallableMixin.__init__c                O   s   d S r/   r   rA   r   r   r   rI   :  s    zCallableMixin._mock_check_sigc                O   s0   | j |i | | j|i | | j|i |S r/   )rI   _increment_mock_call
_mock_callrA   r   r   r   r:   ?  s    zCallableMixin.__call__c                O   s   | j |i |S r/   )_execute_mock_callrA   r   r   r   rI  G  s    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|r|jt|||f |jd u}|r|jd | }t|||f}	|j	|	 |jr|rd}
nd}
|jdk}|j|
 | }|j
}qpd S )NTr   r%  r   r   r   )rz   r{   r'  r|   r}   r   r   r   r   ru   r   rt   )rB   rC   rD   r  Zdo_method_callsZmethod_call_nameZmock_call_nameZ	is_a_callr   Zthis_mock_callr   r   r   r   rH  J  s4    


z"CallableMixin._increment_mock_callc                O   s   | j }|d urTt|r|n,t|s:t|}t|rH|n||i |}|turT|S | jturd| jS | jd ur~| j|i |S | jS r/   )r~   r3   rY   r   r   r   rw   r   )rB   rC   rD   effectrg   r   r   r   rJ  x  s     

z CallableMixin._execute_mock_call)
rN   rQ   r   r   r9   rI   r:   rI  rH  rJ  r   r   r   r   r@  ,  s   
.r@  c                   @   s   e Zd ZdS )r   NrN   rQ   r   r   r   r   r   r     s   r   c                 C   s6   zt | |W S  ty0   t| t | | Y S 0 d S r/   )r&   r;   
__import__)thingcompimport_pathr   r   r   _dot_lookup  s
    rQ  c                 C   sB   |  d}|d}t|}|D ]}|d| 7 }t|||}q |S )Nr   r   z.%s)r   r   rM  rQ  )target
componentsrP  rN  rO  r   r   r   	_importer  s    

rT  c                   @   sz   e Zd ZdZg Z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 )_patchNc
           
      C   sn   |d ur(|t urtd|d ur(td|| _|| _|| _|| _|| _|| _d| _|| _	|| _
|	| _g | _d S )Nz,Cannot use 'new' and 'new_callable' togetherz1Cannot use 'autospec' and 'new_callable' togetherF)r   r=   getterrV   r   new_callabler   createZ	has_localr   autospecrD   additional_patchers)
rB   rV  rV   r   r   rX  r   rY  rW  rD   r   r   r   r9     s(    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     s   z_patch.copy.<locals>.<listcomp>)rU  rV  rV   r   r   rX  r   rY  rW  rD   attribute_namerZ  )rB   patcherr   r   r   r[    s    z_patch.copyc                 C   s2   t |tr| |S t|r(| |S | |S r/   )r$   r1   decorate_classr'   r   decorate_async_callabledecorate_callablerB   r-   r   r   r   r:     s
    



z_patch.__call__c                 C   sN   t |D ]@}|tjsqt||}t|ds0q|  }t|||| q|S Nr:   )r   r   r   TEST_PREFIXr&   r%   r[  rT   )rB   rB  r   
attr_valuer^  r   r   r   r_    s    

z_patch.decorate_classc                 c   s   g }t  f}|jD ]8}||}|jd ur8|| q|jtu r|| q|t	|7 }||fV  W d    n1 sx0    Y  d S r/   )

contextlib	ExitStack	patchingsenter_contextr]  updater   r   r   r[   )rB   patchedrC   keywargs
extra_args
exit_stackpatchingr   r   r   r   decoration_helper  s    




z_patch.decoration_helperc                    s>   t  dr j  S t  fddg_S )Nrh  c                     sD    | |"\}} |i |W  d    S 1 s60    Y  d S r/   rp  rC   rl  ZnewargsZnewkeywargsr-   rk  rB   r   r   rk  3  s    z)_patch.decorate_callable.<locals>.patchedr%   rh  r   r   rb  r   rs  r   ra  -  s    
z_patch.decorate_callablec                    s>   t  dr j  S t  fddg_S )Nrh  c                     sJ    | |(\}} |i |I d H W  d    S 1 s<0    Y  d S r/   rq  rr  rs  r   r   rk  D  s    z/_patch.decorate_async_callable.<locals>.patchedrt  rb  r   rs  r   r`  >  s    
z_patch.decorate_async_callablec              	   C   s   |   }| j}t}d}z|j| }W n" ttfyF   t||t}Y n0 d}|tv rdt|t	rdd| _
| j
s|tu rtd||f ||fS )NFTz!%s does not have the attribute %r)rV  rV   r   r^   r;   KeyErrorr&   	_builtinsr$   r   rX  )rB   rR  r   rf   localr   r   r   get_originalO  s     
z_patch.get_originalc                 C   s  | j | j| j  }}}| j| j }}| j}|  | _|du r@d }|du rLd }|du rXd }|d urp|d urptd|d us|d ur|dvrtd| 	 \}}|t
u r|d u rd}	|du r|}|du r|}d }n&|d ur|du r|}d }n|du r|}|d us|d ur.|t
u rtdt|tr.d}	|d u rHt|rHt}
nt}
i }|d ur`|}
n^|d ust|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rt|
tr| jr| j|d
< || |
f i |}|	rt|r|}|d urF|}t|s^t|s^t}
|d
 |
f |dd||_nl|d ur|t
urtd|t
u rtdt|}|du r|}t|f|| jd|}n|rtd|}|| _|| _t  | _!zrt"| j| j| | j#d urti }| j t
u r>||| j#< | j$D ](}| j!%|}|j t
u rD|| qD|W S |W S    | j&t'(  s Y n0 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=Truer:   r   r   r   r   r   zBautospec creates the mock for you. Can't specify autospec and new.z%Can't use 'autospec' with create=True)r   _namez.Can't pass kwargs to a mock we aren't creating))r   r   r   rY  rD   rW  rV  rR  r  rx  r   r$   r1   r*   r	   r   r\   r   r   r0   r   rV   rj  r#   ra   r   rw   boolr   temp_originalis_localrf  rg  _exit_stackrT   r]  rZ  ri  __exit__sysexc_info)rB   r   r   r   rY  rD   rW  rf   rw  ZinheritKlass_kwargsZ	this_specZnot_callableZnew_attrrm  ro  r   r   r   r   	__enter__g  s    






















z_patch.__enter__c                 G   s   | j r$| jtur$t| j| j| j n>t| j| j | jsbt| j| jrP| jdv rbt| j| j| j | `| ` | `| j	}| `	|j
| S )N)rO   rQ   rR   __annotations__rS   )r|  r{  r   rT   rR  rV   r  rX  r%   r}  r~  )rB   r  rn  r   r   r   r~    s    z_patch.__exit__c                 C   s   |   }| j|  |S r/   )r  _active_patchesr   rB   rg   r   r   r   start  s    z_patch.startc                 C   s4   z| j |  W n ty$   Y d S 0 | d d d S r/   )r  r6  r=   r~  r   r   r   r   stop	  s
    z_patch.stop)rN   rQ   r   r]  r  r9   r[  r:   r_  rf  contextmanagerrp  ra  r`  rx  r  r~  r  r  r   r   r   r   rU    s    
 rU  c              
      sP   z  dd\ }W n& tttfy:   td Y n0  fdd}||fS )Nr   r   z,Need a valid target to patch. You supplied: c                      s   t  S r/   rT  r   rR  r   r   r     r!   z_get_target.<locals>.<lambda>)rsplitr  r=   r;   )rR  rV   rV  r   r  r   _get_target  s    
r  c           
   
      s>   t  tu rt d fdd}	t|	||||||||	S )Nz3 must be the actual object to be patched, not a strc                      s    S r/   r   r   r  r   r   r   5  r!   z_patch_object.<locals>.<lambda>)r1   strr  rU  )
rR  rV   r   r   rX  r   rY  rW  rD   rV  r   r  r   _patch_object  s    
r  c                    s   t  tu r fdd}n fdd}|s2tdt| }|d \}	}
t||	|
|||||i 	}|	|_|dd  D ]2\}	}
t||	|
|||||i 	}|	|_|j| qt|S )Nc                      s   t  S r/   r  r   r  r   r   r   S  r!   z!_patch_multiple.<locals>.<lambda>c                      s    S r/   r   r   r  r   r   r   U  r!   z=Must supply at least one keyword argument with patch.multipler   r   )	r1   r  r=   rZ   r   rU  r]  rZ  r   )rR  r   rX  r   rY  rW  rD   rV  r   rV   r   r^  Zthis_patcherr   r  r   _patch_multiple<  s,    r  c           
   
   K   s$   t | \}}	t||	|||||||	S r/   )r  rU  )
rR  r   r   rX  r   rY  rW  rD   rV  rV   r   r   r   r   m  s
    G
r   c                   @   sV   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 r/   )in_dictdictr   rj  clear	_original)rB   r  r   r  rD   r   r   r   r9     s
    
z_patch_dict.__init__c                    s.   t  tr S t  fdd}|S )Nc                     s0      z | i |W   S   0 d S r/   )r  _unpatch_dictr  frB   r   r   _inner  s    z$_patch_dict.__call__.<locals>._inner)r$   r1   r_  r   )rB   r  r  r   r  r   r:     s
    

z_patch_dict.__call__c                 C   sX   t |D ]J}t||}|tjrt|drt| j| j| j	}||}t
||| q|S rc  )r   r&   r   r   rd  r%   r  r  r   r  rT   )rB   rB  r   re  	decoratorZ	decoratedr   r   r   r_    s    
z_patch_dict.decorate_classc                 C   s   |    | jS r/   )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yb   i }|D ]}|| ||< qLY n0 || _|rvt	| z|
| W n( ty   |D ]}|| ||< qY n0 d S r/   )r   r$   r  r  rT  r  r[  r;   r  _clear_dictrj  )rB   r   r  r  rf   r   r   r   r   r     s&    z_patch_dict._patch_dictc                 C   sP   | j }| j}t| z|| W n( tyJ   |D ]}|| ||< q4Y n0 d S r/   )r  r  r  rj  r;   )rB   r  rf   r   r   r   r   r    s    z_patch_dict._unpatch_dictc                 G   s   | j d ur|   dS NF)r  r  )rB   rC   r   r   r   r~  )  s    
z_patch_dict.__exit__c                 C   s   |   }tj|  |S r/   )r  rU  r  r   r  r   r   r   r  0  s    z_patch_dict.startc                 C   s4   zt j|  W n ty$   Y d S 0 | d d d S r/   )rU  r  r6  r=   r~  r   r   r   r   r  7  s
    z_patch_dict.stopN)r   F)rN   rQ   r   r9   r:   r_  r  r  r  r~  r  r  r   r   r   r   r    s   
	r  c                 C   s<   z|    W n* ty6   t| }|D ]
}| |= q&Y n0 d S r/   )r  r;   rZ   )r  keysr   r   r   r   r  B  s    r  c                  C   s   t tjD ]} |   q
d S r/   )r   rU  r  r  )r   r   r   r   _patch_stopallK  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   s   | ]}d | V  qdS )zi%sNr   r   nr   r   r   r1  j  r!   r1  c                 c   s   | ]}d | V  qdS )zr%sNr   r  r   r   r   r1  k  r!   >   __setstate____getformat__
__format____getstate____setformat____get____getnewargs_ex__r  __missing__r   __getinitargs__r   
__delete____reversed____reduce_ex____subclasses____set____getnewargs__c                    s    fdd}| |_ |S )Nc                   s    | g|R i |S r/   r   rB   rC   r   r,   r   r   method|  s    z_get_method.<locals>.method)rN   )r   r-   r  r   r,   r   r	  z  s    r	  c                 C   s   h | ]}d | qS )r   r   )r   r  r   r   r   r      s   >   	__aexit__	__anext__
__aenter__	__aiter__>   r9   r   __del____instancecheck____subclasscheck__r  __prepare__r   c                 C   s
   t | S r/   )r  __hash__r   r   r   r   r     r!   r   c                 C   s
   t | S r/   )r  __str__r   r   r   r   r     r!   c                 C   s
   t | S r/   )r  
__sizeof__r   r   r   r   r     r!   c                 C   s"   t | j d|   dt|  S )N/)r1   rN   r   r   r   r   r   r   r     r!   )r  r  r  
__fspath__r   y              ?g      ?)__lt____gt____le____ge____int__r   __len__r~  __complex__	__float____bool__	__index__r  c                    s    fdd}|S )Nc                    s$    j j}|tur|S  | u r dS tS r8   )__eq__r   r   NotImplemented)otherret_valr   r   r   r    s    z_get_eq.<locals>.__eq__r   )rB   r  r   r   r   _get_eq  s    r  c                    s    fdd}|S )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   )rB   r  r   r   r   _get_ne  s    r  c                    s    fdd}|S )Nc                     s     j j} | tu rtg S t| S r/   )__iter__r   r   r   r  r   r   r   r    s    z_get_iter.<locals>.__iter__r   )rB   r  r   r   r   	_get_iter  s    r  c                    s    fdd}|S )Nc                     s(    j j} | tu rttg S tt| S r/   )r  r   r   _AsyncIteratorr   r  r   r   r   r    s    z"_get_async_iter.<locals>.__aiter__r   )rB   r  r   r   r   _get_async_iter  s    r  )r  r  r  r  c                 C   sb   t |t}|tur||_d S t|}|d urB|| }||_d S t|}|d ur^|| |_d S r/   )_return_valuesr_   r   rw   _calculate_return_value_side_effect_methodsr~   )r5   r  r   fixedZreturn_calculatorrw   Zside_effectorr   r   r   _set_return_value  s    

r  c                   @   s   e Zd Zdd Zdd ZdS )
MagicMixinc                O   s*   |    tt| j|i | |    d S r/   )_mock_set_magicsr   r  r9   r  r   r   r   r9     s    zMagicMixin.__init__c                 C   s   t tB }|}t| dd d urX|| j}t }|| }|D ]}|t| jv r:t| | q:|tt| j }t| }|D ]}t	||t
||  qvd S )Nr   )_magicsr>  r&   intersectionr   r  r1   r^   r  rT   
MagicProxy)rB   Zorig_magicsZthese_magicsZremove_magicsr   rA  r   r   r   r    s    zMagicMixin._mock_set_magicsN)rN   rQ   r   r9   r  r   r   r   r   r    s   r  c                   @   s   e Zd ZdddZdS )r   Fc                 C   s   |  || |   d S r/   r   r  r   r   r   r   r     s    z"NonCallableMagicMock.mock_add_specN)FrN   rQ   r   r   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )AsyncMagicMixinc                O   s*   |    tt| j|i | |    d S r/   )r  r   r  r9   r  r   r   r   r9     s    zAsyncMagicMixin.__init__NrN   rQ   r   r9   r   r   r   r   r    s   r  c                   @   s   e Zd ZdddZdS )r   Fc                 C   s   |  || |   d S r/   r  r   r   r   r   r   +  s    zMagicMock.mock_add_specN)Fr  r   r   r   r   r      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 r/   r   r   )rB   r   r   r   r   r   r9   7  s    zMagicProxy.__init__c                 C   s8   | j }| j}|j|||d}t||| t||| |S )N)r   r   r   )r   r   r   rT   r  )rB   r   r   mr   r   r   create_mock;  s    zMagicProxy.create_mockNc                 C   s   |   S r/   )r  )rB   r)   rA  r   r   r   r  D  s    zMagicProxy.__get__)N)rN   rQ   r   r9   r  r  r   r   r   r   r  6  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 S )Nr   r   Z_mock_await_countZ_mock_await_argsZ_mock_await_args_listr   r+   )superr9   r   r   r   r^   rs   r   r   r'   ZCO_COROUTINEco_flags)rB   rC   rD   	code_mockr   r   r   r9   M  s    


zAsyncMockMixin.__init__c                   s  t ||fdd}|  jd7  _|| _| j| | j}|d urt|rL|nft|szt|}W n t	yv   t
Y n0 t|r|n,t|r||i |I d H }n||i |}|tur|S | jtur| jS | jd ur
t| jr| j|i |I d H S | j|i |S | jS )NTr%  r   )r'  r   r   r   r   r~   r3   rY   r   StopIterationStopAsyncIterationr   r   r   rw   r   )rB   rC   rD   r  rK  rg   r   r   r   rJ  ]  s6    


z!AsyncMockMixin._execute_mock_callc                 C   s(   | j dkr$d| jpd d}t|d S )Nr   	Expected r5   z to have been awaited.r   r   r  r   r   r   r   r     s    
zAsyncMockMixin.assert_awaitedc                 C   s0   | j dks,d| jpd d| j  d}t|d S Nr   r  r5   z$ to have been awaited once. Awaited  times.r  r   r   r   r   r     s
    
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rn|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  r  r  r'  r$   r(  )rB   rC   rD   r)  r$  r*  r+  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   r  r   r,  r   r   r   r     s    
z'AsyncMockMixin.assert_awaited_once_withc                   sj     t||fdd}t|tr$|nd } fdd jD }|sL|t|vrf ||}td| |d S )NTr%  c                    s   g | ]}  |qS r   r-  r.  r   r   r   r     r!   z3AsyncMockMixin.assert_any_await.<locals>.<listcomp>z%s await not found)r  r'  r$   r(  r   r<  r  r  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 }|s||vr|d u rXd}nddd |D }t| d	t| d
 j |d S t|}g }|D ]0}z|| W q ty   || Y q0 q|rtdt	|f |d S )Nc                    s   g | ]}  |qS r   r-  r.  r   r   r   r     r!   z4AsyncMockMixin.assert_has_awaits.<locals>.<listcomp>c                 s   s   | ]}t |tr|V  qd S r/   r0  r   r   r   r   r1    r!   z3AsyncMockMixin.assert_has_awaits.<locals>.<genexpr>c                 3   s   | ]}  |V  qd S r/   r-  r.  r   r   r   r1    r!   zAwaits not found.z,Error processing expected awaits.
Errors: {}c                 S   s   g | ]}t |tr|nd qS r/   r0  r   r   r   r   r     s   r2  z	
Actual: z%r not all found in await list)
r   rs   r   r4  r  rZ   r6  r=   r   r[   )	rB   r7  r8  r)  r+  Z
all_awaitsr9  r:  r;  r   r   r   r     sF    z AsyncMockMixin.assert_has_awaitsc                 C   s0   | j dkr,d| jpd d| j  d}t|d S )Nr   r  r5   z# to not have been awaited. Awaited r  r  r   r   r   r   r     s
    
z!AsyncMockMixin.assert_not_awaitedc                   s*   t  j|i | d| _d | _t | _d S Nr   )r  rv   r   r   rs   r   rA   r  r   r   rv     s    zAsyncMockMixin.reset_mock)F)rN   rQ   r   r   r   r   r   r9   rJ  r   r   r   r   r   r   r   rv   __classcell__r   r   r  r   r   H  s   (	
,	r   c                   @   s   e Zd ZdS )r	   NrL  r   r   r   r   r	     s   r	   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )_ANYc                 C   s   dS r8   r   rB   r  r   r   r   r  -	  s    z_ANY.__eq__c                 C   s   dS r  r   r  r   r   r   r  0	  s    z_ANY.__ne__c                 C   s   dS )Nz<ANY>r   r   r   r   r   r   3	  s    z_ANY.__repr__N)rN   rQ   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@|}|rX|rP|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!   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   rC   rD   r  Zformatted_argsargs_stringZkwargs_stringr   r   r   r  :	  s    
r  c                   @   sv   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 )r'  r   r   NFTc                 C   s   d}i }t |}|dkr$|\}}}nr|dkrd|\}	}
t|	trX|	}t|
trR|
}qb|
}q|	|
 }}n2|dkr|\}t|tr|}nt|tr|}n|}|rt| ||fS t| |||fS )Nr      r   r   )r   r$   r  r[   r   )r   r   r   r   r&  	from_kallrC   rD   _lenfirstsecondr   r   r   r   _	  s.    



z_Call.__new__c                 C   s   || _ || _|| _d S r/   )r   r   _mock_from_kall)rB   r   r   r   r&  r  r   r   r   r9   	  s    z_Call.__init__c                 C   s\  zt |}W n ty"   t Y S 0 d}t | dkr>| \}}n
| \}}}t| dd rpt|dd rp| j|jkrpdS d}|dkrdi  }}n|dkr|\}}}n|dkr|\}	t|	tr|	}i }n"t|	tr|	}di  }}nd}|	}nV|dkr4|\}
}t|
tr(|
}t|tr|i  }}n
d| }}n
|
| }}ndS |rL||krLdS ||f||fkS )	Nr   r   r   Fr   r   r  r   )r   r  r  r&   r   r$   r[   r  )rB   r  Z	len_otherZ	self_nameZ	self_argsZself_kwargsZ
other_nameZ
other_argsZother_kwargsr   r  r  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   r'  r  r   r   r   r:   	  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  r   )rB   r   r   r   r   r   r   	  s    
z_Call.__getattr__c                 C   s   |t jv rtt | |S r/   )r[   r^   r;   __getattribute__)rB   r   r   r   r   r  	  s    
z_Call.__getattribute__c                 C   s(   t | dkr| \}}n
| \}}}||fS )Nr   )r   r  r   r   r   _get_call_arguments	  s    

z_Call._get_call_argumentsc                 C   s   |   d S r  r  r   r   r   r   rC   	  s    z
_Call.argsc                 C   s   |   d S )Nr   r  r   r   r   r   rD   	  s    z_Call.kwargsc                 C   s|   | j s&| jpd}|dr"d| }|S t| dkr@d}| \}}n0| \}}}|sTd}n|dshd| }nd| }t|||S )Nr   r   zcall%sr   zcall.%s)r  r   r   r   r  )rB   r   rC   rD   r   r   r   r   	  s    





z_Call.__repr__c                 C   s4   g }| }|d ur(|j r || |j}qtt|S r/   )r  r   r   rs   r   )rB   ZvalsrN  r   r   r   	call_list	  s    
z_Call.call_list)r   r   NFT)r   NNFT)rN   rQ   r   r   r9   r  r  r  r:   r   r  r  r   rC   rD   r   r  r   r   r   r   r'  L	  s$     
   
5

r'  )r  c              	   K   sh  t | rt| } t| t}t| }d| i}|r8d| i}n| d u rDi }|rT|rTd|d< || t}	t| rri }n8|r|rtdt	}	n"t
| st}	n|r|rt| st}	|d|}|}
|d u rd}
|	f |||
|d|}t| trt|| }|rt| nt| ||| |d ur,|s,||j|< |rV|sVd	|vrVt| |dd
|d|_t| D ]}t|rrq^zt| |}W n ty   Y q^Y n0 d|i}|rd|i}t|tst|||||}||j|< nn|}t| tr|j}t| ||}||d< t|rt	}nt}|f ||||d|}||j|< t|||d t|tr^t||| q^|S )Nr   r   Tr   zJInstance can not be True when create_autospec is mocking an async functionr   r   )r   r   r   r   rw   r   )rL   ry  r   r   )r   r   r   r   )rK   )r\   r1   r$   r.   rj  r   r'   ZisdatadescriptorRuntimeErrorr	   rY   r   ra   r   r6   rj   r   rM   r   r   rw   r   r   r&   r;   r   r5   
_must_skipr   rT   )r   r   rL   r   ry  rD   is_typeZis_async_funcr  r  r   r5   r   rf   r   r   rK   Zchild_klassr   r   r   r   
  s    











r   c                 C   sx   t | ts$|t| di v rdS | j} | jD ]H}|j|t}|tu rFq*t |tt	frZ dS t |t
rl|  S  dS q*|S )Nr^   F)r$   r1   r&   r   r]   r^   r_   r   rW   rX   r6   )r   r   r  rB  rg   r   r   r   r  
  s    


r  c                   @   s   e Zd ZdddZdS )r   FNc                 C   s(   || _ || _|| _|| _|| _|| _d S r/   )r   idsr   r   rL   r   )rB   r   r   r   r   r  rL   r   r   r   r9   
  s    z_SpecState.__init__)FNNNFr  r   r   r   r   r   
  s     r   c                 C   s"   t | trt| S t| S d S r/   )r$   bytesioBytesIOStringIO)	read_datar   r   r   
_to_stream
  s    

r  r   c                    s&  t }|d gfdd}fdd} fddfdd fd	d
}td u rdd l}ttt|jtt|ja| d u rt	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                     s(   j jd urj jS  d j | i |S r  )	readlinesrw   rb   _statehandler   r   _readlines_side_effect
  s    z)mock_open.<locals>._readlines_side_effectc                     s(   j jd urj jS  d j | i |S r  )readrw   rb   r  r   r   _read_side_effect
  s    z$mock_open.<locals>._read_side_effectc                  ?   s(     E d H  d j | i |V  qd S r  )readlinerb   )_iter_side_effectr  r   r   _readline_side_effect
  s    z(mock_open.<locals>._readline_side_effectc                  3   s0   j jd urj jV  q d D ]
} | V  q d S r  )r  rw   )liner  r   r   r  
  s    z$mock_open.<locals>._iter_side_effectc                      s    j jd urj jS t d S r  )r  rw   r   r   r  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r2  d< d j_tS )Nr   r   )r  r  r~   r   rb   )r  r  r  r  r   r   
reset_data  s
    
zmock_open.<locals>.reset_data)r  	file_spec_iorZ   r  r   TextIOWrapperunionr  r   r  r  rw   writer  r  r  r~   r  r   )r5   r  Z
_read_datar  r  r  r  r  r   )r  r  r  r  r  r   r   
  s8    "

r   c                   @   s&   e Zd Zdd ZdddZdd ZdS )	r   c                K   s   t f i |S r/   )r   )rB   rD   r   r   r   r     s    zPropertyMock._get_child_mockNc                 C   s   |  S r/   r   )rB   r)   Zobj_typer   r   r   r    s    zPropertyMock.__get__c                 C   s   | | d S r/   r   )rB   r)   r   r   r   r   r  !  s    zPropertyMock.__set__)N)rN   rQ   r   r   r  r  r   r   r   r   r     s   	
r   c              	   C   sp   d| _ t| D ]\}zt| |}W n ty6   Y qY n0 t|tsDqt|j|trXq|j	| u rt
| qd S r8   )r   r   r&   r;   r$   r   r   r_   r   r   r   )r5   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  r+   )iteratorr   r   r'   ZCO_ITERABLE_COROUTINEr  r^   )rB   r"  r  r   r   r   r9   A  s    
z_AsyncIterator.__init__c                    s(   zt | jW S  ty   Y n0 td S r/   )r   r"  r  r  r   r   r   r   r  G  s
    z_AsyncIterator.__anext__N)rN   rQ   r   r9   r  r   r   r   r   r  =  s   r  )F)F)NFNNN)FFNN)Nr   )}__all__r   rf  r
  r'   r   r  builtinsr   typesr   r   r   Zunittest.utilr   	functoolsr   r   r   rv  r
   r  r   r*   r.   r#   r3   r7   r>   rM   rH   rY   r\   ra   rj   re   r   r   r  r   r   r   r   MISSINGr  ZDELETEDr   r   r   rZ   rs   r   r   r   r   r<   r9   r   r<  r   r@  r   rQ  rT  rU  r  r  r  r   r  r  r  r  ZmultipleZstopallrd  Zmagic_methodsZnumericsr   r   ZinplacerightZ_non_defaultsr	  r  r>  Z_sync_async_magicsZ_async_magicsr?  r   r  r  r  r  r  r  r  r  r  r  r  r   r  r   r  r   r	   r  r   r  r[   r'  r   r   r  r   r1   r  r6   r  r  r   r   r   r  r   r   r   r   <module>   s0  	


1     h4  <
  
2
N 		
	
		 8+ :
  
 
N