o
    Df`                     @  s   d 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 er*ddlmZ d	ZejZdddZG dd dejZG dd dejZG dd dejZdS )zYCarrot compatibility interface.

See https://pypi.org/project/carrot/ for documentation.
    )annotations)count)TYPE_CHECKING   )	messaging)ExchangeQueue)TracebackType)	PublisherConsumerFNc                 c  s<    |j |d tdD ]}|r||kr d S |  V  qd S )N)no_ackr   )consumer   drain_events)
connectionconsumerr   limit	iteration r   E/home/ubuntu/webapp/venv/lib/python3.10/site-packages/kombu/compat.py_iterconsume   s   r   c                      sr   e Zd ZdZdZdZdZdZdZdZ				d fdd	Z
d	d
 Z fddZdd ZdddZedd Z  ZS )r
   zCarrot compatible producer. directTFNc           	        s   |r|}|p| j | _ |p| j| _|p| j| _|d ur|| _|d ur$|| _t| j ts9t| j | j| j| j| jd| _ t j|| j fi | d S )N)nametyperouting_keyauto_deletedurable)	exchangeexchange_typer   r   r   
isinstancer   super__init__)	selfr   r   r   r   r   r   channelkwargs	__class__r   r   r!   )   s"   zPublisher.__init__c                 O  s   | j |i |S N)publish)r"   argsr$   r   r   r   send@      zPublisher.sendc                   s   t    d| _d S NT)r    close_closedr"   r%   r   r   r-   C   s   

zPublisher.closec                 C     | S r'   r   r/   r   r   r   	__enter__G      zPublisher.__enter__exc_typetype[BaseException] | Noneexc_valBaseException | Noneexc_tbTracebackType | NonereturnNonec                 C     |    d S r'   r-   r"   r3   r5   r7   r   r   r   __exit__J      zPublisher.__exit__c                 C  s   | j S r'   )r#   r/   r   r   r   backendR   s   zPublisher.backend)NNNNNNr3   r4   r5   r6   r7   r8   r9   r:   )__name__
__module____qualname____doc__r   r   r   r   r   r.   r!   r*   r-   r1   r>   propertyr@   __classcell__r   r   r%   r   r
      s$    
r
   c                      s   e Zd ZdZdZdZdZdZdZdZ	dZ
dZ			d' fdd	Z fd	d
Zdd Zdd Zd(ddZdd Zd)ddZdd Zd*dd Zd+d!d"Zd*d#d$Zd)d%d&Z  ZS ),r   zCarrot compatible consumer.r   r   TFNc	           
        s   |  | _|d ur|| _|d ur|| _|d ur|| _|p| j| _|p$| j| _|p*| j| _|p0| j| _t	| j| j| j| j| jd}t
| j|| j| j| j| jd}t j| j|fi |	 d S )N)r   r   r   r   )r   r   r   	exclusiver   )r#   r@   r   rH   r   queuer   r   r   r   r   r    r!   )
r"   r   rI   r   r   r   r   rH   r   r$   r%   r   r   r!   c   s2   
zConsumer.__init__c                      || _ t | d S r'   r@   r    reviver"   r#   r%   r   r   rL         zConsumer.revivec                 C  s   |    | j  d| _d S r,   )cancelr@   r-   r.   r/   r   r   r   r-      s   

zConsumer.closec                 C  r0   r'   r   r/   r   r   r   r1      r2   zConsumer.__enter__r3   r4   r5   r6   r7   r8   r9   r:   c                 C  r;   r'   r<   r=   r   r   r   r>      r?   zConsumer.__exit__c                 C  s   | j ddS )NT)infinite)	iterqueuer/   r   r   r   __iter__   s   zConsumer.__iter__c                 C  s8   |d u r| j }| jd |}|r|r| |j| |S )Nr   )r   queuesgetreceivepayload)r"   r   enable_callbacksmessager   r   r   fetch   s   zConsumer.fetchc                 C  s   t d)Nz Use fetch(enable_callbacks=True))NotImplementedErrorr/   r   r   r   process_next      zConsumer.process_nextc                 C  s   |d urt d|  S )Nz&discard_all does not implement filters)rZ   purge)r"   
filterfuncr   r   r   discard_all   s
   zConsumer.discard_allc                 C     t | j| ||S r'   r   r   r"   r   r   r   r   r   iterconsume   r+   zConsumer.iterconsumec                 C  s   |  |}t|S r'   )rc   list)r"   r   itr   r   r   wait   s   
zConsumer.waitc                 c  s>    t  D ]}|  }|s|d u s|r||kr d S |V  qd S r'   )r   rY   )r"   r   rP   items_since_startitemr   r   r   rQ      s   
zConsumer.iterqueue)NNNNNNNrA   NFr'   )NN)rB   rC   rD   rE   rI   r   r   r   r   rH   r   r.   r!   rL   r-   r1   r>   rR   rY   r[   r_   rc   rf   rQ   rG   r   r   r%   r   r   W   s2    

	


r   c                      sX   e Zd Z		d fdd	ZdddZdd Zd	d
 Zdd Z fddZdd Z	  Z
S )ConsumerSetNc           
        s   |r	d| _ || _nd| _ | | _g }|r |D ]}||j q|r7| D ]\}}	|tj|fi |	 q&t	 j
| j|fi | d S )NTF)_provided_channelr@   r#   extendrS   itemsappendr   	from_dictr    r!   )
r"   r   ro   	consumersr#   r$   rS   r   
queue_namequeue_optionsr%   r   r   r!      s   
zConsumerSet.__init__Fc                 C  r`   r'   ra   rb   r   r   r   rc      r+   zConsumerSet.iterconsumec                 C  s   |   S r'   )r]   r/   r   r   r   r_      r\   zConsumerSet.discard_allc                 K  s   |  tj|fi |S r'   )	add_queuer   ro   )r"   rI   optionsr   r   r   add_consumer_from_dict   s   z"ConsumerSet.add_consumer_from_dictc                 C  s   |j D ]}| | qd S r'   )rS   rs   )r"   r   rI   r   r   r   add_consumer   s   
zConsumerSet.add_consumerc                   rJ   r'   rK   rM   r%   r   r   rL      rN   zConsumerSet.revivec                 C  s    |    | js| j  d S d S r'   )rO   rk   r#   r-   r/   r   r   r   r-      s   zConsumerSet.close)NNNri   )rB   rC   rD   r!   rc   r_   ru   rv   rL   r-   rG   r   r   r%   r   rj      s    
rj   )FN)rE   
__future__r   	itertoolsr   typingr   r   r   entityr   r   typesr	   __all__ro   entry_to_queuer   Producerr
   r   rj   r   r   r   r   <module>   s    
8c