???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3

  \7                @   sF  dZ d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
 dd eeD ZefZdejkrzddlZeejjfZdZe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 G d-d. d.e!Z"G d/d0 d0e!Z#e# Z$e$j%Z%e$j&Z'e$j(Z)d1d2 Z*d3d4d5d6d7d8d9d:hZ+d;d< Z,G d=d> d>e-Z.d?d@ Z/G dAdB dBe!Z0G dCdD dDe!Z1G dEd	 d	e1Z2dFdG Z3G dHdI dIe1Z4G dJd  d e4e2Z5dKdL Z6dMdN Z7dOdP Z8G dQdR dRe!Z9dSdT Z:e%dddddfdUdVZ;ddWdXZ<e%dddddfdYdZ=G dZd[ d[e!Z>d\d] Z?d^d_ Z@e;e=_!e>e=_Ae<e=_Be@e=_Cd`e=_DdaZEdbZFdcjGddde eFjH D ZIdcjGdfde eFjH D ZJdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxhZKdydz ZLd{d dcjGeEeFeIeJgjH D ZMeMeKB ZNd|d}d~dddddhZOdd dd dd dZPeQeQeQeQdddddddddZRdd ZSdd ZTdd ZUeSeTeUdZVdd ZWG dd de!ZXG dd
 d
eXe2ZYG dd deXe5ZZG dd de!Z[G dd de!Z\e\ Z]dd Z^G dd de_Z`e`ddZadddZbdd Zcdd ZdG dd de!Zeefebefe]jgfZhefe]jgjifZjdakdd ZldddZmG dd de5ZndS )Mock	MagicMockpatchsentinelDEFAULTANYcallcreate_autospec
FILTER_DIRNonCallableMockNonCallableMagicMock	mock_openPropertyMockz1.0    N)
ModuleType)wrapspartialc             C   s   h | ]}|j d s|qS )_)
startswith).0name r   %/usr/lib64/python3.6/unittest/mock.py	<setcomp>#   s    r   javaTc             C   s   t t| tS )N)
issubclasstyper
   )objr   r   r   _is_instance_mock2   s    r   c             C   s   t | tpt | tot| tS )N)
