???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................U
    e5d                    @   s  d Z 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
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.d-d.d/d0d1d2d3d4hZ/d5d6 Z0G d7d8 d8e1Z2d9d: Z3G d;d< d<e&Z4G d=d> d>e&Z5G d?d@ d@e5Z6dAdB Z7G dCdD dDe5Z8G dEdF dFe8e6Z9dGdH Z:dIdJ Z;G dKdL dLe&Z<dMdN Z=e*dddddfdOdPZ>ddQdRZ?e*dddddfdSdTZ@G dUdV dVe&ZAdWdX ZBdYdZ ZCe>e@_&eAe@_De?e@_EeCe@_Fd[e@_Gd\ZHd]ZId^Jd_d` eIK D ZLd^Jdad` eIK D ZMdbdcdddedfdgdhdidjdkdldmdndodpdqdrdshZNdtdu ZOdvd d^JeHeIeLeMgK D ZPdwdxdyhZQdzhZReQeRB ZSePeNB ZTeTeSB ZUd{d|d}d~ddddhZVdd dd dd dd dZWeXeXeXeXddddddd	dddZYdd ZZdd Z[dd Z\dd Z]eZe[e\e]dZ^dd Z_G dd de5Z`G dd de`e6ZaG dd de`ZbG dd de`e9ZcG dd de5ZdG dd de5ZeG dd deeebe9ZfG dd de&Zgeg Zhdd ZiG dd dejZkekddZldddZmdd ZnG dd de&ZoepemepehjqfZrdasdd ZtdddZuG dd de9Zvdd ZwG dd dZxdS ))Mock	MagicMockpatchsentinelDEFAULTANYcallcreate_autospec	AsyncMock
FILTER_DIRNonCallableMockNonCallableMagicMock	mock_openPropertyMocksealz1.0    N)CodeType
ModuleType
MethodType)	safe_repr)wrapspartialc                 C   s   h | ]}| d s|qS _
startswith).0name r   %/usr/lib64/python3.8/unittest/mock.py	<setcomp>(   s     
 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getattrasyncioiscoroutinefunctioninspectZisawaitableobjr   r   r   _is_async_obj0   s
    

r*   c                 C   s   t | dd rt| S dS d S )N__code__F)r$   r%   r&   funcr   r   r   _is_async_func8   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_exceptionE   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_mockL   s    r7   c                 C   s   t | tr|s| j} d}n,t | tsFz
| j} W n tk
rD   Y d S X |rVt| d }n| }z| t|fW S  t	k
r   Y d S X d S NT)
r"   r1   __init__r6   __call__AttributeErrorr   r'   	signature
ValueError)r-   Zas_instanceZeat_selfZsig_funcr   r   r   _get_signature_objectU   s    

r>   Fc                    sN   t | ||  d krd S  \}   fdd}t| | |t|_ t|_d S )Nc                   s    j || d S r/   bindselfargskwargssigr   r   checksigw   s    z"_check_signature.<locals>.checksig)r>   _copy_func_detailsr1   _mock_check_sig__signature__)r-   r5   	skipfirstinstancerG   r   rE   r   _check_signaturer   s    

