o
    ?Zc-                     @   s   d 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 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ZG dd de Z!dd Z"edd Z#dd Z$dd Z%G dd dZ&dS )zEvent loop implementation.    N)contextmanager)Empty)sleep)GeneratorType)Thenablepromise)
get_logger)fileno)ERRREADWRITEpoll)cached_property   )Timer)Hubget_event_loopset_event_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   L/var/www/chikooza/env/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   c                   C   s   t S )zGet current event loop object._current_loopr   r   r   r   r   )   s   r   c                 C   s   | a | S )z"Set the current event loop object.r    )loopr   r   r   r   .   s   r   c                
   @   sJ  e Zd ZdZeZeZeZdZdDd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		dEddZdd ZdFd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"e#e$e%e&e'e(e)eeef
d:d;Z*d<d= Z+d>d? Z,e-d@dA Z.e	dBdC Z/dS )Gr   zpEvent loop object.

    Arguments:
        timer (kombu.asynchronous.Timer): Specify custom timer instance.
    Nc                 C   sd   |d ur|nt  | _i | _i | _t | _t | _t | _d| _d | _	t | _
d | _d| _|   d S )NFr   )r   timerreaderswritersseton_tickon_close_ready_running_loopconsolidateconsolidate_callbackpropagate_errors_create_poller)selfr#   r   r   r   __init__I   s   	zHub.__init__c                 C   s   | j s|   | j S r   )_pollerr/   r0   r   r   r   pollerc   s   z
Hub.pollerc                 C   s
   || _ d S r   )r2   )r0   valuer   r   r   r4   i      
c                 C   s   |    |   d S r   )closer/   r3   r   r   r   resetm   s   z	Hub.resetc                 C   s    t  | _| jj| _| jj| _d S r   )r   r2   register_register_fd
unregister_unregister_fdr3   r   r   r   r/   q   s   
zHub._create_pollerc                 C   s.   | j d ur| j   d | _ d | _d | _d S d S r   )r2   r7   r:   r<   r3   r   r   r   _close_pollerv   s   


zHub._close_pollerc                 C   s   |  t d S r   )	call_soonr   r3   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%   r3   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)
r0   	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r0   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	   r4   r9   
ValueErrorra   r   r$   r%   r,   add)r0   r`   callbackflagsr   r,   destr   r   r   rc      s   
zHub.addc                 C   s   t |}| | d S r   )r	   ra   r_   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)r*   run_oncer   r3   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   )rI   r"   StopIterationr+   r3   r   r   r   rh      s
   zHub.run_oncec                 G   s$   t |ts
t||}| j| |S r   )
isinstancer   r   r)   rc   )r0   rd   r   r   r   r   r>      s   

zHub.call_soonc                 G      | j |||S r   )r#   
call_afterr0   rX   rd   r   r   r   r   
call_later      zHub.call_laterc                 G   rl   r   )r#   call_at)r0   whenrd   r   r   r   r   rq      rp   zHub.call_atc                 G   rl   r   )r#   call_repeatedlyrn   r   r   r   rs      rp   zHub.call_repeatedlyc                 G   s   |  ||ttB |S r   )rc   r   r
   r0   fdsrd   r   r   r   r   
add_reader   s   zHub.add_readerc                 G   s   |  ||t|S r   )rc   r   rt   r   r   r   
add_writer   rp   zHub.add_writerc                 C   sh   || j v }| j |}z| | W |r"|\}}| ||t| d S d S |r3|\}}| ||t| w w r   )r%   getra   rc   r   )r0   r`   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$   rx   ra   rc   r   r
   )r0   r`   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   )r4   r;   AttributeErrorKeyErrorrM   r_   r   r   r   r]      s
   zHub._unregisterc                    s    fdd j D   j    fdd jD   j   j      jD ]}|  q*t j}t  _|D ]}|  q<d S )Nc                       g | ]}  |qS r   r]   .0r`   r3   r   r   
<listcomp>       zHub.close.<locals>.<listcomp>c                    r   r   r   r   r3   r   r   r      r   )	r$   clearr%   r,   r=   r(   listr)   r&   )r0   r   rd   todositemr   r3   r   r7      s   





z	Hub.closec                 C   s4   t |}| j|d  | j|d  | j| d S r   )r	   r$   popr%   r,   discardr_   r   r   r   r^   	  s   zHub._discardc                 C   s   t jd||dd d S )Nz Callback %r raised exception: %rr   rE   )rP   rQ   )r0   rd   r[   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
}| j}	 | j}t | _|D ]}|  q,|D ]}|r;|  q4|rC||dnd}|sJ|r@g }z||}W n
 ty\   Y d S w |p`dD ]\}}d}||v rx||d u rx|| qad  }}||@ rz|| \}}W n9 |y   | | Y qaw ||	@ rz|| \}}W n |y   | | Y qaw ||
@ rd}n	tt|| d}|rz||p||\}}W n	 ty   Y nw |d u r| | qat||r'z|| W qa ty }  z| jtjkr || W Y d } ~ qad } ~ w |y   Y qa ty&   ||  w z||  W qa |y7   Y qaw |r?|| n|||d d V  q#)Nr   )rW   r   FTg?)r$   r%   r4   r   r\   rg   r#   rG   r,   r-   r'   r.   r)   r&   rb   rx   appendr|   r   rP   infoW_UNKNOWN_EVENT	TypeErrorrk   rM   rN   EBADFrR   )!r0   	generatorr   rS   rI   r   rj   r   r   r   r
   r$   r%   r   r\   
hub_remove	scheduledr,   r-   r'   rW   todotick_callbackr   poll_timeoutto_consolidateeventsr`   eventgeneral_errorr{   cbargsr[   r   r   r   create_loop  s   






zHub.create_loopc                 C   s   ddl m} || S )Nr   )repr_active)debugr   )r0   r   r   r   r   r   t  s   zHub.repr_activec                 C   s   ddl m} || |pg S )Nr   )repr_events)r   r   )r0   r   r   r   r   r   r   x  s   zHub.repr_eventsc                 C   s
   t | jS r   )iterr#   r3   r   r   r   rJ   |  r6   zHub.schedulerc                 C   s   | j d u r
|  | _ | j S r   )r+   r   r3   r   r   r   r"     s   

zHub.loopr   )r   rD   rD   r   )r   F)0r   r   r   r   r   r   r
   r(   r1   propertyr4   setterr8   r/   r=   r?   rC   r\   ra   rc   rg   ri   rh   r>   ro   rq   rs   rv   rw   r|   r   r]   r7   r^   r   r   r   rS   rI   r   rj   r   r   r   r   r   rJ   r"   r   r   r   r   r   5   s\    







`
r   )'r   rN   
contextlibr   queuer   timer   typesr   r   viner   r   	kombu.logr   kombu.utils.compatr	   kombu.utils.eventior
   r   r   r   kombu.utils.objectsr   r#   r   __all__r   rP   r!   r   BaseExceptionr   r   r   r   r   r   r   r   r   r   <module>   s.    
