B
    wG_C                @   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m	Z	m
Z
 ddlmZmZ dd eeD ZefZdejkrddlZeejjfZd	Ze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$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( Z.d)d*d+d,d-d.d/d0hZ/d1d2 Z0G d3d4 d4e1Z2d5d6 Z3G d7d8 d8e%Z4G d9d: d:e%Z5G d;d< d<e5Z6d=d> Z7G d?d@ d@e5Z8G dAdB dBe8e6Z9dCdD Z:dEdF Z;dGdH Z<G dIdJ dJe%Z=dKdL Z>e)dddddfdMdNZ?ddOdPZ@e)dddddfdQdRZAG dSdT dTe%ZBdUdV ZCdWdX ZDe?eA_%eBeA_Ee@eA_FeDeA_GdYeA_HdZZId[ZJd\Kd]d^ eJL D ZMd\Kd_d^ eJL D ZNd`dadbdcdddedfdgdhdidjdkdldmdndodpdqhZOdrds ZPdtd d\KeIeJeMeNgL D ZQeQeOB ZRdudvdwdxdydzd{d|hZSd}d~ dd~ dd~ dZTeUeUeUeUddddddd	ddZVdd ZWdd ZXdd ZYeWeXeYdZZdd Z[G dd de%Z\G dd de\e6Z]G dd de\e9Z^G dd de%Z_G dd de%Z`e` Zadd ZbG dd decZdedddZedddZfdd Zgdd ZhG dd de%ZiejefejeajkfZldamdd ZndddZoG dd de9Zpdd ZqdS ))Mock	MagicMockpatchsentinelDEFAULTANYcallcreate_autospec
FILTER_DIRNonCallableMockNonCallableMagicMock	mock_openPropertyMocksealz1.0    N)
ModuleType
MethodType)wrapspartialc             C   s   h | ]}| d s|qS )_)
startswith).0name r   //opt/hscpipe/8.4/lib/python3.7/unittest/mock.py	<setcomp>&   s    r   javaTc             C   s   t t| tS )N)
issubclasstyper
   )objr   r   r   _is_instance_mock5   s    r   c             C   s   t | tpt | tot| tS )N)
isinstanceBaseExceptionsr   r   )r   r   r   r   _is_exception;   s    
r"   c             C   s"   t | trt| dr| jS | S d S )Nmock)r    FunctionTypeshasattrr#   )r   r   r   r   _extract_mockB   s    r&   c             C   s   t | tr4|s4y
| j} W n tk
r,   d S X d}n*t | ts^y
| j} W n tk
r\   d S X |rnt| d }n| }y| t|fS  t	k
r   d S X d S )NT)
r    r   __init__AttributeErrorr$   __call__r   inspectZ	signature
ValueError)funcZas_instanceZeat_selfZsig_funcr   r   r   _get_signature_objectK   s$    


r-   Fc                sN   t | ||  d krd S  \}   fdd}t| | |t|_ t|_d S )Nc                s    j || d S )N)bind)
_mock_selfargskwargs)sigr   r   checksigp   s    z"_check_signature.<locals>.checksig)r-   _copy_func_detailsr   _mock_check_sig__signature__)r,   r#   	skipfirstinstancer3   r   )r2   r   _check_signaturek   s    

r9   c          	   C   s>   x8dD ]0}yt ||t| | W q tk
r4   Y qX qW d S )N)__name____doc____text_signature__
__module____defaults____kwdefaults__)setattrgetattrr(   )r,   funcopy	attributer   r   r   r4   w   s    r4   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    r   staticmethodclassmethodr   	_callable__func__rA   )r   r   r   r   rF      s    

rF   c             C   s   t | ttfkS )N)r   listtuple)r   r   r   r   _is_list   s    rJ   c             C   sH   t | tst| dd d k	S x(| f| j D ]}|jdd k	r(dS q(W dS )Nr)   TF)r    r   rA   __mro____dict__get)r   baser   r   r   _instance_callable   s    
rO   c                s   t |sd S t|t}t|||}|d kr.| S |\}  fdd}t|| |j}| s^d}|| d}d| }	t|	| || }
t|
|   |
S )Nc                 s    j | | d S )N)r.   )r0   r1   )r2   r   r   r3      s    z _set_signature.<locals>.checksigrB   )Z
_checksig_r#   zYdef %s(*args, **kwargs):
    _checksig_(*args, **kwargs)
    return mock(*args, **kwargs))	rF   r    r   r-   r4   r:   isidentifierexec_setup_func)r#   originalr8   r7   resultr,   r3   r   contextsrcrB   r   )r2   r   _set_signature   s$    



rW   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)r0   r1   )r#   r   r   rX      s    z'_setup_func.<locals>.assert_called_withc                 s    j | |S )N)assert_called)r0   r1   )r#   r   r   rY      s    z"_setup_func.<locals>.assert_calledc                 s    j | |S )N)assert_not_called)r0   r1   )r#   r   r   rZ      s    z&_setup_func.<locals>.assert_not_calledc                 s    j | |S )N)assert_called_once)r0   r1   )r#   r   r   r[      s    z'_setup_func.<locals>.assert_called_oncec                 s    j | |S )N)assert_called_once_with)r0   r1   )r#   r   r   r\      s    z,_setup_func.<locals>.assert_called_once_withc                 s    j | |S )N)assert_has_calls)r0   r1   )r#   r   r   r]      s    z%_setup_func.<locals>.assert_has_callsc                 s    j | |S )N)assert_any_call)r0   r1   )r#   r   r   r^      s    z$_setup_func.<locals>.assert_any_callc                 s:   t   _t   _   j} t| r6| k	r6|   d S )N)	_CallListmethod_calls
mock_calls
reset_mockreturn_valuer   )ret)rB   r#   r   r   rb      s    z_setup_func.<locals>.reset_mockFr   )r#   r   called
call_count	call_argsr_   call_args_listr`   ra   rc   side_effect_mock_childrenrX   r\   r]   r^   rb   rY   rZ   r[   r6   _mock_delegate)rB   r#   r2   rX   rY   rZ   r[   r\   r]   r^   rb   r   )rB   r#   r   rR      s<    rR   c             C   s   d| dd  | kS )Nz__%s__   r   )r   r   r   r   	_is_magic   s    rn   c               @   s$   e Zd Zd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   )rp   r   r   r   __repr__   s    z_SentinelObject.__repr__c             C   s
   d| j  S )Nzsentinel.%s)r   )rp   r   r   r   
