B
    T[                 @   s   d Z ddlmZ ddlZddlmZ ddlZye W n ek
rL   e	ZY nX ddl
mZ eddZdd	 ZG d
d deZG dd deZdd ZdS )z(
Created on Feb 22, 2014

@author: sean
    )unicode_literalsN)wraps)
namedtuplerule)	urlpathmethodstatuscontentside_effectresheadersexpected_headersc             C   sF   | j r| j |j krdS | jr,| j|jkr,dS | jrB| j|jkrBdS dS )NFT)r   r   Zpath_urlr   )mprepared_request r   [lib/python3.7/site-packages/anaconda_client-1.7.2-py3.7.egg/binstar_client/tests/urlmock.pyfilter_request   s    r   c               @   sH   e Zd Zdd Zdd Zedd Zedd Zdd
dZdddZ	dS )	Responsesc             C   s
   g | _ d S )N)_resps)selfr   r   r   __init__!   s    zResponses.__init__c             C   s   | j | d S )N)r   append)r   r   r   r   r   r   $   s    zResponses.appendc             C   s
   t | jS )N)lenr   )r   r   r   r   called'   s    zResponses.calledc             C   s   | j r| j d d S d S )Nr      )r   )r   r   r   r   req+   s    zResponses.req c             C   s   | j std| d S )NzThe url %s was not called)r   AssertionError)r   r   r   r   r   assertCalled0   s    zResponses.assertCalledc             C   s   | j rtd| d S )NzThe url %s was called)r   r   )r   r   r   r   r   assertNotCalled3   s    zResponses.assertNotCalledN)r   )r   )
__name__
__module____qualname__r   r   propertyr   r   r   r    r   r   r   r   r       s   
r   c               @   sF   e Zd Zdd Zdd Zdd Zdd ZdddZdd Zdd Z	d	S )Registryc             C   s
   g | _ d S )N)_map)r   r   r   r   r   7   s    zRegistry.__init__c             C   s   t jj| _| jt j_| S )N)requestsSessionsend	real_send	mock_send)r   r   r   r   	__enter__:   s    

zRegistry.__enter__c             G   s   | j tj_d S )N)r*   r'   r(   r)   )r   Z	exec_infor   r   r   __exit__@   s    
zRegistry.__exit__c       	         s6  t  fdd| jd d d D d }|d kr@td j jf |jrx`|j D ]R\}}| jkrztd j| j j| |krRtd j| j| |qRW |j	}t
|trt|}t
|tr| }tj }|j|_d|_||_d|_ |_|j|jpi  |j| f |jr2|  |S )	Nc             3   s   | ]}t | r|V  qd S )N)r   ).0r   )r   r   r   	<genexpr>F   s    z%Registry.mock_send.<locals>.<genexpr>z&No matching rule found for url [%s] %sz{}: header {} expected in {}z6{}: header {} has unexpected value {} was expecting {}Tzutf-8)nextr&   	Exceptionr   r   r   itemsr   formatr
   
isinstancedictjsondumpsunicodeencoder'   ZmodelsZResponser	   Zstatus_codeZ_content_consumedZ_contentencodingZrequestupdater   r   r   )	r   r   argskwargsr   headervaluer
   r   r   )r   r   r+   D   s4    $
 



zRegistry.mock_sendNGET       c	       
      C   s*   t  }	| jt|||||||	||	 |	S )N)r   r&   r   r   )
r   r   r   r   r	   r
   r   r   r   r   r   r   r   registeri   s     zRegistry.registerc             C   s2   x,t | jD ]}||jkr| j| d S qW d S )N)listr&   r   remove)r   r   itemr   r   r   
unregistern   s    
zRegistry.unregisterc             C   s<   x6| j D ],}|j}|d|jp d|jp(d|jf  qW d S )Nz	[%s] %s%sanyzhttp://<any>)r&   r   r   r   r   r   )r   rG   r   r   r   r   assertAllCalledt   s    zRegistry.assertAllCalled)NNrA   rB   rC   NNN)
r!   r"   r#   r   r,   r-   r+   rD   rH   rJ   r   r   r   r   r%   6   s   %
r%   c                s   t   fdd}|S )Nc          	      s$   t  } | |f||S Q R X d S )N)r%   )r   r=   r>   r)funcr   r   innerz   s    zurlpatch.<locals>.inner)r   )rL   rM   r   )rL   r   urlpatchy   s    rN   )__doc__Z
__future__r   r'   	functoolsr   r7   r9   	NameErrorstrcollectionsr   r   r   objectr   r%   rN   r   r   r   r   <module>   s   

C