o
    Df                     @  s   d Z ddlm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 dd	lmZmZ dd
lmZ er: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.    )annotationsN)deque)Empty)	monotonic)TYPE_CHECKING   )entity	messaging)maybe_channel)TracebackType)SimpleQueueSimpleBufferc                   @  s   e Zd ZeZdZdd Zd&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   E/home/ubuntu/webapp/venv/lib/python3.10/site-packages/kombu/simple.py	__enter__      zSimpleBase.__enter__exc_typetype[BaseException] | Noneexc_valBaseException | Noneexc_tbTracebackType | NonereturnNonec                 C  s   |    d S r   )close)r   r   r   r   r   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_ackqueuesqueuer   buffer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 ur$|dkr$|  z| jjjj	|d W n t
jy;   |  w |d urIt | }|| }q)NTg        )timeout)
get_nowait_consumer   r&   popleftr   r    
connectionclientdrain_eventssocketr*   )r   blockr*   
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%   r6   r#   r"   r7   r   )r   mr   r   r   r+   N   s   zSimpleBase.get_nowaitc                 K  s"   | j j|f||||d| d S )N)
serializerrouting_keyheaderscompression)r!   publish)r   messager9   r;   r<   r:   kwargsr   r   r   putT   s   

zSimpleBase.putc                 C  s
   | j  S r   )r"   purger   r   r   r   clear]   s   
zSimpleBase.clearc                 C  s   | j jdd\}}}|S )NT)passive)r%   queue_declare)r   _sizer   r   r   qsize`   s   zSimpleBase.qsizec                 C  s   | j   d S r   )r"   cancelr   r   r   r   r   d   s   zSimpleBase.closec                 C  s   | j | d S r   )r&   append)r   message_datar>   r   r   r   r(   g   s   zSimpleBase._receivec                 C  s$   | j s| jj| jd d| _ d S d S )N)r#   T)
_consumingr"   consumer#   r   r   r   r   r,   j   s   
zSimpleBase._consumec                 C  s   |   S )z`len(self) -> self.qsize()`.)rG   r   r   r   r   __len__o   s   zSimpleBase.__len__c                 C  s   dS )NTr   r   r   r   r   __bool__s   r   zSimpleBase.__bool__)r   r   r   r   r   r   r   r   )F)TN)NNNN)__name__
__module____qualname__r   rK   r   r   r)   r6   r+   r@   rB   rG   r   r(   r,   rM   rN   __nonzero__r   r   r   r   r      s&    


	"
	r   c                      s<   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i |p
i }t | jfi |pi }t | jfi |p i }|d u r*| j}t|
tjsItj|fi |}tj|||fd|i|}
|}n|
j	}|
j
}tj||
|	d}tj|||||d}t |||| d S )Nqueue_arguments)r7   )r9   r:   r<   )dict
queue_opts
queue_argsexchange_optsr#   
isinstancer   QueueExchangeexchanger:   r	   ConsumerProducersuperr)   )r   r    namer#   rW   rX   rY   r9   r<   r7   r%   r]   r:   r"   r!   	__class__r   r   r)      s2   
zSimpleQueue.__init__)NNNNNNN)
rO   rP   rQ   __doc__r#   rW   rX   rY   r)   __classcell__r   r   rb   r   r   x   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_delete	transient)rf   delivery_moderg   N)rO   rP   rQ   rd   r#   rW   rY   r   r   r   r   r      s    
r   )rd   
__future__r   r1   collectionsr   r%   r   timer   typingr    r   r	   r.   r
   typesr   __all__r   r   r   r   r   r   r   <module>   s    d#