o
    Df.                     @  s  U d Z ddlmZ ddl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 dd	lmZmZ dd
lmZ ddlmZ ddlmZmZmZmZ ddlmZ ddlmZ dZee Z!da"de#d< dZ$G dd de%Z&dd Z'edd Z(d"ddZ)d#ddZ*G d d! d!Z+dS )$zEvent loop implementation.    )annotationsN)contextmanager)copy)Empty)sleep)GeneratorType)Thenablepromise)
get_logger)fileno)ERRREADWRITEpoll)cached_property   )Timer)Hubget_event_loopset_event_loop
Hub | None_current_loopz<Received unknown event %r for fd %r, please contact support!c                   @  s   e Zd ZdZdS )StopzStops the event loop.N)__name__
__module____qualname____doc__ r   r   O/home/ubuntu/webapp/venv/lib/python3.10/site-packages/kombu/asynchronous/hub.pyr       s    r   c                   C  s   t  N)r   r   r   r   r   _raise_stop_error$   s   r    c                  o  s    d V  d S r   r   )argskwargsr   r   r   _dummy_context(   s   
r#   returnc                   C  s   t S )zGet current event loop object.r   r   r   r   r   r   -   s   r   loopc                 C  s   | a | S )z"Set the current event loop object.r%   )r&   r   r   r   r   2   s   r   c                
   @  sR  e Zd ZdZeZeZeZdZdFddZe	dd Z
e
jdd Z
dd	 Zd
d Zdd Zdd Zdd Z		dGddZdd ZdHddZdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Z d6d7 Z!d8d9 Z"d:d; Z#e$e%e&e'e(e)e*eeef
d<d=Z+d>d? Z,d@dA Z-e.dBdC Z/e	dDdE Z0dS )Ir   z~Event loop object.

    Arguments:
    ---------
        timer (kombu.asynchronous.Timer): Specify custom timer instance.
    Nc                 C  sn   |d ur|nt  | _i | _i | _t | _t | _t | _t	 | _
d| _d | _t | _d | _d| _|   d S )NFr   )r   timerreaderswritersseton_tickon_close_ready	threadingLock_ready_lock_running_loopconsolidateconsolidate_callbackpropagate_errors_create_poller)selfr'   r   r   r   __init__N   s   
	zHub.__init__c                 C  s   | j s|   | j S r   )_pollerr6   r7   r   r   r   polleri   s   z
Hub.pollerc                 C  s
   || _ d S r   )r9   )r7   valuer   r   r   r;   o      
c                 C  s   |    |   d S r   )closer6   r:   r   r   r   resets   s   z	Hub.resetc                 C  s    t  | _| jj| _| jj| _d S r   )r   r9   register_register_fd
unregister_unregister_fdr:   r   r   r   r6   w   s   
zHub._create_pollerc                 C  s.   | j d ur| j   d | _ d | _d | _d S d S r   )r9   r>   rA   rC   r:   r   r   r   _close_poller|   s   


zHub._close_pollerc                 C  s   |  t d S r   )	call_soonr    r:   r   r   r   stop   s   zHub.stopc                 C  s   d t| t| jt| jS )Nz<Hub@{:#x}: R:{} W:{}>)formatidlenr(   r)   r:   r   r   r   __repr__   s   zHub.__repr__r   
   r   c           
      C  s   | j }d }|rm|jrmt|D ]^}t| j\}}|d u r nPz|  W q |y*     ttfy3     tyS }	 z|	jtj	krA t
jd|	dd W Y d }	~	qd }	~	w tyl }	 zt
jd|	dd W Y d }	~	qd }	~	ww t|pq||S )NzError in timer: %rr   exc_info)r'   _queuerangenext	schedulerMemoryErrorAssertionErrorOSErrorerrnoENOMEMloggererror	Exceptionmin)
r7   	min_delay	max_delay
max_timers	propagater'   delayientryexcr   r   r   fire_timers   s.   

zHub.fire_timersc              	   C  s(   z|  | W | | d S | | w r   )_unregister_discardr7   fdr   r   r   _remove_from_loop   s   zHub._remove_from_loopFc                 C  sv   t |}z	| j|| W n ty   | |  w |t@ r"| jn| j}|r3| j	| d ||< d S ||f||< d S r   )
r   r;   r@   
ValueErrorrh   r   r(   r)   r3   add)r7   rg   callbackflagsr!   r3   destr   r   r   rj      s   
zHub.addc                 C  s   t |}| | d S r   )r   rh   rf   r   r   r   remove   s   z
Hub.removec                 C  s@   d| _ z	 z|   W n	 ty   Y nw qW d| _ d S d| _ w )NTr   F)r1   run_oncer   r:   r   r   r   run_forever   s   zHub.run_foreverc                 C  s,   zt | j W d S  ty   d | _Y d S w r   )rP   r&   StopIterationr2   r:   r   r   r   ro      s
   zHub.run_oncec                 G  sL   t |ts
t||}| j | j| W d    |S 1 sw   Y  |S r   )
isinstancer   r	   r0   r-   rj   )r7   rk   r!   r   r   r   rE      s   


