U
    .ed	                     @  s`   d Z ddlm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://

    )annotations)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-48hrr5dg/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   _get0   s    zChannel._getc                 C  s    || j krt | j |< | j | S r	   r   r   r   r   r   r   r   3   s    
zChannel._queue_forc                 G  s   d S r	   r   )r   argsr   r   r   _queue_bind8   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_fanout;   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   _sizeB   s    zChannel._sizec                 O  s   | j |d  d S r	   )r
   pop)r   r   r   r   r   r   r   _deleteE   s    zChannel._deletec                 C  s    |  |}| }|j  |S r	   )r   r    r   clear)r   r   qsizer   r   r   _purgeH   s    

zChannel._purgec                   s,   t    | j D ]}|  qi | _d S r	   )supercloser
   valuesemptyr   	__class__r   r   r)   N   s    

zChannel.closec                 C  s   d S r	   r   r   r   r   r   after_reply_message_receivedT   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   r7   e   s    zTransport.__init__c                 C  s   dS )NzN/Ar   )r   r   r   r   driver_versioni   s    zTransport.driver_version)r/   r0   r1   r2   r   r   ZBrokerStater8   r   r6   Z
implementsZdriver_typeZdriver_namer7   r;   r5   r   r   r,   r   r6   X   s   r6   N)r2   
__future__r   collectionsr   r   r    r   r   r   r6   r   r   r   r   <module>   s   7