U
    Y+d@	                     @   sT   d Z ddlmZ ddlmZ ddlmZmZ G dd dejZG dd	 d	ej	Z	d
S )a  In-memory transport module for Kombu.

Simple transport using memory for storing messages.
Messages can be passed only between threads.

Features
========
* Type: Virtual
* Supports Direct: Yes
* Supports Topic: Yes
* Supports Fanout: No
* Supports Priority: No
* Supports TTL: Yes

Connection String
=================
Connection string is in the following format:

.. code-block::

    memory://

    )defaultdict)Queue   )basevirtualc                       s   e Zd ZdZeeZi ZdZdZ	dd Z
dd Zdd	d
Zdd Zdd ZdddZdd Zdd Zdd Zdd Z fddZdd Z  ZS )ChannelzIn-memory Channel.FTc                 K   s
   || j kS N)queuesselfqueuekwargs r   :/tmp/pip-unpacked-wheel-rdvd7wfc/kombu/transport/memory.py
_has_queue'   s    zChannel._has_queuec                 K   s   || j krt | j |< d S r   r	   r   r
   r   r   r   
_new_queue*   s    
zChannel._new_queueNc                 C   s   |  |jddS )NF)block)
_queue_forget)r   r   timeoutr   r   r   _get.   s    zChannel._getc                 C   s    || j krt | j |< | j | S r   r   r   r   r   r   r   r   1   s    
zChannel._queue_forc                 G   s   d S r   r   )r   argsr   r   r   _queue_bind6   s    zChannel._queue_bindc                 K   s&   |  ||D ]}| || qd S r   )Z_lookupr   put)r   ZexchangemessageZrouting_keyr   r   r   r   r   _put_fanout9   s    zChannel._put_fanoutc                 K   s   |  || d S r   )r   r   )r   r   r   r   r   r   r   _put=   s    zChannel._putc                 C   s   |  | S r   )r   qsizer   r   r   r   _size@   s    zChannel._sizec                 O   s   | j |d  d S r   )r	   pop)r   r   r   r   r   r   r   _deleteC   s    zChannel._deletec                 C   s    |  |}| }|j  |S r   )r   r   r   clear)r   r   qsizer   r   r   _purgeF   s    

zChannel._purgec                    s,   t    | j D ]}|  qi | _d S r   )supercloser	   valuesemptyr   	__class__r   r   r(   L   s    

zChannel.closec                 C   s   d S r   r   r   r   r   r   after_reply_message_receivedR   s    z$Channel.after_reply_message_received)N)N)__name__
__module____qualname____doc__r   seteventsr	   Z
do_restoreZsupports_fanoutr   r   r   r   r   r   r   r    r"   r&   r(   r-   __classcell__r   r   r+   r   r      s"   

r   c                       sD   e Zd ZdZeZe Zej	j
Z
dZdZ fddZdd Z  ZS )	TransportzIn-memory Transport.Zmemoryc                    s   t  j|f| | j| _d S r   )r'   __init__global_statestate)r   clientr   r+   r   r   r6   c   s    zTransport.__init__c                 C   s   dS )NzN/Ar   )r   r   r   r   driver_versiong   s    zTransport.driver_version)r.   r/   r0   r1   r   r   ZBrokerStater7   r   r5   Z
implementsZdriver_typeZdriver_namer6   r:   r4   r   r   r+   r   r5   V   s   r5   N)
r1   collectionsr   r   r    r   r   r   r5   r   r   r   r   <module>   s
   7