isinstanceBaseExceptionsr   r   )r   r   r   r   _is_exception8   s    
r    c             C   s   t | tr6| r6y
| j} W n tk
r.   d S X d}n*t | ts`y
| j} W n tk
r^   d S X |rpt| d }n| }y| tj|fS  t	k
r   d S X d S )NT)
r   r   __init__AttributeErrorFunctionTypes__call__r   inspectZ	signature
ValueError)funcZas_instanceZeat_selfZsig_funcr   r   r   _get_signature_object?   s$    


r(   Fc                sD   t | ||  d krd S  \}   fdd}t| | |t|_d S )Nc                s    j || d S )N)bind)
_mock_selfargskwargs)sigr   r   checksigd   s    z"_check_signature.<locals>.checksig)r(   _copy_func_detailsr   _mock_check_sig)r'   mock	skipfirstinstancer.   r   )r-   r   _check_signature_   s    
r4   c          #   C   s   | j |_ | j|_y| j|_W n tk
r0   Y nX y| j|_W n tk
rR   Y nX y| j|_W n tk
rt   Y nX y| j|_W n tk
r   Y nX d S )N)__name____doc____text_signature__r"   
__module____defaults____kwdefaults__)r'   funcopyr   r   r   r/   j   s$    r/   c             C   s&   t | trdS t| dd d k	r"dS dS )NTr$   F)r   r   getattr)r   r   r   r   	_callable   s
    
r=   c             C   s   t | ttfkS )N)r   listtuple)r   r   r   r   _is_list   s    r@   c             C   sH   t | tst| dd d k	S x(| f| j D ]}|jjdd k	r(dS q(W dS )Nr$   TF)r   r   r<   __mro____dict__get)r   baser   r   r   _instance_callable   s    
rE   c                s   t |sd S t|t}t|||}|d kr.| S |\}  fdd}t|| |j}|j s^d}|| d}d| }	t|	| || }
t|
|  |
S )Nc                 s    j | | d S )N)r)   )r+   r,   )r-   r   r   r.      s    z _set_signature.<locals>.checksigr;   )Z
_checksig_r1   zYdef %s(*args, **kwargs):
    _checksig_(*args, **kwargs)
    return mock(*args, **kwargs))	r=   r   r   r(   r/   r5   isidentifierexec_setup_func)r1   originalr3   r2   resultr'   r.   r   contextsrcr;   r   )r-   r   _set_signature   s$    




rM   c       
         s    _ tsd 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 )N)assert_called_with)r+   r,   )r1   r   r   rN      s    z'_setup_func.<locals>.assert_called_withc                 s    j | |S )N)assert_called)r+   r,   )r1   r   r   rO      s    z"_setup_func.<locals>.assert_calledc                 s    j | |S )N)assert_not_called)r+   r,   )r1   r   r   rP      s    z&_setup_func.<locals>.assert_not_calledc                 s    j | |S )N)assert_called_once)r+   r,   )r1   r   r   rQ      s    z'_setup_func.<locals>.assert_called_oncec                 s    j | |S )N)assert_called_once_with)r+   r,   )r1   r   r   rR      s    z,_setup_func.<locals>.assert_called_once_withc                 s    j | |S )N)assert_has_calls)r+   r,   )r1   r   r   rS      s    z%_setup_func.<locals>.assert_has_callsc                 s    j | |S )N)assert_any_call)r+   r,   )r1   r   r   rT      s    z$_setup_func.<locals>.assert_any_callc                 s:   t   _t   _j   j} t| r6| k	r6| j  d S )N)	_CallListmethod_calls
mock_calls
reset_mockreturn_valuer   )ret)r;   r1   r   r   rX      s    z_setup_func.<locals>.reset_mockFr   )r1   r   called
call_count	call_argsrU   call_args_listrV   rW   rY   side_effect_mock_childrenrN   rR   rS   rT   rX   rO   rP   rQ   _mock_delegate)
r;   r1   rN   rO   rP   rQ   rR   rS   rT   rX   r   )r;   r1   r   rH      s:    rH   c             C   s   d| dd  | kS )Nz__%s__   r   )r   r   r   r   	_is_magic   s    rd   c               @   s   e Zd Zdd Zdd ZdS )_SentinelObjectc             C   s
   || _ d S )N)r   )selfr   r   r   r   r!      s    z_SentinelObject.__init__c             C   s
   d| j  S )Nzsentinel.%s)r   )rf   r   r   r   __repr__   s    z_SentinelObject.__repr__N)r5   r8   __qualname__r!   rg   r   r   r   r   re      s   re   c               @   s   e Zd Zdd Zdd ZdS )	_Sentinelc             C   s
   i | _ d S )N)
_sentinels)rf   r   r   r   r!      s    z_Sentinel.__init__c             C   s   |dkrt | jj|t|S )N	__bases__)r"   rj   
setdefaultre   )rf   r   r   r   r   __getattr__  s    z_Sentinel.__getattr__N)r5   r8   rh   r!   rm   r   r   r   r   ri      s   ri   c             C   s$   t | ttttfkr t | | S | S )N)r   dictr>   r?   set)valuer   r   r   _copy  s    rq   rY   _mock_return_valuer_   _mock_side_effect_mock_parent_mock_new_parent
_mock_name_mock_new_namec             C   s8   t j|  d|  }| |fdd}| |fdd}t||S )NZ_mock_c             S   s"   | j }|d krt| |S t||S )N)ra   r<   )rf   r   	_the_namer-   r   r   r   _get  s    
z"_delegating_property.<locals>._getc             S   s*   | j }|d kr|| j|< nt||| d S )N)ra   rB   setattr)rf   rp   r   rx   r-   r   r   r   _set$  s    z"_delegating_property.<locals>._set)_allowed_namesaddproperty)r   rx   ry   r{   r   r   r   _delegating_property  s
    
r   c               @   s   e Zd Zdd Zdd ZdS )rU   c             C   sn   t |tstj| |S t|}t| }||kr2dS x6td|| d D ] }| |||  }||krFdS qFW dS )NFr      T)r   r>   __contains__lenrange)rf   rp   Z	len_valueZlen_selfiZsub_listr   r   r   r   1  s    
z_CallList.__contains__c             C   s   t jt| S )N)pprintZpformatr>   )rf   r   r   r   rg   ?  s    z_CallList.__repr__N)r5   r8   rh   r   rg   r   r   r   r   rU   /  s   rU   c             C   sx   t |sdS |js,|js,|jd k	s,|jd k	r0dS | }x|d k	rR||krJdS |j}q6W |rd| |_||_|rt| |_||_dS )NFT)r   rv   rw   rt   ru   )parentrp   r   new_name_parentr   r   r   _check_and_set_parentC  s$    



r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )	_MockIterc             C   s   t || _d S )N)iterr   )rf   r   r   r   r   r!   ]  s    z_MockIter.__init__c             C   s   | S )Nr   )rf   r   r   r   __iter___  s    z_MockIter.__iter__c             C   s
   t | jS )N)nextr   )rf   r   r   r   __next__a  s    z_MockIter.__next__N)r5   r8   rh   r!   r   r   r   r   r   r   r   \  s   r   c               @   s   e Zd ZeZdZdd ZdS )BaseNc             O   s   d S )Nr   )rf   r+   r,   r   r   r   r!   g  s    zBase.__init__)r5   r8   rh   r   rr   rs   r!   r   r   r   r   r   d  s   r   c               @   sD  e Zd Zdd ZdCddZdd	 ZdDd
dZdEd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dFd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d1d2 Z d3d4 Z!d5d6 Z"d7d8 Z#d9d: Z$d;d< Z%dGd=d>Z&d?d@ Z'dAdB Z(dS )Hr
   c             O   s$   t | j| fd| ji}tj|}|S )Nr6   )r   r5   r6   object__new__)clsr+   kwnewr3   r   r   r   r   o  s    
zNonCallableMock.__new__N Fc             K   s   |d kr|}| j }||d< ||d< ||d< ||d< |d k	rB|}d}|
d krR|d k	}
| j|||	|
 i |d< ||d< d |d< d	|d
< d |d< d|d< t |d< t |d< t |d< ||d< |r| jf | tt| j|||||| d S )Nrt   rv   rw   ru   Tr`   _mock_wrapsra   FZ_mock_calledZ_mock_call_argsr   Z_mock_call_countZ_mock_call_args_listZ_mock_mock_callsrV   _mock_unsafe)rB   _mock_add_specrU   configure_mock_safe_superr
   r!   )rf   specr   r   spec_setr   _spec_state	_new_name_new_parent_spec_as_instance	_eat_selfZunsafer,   rB   r   r   r   r!   x  s8    