zHub.call_soonc                 G     | j |||S r   )r'   
call_afterr7   r_   rk   r!   r   r   r   
call_later      zHub.call_laterc                 G  rs   r   )r'   call_at)r7   whenrk   r!   r   r   r   rx      rw   zHub.call_atc                 G  rs   r   )r'   call_repeatedlyru   r   r   r   rz      rw   zHub.call_repeatedlyc                 G  s   |  ||ttB |S r   )rj   r   r   r7   fdsrk   r!   r   r   r   
add_reader   s   zHub.add_readerc                 G  s   |  ||t|S r   )rj   r   r{   r   r   r   
add_writer   rw   zHub.add_writerc                 C  sh   || j v }| j |}z| | W |r"|\}}| ||t| d S d S |r3|\}}| ||t| w w r   )r)   getrh   rj   r   )r7   rg   writableon_writecbr!   r   r   r   remove_reader   s   
zHub.remove_readerc                 C  sp   || j v }| j |}z| | W |r$|\}}| ||ttB | d S d S |r7|\}}| ||ttB | w w r   )r(   r   rh   rj   r   r   )r7   rg   readableon_readr   r!   r   r   r   remove_writer   s   
zHub.remove_writerc              
   C  s.   z	| j | W d S  tttfy   Y d S w r   )r;   rB   AttributeErrorKeyErrorrT   rf   r   r   r   rd      s
   zHub._unregisterc                 C  s<   | j  | j}t | _|W  d    S 1 sw   Y  d S r   )r0   r-   r*   )r7   readyr   r   r   
_pop_ready   s
   $zHub._pop_readyc                   s~    fdd j D   j    fdd jD   j   j      jD ]}|  q*  }|D ]}|  q7d S )Nc                      g | ]}  |qS r   rd   .0rg   r:   r   r   
<listcomp>      zHub.close.<locals>.<listcomp>c                   r   r   r   r   r:   r   r   r     r   )r(   clearr)   r3   rD   r,   r   )r7   r!   rk   todositemr   r:   r   r>     s   




z	Hub.closec                 C  s4   t |}| j|d  | j|d  | j| d S r   )r   r(   popr)   r3   discardrf   r   r   r   re     s   zHub._discardc                 C  s   t jd||dd d S )Nz Callback %r raised exception: %rr   rL   )rW   rX   )r7   rk   rb   r   r   r   on_callback_error  s   
zHub.on_callback_errorc                  c  s   | j | j}}| jj}| j}| j}| jj}| j}| j	}| j
}	 |  }|D ]}|r-|  q&|r5||dnd}t| jD ]}|  q<|sG|r<g }z||}W n
 tyY   Y d S w |p]dD ]\}}d}||v ru||d u ru|| q^d  }}||@ rz|| \}}W n9 |y   | | Y q^w ||	@ rz|| \}}W n |y   | | Y q^w ||
@ rd}n	tt|| d}|rz||p||\}}W n	 ty   Y nw |d u r| | q^t||r#z|| W q^ ty } z|jtjkr || W Y d }~q^d }~w |y   Y q^ ty"   ||  w z||  W q^ |y3   Y q^w |r;|| n|||d d V  q )Nr   )r^   r   FTg?)r(   r)   r;   r   rc   rn   r'   rN   r3   r4   r5   r   r   r+   ri   r   appendr   r   rW   infoW_UNKNOWN_EVENT	TypeErrorrr   rT   rU   EBADFrY   ) r7   	generatorr   rZ   rP   r   rq   r   r   r   r   r(   r)   r   rc   
hub_remove	scheduledr3   r4   r^   todor   poll_timeouttick_callbackto_consolidateeventsrg   eventgeneral_errorr   cbargsrb   r   r   r   create_loop   s   






zHub.create_loopc                 C  s   ddl m} || S )Nr   )repr_active)debugr   )r7   r   r   r   r   r     s   zHub.repr_activec                 C  s   ddl m} || |pg S )Nr   )repr_events)r   r   )r7   r   r   r   r   r   r     s   zHub.repr_eventsc                 C  s
   t | jS r   )iterr'   r:   r   r   r   rQ     r=   zHub.schedulerc                 C  s   | j d u r
|  | _ | j S r   )r2   r   r:   r   r   r   r&     s   

zHub.loopr   )r   rK   rK   r   )r   F)1r   r   r   r   r   r   r   r,   r8   propertyr;   setterr?   r6   rD   rF   rJ   rc   rh   rj   rn   rp   ro   rE   rv   rx   rz   r}   r~   r   r   rd   r   r>   re   r   r   r   rZ   rP   r   rq   r   r   r   r   r   rQ   r&   r   r   r   r   r   9   s^    







_
r   )r$   r   )r&   r   r$   r   ),r   
__future__r   rU   r.   
contextlibr   r   queuer   timer   typesr   r   viner   r	   	kombu.logr
   kombu.utils.compatr   kombu.utils.eventior   r   r   r   kombu.utils.objectsr   r'   r   __all__r   rW   r   __annotations__r   BaseExceptionr   r    r#   r   r   r   r   r   r   r   <module>   s4    