__reduce__  s    z_SentinelObject.__reduce__N)r:   r=   __qualname__r'   rq   rr   r   r   r   r   ro      s   ro   c               @   s$   e Zd Zdd Zdd Zdd ZdS )	_Sentinelc             C   s
   i | _ d S )N)
_sentinels)rp   r   r   r   r'     s    z_Sentinel.__init__c             C   s   |dkrt | j|t|S )N	__bases__)r(   ru   
setdefaultro   )rp   r   r   r   r   __getattr__
  s    z_Sentinel.__getattr__c             C   s   dS )Nr   r   )rp   r   r   r   rr     s    z_Sentinel.__reduce__N)r:   r=   rs   r'   rx   rr   r   r   r   r   rt     s   rt   c             C   s$   t | ttttfkr t | | S | S )N)r   dictrH   rI   set)valuer   r   r   _copy  s    r|   rc   _mock_return_valueri   _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 )N)rk   rA   )rp   r   	_the_namer2   r   r   r   _get+  s    
z"_delegating_property.<locals>._getc             S   s*   | j }|d kr|| j|< nt||| d S )N)rk   rL   r@   )rp   r{   r   r   r2   r   r   r   _set0  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 )r_   c             C   sn   t |tst| |S t|}t| }||kr2dS x6td|| d D ] }| |||  }||krFdS qFW dS )NFr      T)r    rH   __contains__lenrange)rp   r{   Z	len_valueZlen_selfiZsub_listr   r   r   r   =  s    
z_CallList.__contains__c             C   s   t t| S )N)pprintZpformatrH   )rp   r   r   r   rq   K  s    z_CallList.__repr__N)r:   r=   rs   r   rq   r   r   r   r   r_   ;  s   r_   c             C   s   t |}t|sdS |js4|js4|jd k	s4|jd k	r8dS | }x|d k	rZ||krRdS |j}q>W |rl| |_||_|r|| |_||_dS )NFT)r&   r   r   r   r   r   )parentr{   r   new_name_parentr   r   r   _check_and_set_parentO  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   )rp   r   r   r   r   r'   k  s    z_MockIter.__init__c             C   s   | S )Nr   )rp   r   r   r   __iter__m  s    z_MockIter.__iter__c             C   s
   t | jS )N)nextr   )rp   r   r   r   __next__o  s    z_MockIter.__next__N)r:   r=   rs   r'   r   r   r   r   r   r   r   j  s   r   c               @   s   e Zd ZeZdZdd ZdS )BaseNc             O   s   d S )Nr   )rp   r0   r1   r   r   r   r'   u  s    zBase.__init__)r:   r=   rs   r   r}   r~   r'   r   r   r   r   r   r  s   r   c               @   sT  e Zd Zdd ZdGddZdd	 ZdHd