zNonCallableMock.__init__c             C   s(   d |_ d |_d|_d |_t| || d S )Nr   )rt   ru   rv   rw   rz   )rf   r1   	attributer   r   r   attach_mock  s
    zNonCallableMock.attach_mockc             C   s   | j || d S )N)r   )rf   r   r   r   r   r   mock_add_spec  s    zNonCallableMock.mock_add_specc       	      C   s|   d }d }|d k	rRt | rRt|tr*|}nt|}t|||}|oH|d }t|}| j}||d< ||d< ||d< ||d< d S )Nr   _spec_class	_spec_set_spec_signature_mock_methods)r@   r   r   
_get_classr(   dirrB   )	rf   r   r   r   r   r   r   resrB   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 )Nz())r   r   )rr   ra   rY   r   _get_child_mock)rf   rZ   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 )Nz())ra   rY   rr   r   )rf   rp   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 )N)r   r   )rf   r   r   r   	__class__  s    
zNonCallableMock.__class__r[   r\   r]   r^   rW   c             C   sT   | j }|d kr| jS |j}|d k	rPt| rPt|t rPt| rPt|}||_|S )N)ra   rs   r_   callabler   r   r    )rf   	delegatedZsfr   r   r   Z__get_side_effect  s    z!NonCallableMock.__get_side_effectc             C   s(   t |}| j}|d kr|| _n||_d S )N)	_try_iterra   rs   r_   )rf   rp   r   r   r   r   Z__set_side_effect  s
    z!NonCallableMock.__set_side_effect)rY   r_   c            C   s   |d krg }t | |krd S |jt |  d| _d | _d| _t | _t | _t | _|r^t	| _
|rhd | _x0| jj D ]"}t|tst|tkrqt|j| qtW | j
}t|r|| k	r|j| d S )NFr   )idappendr[   r]   r\   rU   rW   r^   rV   r   rr   rs   r`   valuesr   
_SpecState_deletedrX   r   )rf   ZvisitedrY   r_   ZchildrZ   r   r   r   rX     s,    zNonCallableMock.reset_mockc             K   s`   xZt |j dd dD ]B\}}|jd}|j }| }x|D ]}t||}q:W t||| qW d S )Nc             S   s   | d j dS )Nr   .)count)entryr   r   r   <lambda>8  s    z0NonCallableMock.configure_mock.<locals>.<lambda>)keyr   )sorteditemssplitpopr<   rz   )rf   r,   argvalr+   finalr   r   r   r   r   r   +  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|jdrdt || j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 )	Nr   r   zMock object has no attribute %rassertassret)r   r   r   r   r   >   r   r   )r   r   )r"   r   _all_magicsrd   r   r   r`   rC   r   r   r<   r   r   r   r   r   r   r3   r   r   )rf   r   rJ   r   r   r   r   rm   A  s6    






zNonCallableMock.__getattr__c       
      C   s"  | j g}| j}| }d}|dgkr$d}t }xT|d k	r~|}|j|j |  d}|j dkrZd}|j}t||krnP |jt| q,W tt|}|jpd}t	|dkr|d dkr|d7 }||d< dj
|}d}|dkrd	| }d}	| jd k	rd
}	| j rd}	|	| jj }	dt| j||	t| f S )Nr   ()r   r1   r   ().r   mock.z name=%rz spec=%rz spec_set=%rz<%s%s%s id='%s'>)r   r   )r1   r   )rw   ru   ro   r   r   r}   r>   reversedrv   r   joinr   r   r5   r   )
rf   Z
_name_listr   ZlastdotseenZ_firstr   Zname_stringZspec_stringr   r   r   rg   g  sL    




zNonCallableMock.__repr__c             C   sh   t stj| S | jpg }tt| }t| j}dd |D }dd |D }tt	|| | t| j
 S )Nc             S   s   g | ]}|j d s|qS )r   )r   )r   er   r   r   
<listcomp>  s    z+NonCallableMock.__dir__.<locals>.<listcomp>c             S   s$   g | ]}|j d  st|r|qS )r   )r   rd   )r   r   r   r   r   r     s    )r	   r   __dir__r   r   r   r>   rB   r   ro   r`   )rf   ZextrasZ	from_typeZ	from_dictr   r   r   r     s    


zNonCallableMock.__dir__c                s"  |t krtj||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|< tj||S )Nz!Mock object has no attribute '%s'z.Attempting to set unsupported magic method %r.c                 s    f| |S )Nr   )r+   r   )rI   rf   r   r   r     s    z-NonCallableMock.__setattr__.<locals>.<lambda>r   )r|   r   __setattr__r   r   rB   r"   _unsupported_magicsr   r   rz   r   _get_methodr   r`   r   )rf   r   rp   msgr   )rI   rf   r   r     s2    