rM   c              	   C   s:   dD ]0}zt ||t| | W q tk
r2   Y qX 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 k	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kS r/   )r1   listtupler(   r   r   r   _is_list   s    r\   c                 C   sF   t | tst| dd d k	S | f| j D ]}|jdd k	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 kr"| S |\}  fdd}t|| |j}| sRd}|| d}d| }	t|	| || }
t|
|   |
S )Nc                     s    j | | 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 | |S r/   )assert_called_withrb   r5   r   r   rk      s    z'_setup_func.<locals>.assert_called_withc                     s    j | |S r/   )assert_calledrb   rl   r   r   rm      s    z"_setup_func.<locals>.assert_calledc                     s    j | |S r/   )assert_not_calledrb   rl   r   r   rn      s    z&_setup_func.<locals>.assert_not_calledc                     s    j | |S r/   )assert_called_oncerb   rl   r   r   ro      s    z'_setup_func.<locals>.assert_called_oncec                     s    j | |S r/   )assert_called_once_withrb   rl   r   r   rp      s    z,_setup_func.<locals>.assert_called_once_withc                     s    j | |S r/   )assert_has_callsrb   rl   r   r   rq      s    z%_setup_func.<locals>.assert_has_callsc                     s    j | |S r/   )assert_any_callrb   rl   r   r   rr      s    z$_setup_func.<locals>.assert_any_callc                     s:   t   _t   _   j} t| r6| k	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| ||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)	r%   
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   rw   _mock_return_valuer~   _mock_side_effect_mock_parent_mock_new_parent
_mock_name_mock_new_namec                 C   s8   t |  d|  }| |fdd}| |fdd}t||S )NZ_mock_c                 S   s"   | j }|d krt| |S t||S r/   )r   r$   )rB   r   	_the_namerF   r   r   r   _getA  s    
z"_delegating_property.<locals>._getc                 S   s*   | j }|d kr|| j|< nt||| d S r/   )r   r^   rT   )rB   valuer   r   rF   r   r   r   _setF  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   S  s    
z_CallList.__contains__c                 C   s   t t| S r/   )pprintZpformatrZ   r   r   r   r   r   a  s    z_CallList.__repr__N)rN   rQ   r   r   r   r   r   r   r   rs   Q  s   rs   c                 C   s|   t |}t|sdS |js4|js4|jd k	s4|jd k	r8dS | }|d k	rX||k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_parente  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s^ttj}|j| f||j}dd | D }|r^t	||d  r^t
| f}t| j|d| ji}tt| |}|S )Nc                 S   s   g | ]}| d r|qS specr   r   argr   r   r   
<listcomp>  s   
z+NonCallableMock.__new__.<locals>.<listcomp>r   rO   )r0   r	   r'   r<   r   r9   Zbind_partialZ	argumentskeysr*   AsyncMockMixinr1   rN   rO   _safe_super__new__)	clsrC   kwbasesrF   Z
bound_argsZspec_argnewrL   r   r   r   r     s    
zNonCallableMock.__new__N Fc                 K   s   |d kr|}| j }||d< ||d< ||d< ||d< d|d< |d k	rJ|}d}|
d krZ|d k	}
| |||	|
 i |d< ||d	< d |d
< d|d< d |d< d|d< t |d< t |d< t |d< ||d< |r| jf | 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   spec_setr   _spec_state	_new_name_new_parent_spec_as_instance	_eat_selfZunsaferD   r^   r   r   r   r9     sD    



    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 k	r~t|s~t|trV|}nt|}t|||}	|	ot|	d }t |}| j	}
||
d< ||
d< ||
d< ||
d< ||
d< d S )Nr   _spec_class	_spec_set_spec_signature_mock_methods_spec_asyncs)
dirr%   r&   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 k	r| jj}|tk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 k	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 k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 kr| jS |j}|d k	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 kr|| _n||_d S r/   )	_try_iterr   r   r~   )rB   r   r   r   r   r   Z__set_side_effect9  s
    z!NonCallableMock.__set_side_effect)rw   r~   c                C   s   |d krg }t | |krd S |t |  d| _d | _d| _t | _t | _t | _|r^t	| _
|rhd | _| j D ]"}t|tsr|tkrqr|| qr| j
}t|r|| k	r|| d S )NFr   )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   D  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>o      z0NonCallableMock.configure_mock.<locals>.<lambda>)keyr   )sorteditemssplitpopr$   rT   )rB   rD   r   valrC   finalr)   r   r   r   r   r   b  s    	
zNonCallableMock.configure_mockc                 C   s   |dkrt |n:| jd k	r<|| jks.|tkrLt d| nt|rLt || jsd|drdt d| j|}|tkrt |np|d krd }| j	d k	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   x  sF    




   
   
zNonCallableMock.__getattr__c                 C   s   | j g}| j}| }d}|dgkr$d}|d k	rZ|}||j |  d}|j dkrRd}|j}q$tt|}|jpnd}t|dkr|d dk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krd| }d}| jd k	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 k	r|qS r   )r   )r   Zm_nameZm_valuer   r   r   r     s   z+NonCallableMock.__dir__.<locals>.<listcomp>c                 S   s   g | ]}| d s|qS r   r   r   er   r   r   r     s     
 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   ZextrasZ	from_typeZ	from_dictZfrom_child_mocksr   r   r   r    s    