dZdId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dJd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%d=d> Z&d?d@ Z'dKdAdBZ(dCdD Z)dEdF Z*dS )Lr
   c             O   s$   t | j| fd| ji}t|}|S )Nr;   )r   r:   r;   object__new__)clsr0   kwnewr8   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_sealedTrj   _mock_wrapsrk   Z_mock_calledZ_mock_call_argsr   Z_mock_call_countZ_mock_call_args_listZ_mock_mock_callsr`   _mock_unsafe)rL   _mock_add_specr_   configure_mock_safe_superr
   r'   )rp   specr   r   spec_setr   _spec_state	_new_name_new_parent_spec_as_instance	_eat_selfZunsafer1   rL   r   r   r   r'     s:    




zNonCallableMock.__init__c             C   s0   t |}d |_d |_d|_d |_t| || d S )Nr   )r&   r   r   r   r   r@   )rp   r#   rC   Z
inner_mockr   r   r   attach_mock  s    zNonCallableMock.attach_mockc             C   s   |  || d S )N)r   )rp   r   r   r   r   r   mock_add_spec  s    zNonCallableMock.mock_add_specc       	      C   sz   d }d }|d k	rPt |sPt|tr(|}nt|}t|||}|oF|d }t|}| j}||d< ||d< ||d< ||d< d S )Nr   _spec_class	_spec_set_spec_signature_mock_methods)rJ   r    r   
_get_classr-   dirrL   )	rp   r   r   r   r   r   r   ZresrL   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   )r}   rk   rc   r   _get_child_mock)rp   rd   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())rk   rc   r}   r   )rp   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 )N)r   r   )rp   r   r   r   	__class__  s    
zNonCallableMock.__class__re   rf   rg   rh   ra   c             C   sN   | j }|d kr| jS |j}|d k	rJt|sJt|tsJt|sJt|}||_|S )N)rk   r~   ri   callabler    r   r"   )rp   	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_iterrk   r~   ri   )rp   r{   r   r   r   r   Z__set_side_effect  s
    z!NonCallableMock.__set_side_effect)rc   ri   c            C   s   |d krg }t | |krd S |t |  d| _d | _d| _t | _t | _t | _|r^t	| _
|rhd | _x0| j D ]"}t|tst|tkrqt|| qtW | j
}t|r|| k	r|| d S )NFr   )idappendre   rg   rf   r_   ra   rh   r`   r   r}   r~   rj   valuesr    
_SpecState_deletedrb   r   )rp   Zvisitedrc   ri   childrd   r   r   r   rb     s,    zNonCallableMock.reset_mockc             K   s`   xZt | dd dD ]B\}}|d}| }| }x|D ]}t||}q:W t||| qW d S )Nc             S   s   | d  dS )Nr   .)count)entryr   r   r   <lambda>I      z0NonCallableMock.configure_mock.<locals>.<lambda>)keyr   )sorteditemssplitpoprA   r@   )rp   r1   argvalr0   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|drdt || 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assret)r   r   r   r   r   )r(   r   _all_magicsrn   r   r   rj   rM   r   r   rA   r   r    r   r   r   r   r8   r   r   )rp   r   rT   r   r   r   r   rx   R  s6    






zNonCallableMock.__getattr__c             C   s   | j g}| j}| }d}|dgkr$d}t }xT|d k	r~|}||j |  d}|j dkrZd}|j}t||krnP |t| q,W tt|}|jpd}t	|dkr|d dkr|d7 }||d< d
|S )Nr   z()r   r#   r   )z()z().r   )r   r   rz   r   r   r   rH   reversedr   r   join)rp   Z
_name_listr   ZlastdotseenZ_firstr   r   r   _extract_mock_namex  s0    



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   )r#   zmock.z name=%rz spec=%rz spec_set=%rz<%s%s%s id='%s'>)r   r   r   r:   r   r   )rp   r   Zname_stringZspec_stringr   r   r   rq     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   
<listcomp>  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   rn   )r   r   r   r   r   r     s    )r	   r   __dir__r   r   r   rH   rL   rj   r   r   rz   )rp   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 )Nr   )r0   r   )rS   rp   r   r   r     r   z-NonCallableMock.__setattr__.<locals>.<lambda>r   r   zCannot set )r   r   __setattr__r   r   rL   r(   _unsupported_magicsr   r   r@   r   _get_methodr   rj   r   r   r%   r   )rp   r   r{   msg	mock_namer   )rS   rp   r   r     s8    



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 )N)r   r   rL   delattrrj   rM   _missingr   r
   __delattr__r   r(   )rp   r   r   r   r   r   r     s    

zNonCallableMock.__delattr__c             C   s   | j pd}t|||S )Nr#   )r   _format_call_signature)rp   r0   r1   r   r   r   r   _format_mock_call_signature  s    
z+NonCallableMock._format_mock_call_signaturec             C   sD   d}|  ||}| j}t|dkr.|dd  }| j | }|||f S )Nz!Expected call: %s
Actual call: %s   r   )r   rg   r   )rp   r0   r1   messageexpected_stringrg   Zactual_stringr   r   r   _format_mock_failure_message  s    
z,NonCallableMock._format_mock_failure_messagec             C   sl   |s
| j S d }|ddd}| j}x@|D ]8}||}|d ksLt|trPP q,t|}|j}|j }q,W |S )Nz()r   r   )r   replacer   rj   rM   r    r   r&   )rp   r   r2   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
|\}}}y||j||fS  tk
r } z
|d S d }~X Y qX n|S d S )Nrl   r   r   )r    rI   r   r   r   r.   	TypeErrorwith_traceback)rp   _callr2   r   r0   r1   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.r#   )rf   r   AssertionError)r/   rp   r   r   r   r   rZ   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.r#   )rf   r   r   )r/   rp   r   r   r   r   rY   K  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.r#   )rf   r   r   )r/   rp   r   r   r   r   r[   T  s
    
z"NonCallableMock.assert_called_oncec                s|   | j d kr( }td|f  fdd} f}j }||krxt|trh|nd }t| |d S )NzExpected call: %s
Not calledc                 s     } | S )N)r   )r   )r0   r1   rp   r   r   _error_messageg  s    z:NonCallableMock.assert_called_with.<locals>._error_message)rg   r   r   r   r    	Exception)r/   r0   r1   expectedr   actualcauser   )r0   r1   rp   r   rX   ]  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.r#   )rf   r   r   rX   )r/   r0   r1   rp   r   r   r   r   r\   q  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f |d S t|}g }x:|D ]2}y|| W q tk
r   || Y qX qW |rtd
t	|f |d S )Nc                s   g | ]}  |qS r   )r   )r   c)rp   r   r   r     s    z4NonCallableMock.assert_has_calls.<locals>.<listcomp>c             s   s   | ]}t |tr|V  qd S )N)r    r   )r   r   r   r   r   	<genexpr>  s    z3NonCallableMock.assert_has_calls.<locals>.<genexpr>c             3   s   | ]}  |V  qd S )N)r   )r   r   )rp   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 )N)r    r   )r   r   r   r   r   r     s   z%s
Expected: %r
Actual: %rz%r not all found in call list)
r   r_   ra   formatr   rH   remover+   r   rI   )	rp   ZcallsZ	any_orderr   r   Z	all_callsZproblemZ	not_foundZkallr   )rp   r   r]   |  s4    


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   )rp   r   r   r     s    z3NonCallableMock.assert_any_call.<locals>.<listcomp>z%s call not found)r   rh   r    r   r   r   )rp   r0   r1   r   r   r   r   r   )rp   r   r^     s    zNonCallableMock.assert_any_callc             K   sx   t | }t|ts2t|tr"t}q<t|tr<t}n
|jd }| jrnd|krVd|d  nd}| 	 | }t
||f |S )Nr   r   r   z())r   r   CallableMixinr   r   r
   r   rK   r   r   r(   )rp   r   _typeklassrC   r   r   r   r   r     s    



zNonCallableMock._get_child_mock)NNNNNNr   NFNF)F)FF)N)F)+r:   r=   rs   r   r'   r   r   r   Z"_NonCallableMock__get_return_valueZ"_NonCallableMock__set_return_valueZ"_NonCallableMock__return_value_docr   rc   r   r   re   rf   rg   rh   ra   Z!_NonCallableMock__get_side_effectZ!_NonCallableMock__set_side_effectri   rb   r   rx   r   rq   r   r   r   r   r   r   r   rZ   rY   r[   rX   r\   r]   r^   r   r   r   r   r   r
   z  sT   
  
*
	 

& '
!			
*r
   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"   rF   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 )Nr}   )rL   r   r   r'   ri   )rp   r   ri   rc   r   r   r   r   r   r   r   r1   r   r   r   r'     s
    


zCallableMixin.__init__c             O   s   d S )Nr   )rp   r0   r1   r   r   r   r5     s    zCallableMixin._mock_check_sigc             O   s   | j || | j||S )N)r5   
_mock_call)r/   r0   r1   r   r   r   r)     s    zCallableMixin.__call__c             O   s  | }d|_ | jd7  _t||fdd}||_|j| t }|jd k	}|j}|j	}|dk}	|j
td||f |j}
x|
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}
t|
}||krP || 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   )re   rf   _Callrg   rh   r   rz   r   r   r   ra   r   r`   r   r   ri   r"   rF   r   r   r}   rc   r   )r/   r0   r1   rp   r   r   Zdo_method_callsZmethod_call_nameZmock_call_nameZ	is_a_callr   Zthis_mock_callr   Z_new_parent_idZeffectrT   r   r   r   r     s`    









