a
    Xya                     @   s   d Z ddlmZ ddlZddlmZ ddlZze W n eyJ   e	ZY n0 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.9/site-packages/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 r   )r   append)r   r   r   r   r   r   '   s    zResponses.appendc                 C   s
   t | jS r   )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J d| d S )NzThe url %s was not calledr   r   r   r   r   r   assertCalled3   s    zResponses.assertCalledc                 C   s   | j rJ d| d S )NzThe url %s was calledr"   r#   r   r   r   assertNotCalled6   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 r   )_mapr   r   r   r   r   ;   s    zRegistry.__init__c                 C   s   t jj| _| jt j_| S r   )requestsSessionsend	real_send	mock_sendr   r   r   r   	__enter__>   s    

zRegistry.__enter__c                 G   s   | j tj_d S r   )r/   r,   r-   r.   )r   Z	exec_infor   r   r   __exit__D   s    
zRegistry.__exit__c           	         s2  t  fdd| jd d d D d }|d u r@td j jf |jr|j D ]R\}}| jvrxtd j| j j| |krPtd j| j| |qP|j	}t
|trt|}t
|tr| }tj }|j|_d|_||_d|_ |_|j|jp
i  |j| f |jr.|  |S )	Nc                 3   s   | ]}t | r|V  qd S r   )r   ).0r   r   r   r   	<genexpr>J       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   r4   r   r0   H   s6    $




zRegistry.mock_sendNGET   r6   c	           
      C   s*   t  }	| jt|||||||	||	 |	S r   )r   r+   r   r   )
r   r   r   r	   r
   r   r   r   r   r   r   r   r   registerm   s     zRegistry.registerc                 C   s0   t | jD ] }||jkr
| j|  d S q
d S r   )listr+   r   remove)r   r   itemr   r   r   
unregisterr   s    
zRegistry.unregisterc                 C   s8   | j D ],}|j}|d|jpd|jp&d|jf  qd S )Nz	[%s] %s%sanyzhttp://<any>)r+   r   r$   r	   r   r   )r   rM   r   r   r   r   assertAllCalledx   s    
zRegistry.assertAllCalled)NNrH   rI   r6   NNN)
r&   r'   r(   r   r1   r2   r0   rJ   rN   rP   r   r   r   r   r*   :   s   %
r*   c                    s   t   fdd}|S )Nc                    sB   t  (} | |g|R i |W  d    S 1 s40    Y  d S r   )r*   )r   rD   rE   rfuncr   r   inner   s    zurlpatch.<locals>.innerr   )rS   rT   r   rR   r   urlpatch~   s    rU   )__doc__Z
__future__r   r,   	functoolsr   r>   r@   	NameErrorstrcollectionsr   r   r   objectr   r*   rU   r   r   r   r   <module>   s    
D