zNonCallableMock.__dir__c                    sT  |t krt||S jrHjd k	rH|jkrH|jkrHtd| n|tkrbd| }t|n|tkrjd k	r|jk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    f| |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 kr2|t| jkr2tt| | || jkr2d S | j|t}|| jkr\tt| 	| n|t
krlt||tk	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 k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 k	rt|dkrNd}|\}}n
|\}}}z||j||fW S  tk
r } z|d  W Y S d }~X Y qX n|S d S )Nr   r   r   )r"   r[   r   r  r   r@   	TypeErrorwith_traceback)rB   _callrF   r   rC   rD   r  r   r   r   _call_matcherH  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   b  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   l  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   t  s    
z"NonCallableMock.assert_called_oncec                   s   j d kr. }d}d||f }t| fdd} f}j }||kr~t|trn|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_message)r|   r  r  r  r"   	Exception)rB   rC   rD   expectedactualZerror_messager$  causer   r#  r   rk   ~  s    
z"NonCallableMock.assert_called_withc                O   s8   | j dks,d| jpd| j |  f }t|| j||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||kr|d krXd}nddd |D }t| d	t|  jd
dd |d S t|}g }|D ]2}z|| W q t	k
r   |
| Y qX q|rtd jpdt||f |d S )Nc                    s   g | ]}  |qS r   r  r   cr   r   r   r     s     z4NonCallableMock.assert_has_calls.<locals>.<listcomp>c                 s   s   | ]}t |tr|V  qd S r/   r"   r%  r   r   r   r   	<genexpr>  s     
 z3NonCallableMock.assert_has_calls.<locals>.<genexpr>c                 3   s   | ]}  |V  qd S r/   r*  r+  r   r   r   r.    s     zCalls not found.z+Error processing expected calls.
Errors: {}c                 S   s   g | ]}t |tr|nd qS r/   r-  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     sH    
" z NonCallableMock.assert_has_callsc                   sZ     ||f} fdd jD }||krVt|tr8|nd } ||}td| |d S )Nc                    s   g | ]}  |qS r   r*  r+  r   r   r   r     s     z3NonCallableMock.assert_any_call.<locals>.<listcomp>z%s call not found)r  r}   r"   r%  r  r  rB   rC   rD   r&  r'  r(  r  r   r   r   rr     s    zNonCallableMock.assert_any_callc                K   s   | d}|| jd kr"tf |S t| }t|trB|tkrBt}nbt|trp|tksd| j	rj|| j	krjt}qt}n4t|t
st|trt}qt|trt}n
|jd }| jrd|krd|d  nd}|  | }t||f |S )Nr   r   r   r   r   r   )r_   r^   r	   r1   r0   r   _async_method_magicsr   _all_sync_magicsr   CallableMixinr   r   r   r]   r   r   r;   )rB   r   r   _typeklassrV   r  r   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   r0  r   r   r   r    s    zNonCallableMock._calls_repr)NNNNNNr   NFNF)F)FF)N)r   )F)r?  ),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     sn                      
-
	  


''
!