zCallableMixin._mock_call)r:   r=   rs   r   r'   r5   r)   r   r   r   r   r   r     s   r   c               @   s   e Zd ZdS )r   N)r:   r=   rs   r   r   r   r   r   I  s   1r   c             C   s2   y
t | |S  tk
r,   t| t | |S X d S )N)rA   r(   
__import__)thingcompimport_pathr   r   r   _dot_lookup~  s
    
r  c             C   sF   |  d}|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   	_importer  s    


r  c             C   s
   t | dS )Nis_local)r%   )patcherr   r   r   _is_started  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+   getterrC   r   new_callabler   createZ	has_localr   autospecr1   additional_patchers)
rp   r  rC   r   r   r
  r   r  r	  r1   r   r   r   r'     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>)r  r  rC   r   r   r
  r   r  r	  r1   attribute_namer  )rp   r  r   r   r   r    s    z_patch.copyc             C   s   t |tr| |S | |S )N)r    r   decorate_classdecorate_callable)rp   r,   r   r   r   r)     s    

z_patch.__call__c             C   sR   xLt |D ]@}|tjsq
t||}t|ds2q
|  }t|||| q
W |S )Nr)   )r   r   r   TEST_PREFIXrA   r%   r  r@   )rp   r   attr
attr_valuer  r   r   r   r    s    