zNonCallableMock.__setattr__c             C   s   |t kr2|t| jkr2tt| | || jkr2d S || jkrHtj| | | jj|t}|t	krft
||tk	rv| j|= t	| j|< d S )N)r   r   rB   delattrr   __delattr__r`   rC   _missingr   r"   )rf   r   r   r   r   r   r     s    

zNonCallableMock.__delattr__c             C   s   | j pd}t|||S )Nr1   )rv   _format_call_signature)rf   r+   r,   r   r   r   r   _format_mock_call_signature  s    
z+NonCallableMock._format_mock_call_signaturec             C   sD   d}| j ||}| j}t|dkr.|dd  }| j | }|||f S )Nz!Expected call: %s
Actual call: %s   r   )r   r]   r   )rf   r+   r,   messageexpected_stringr]   Zactual_stringr   r   r   _format_mock_failure_message  s    
z,NonCallableMock._format_mock_failure_messagec             C   st   | j }|d k	rlt|dkr(d}|\}}n
|\}}}y||j||fS  tk
rh } z
|jd S d }~X qpX n|S d S )Nrb   r   )r   r   r)   	TypeErrorwith_traceback)rf   _callr-   r   r+   r,   r   r   r   r   _call_matcher  s    

zNonCallableMock._call_matcherc             C   s.   | }|j dkr*d|jpd|j f }t|d S )Nr   z7Expected '%s' to not have been called. Called %s times.r1   )r\   rv   AssertionError)r*   rf   r   r   r   r   rP     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.r1   )r\   rv   r   )r*   rf   r   r   r   r   rO     s
    
zNonCallableMock.assert_calledc             C   s.   | }|j dks*d|jpd|j f }t|d S )Nr   z8Expected '%s' to have been called once. Called %s times.r1   )r\   rv   r   )r*   rf   r   r   r   r   rQ     s
    
z"NonCallableMock.assert_called_oncec                s|   | j d kr(j }td|f  fdd}j f}jj }||krxt|trh|nd }t| |d S )NzExpected call: %s
Not calledc                 s   j  } | S )N)r   )r   )r+   r,   rf   r   r   _error_message'  s    z:NonCallableMock.assert_called_with.<locals>._error_message)r]   r   r   r   r   	Exception)r*   r+   r,   expectedr   actualcauser   )r+   r,   rf   r   rN     s    
z"NonCallableMock.assert_called_withc             O   s6   | }|j dks*d|jpd|j f }t||j||S )Nr   z1Expected '%s' to be called once. Called %s times.r1   )r\   rv   r   rN   )r*   r+   r,   rf   r   r   r   r   rR   1  s    
z'NonCallableMock.assert_called_once_withc                s    fdd|D }t |tr |nd }t fdd jD }|sd||kr`tdt| jf |d S t|}g }x:|D ]2}y|j| W qv tk
r   |j| Y qvX qvW |rtdt	|f |d S )Nc                s   g | ]} j |qS r   )r   )r   c)rf   r   r   r   F  s    z4NonCallableMock.assert_has_calls.<locals>.<listcomp>c             3   s   | ]} j |V  qd S )N)r   )r   r   )rf   r   r   	<genexpr>H  s    z3NonCallableMock.assert_has_calls.<locals>.<genexpr>z(Calls not found.
Expected: %r
Actual: %rz%r not all found in call list)
r   r   rU   rW   r   r>   remover&   r   r?   )rf   ZcallsZ	any_orderr   r   Z	all_callsZ	not_foundZkallr   )rf   r   rS   <  s*    

z NonCallableMock.assert_has_callsc                sZ    j ||f} fdd jD }||krVt|tr8|nd } j||}td| |d S )Nc                s   g | ]} j |qS r   )r   )r   r   )rf   r   r   r   f  s    z3NonCallableMock.assert_any_call.<locals>.<listcomp>z%s call not found)r   r^   r   r   r   r   )rf   r+   r,   r   r   r   r   r   )rf   r   rT   _  s    zNonCallableMock.assert_any_callc             K   sF   t | }t|ts2t|tr"t}q<t|tr<t}n
|jd }|f |S )Nr   )r   r   CallableMixinr   r   r
   r   rA   )rf   r   _typeklassr   r   r   r   o  s    



zNonCallableMock._get_child_mock)NNNNNNr   NFNF)F)FF)N)F))r5   r8   rh   r   r!   r   r   r   Z"_NonCallableMock__get_return_valueZ"_NonCallableMock__set_return_valueZ"_NonCallableMock__return_value_docr~   rY   r   r   r[   r\   r]   r^   rW   Z!_NonCallableMock__get_side_effectZ!_NonCallableMock__set_side_effectr_   rX   r   rm   rg   r   r   r   r   r   r   rP   rO   rQ   rN   rR   rS   rT   r   r   r   r   r   r
   l  sP   
  
)
	 

&2"
			
#c             C   sF   | d kr| S t | r| S t| r$| S yt| S  tk
r@   | S X d S )N)r    r=   r   r   )r   r   r   r   r     s    r   c            
   @   sB   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S )r   Nr   c          	   K   s6   || j d< tt| j|||||||	|
f| || _d S )Nrr   )rB   r   r   r!   r_   )rf   r   r_   rY   r   r   r   r   r   r   r   r,   r   r   r   r!     s
    