-'r   c                 C   sL   | d kr| S t | r| S t| r$| S z
t| W S  tk
rF   |  Y S X 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   s6   || j d< tt| j|||||||	|
f| || _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   s$   | j || | j|| | j||S r/   )rI   _increment_mock_call
_mock_callrA   r   r   r   r:   4  s    zCallableMixin.__call__c                O   s   | j ||S r/   )_execute_mock_callrA   r   r   r   rB  <  s    zCallableMixin._mock_callc                O   s   d| _ |  jd7  _t||fdd}|| _| j| | jd k	}| j}| j}|dk}| j	td||f | j
}|d k	r|r|jt|||f |jd k	}|r|jd | }t|||f}	|j	|	 |jr|rd}
nd}
|jdk}|j|
 | }|j
}qpd S )NTr   twor   r   r   )rz   r{   _Callr|   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   rA  ?  s4    


z"CallableMixin._increment_mock_callc                O   s|   | j }|d k	rPt|r|n(t|s:t|}t|rD|n
|||}|tk	rP|S | jtk	r`| jS | jd k	rv| j||S | jS r/   )r~   r3   rY   r   r   r   rw   r   )rB   rC   rD   effectrg   r   r   r   rC  m  s     


z CallableMixin._execute_mock_call)
rN   rQ   r   r   r9   rI   r:   rB  rA  rC  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   s8   zt | |W S  tk
r2   t| t | | Y S X d S r/   )r$   r;   
__import__)thingcompimport_pathr   r   r   _dot_lookup  s
    rM  c                 C   sB   |  d}|d}t|}|D ]}|d| 7 }t|||}q |S )Nr   r   z.%s)r   r   rI  rM  )targetZ
componentsrL  rJ  rK  r   r   r   	_importer  s    

rO  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 k	r(|t k	rtd|d k	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   rQ  rV   r   r   rS  r   rT  rR  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>)rP  rQ  rV   r   r   rS  r   rT  rR  rD   attribute_namerU  )rB   patcherr   r   r   rV    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#   rV  rT   )rB   r>  r   
attr_valuerY  r   r   r   rZ    s    

z_patch.decorate_classc              	   c   sr   g }t  \}|jD ]8}||}|jd k	r8|| q|jtkr|| q|t	|7 }||fV  W 5 Q R X d S r/   )

contextlib	ExitStack	patchingsenter_contextrX  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 )Nrc  c               
      s4    | |\}} ||W  5 Q R  S Q R X d S r/   rk  rC   rg  ZnewargsZnewkeywargsr-   rf  rB   r   r   rf  (  s    z)_patch.decorate_callable.<locals>.patchedr#   rc  r   r   r]  r   rn  r   r\  "  s    
z_patch.decorate_callablec                    s>   t  dr j  S t  fddg_S )Nrc  c               
      s:    | |"\}} ||I d H W  5 Q R  S Q R X d S r/   rl  rm  rn  r   r   rf  9  s    z/_patch.decorate_async_callable.<locals>.patchedro  r]  r   rn  r   r[  3  s    
z_patch.decorate_async_callablec              	   C   s   |   }| j}t}d}z|j| }W n$ ttfk
rH   t||t}Y nX d}|tkrft|t	rfd| _
| j
s|tkrtd||f ||fS )NFTz!%s does not have the attribute %r)rQ  rV   r   r^   r;   KeyErrorr$   	_builtinsr"   r   rS  )rB   rN  r   rf   localr   r   r   get_originalD  s     
z_patch.get_originalc                 C   s  | j | j| j  }}}| j| j }}| j}|  | _|dkr@d }|dkrLd }|dkrXd }|d k	rp|d k	rptd|d k	s|d k	r|dkrtd| 	 \}}|t
kr||d kr|d}	|dkr|}|dkr|}d }n&|d k	r|dkr|}d }n|dkr|}|d k	s|d k	r.|t
krtdt|tr.d}	|d krHt|rHt}
nt}
i }|d k	r`|}
n^|d k	st|d k	r|}|d k	r|}t|rd|k}n
t| }t|rt}
n
|rt}
|d k	r||d< |d k	r||d	< t|
trt|
tr| jr| j|d
< || |
f |}|	rt|r|}|d k	rB|}t|sZt|sZt}
|d
 |
f |dd||_nl|d k	r|t
k	rtd|t
krtdt|}|dkr|}t|f|| jd|}n|rtd|}|| _|| _t  | _!zrt"| j| j| | j#d k	rpi }| j t
kr:||| j#< | j$D ](}| j!%|}|j t
kr@|| q@|W S |W S    | j&t'(  s Y nX 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   rT  rD   rR  rQ  rN  r  rs  r   r"   r1   r*   r	   r   r\   r   r   r0   r   rV   re  r!   ra   r   rw   boolr   temp_originalis_localra  rb  _exit_stackrT   rX  rU  rd  __exit__sysexc_info)rB   r   r   r   rT  rD   rR  rf   rr  ZinheritKlass_kwargsZ	this_specZnot_callableZnew_attrrh  rj  r   r   r   r   	__enter__\  s    