z_patch.decorate_classc                s<   t  dr j|   S t  fdd| g_S )N	patchingsc           	      sr   g }t  \}xBjD ]8}||}|jd k	r:|| q|jtkr|| qW | t	|7 }  | |S Q R X d S )N)

contextlib	ExitStackr  enter_contextr  updater   r   r   rI   )r0   Zkeywargs
extra_args
exit_stackpatchingr   )r,   patchedr   r   r    s    



z)_patch.decorate_callable.<locals>.patched)r%   r  r   r   )rp   r,   r   )r,   r  r   r    s    
z_patch.decorate_callablec          	   C   s   |   }| j}t}d}y|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)r  rC   r   rL   r(   KeyErrorrA   	_builtinsr    r   r
  )rp   r  r   rS   localr   r   r   get_original  s    z_patch.get_originalc             C   sn  | 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rR|d krRd}	|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	rF|}
nN|d k	sZ|d k	r|}|d k	rl|}t|rd|k}n
t| }|rt}
|d k	r||d< |d k	r||d	< t|
trt|
tr| jr| j|d
< || |
f |}|	rt|r|}|d k	r|}t|s0t|s0t}
|d
 |
f |dd||_nl|d k	r|t
k	rntd|t
krtdt|}|dkr|}t|f|| jd|}n|rtd|}|| _|| _t | _yrt | j| j| | j!d k	rHi }| j t
kr||| j!< x2| j"D ](}| j#|}|j t
kr|| qW |S |S    | j$t%&  sd 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   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)'r   r   r   r  r1   r	  r  r  r   r!  r   r    r   r   rJ   r   r   r   r
   rC   r  r   rO   r   rc   boolr   temp_originalr  r  r  _exit_stackr@   r  r  r  __exit__sysexc_info)rp   r   r   r   r  r1   r	  rS   r   ZinheritKlass_kwargsZ	this_specZnot_callableZnew_attrr  r  r   r   r   r   	__enter__  s    





