zCallableMixin.__init__c             O   s   d S )Nr   )rf   r+   r,   r   r   r   r0     s    zCallableMixin._mock_check_sigc             O   s   | j || | j||S )N)r0   
_mock_call)r*   r+   r,   r   r   r   r$     s    zCallableMixin.__call__c             O   s  | }d|_ | jd7  _t||fdd}||_|jj| t }|jd k	}|j}|j	}|dk}	|j
jtd||f |j}
x|
d k	r*|r|
jjt|||f |
jd k	}|r|
jd | }t|||f}|
j
j| |
j	r|	rd}nd}|
j	dk}	|
j	| | }|
j}
t|
}||krP |j| q|W |j}|d k	rt|rL|n,t|snt|}t|rx|n
|||}|tk	r|S |jtk	r|jS |jd k	r|j||S |jS )NTr   )twoz()r   r   )r[   r\   _Callr]   r^   r   ro   rt   rv   rw   rW   ru   rV   r   r}   r_   r    r=   r   r   rr   rY   r   )r*   r+   r,   rf   r   r   Zdo_method_callsZmethod_call_nameZmock_call_nameZ	is_a_callr   Zthis_mock_callr   Z_new_parent_idZeffectrJ   r   r   r   r     s`    









zCallableMixin._mock_call)r5   r8   rh   r   r!   r0   r$   r   r   r   r   r   r     s   r   c               @   s   e Zd ZdS )r   N)r5   r8   rh   r   r   r   r   r     s   1c             C   s2   y
t | |S  tk
r,   t| t | |S X d S )N)r<   r"   
__import__)thingcompimport_pathr   r   r   _dot_lookup1  s
    
r   c             C   sF   | j d}|jd}t|}x$|D ]}|d| 7 }t|||}q"W |S )Nr   r   z.%s)r   r   r   r   )targetZ
componentsr   r   r   r   r   r   	_importer9  s    


r   c             C   s
   t | dS )Nis_local)hasattr)patcherr   r   r   _is_startedD  s    r   c               @   sd   e Zd ZdZg Zdd Zdd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd ZdS )_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&   getterr   r   new_callabler   createZ	has_localr   autospecr,   additional_patchers)
rf   r   r   r   r   r   r   r   r   r,   r   r   r   r!   N  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 | ]}|j  qS r   )copy)r   pr   r   r   r   q  s    z_patch.copy.<locals>.<listcomp>)r   r   r   r   r   r   r   r   r   r,   attribute_namer   )rf   r   r   r   r   r   i  s    z_patch.copyc             C   s   t |tr| j|S | j|S )N)r   r   decorate_classdecorate_callable)rf   r'   r   r   r   r$   v  s    

z_patch.__call__c             C   sR   xLt |D ]@}|jtjsq
t||}t|ds2q
| j }t|||| q
W |S )Nr$   )r   r   r   TEST_PREFIXr<   r   r   rz   )rf   r   attr
attr_valuer   r   r   r   r  |  s    

z_patch.decorate_classc                s<   t  dr jj|   S t  fdd| g_S )N	patchingsc                 s   g }g }t  }zybxJjD ]@}|j }|j| |jd k	rF|j| q|jtkr|j| qW | t |7 }  | |S    ||krt|r|j| t	j
 } Y nX W d xt|D ]}|j|  qW X d S )N)r?   r  	__enter__r   r  updater   r   r   sysexc_infor   __exit__)r+   Zkeywargs
extra_argsZentered_patchersr  patchingr   )r'   patchedr   r   r    s*    




z)_patch.decorate_callable.<locals>.patched)r   r  r   r   )rf   r'   r   )r'   r  r   r    s    
z_patch.decorate_callablec             C   s   | j  }| j}t}d}y|j| }W n$ ttfk
rH   t||t}Y nX d}|tkrft|t	rfd| _
| j
 r|tkrtd||f ||fS )NFTz!%s does not have the attribute %r)r   r   r   rB   r"   KeyErrorr<   	_builtinsr   r   r   )rf   r   r   rI   localr   r   r   get_original  s    z_patch.get_originalc             C   s>  | j | 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| j	 \}}|t
ko|d krTd}	|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}	t}
i }|d k	rD|}
nN|d k	sX|d k	r|}|d k	rj|}t|r~d|k}n
t| }|rt}
|d k	r||d< |d k	r||d< t|
trt|
tr| jr| j|d	< |j| |
f |}|	rt|r|}|d k	r|}t| r2t| r2t}
|jd	 |
f |d
d||_nl|d k	r|t
k	rptd|t
krtdt|}|dkr|}t|f|| jd|}n|rtd|}|| _|| _t| j| j| | jd k	r:i }| j t
kr||| j< x.| jD ]$}|j  }|j t
kr|j| qW |S |S )NFzCan't specify spec and autospecTz6Can't provide explicit spec_set *and* spec or autospecz!Can't use 'spec' with create=Truer$   r   r   r   z())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)TN)!r   r   r   r   r,   r   r   r   r   r  r   r   r   r   r@   r   r   r   r
   r   r
  r   rE   r   rY   boolr   temp_originalr   rz   r  r   r	  )rf   r   r   r   r   r,   r   rI   r  ZinheritKlass_kwargsZ	this_specZnot_callableZnew_attrr  r  r   r   r   r   r	    s    


















z_patch.__enter__c             G   s   t | std| jr4| jtk	r4t| j| j| j nBt| j| j | j	 rvt
| j| j sd| jdkrvt| j| j| j | `| `| `x$t| jD ]}t |r|j|  qW d S )Nz stop called on unstarted patcherr6   r8   r9   __annotations__r:   )r6   r8   r9   r  r:   )r   RuntimeErrorr   r  r   rz   r   r   r   r   r   r   r   r  )rf   r  r   r   r   r   r  H  s      z_patch.__exit__c             C   s   | j  }| jj|  |S )N)r	  _active_patchesr   )rf   rJ   r   r   r   start`  s    z_patch.startc             C   s.   y| j j|  W n tk
r$   Y nX | j S )N)r  r   r&   r  )rf   r   r   r   stopg  s
    z_patch.stop)r5   r8   rh   r  r  r!   r   r$   r  r  r  r	  r  r  r  r   r   r   r   r   I  s   (~r   c                sP   y j 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 )N)r   r   )r   r   r   r   y  s    z_get_target.<locals>.<lambda>)rsplitr   r&   )r   r   r   r   )r   r   _get_targets  s    r   c       
   
      s$    fdd}	t |	||||||||	S )Nc                  s    S )Nr   r   )r   r   r   r     s    z_patch_object.<locals>.<lambda>)r   )
r   r   r   r   r   r   r   r   r,   r   r   )r   r   _patch_object}  s    
r!  c                s   t  tkr fdd}n fdd}|s2tdt|j }|d \}	}
t||	|
|||||i 	}|	|_xB|dd  D ]2\}	}
t||	|
|||||i 	}|	|_|jj| qvW |S )Nc                  s   t  S )N)r   r   )r   r   r   r     s    z!_patch_multiple.<locals>.<lambda>c                  s    S )Nr   r   )r   r   r   r     s    z=Must supply at least one keyword argument with patch.multipler   r   )	r   strr&   r>   r   r   r  r   r   )r   r   r   r   r   r   r,   r   r   r   r   r   Zthis_patcherr   )r   r   _patch_multiple  s&    

r#  c       
   
   K   s$   t | \}}	t||	|||||||	S )N)r   r   )
r   r   r   r   r   r   r   r,   r   r   r   r   r   r     s    E
c               @   sR   e Zd Zf df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_dictFc             K   s>   t |trt|}|| _t|| _| jj| || _d | _d S )N)	r   r"  r   in_dictrn   r   r
  clear	_original)rf   r%  r   r&  r,   r   r   r   r!   0  s    

z_patch_dict.__init__c                s.   t  trj S t  fdd}|S )Nc           
      s"   j   z
 | |S j  X d S )N)r$  _unpatch_dict)r+   r   )frf   r   r   _inner>  s    
z$_patch_dict.__call__.<locals>._inner)r   r   r  r   )rf   r)  r*  r   )r)  rf   r   r$   ;  s    

z_patch_dict.__call__c             C   s\   xVt |D ]J}t||}|jtjr
t|dr
t| j| j| j	}||}t
||| q
W |S )Nr$   )r   r<   r   r   r  r   r$  r%  r   r&  rz   )rf   r   r  r  Z	decoratorZ	decoratedr   r   r   r  I  s    

z_patch_dict.decorate_classc             C   s   | j   d S )N)r$  )rf   r   r   r   r	  T  s    z_patch_dict.__enter__c             C   s   | j }| j}| j}y|j }W n2 tk
rP   i }x|D ]}|| ||< q8W Y nX || _|rdt| y|j| W n. tk
r   x|D ]}|| ||< qW Y nX d S )N)r   r%  r&  r   r"   r'  _clear_dictr
  )rf   r   r%  r&  rI   r   r   r   r   r$  Y  s"    

z_patch_dict._patch_dictc             C   sV   | j }| j}t| y|j| W n. tk
rP   x|D ]}|| ||< q8W Y nX d S )N)r%  r'  r+  r
  r"   )rf   r%  rI   r   r   r   r   r(  s  s    
z_patch_dict._unpatch_dictc             G   s   | j   dS )NF)r(  )rf   r+   r   r   r   r    s    z_patch_dict.__exit__N)r5   r8   rh   r!   r$   r  r	  r$  r(  r  r  r  r   r   r   r   r$    s   r$  c             C   sB   y| j   W n0 tk
r<   t| }x|D ]
}| |= q*W Y nX d S )N)r&  r"   r>   )r%  keysr   r   r   r   r+    s    
r+  c              C   s    xt tjD ]} | j  qW d S )N)r   r   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 trunc floor ceil bool next 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     s    r   c             c   s   | ]}d | V  qdS )zr%sNr   )r   r/  r   r   r   r     s    __get____set__
__delete____reversed____missing__
__reduce____reduce_ex__Z__getinitargs____getnewargs____getstate____setstate____getformat____setformat__rg   r   __subclasses__
__format____getnewargs_ex__c                s    fdd}| |_ |S )Nc                s    | f||S )Nr   )rf   r+   r   )r'   r   r   method  s    z_get_method.<locals>.method)r5   )r   r'   r?  r   )r'   r   r     s    r   c             C   s   h | ]}d | qS )z__%s__r   )r   r?  r   r   r   r     s   rm   r   r!   r   __prepare____instancecheck____subclasscheck____del__c             C   s
   t j| S )N)r   __hash__)rf   r   r   r   r     s    r   c             C   s
   t j| S )N)r   __str__)rf   r   r   r   r     s    c             C   s
   t j| S )N)r   
__sizeof__)rf   r   r   r   r     s    )rD  rE  rF  r   y              ?g      ?)__lt____gt____le____ge____int__r   __len__r  __complex__	__float____bool__	__index__c                s    fdd}|S )Nc                s$    j j}|tk	r|S  | kr dS tS )NT)__eq__rr   r   NotImplemented)otherret_val)rf   r   r   rQ    s    z_get_eq.<locals>.__eq__r   )rf   rQ  r   )rf   r   _get_eq  s    rU  c                s    fdd}|S )Nc                s     j jtk	rtS  | krdS tS )NF)__ne__rr   r   rR  )rS  )rf   r   r   rV    s
    z_get_ne.<locals>.__ne__r   )rf   rV  r   )rf   r   _get_ne  s    rW  c                s    fdd}|S )Nc                 s     j j} | tkrtg S t| S )N)r   rr   r   r   )rT  )rf   r   r   r     s    z_get_iter.<locals>.__iter__r   )rf   r   r   )rf   r   	_get_iter  s    rX  )rQ  rV  r   c             C   s   t j|t}|tk	r||_d S tj|}|d k	rdy|| }W n tk
rX   t|}Y nX ||_d S tj|}|d k	r|| |_d S )N)_return_valuesrC   r   rY   _calculate_return_valuer"   _side_effect_methodsr_   )r1   r?  r   ZfixedZreturn_calulatorrY   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&   | j   tt| j|| | j   d S )N)_mock_set_magicsr   r]  r!   )rf   r+   r   r   r   r   r!   (  s    zMagicMixin.__init__c             C   s   t }t| dd d k	rTt j| j}t }t | }x$|D ]}|t| jkr4t| | q4W |tt| j }t| }x|D ]}t||t	||  qtW d S )Nr   )
_magicsr<   intersectionr   ro   r   rB   r   rz   
MagicProxy)rf   Zthese_magicsZremove_magicsr   r   r   r   r   r^  .  s    

zMagicMixin._mock_set_magicsN)r5   r8   rh   r!   r^  r   r   r   r   r]  '  s   r]  c               @   s   e Zd ZdddZdS )r   Fc             C   s   | j || | j  d S )N)r   r^  )rf   r   r   r   r   r   r   G  s    z"NonCallableMagicMock.mock_add_specN)F)r5   r8   rh   r   r   r   r   r   r   E  s   c               @   s   e Zd ZdddZdS )r   Fc             C   s   | j || | j  d S )N)r   r^  )rf   r   r   r   r   r   r   ]  s    zMagicMock.mock_add_specN)F)r5   r8   rh   r   r   r   r   r   r   R  s   c               @   s.   e Zd Zdd Zdd Zdd Zd
dd	ZdS )ra  c             C   s   || _ || _d S )N)r   r   )rf   r   r   r   r   r   r!   i  s    zMagicProxy.__init__c             O   s   | j  }|||S )N)create_mock)rf   r+   r,   mr   r   r   r$   m  s    zMagicProxy.__call__c             C   s8   | j }| j}|j|||d}t||| t||| |S )N)r   r   r   )r   r   r   rz   r\  )rf   r   r   rc  r   r   r   rb  q  s    zMagicProxy.create_mockNc             C   s   | j  S )N)rb  )rf   r   r   r   r   r   r0  z  s    zMagicProxy.__get__)N)r5   r8   rh   r!   r$   rb  r0  r   r   r   r   ra  h  s   	ra  c               @   s$   e Zd Zdd Zdd Zdd ZdS )_ANYc             C   s   dS )NTr   )rf   rS  r   r   r   rQ    s    z_ANY.__eq__c             C   s   dS )NFr   )rf   rS  r   r   r   rV    s    z_ANY.__ne__c             C   s   dS )Nz<ANY>r   )rf   r   r   r   rg     s    z_ANY.__repr__N)r5   r8   rh   rQ  rV  rg   r   r   r   r   rd    s   rd  c             C   sd   d|  }d}dj dd |D }dj dd t|j D }|rD|}|r\|rT|d7 }||7 }|| S )Nz%s(%%s)r   z, c             S   s   g | ]}t |qS r   )repr)r   r   r   r   r   r     s    z*_format_call_signature.<locals>.<listcomp>c             S   s   g | ]\}}d ||f qS )z%s=%rr   )r   r   rp   r   r   r   r     s    )r   r   r   )r   r+   r,   r   Zformatted_argsZargs_stringZkwargs_stringr   r   r   r     s    r   c               @   sr   e Zd Zf ddddfddZf ddddf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dS )r   r   NFTc             C   s   f }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j| ||fS tj| |||fS )Nr   rb   r   )r   r   r"  r?   r   )r   rp   r   r   r   	from_kallr+   r,   _lenfirstsecondr   r   r   r     s.    



z_Call.__new__c             C   s   || _ || _|| _d S )N)rv   rt   _mock_from_kall)rf   rp   r   r   r   rf  r   r   r   r!     s    z_Call.__init__c             C   sf  |t krdS yt|}W n tk
r,   dS X d}t| dkrH| \}}n
| \}}}t| dd rzt|dd rz| j|jkrzdS d}|dkrf i  }}n|dkr|\}}}n|dkr|\}	t|	tr|	}i }n"t|	tr|	}f i  }}nf }|	}nV|dkr>|\}
}t|
tr2|
}t|tr&|i  }}n
f | }}n
|
| }}ndS |rV||krVdS ||f||fkS )	NTFr   rb   rt   r   r   r   )r   r   r   r<   rt   r   r?   r"  )rf   rS  Z	len_otherZ	self_nameZ	self_argsZself_kwargsZ
other_nameZ
other_argsZother_kwargsrp   rh  ri  r   r   r   rQ    sP    




z_Call.__eq__c             O   s<   | j d krtd||fddS | j d }t| j ||f|| dS )Nr   z())r   )r   r   )rv   r   )rf   r+   r,   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   rf  z%s.%s)r   r   rf  )rv   r   )rf   r  r   r   r   r   rm     s    
z_Call.__getattr__c             O   s   | j d||S )Nr   )rm   )rf   r+   r,   r   r   r   r   $  s    z_Call.countc             O   s   | j d||S )Nindex)rm   )rf   r+   r,   r   r   r   rk  '  s    z_Call.indexc             C   s|   | j s&| jpd}|jdr"d| }|S t| dkr@d}| \}}n0| \}}}|sTd}n|jdshd| }nd| }t|||S )Nr   z()zcall%srb   zcall.%s)rj  rv   r   r   r   )rf   r   r+   r,   r   r   r   rg   *  s    





z_Call.__repr__c             C   s8   g }| }x"|d k	r*|j r"|j| |j}q
W tt|S )N)rj  r   rt   rU   r   )rf   valsr   r   r   r   	call_list?  s    


z_Call.call_list)r5   r8   rh   r   r!   rQ  r   rV  r$   rm   r   rk  rg   rm  r   r   r   r   r     s   7r   )rf  c             K   s,  t | rt| } t| t}d| i}|r0d| i}n| d kr<i }|rL|rLd|d< |j| t}tj| rji }n$t| sxt}n|r|rt	|  rt}|j
d|}|}	|d krd}	|f |||	|d|}
t| trt|
| }
nt| |
|| |d k	o| r |
|j|< |r,| r,d|kr,t| |dd	|
d
|
_xt| D ]}t|rHq6yt| |}W n tk
rp   w6Y nX d|i}|rd|i}t|tst|||
||}||
j|< nZ|
}t| tr|
j}t| ||}||d< tf ||||d|}||
j|< t|||d t|tr6t|
|| q6W |
S )Nr   r   Tr   r   r   )r   r   r   r   rY   z())r3   r  r   r   )r   r   r   r   )r2   )r@   r   r   r
  r   r%   Zisdatadescriptorr=   r   rE   r   r#   rM   r4   r`   r   rY   r   rd   r<   r"   r   r1   