z_patch.__enter__c                 G   s   | j r$| jtk	r$t| j| j| j n>t| j| j | jsbt| j| jrP| jdkrbt| j| j| j | `| ` | `| j	}| `	|j
| S )N)rO   rQ   rR   __annotations__rS   )rw  rv  r   rT   rN  rV   r  rS  r#   rx  ry  )rB   r{  ri  r   r   r   ry    s    z_patch.__exit__c                 C   s   |   }| j|  |S r/   )r~  _active_patchesr   )rB   rg   r   r   r   start  s    z_patch.startc                 C   s6   z| j |  W n tk
r&   Y d S X | d d d S r/   )r  r3  r=   ry  r   r   r   r   stop  s
    z_patch.stop)rN   rQ   r   rX  r  r9   rV  r:   rZ  ra  contextmanagerrk  r\  r[  rs  r~  ry  r  r  r   r   r   r   rP    s    
 rP  c              	      sP   z  dd\ }W n& ttfk
r:   td f Y nX  fdd}||fS )Nr   r   z.Need a valid target to patch. You supplied: %rc                      s   t  S r/   rO  r   rN  r   r   r     r   z_get_target.<locals>.<lambda>)rsplitr  r=   )rN  rV   rQ  r   r  r   _get_target
  s    r  c           
   
      s>   t  tk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   *  r   z_patch_object.<locals>.<lambda>)r1   strr  rP  )
rN  rV   r   r   rS  r   rT  rR  rD   rQ  r   r  r   _patch_object  s            r  c                    s   t  tk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   H  r   z!_patch_multiple.<locals>.<lambda>c                      s    S r/   r   r   r  r   r   r   J  r   z=Must supply at least one keyword argument with patch.multipler   r   )	r1   r  r=   rZ   r   rP  rX  rU  r   )rN  r   rS  r   rT  rR  rD   rQ  r   rV   r   rY  Zthis_patcherr   r  r   _patch_multiple1  sH                  r  c           
   
   K   s$   t | \}}	t||	|||||||	S r/   )r  rP  )
rN  r   r   rS  r   rT  rR  rD   rQ  rV   r   r   r   r   b  s    F       r   c                   @   sN   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	eZ
e	ZdS )_patch_dictr   Fc                 K   s,   || _ t|| _| j| || _d | _d S r/   )in_dictdictr   re  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                     s&      z | |W S   X d S r/   )r  _unpatch_dictr  frB   r   r   _inner  s    z$_patch_dict.__call__.<locals>._inner)r"   r1   rZ  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 r^  )r   r$   r   r   r_  r#   r  r  r   r  rT   )rB   r>  r   r`  Z	decoratorZ	decoratedr   r   r   rZ    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k
rd   i }|D ]}|| ||< qNY nX || _|rxt	| z|
| W n* tk
r   |D ]}|| ||< qY nX d S r/   )r   r"   r  r  rO  r  rV  r;   r  _clear_dictre  )rB   r   r  r  rf   r   r   r   r   r    s&    z_patch_dict._patch_dictc                 C   sR   | j }| j}t| z|| W n* tk
rL   |D ]}|| ||< q6Y nX d S r/   )r  r  r  re  r;   )rB   r  rf   r   r   r   r   r    s    z_patch_dict._unpatch_dictc                 G   s   |    dS NF)r  )rB   rC   r   r   r   ry    s    z_patch_dict.__exit__N)r   F)rN   rQ   r   r9   r:   rZ  r~  r  r  ry  r  r  r   r   r   r   r    s   
	r  c                 C   s>   z|    W n, tk