z_patch.__enter__c             G   s   t | std| jr4| jtk	r4t| j| j| j n>t| j| j | j	srt
| j| jr`| jdkrrt| j| j| j | `| `| `| j}| `|j| S )Nz stop called on unstarted patcher)r;   r=   r>   __annotations__r?   )r  RuntimeErrorr  r$  r   r@   r  rC   r   r
  r%   r%  r&  )rp   r(  r  r   r   r   r&    s    
z_patch.__exit__c             C   s   |   }| j|  |S )N)r+  _active_patchesr   )rp   rT   r   r   r   start  s    z_patch.startc             C   s4   y| j |  W n tk
r$   Y nX | d d d S )N)r.  r   r+   r&  )rp   r   r   r   stop  s
    z_patch.stop)r:   r=   rs   r  r.  r'   r  r)   r  r  r!  r+  r&  r/  r0  r   r   r   r   r    s    r  c          	      sP   y  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     r   z_get_target.<locals>.<lambda>)rsplitr   r+   )r  rC   r  r   )r  r   _get_target  s    r2  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 )Nr   r   )r  r   r   r     r   z_patch_object.<locals>.<lambda>)r   strr   r  )
r  rC   r   r   r
  r   r  r	  r1   r  r   )r  r   _patch_object  s    
r4  c                s   t  tkr fdd}n fdd}|s2tdt| }|d \}	}
t||	|
|||||i 	}|	|_xB|dd  D ]2\}	}
t||	|
|||||i 	}|	|_|j| qvW |S )Nc                  s   t  S )N)r  r   )r  r   r   r     r   z!_patch_multiple.<locals>.<lambda>c                  s    S )Nr   r   )r  r   r   r     r   z=Must supply at least one keyword argument with patch.multipler   r   )	r   r3  r+   rH   r   r  r  r  r   )r  r   r
  r   r  r	  r1   r  r   rC   r   r  Zthis_patcherr   )r  r   _patch_multiple  s&    

r5  c       
   
   K   s$   t | \}}	t||	|||||||	S )N)r2  r  )
r  r   r   r
  r   r  r	  r1   r  rC   r   r   r   r     s    E
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 )N)in_dictry   r   r  clear	_original)rp   r7  r   r8  r1   r   r   r   r'   t  s
    
z_patch_dict.__init__c                s.   t  tr S t  fdd}|S )Nc                 s"      z
 | |S   X d S )N)r6  _unpatch_dict)r0   r   )frp   r   r   _inner  s    
z$_patch_dict.__call__.<locals>._inner)r    r   r  r   )rp   r;  r<  r   )r;  rp   r   r)   }  s    

z_patch_dict.__call__c             C   s\   xVt |D ]J}t||}|tjr
t|dr
t| j| j| j	}||}t
||| q
W |S )Nr)   )r   rA   r   r   r  r%   r6  r7  r   r8  r@   )rp   r   r  r  Z	decoratorZ	decoratedr   r   r   r    s    

z_patch_dict.decorate_classc             C   s   |    d S )N)r6  )rp   r   r   r   r+    s    z_patch_dict.__enter__c             C   s   | j }t| jtrt| j| _| j}| j}y| }W n2 tk
rh   i }x|D ]}|| ||< qPW Y nX || _|r|t	| y|
| W n. tk
r   x|D ]}|| ||< qW Y nX d S )N)r   r    r7  r3  r  r8  r  r(   r9  _clear_dictr  )rp   r   r7  r8  rS   r   r   r   r   r6    s&    

z_patch_dict._patch_dictc             C   sV   | j }| j}t| y|| W n. tk
rP   x|D ]}|| ||< q8W Y nX d S )N)r7  r9  r=  r  r(   )rp   r7  rS   r   r   r   r   r:    s    
z_patch_dict._unpatch_dictc             G   s   |    dS )NF)r:  )rp   r0   r   r   r   r&    s    z_patch_dict.__exit__N)r   F)r:   r=   rs   r'   r)   r  r+  r6  r:  r&  r/  r0  r   r   r   r   r6  W  s   
	r6  c             C   sB   y|    W n0 tk
r<   t| }x|D ]
}| |= q*W Y nX d S )N)r8  r(   rH   )r7  keysr   r   r   r   r=    s    
r=  c              C   s    xt tjD ]} |   qW d S )N)r   r  r.  r0  )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   rA  r   r   r   r     s    __get____set__
__delete____reversed____missing__rr   __reduce_ex__Z__getinitargs____getnewargs____getstate____setstate____getformat__Z__setformat__rq   r   __subclasses__
__format____getnewargs_ex__c                s    fdd}| |_ |S )Nc                s    | f||S )Nr   )rp   r0   r   )r,   r   r   method  s    z_get_method.<locals>.method)r:   )r   r,   rO  r   )r,   r   r     s    r   c             C   s   h | ]}d | qS )z__%s__r   )r   rO  r   r   r   r     s   rx   r   r'   r   __prepare____instancecheck____subclasscheck____del__c             C   s
   t | S )N)r   __hash__)rp   r   r   r   r     r   r   c             C   s
   t | S )N)r   __str__)rp   r   r   r   r     r   c             C   s
   t | S )N)r   
__sizeof__)rp   r   r   r   r     r   )rT  rU  rV  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__r}   r   NotImplemented)otherret_val)rp   r   r   ra  0  s    z_get_eq.<locals>.__eq__r   )rp   ra  r   )rp   r   _get_eq/  s    re  c                s    fdd}|S )Nc                s     j jtk	rtS  | krdS tS )NF)__ne__r}   r   rb  )rc  )rp   r   r   rf  :  s
    z_get_ne.<locals>.__ne__r   )rp   rf  r   )rp   r   _get_ne9  s    rg  c                s    fdd}|S )Nc                 s     j j} | tkrtg S t| S )N)r   r}   r   r   )rd  )rp   r   r   r   C  s    z_get_iter.<locals>.__iter__r   )rp   r   r   )rp   r   	_get_iterB  s    rh  )ra  rf  r   c             C   s   t |t}|tk	r||_d S t|}|d k	rdy|| }W n tk
rX   t|}Y nX ||_d S t|}|d k	r|| |_d S )N)_return_valuesrM   r   rc   _calculate_return_valuer(   _side_effect_methodsri   )r#   rO  r   ZfixedZreturn_calculatorrc   Zside_effectorr   r   r   _set_return_valueT  s    

rl  c               @   s   e Zd Zdd Zdd ZdS )
MagicMixinc             O   s&   |    tt| j|| |    d S )N)_mock_set_magicsr   rm  r'   )rp   r0   r   r   r   r   r'   l  s    zMagicMixin.__init__c             C   s   t }t| dd d k	rTt | j}t }t | }x$|D ]}|t| jkr4t| | q4W |tt| j }t| }x|D ]}t||t	||  qtW d S )Nr   )
_magicsrA   intersectionr   rz   r   rL   r   r@   
MagicProxy)rp   Zthese_magicsZremove_magicsr   r   r   r   r   rn  r  s    

zMagicMixin._mock_set_magicsN)r:   r=   rs   r'   rn  r   r   r   r   rm  k  s   rm  c               @   s   e Zd ZdddZdS )r   Fc             C   s   |  || |   d S )N)r   rn  )rp   r   r   r   r   r   r     s    z"NonCallableMagicMock.mock_add_specN)F)r:   r=   rs   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 )N)r   rn  )rp   r   r   r   r   r   r     s    zMagicMock.mock_add_specN)F)r:   r=   rs   r   r   r   r   r   r     s   r   c               @   s.   e Zd Zdd Zdd Zdd Zd
dd	ZdS )rq  c             C   s   || _ || _d S )N)r   r   )rp   r   r   r   r   r   r'     s    zMagicProxy.__init__c             O   s   |   }|||S )N)create_mock)rp   r0   r1   mr   r   r   r)     s    zMagicProxy.__call__c             C   s8   | j }| j}|j|||d}t||| t||| |S )N)r   r   r   )r   r   r   r@   rl  )rp   r   r   rs  r   r   r   rr    s    zMagicProxy.create_mockNc             C   s   |   S )N)rr  )rp   r   r   r   r   r   rB    s    zMagicProxy.__get__)N)r:   r=   rs   r'   r)   rr  rB  r   r   r   r   rq    s   	rq  c               @   s$   e Zd Zdd Zdd Zdd ZdS )_ANYc             C   s   dS )NTr   )rp   rc  r   r   r   ra    s    z_ANY.__eq__c             C   s   dS )NFr   )rp   rc  r   r   r   rf    s    z_ANY.__ne__c             C   s   dS )Nz<ANY>r   )rp   r   r   r   rq     s    z_ANY.__repr__N)r:   r=   rs   ra  rf  rq   r   r   r   r   rt    s   rt  c             C   sd   d|  }d}d dd |D }d dd t| 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   r{   r   r   r   r     s    )r   r   r   )r   r0   r1   r   Zformatted_argsargs_stringZkwargs_stringr   r   r   r     s    r   c               @   s^   e Zd ZdddZddd	Zd
d ZejZdd Zdd Z	dd Z
dd Zdd Zdd ZdS )r   r   r   NFTc             C   s   d}i }t |}|dkr$|\}}}nr|dkrd|\}	}
t|	trX|	}t|
trR|
}qb|
}q|	|
 }}n2|dkr|\}t|tr|}nt|tr|}n|}|rt| ||fS t| |||fS )Nr   r   rl   r   )r   r    r3  rI   r   )r   r{   r   r   r   	from_kallr0   r1   _lenfirstsecondr   r   r   r     s.    



z_Call.__new__c             C   s   || _ || _|| _d S )N)r   r   _mock_from_kall)rp   r{   r   r   r   rw  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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r2|
}t|tr&|i  }}n
d| }}n
|
| }}ndS |rV||krVdS ||f||fkS )
NTFr   rl   r   r   r   r   r   )r   r   r   rA   r   r    rI   r3  )rp   rc  Z	len_otherZ	self_nameZ	self_argsZself_kwargsZ
other_nameZ
other_argsZother_kwargsr{   ry  rz  r   r   r   ra    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   )r   r   )rp   r0   r1   r   r   r   r   r)   Y  s    

z_Call.__call__c             C   s2   | j d krt|ddS d| j |f }t|| ddS )NF)r   rw  z%s.%s)r   r   rw  )r   r   )rp   r  r   r   r   r   rx   a  s    
z_Call.__getattr__c             O   s   |  d||S )Nr   )rx   )rp   r0   r1   r   r   r   r   h  s    z_Call.countc             O   s   |  d||S )Nindex)rx   )rp   r0   r1   r   r   r   r|  k  s    z_Call.indexc             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   z()zcall%srl   zcall.%s)r{  r   r   r   r   )rp   r   r0   r1   r   r   r   rq   n  s    





z_Call.__repr__c             C   s8   g }| }x"|d k	r*|j r"|| |j}q
W tt|S )N)r{  r   r   r_   r   )rp   Zvalsr   r   r   r   	call_list  s    


z_Call.call_list)r   r   NFT)r   NNFT)r:   r=   rs   r   r'   ra  r   rf  r)   rx   r   r|  rq   r}  r   r   r   r   r     s    
 
7r   )rw  c          	   K   s$  t | rt| } t| t}d| i}|r0d| i}n| d kr<i }|rL|rLd|d< || t}t| rji }n"t| sxt}n|r|rt	| st}|
d|}|}	|d krd}	|f |||	|d|}
t| trt|
| }
nt| |
|| |d k	r|s|
|j|< |r$|s$d|kr$t| |dd	|
d
|
_xt| D ]}t|r@q.yt| |}W n tk
rh   w.Y 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r.t|
|| q.W |
S )Nr   r   Tr   r   r   )r   r   r   r   rc   z())r8   r"  r   r   )r   r   r   r   )r7   )rJ   r   r    r  r   r*   ZisdatadescriptorrF   r   rO   r   r$   rW   r9   rj   r   rc   r   rn   rA   r(   r   r#   
_must_skipr@   )r   r   r8   r   r"  r1   is_typer*  r)  r   r#   r   rS   r   r   r7   r   r   r   r     st    










r   c             C   st   t | ts$|t| di krdS | j} xJ| jD ]@}|j|t}|tkrHq,t |tt	frZdS t |t
rh|S dS q,W |S )NrL   F)r    r   rA   r   rK   rL   rM   r   rD   rE   r$   )r   r   r  r   rT   r   r   r   r~  	  s    

r~  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   r8   r   )rp   r   r   r   r   r  r8   r   r   r   r'   3	  s    z_SpecState.__init__)FNNNF)r:   r=   rs   r'   r   r   r   r   r   1	  s    r   c             C   s"   t | trt| S t| S d S )N)r    bytesioBytesIOStringIO)	read_datar   r   r   
_to_streamH	  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 )Nr   )	readlinesrc   )r0   r1   )_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 )Nr   )readrc   )r0   r1   )r  r  r   r   _read_side_effectc	  s    z$mock_open.<locals>._read_side_effectc              ?   s(     E d H  xd j | |V  qW d S )Nr   )readline)r0   r1   )_iter_side_effectr  r   r   _readline_side_effecth	  s    z(mock_open.<locals>._readline_side_effectc              3   s8   j jd k	rxj jV  qW x d D ]
} | V  q&W d S )Nr   )r  rc   )line)r  r  r   r   r  m	  s
    z$mock_open.<locals>._iter_side_effectc                  s    j jd k	rj jS t d S )Nr   )r  rc   r   r   )r  r  r   r   _next_side_effectt	  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  ri   r   )r0   r1   )r  r  r  r  r   r   
reset_data	  s
    
zmock_open.<locals>.reset_data)r  	file_spec_iorH   rz   r   TextIOWrapperunionr  r   r  r+  rc   writer  r  r  ri   r   r   )r#   r  Z
_read_datar  r  r  r  r  r   )r  r  r  r  r  r   r   O	  s8    "

r   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   )rp   r1   r   r   r   r   	  s    zPropertyMock._get_child_mockc             C   s   |  S )Nr   )rp   r   Zobj_typer   r   r   rB  	  s    zPropertyMock.__get__c             C   s   | | d S )Nr   )rp   r   r   r   r   r   rC  	  s    zPropertyMock.__set__N)r:   r=   rs   r   rB  rC  r   r   r   r   r   	  s   	r   c          	   C   s`   d| _ xTt| D ]H}yt| |}W n tk
r8   wY nX t|tsFq|j| krt| qW d S )NT)r   r   rA   r(   r    r
   r   r   )r#   r  rs  r   r   r   r   	  s    


r   )F)F)NFNNN)FFNN)Nr   )r__all____version__r  r*   r   r'  builtinsr  typesr   r   	functoolsr   r   r   r  BaseExceptionr!   platformr   langZ	Throwabler	   superr   r   r"   r&   r-   r9   r4   rF   rJ   rO   rW   rR   rn   r   ro   rt   r   r   MISSINGr   ZDELETEDr   r|   r   r   rH   r_   r   r   r   r
   r   r   r   r  r  r  r  r2  r4  r5  r   r6  r=  r?  ry   ZmultipleZstopallr  Zmagic_methodsZnumericsr   r   ZinplacerightZ_non_defaultsr   ro  r   r   rj  rb  ri  re  rg  rh  rk  rl  rm  r   r   rq  rt  r   r   rI   r   r   r   r~  r   r   r   ra  r$   r  r  r   r   r   r   r   r   r   <module>   s  
	 


5    Zi5   
1Jv	

	 ,
 
w
N