o
    Dfd	                     @  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 v S N)queuesselfqueuekwargs r   O/home/ubuntu/webapp/venv/lib/python3.10/site-packages/kombu/transport/memory.py
_has_queue)   s   
zChannel._has_queuec                 K  s   || j vrt | j |< d S 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      zChannel._getc                 C  s    || j vrt | j |< | j | S r	   r   r   r   r   r   r   r   3   s   

zChannel._queue_forc                 G     d S r	   r   )r   argsr   r   r   _queue_bind8      zChannel._queue_bindc                 K  s&   |  ||D ]
}| || qd S r	   )_lookupr   put)r   exchangemessage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   r   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  r   r	   r   r   r   r   r   after_reply_message_receivedT   r   z$Channel.after_reply_message_receivedr	   )__name__
__module____qualname____doc__r   seteventsr
   
do_restoresupports_fanoutr   r   r   r   r   r$   r%   r'   r)   r-   r/   r4   __classcell__r   r   r2   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.memoryc                   s    t  j|fi | | j| _d S r	   )r.   __init__global_statestate)r   clientr   r2   r   r   r@   e   s   zTransport.__init__c                 C  s   dS )NzN/Ar   )r   r   r   r   driver_versioni   r   zTransport.driver_version)r5   r6   r7   r8   r   r   BrokerStaterA   r   r>   
implementsdriver_typedriver_namer@   rD   r=   r   r   r2   r   r>   X   s    r>   N)r8   
__future__r   collectionsr   r   r    r   r   r   r>   r   r   r   r   <module>   s    7