r8   t| }|D ]
}| |= q(Y nX d S r/   )r  r;   rZ   )r  r   r   r   r   r   r  &  s    r  c                  C   s   t tjD ]} |   q
d S r/   )r   rP  r  r  )r   r   r   r   _patch_stopall/  s    r  Z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   r.  N  s     r.  c                 c   s   | ]}d | V  qdS )zr%sNr   r  r   r   r   r.  O  s     __get____set__
__delete____reversed____missing__r   __reduce_ex__Z__getinitargs____getnewargs____getstate____setstate____getformat__Z__setformat__r   r  __subclasses__
__format____getnewargs_ex__c                    s    fdd}| |_ |S )Nc                   s    | f||S r/   r   rB   rC   r   r,   r   r   method`  s    z_get_method.<locals>.method)rN   )r   r-   r  r   r,   r   r	  ^  s    r	  c                 C   s   h | ]}d | qS )r   r   )r   r  r   r   r   r   f  s    
__aenter__	__aexit__	__anext__	__aiter__r   r  r9   r   __prepare____instancecheck____subclasscheck____del__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__ry  __complex__	__float____bool__	__index__r  c                    s    fdd}|S )Nc                    s$    j j}|tk	r|S  | k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k	rtS  | k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k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k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k	r||_d S t|}|d k	rB|| }||_d S t|}|d k	r^|| |_d S r/   )_return_valuesr_   r   rw   _calculate_return_value_side_effect_methodsr~   )r5   r  r   Z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|| |    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 k	rX|| j}t }|| }|D ]}|t| jk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   r=  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|| |    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     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)   r=  r   r   r   r  (  s    zMagicProxy.__get__)N)rN   rQ   r   r9   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|| 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   1  s    


zAsyncMockMixin.__init__c                   s  t ||fdd}|  jd7  _|| _| j| | j}|d k	rt|rL|nbt|szt|}W n t	k
rx   t
Y nX t|r|n&t|r|||I d H }n
|||}|tk	r|S | jtk	r| jS | jd k	rt| jr| j||I d H S | j||S | jS )NTrD  r   )rF  r   r   r   r   r~   r3   rY   r   StopIterationStopAsyncIterationr%   r&   r   r   rw   r   )rB   rC   rD   r  rG  rg   r   r   r   rC  A  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   i  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   q  s    
z"AsyncMockMixin.assert_awaited_oncec                   sz   j d kr& }td| d fdd} f}j }||krvt|trf|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_message)r   r  r  r  r"   r%  )rB   rC   rD   r&  r$  r'  r(  r   r#  r   r   z  s    
z"AsyncMockMixin.assert_awaited_withc                O   s8   | j dks,d| jpd d| j  d}t|| j||S r  )r   r   r  r   r)  r   r   r   r     s    
z'AsyncMockMixin.assert_awaited_once_withc                   sZ     ||f} fdd jD }||krVt|tr8|nd } ||}td| |d S )Nc                    s   g | ]}  |qS r   r*  r+  r   r   r   r     s     z3AsyncMockMixin.assert_any_await.<locals>.<listcomp>z%s await not found)r  r   r"   r%  r  r  r9  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||kr|d krXd}nddd |D }t| d	t| d
 j |d S t|}g }|D ]2}z|| W q tk
r   || Y qX q|rtdt	|f |d S )Nc                    s   g | ]}  |qS r   r*  r+  r   r   r   r     s     z4AsyncMockMixin.assert_has_awaits.<locals>.<listcomp>c                 s   s   | ]}t |tr|V  qd S r/   r-  r   r   r   r   r.    s     
 z3AsyncMockMixin.assert_has_awaits.<locals>.<genexpr>c                 3   s   | ]}  |V  qd S r/   r*  r+  r   r   r   r.    s     zAwaits not found.z,Error processing expected awaits.
Errors: {}c                 S   s   g | ]}t |tr|nd qS r/   r-  r   r   r   r   r     s   r/  z	
Actual: z%r not all found in await list)
r   rs   r   r1  r  rZ   r3  r=   r   r[   )	rB   r4  r5  r&  r(  Z
all_awaitsr6  r7  r8  r   r   r   r     s>    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|| 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   rC  r   r   r   r   r   r   r   rv   __classcell__r   r   r  r   r   ,  s   (	
,	r   c                   @   s   e Zd ZdS )r	   NrH  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  	  s    z_ANY.__ne__c                 C   s   dS )Nz<ANY>r   r   r   r   r   r   	  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   )reprr   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   rC   rD   r  Zformatted_argsZ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dd Zdd Zedd Zedd Zdd Zdd ZdS )"rF  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   rE  	from_kallrC   rD   _lenfirstsecondr   r   r   r   C	  s.    



z_Call.__new__c                 C   s   || _ || _|| _d S r/   )r   r   _mock_from_kall)rB   r   r   r   rE  r  r   r   r   r9   c	  s    z_Call.__init__c                 C   sh  |t krdS zt|}W n tk
r.   Y dS X d}t| dkrJ| \}}n
| \}}}t| dd r|t|dd r|| j|jkr|d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r@|\}
}t|
tr4|
}t|tr(|i  }}n
d| }}n
|
| }}ndS |rX||krXdS ||f||fkS )
NTFr   r   r   r   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  j	  sR    





z_Call.__eq__c                O   s<   | j d krtd||fddS | j d }t| j ||f|| dS )Nr   r   r   r  r   rF  r  r   r   r   r:   	  s    

z_Call.__call__c                 C   s2   | j d k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krtt | |S r/   )r[   r^   r;   __getattribute__)rB   r   r   r   r   r  	  s    
z_Call.__getattribute__c                O   s   |  d||S )Nr   r   rA   r   r   r   r   	  s    z_Call.countc                O   s   |  d||S )Nindexr  rA   r   r   r   r  	  s    z_Call.indexc                 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 k	r(|j r || |j}qtt|S r/   )r  r   r   rs   r   )rB   ZvalsrJ  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  r  r   rC   rD   r   r  r   r   r   r   rF  0	  s(     
   
7

rF  )r  c              	   K   sl  t | rt| } t| t}t| }d| i}|r8d| i}n| d krDi }|rT|rTd|d< || t}	t| rri }n8|r|rtdt	}	n"t
| st}	n|r|rt| st}	|d|}|}
|d krd}
|	f |||
|d|}t| trt|| }|rt| nt| ||| |d k	r,|s,||j|< |rV|sVd	|krVt| |dd
|d|_t| D ]}t|rrq^zt| |}W n tk
r   Y q^Y nX d|i}|rd|i}t|tst|||||}||j|< np|}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   rt  r   r   )r   r   r   r   )rK   )r\   r1   r"   r.   re  r   r'   ZisdatadescriptorRuntimeErrorr	   rY   r   ra   r   r6   rj   r   rM   r   r   rw   r   r   r$   r;   r   r5   
_must_skipr%   r&   rT   )r   r   rL   r   rt  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 krdS | j} | jD ]H}|j|t}|tk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  r>  rg   r   r   r   r  w
  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 krdd l}ttt|jtt|ja| d k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 k	rj jS  d j | |S r  )	readlinesrw   rb   _statehandler   r   _readlines_side_effect
  s    z)mock_open.<locals>._readlines_side_effectc                     s$   j jd k	rj jS  d j | |S r  )readrw   rb   r  r   r   _read_side_effect
  s    z$mock_open.<locals>._read_side_effectc                  ?   s$     E d H  d j | |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 k	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 k	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 |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   s^   d| _ t| D ]J}zt| |}W n tk
r8   Y qY nX t|tsFq|j| krt| qd S r8   )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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   +  s    
z_AsyncIterator.__init__c                 C   s   | S r/   r   r   r   r   r   r  1  s    z_AsyncIterator.__aiter__c                    s*   zt | jW S  tk
r    Y nX td S r/   )r   r  r  r  r   r   r   r   r  4  s
    z_AsyncIterator.__anext__N)rN   rQ   r   r9   r  r  r   r   r   r   r  '  s   r  )F)F)NFNNN)FFNN)Nr   )y__all____version__r%   ra  r  r'   r   rz  builtinstypesr   r   r   Zunittest.utilr   	functoolsr   r   r   rq  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   r<  r   rM  rO  rP  r  r  r  r   r  r  r  r  ZmultipleZstopallr_  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[   rF  r   r   r  r   r1   r  r6   r  r  r   r   r   r  r   r   r   r   <module>   s~  	


1          	h4  <   
    
2    
Mw	             	
    
	
		 8+ B
  
 
N