_must_skiprz   )r   r   r3   r   r  r,   is_typer  r  r   r1   r   rI   r   r   r2   r   r   r   r   P  st    










c             C   s|   t | ts$|t| di krdS | j} xR| jD ]H}|jj|t}|tkrHq,t |tt	frZdS t t|dd t
rp|S dS q,W |S )NrB   Fr0  )r   r   r<   r   rA   rB   rC   r   staticmethodclassmethodMethodWrapperTypes)r   r   ro  r   rJ   r   r   r   rn    s    
rn  c             C   s$   y| j S  tk
r   t| S X d S )N)r   r"   r   )r   r   r   r   r     s    r   c               @   s   e Zd ZdddZdS )r   FNc             C   s(   || _ || _|| _|| _|| _|| _d S )N)r   idsr   r   r3   r   )rf   r   r   r   r   rs  r3   r   r   r   r!     s    z_SpecState.__init__)FNNNF)r5   r8   rh   r!   r   r   r   r   r     s    r   c             #   sp   t | trdnd  fdd| j D }|d  krD|d d }n|d d d	 |d
< x|D ]
}|V  q^W d S )N   

c                s   g | ]}|  qS r   r   )r   l)sepr   r   r   	  s    z&_iterate_read_data.<locals>.<listcomp>r   rx  rx  rx  rx  )r   bytesr   )	read_dataZdata_as_listliner   )rw  r   _iterate_read_data	  s    
r|  r   c                s   fdd}fdd}fdd t d kr`dd l}ttt|jjtt|ja | d krttdt	d	} tt d
j
_td gd j_d j_d j_d j_|j_  d< d j_|j_ fdd}|| _| _| S )Nc                 s    j jd k	rj jS t d S )Nr   )	readlinesrY   r>   )r+   r,   )_statehandler   r   _readlines_side_effect(	  s    z)mock_open.<locals>._readlines_side_effectc                 s(   j jd k	rj jS t j d S )Nr   )readrY   r   r   )r+   r,   )r~  r  rz  r   r   _read_side_effect-	  s    z$mock_open.<locals>._read_side_effectc              3   sJ   j jd k	rxj jV  qW x d D ]
} | V  q&W xt V  q6W d S )Nr   )readlinerY   r   )r{  )r~  r  rz  r   r   _readline_side_effect2	  s    
z(mock_open.<locals>._readline_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   )r+   r,   )r  r~  r  rz  r   r   
reset_dataS	  s
    
zmock_open.<locals>.reset_data)	file_spec_ior>   ro   r   TextIOWrapperunionBytesIOr   r  r	  rY   r|  writer  r  r}  r_   )r1   rz  r  r  r  r  r   )r  r~  r  rz  r   r   	  s.    "

c               @   s$   e Zd Zdd Zdd Zdd ZdS )r   c             K   s
   t f |S )N)r   )rf   r,   r   r   r   r   i	  s    zPropertyMock._get_child_mockc             C   s   |  S )Nr   )rf   r   Zobj_typer   r   r   r0  l	  s    zPropertyMock.__get__c             C   s   | | d S )Nr   )rf   r   r   r   r   r   r1  n	  s    zPropertyMock.__set__N)r5   r8   rh   r   r0  r1  r   r   r   r   r   `	  s   	)r   r   r   r   r   r   r   r   r	   r
   r   r   r   )F)F)NFNNN)FFNN)Nr   )o__all____version__r%   r   r  builtinstypesr   	functoolsr   r   r   r  BaseExceptionr   platformr   ZlangZ	Throwabler	   superr   r   r    r(   r4   r/   r=   r@   rE   rM   rH   rd   r   re   ri   r   r   ZMISSINGr   ZDELETEDr   rq   r|   r   r>   rU   r   r   r   r
   r   r   r   r   r   r   r   r   r!  r#  r   r$  r+  r-  rn   ZmultipleZstopallr  Zmagic_methodsZnumericsr   r   ZinplacerightZ_non_defaultsr   r_  r   r   rZ  rR  rY  rU  rW  rX  r[  r\  r]  r   r   ra  rd  r   r   r?   r   r   r   rn  r   r   r   rQ  r#   r0  rr  r  r|  r   r   r   r   r   r   <module>   s              
 

4	    i5  , 
1Jv	

	 ,
 
w
D