U
    d                     @   s   d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	m
Z
 ddlmZ d	ZG d
d dZG dd deZG dd deZdS )zSimple messaging interface.    N)deque)Empty)	monotonic   )entity	messaging)maybe_channel)SimpleQueueSimpleBufferc                   @   s   e Zd ZeZdZdd Zdd ZdddZdd
dZdd Z	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eZd	S )!
SimpleBaseFc                 C   s   | S N selfr   r   0/tmp/pip-unpacked-wheel-hqfrjlvz/kombu/simple.py	__enter__   s    zSimpleBase.__enter__c                 G   s   |    d S r   )close)r   exc_infor   r   r   __exit__   s    zSimpleBase.__exit__c                 C   sD   t || _|| _|| _|| _| jjd | _t | _| j	| j
 d S )Nr   )r   channelproducerconsumerno_ackZqueuesqueuer   bufferZregister_callback_receive)r   r   r   r   r   r   r   r   __init__   s    
zSimpleBase.__init__TNc                 C   s   |s|   S |   t }|}| jr.| j S |d k	rF|dkrF|  z| jjjj	|d W n t
jk
rz   |  Y nX |d k	rt | }|| }qd S )Ng        )timeout)
get_nowait_consumer   r   popleftr   r   
connectionclientZdrain_eventssocketr   )r   blockr   Z
time_start	remainingelapsedr   r   r   get!   s     

zSimpleBase.getc                 C   s&   | j j| j| jjd}|s"|  |S )N)r   accept)r   r'   r   r   r(   r   )r   mr   r   r   r   C   s    zSimpleBase.get_nowaitc                 K   s"   | j j|f||||d| d S )N)
serializerrouting_keyheaderscompression)r   publish)r   messager*   r,   r-   r+   kwargsr   r   r   putI   s    
zSimpleBase.putc                 C   s
   | j  S r   )r   purger   r   r   r   clearR   s    zSimpleBase.clearc                 C   s   | j jdd\}}}|S )NT)Zpassive)r   Zqueue_declare)r   _sizer   r   r   qsizeU   s    zSimpleBase.qsizec                 C   s   | j   d S r   )r   cancelr   r   r   r   r   Y   s    zSimpleBase.closec                 C   s   | j | d S r   )r   append)r   Zmessage_datar/   r   r   r   r   \   s    zSimpleBase._receivec                 C   s    | j s| jj| jd d| _ d S )N)r   T)
_consumingr   consumer   r   r   r   r   r   _   s    zSimpleBase._consumec                 C   s   |   S )z`len(self) -> self.qsize()`.)r6   r   r   r   r   __len__d   s    zSimpleBase.__len__c                 C   s   dS )NTr   r   r   r   r   __bool__h   s    zSimpleBase.__bool__)F)TN)NNNN)__name__
__module____qualname__r   r9   r   r   r   r'   r   r1   r3   r6   r   r   r   r;   r<   __nonzero__r   r   r   r   r      s$   
	
"  
	r   c                       s6   e Zd ZdZdZi Zi ZddiZd fdd	Z  Z	S )	r	   z!Simple API for persistent queues.FtypedirectNc
                    s   |}
t | jf|pi }t | jf|p$i }t | jf|p6i }|d krH| j}t|
tjstj|f|}tj|||fd|i|}
|}n|
j	}|
j
}tj||
|	d}tj|||||d}t |||| d S )NZqueue_arguments)r(   )r*   r+   r-   )dict
queue_opts
queue_argsexchange_optsr   
isinstancer   QueueZExchangeexchanger+   r   ZConsumerZProducersuperr   )r   r   namer   rD   rE   rF   r*   r-   r(   r   rI   r+   r   r   	__class__r   r   r   u   s4    
 zSimpleQueue.__init__)NNNNNNN)
r=   r>   r?   __doc__r   rD   rE   rF   r   __classcell__r   r   rL   r   r	   m   s            r	   c                   @   s*   e Zd ZdZdZdddZddddZdS )r
   z Simple API for ephemeral queues.TF)durableauto_deleteZ	transient)rP   Zdelivery_moderQ   N)r=   r>   r?   rN   r   rD   rF   r   r   r   r   r
      s   r
   )rN   r#   collectionsr   r   r   timer    r   r   r!   r   __all__r   r	   r
   r   r   r   r   <module>   s   _#