o
    wvXj/.  ã                   @   s  d Z ddlmZ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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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*eG dd„ de+ƒƒZ,dS )zEvent loop implementation.é    )Úabsolute_importÚunicode_literalsN)Úcontextmanager)Úsleep)ÚGeneratorType)ÚEmptyÚpython_2_unicode_compatibleÚrange)Ú
get_logger)Úfileno)ÚERRÚREADÚWRITEÚpoll)Úcached_property)ÚThenableÚpromiseé   )Ú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   úS/var/www/html/myproject/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#   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__K   s   	zHub.__init__c                 C   s   | j s|  ¡  | j S r   )Ú_pollerr3   ©r4   r   r   r   Úpollere   s   z
Hub.pollerc                 C   s
   || _ d S r   )r6   )r4   Úvaluer   r   r   r8   k   ó   
c                 C   s   |   ¡  |  ¡  d S r   )Úcloser3   r7   r   r   r   Úreseto   s   z	Hub.resetc                 C   s    t ƒ | _| jj| _| jj| _d S r   )r   r6   ÚregisterÚ_register_fdÚ
unregisterÚ_unregister_fdr7   r   r   r   r3   s   s   
zHub._create_pollerc                 C   s.   | j d ur| j  ¡  d | _ d | _d | _d S d S r   )r6   r;   r>   r@   r7   r   r   r   Ú_close_pollerx   s   


üzHub._close_pollerc                 C   s   |   t¡ d S r   )Ú	call_soonr    r7   r   r   r   Ústop   s   zHub.stopc                 C   s   d  t| ƒt| jƒt| jƒ¡S )Nz<Hub@{0:#x}: R:{1} W:{2}>)ÚformatÚidÚlenr(   r)   r7   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'   Ú_queuer	   ÚnextÚ	schedulerÚMemoryErrorÚAssertionErrorÚOSErrorÚerrnoÚENOMEMÚloggerÚerrorÚ	ExceptionÚmin)
r4   Ú	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©r4   Ú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   r8   r=   Ú
ValueErrorrd   r   r(   r)   r0   Úadd)r4   rc   ÚcallbackÚflagsr!   r0   Údestr   r   r   rf   ¤   s   
þzHub.addc                 C   s   t |ƒ}|  |¡ d S r   )r   rd   rb   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   r7   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   )rL   r&   ÚStopIterationr/   r7   r   r   r   rk   Â   s
   ÿzHub.run_oncec                 G   s$   t |tƒs
t||ƒ}| j |¡ |S r   )Ú
isinstancer   r   r-   rf   )r4   rg   r!   r   r   r   rB   È   s   

zHub.call_soonc                 G   ó   | j  |||¡S r   )r'   Ú
call_after©r4   r[   rg   r!   r   r   r   Ú
call_laterÎ   ó   zHub.call_laterc                 G   ro   r   )r'   Úcall_at)r4   Úwhenrg   r!   r   r   r   rt   Ñ   rs   zHub.call_atc                 G   ro   r   )r'   Úcall_repeatedlyrq   r   r   r   rv   Ô   rs   zHub.call_repeatedlyc                 G   s   |   ||ttB |¡S r   )rf   r   r   ©r4   Úfdsrg   r!   r   r   r   Ú
add_reader×   s   zHub.add_readerc                 G   s   |   ||t|¡S r   )rf   r   rw   r   r   r   Ú
add_writerÚ   rs   zHub.add_writerc                 C   sh   || j v }| j  |¡}z|  |¡ W |r"|\}}|  ||t|¡ d S d S |r3|\}}|  ||t|¡ w w r   )r)   Úgetrd   rf   r   )r4   rc   Ú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{   rd   rf   r   r   )r4   rc   Ú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   )r8   r?   ÚAttributeErrorÚKeyErrorrP   rb   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`   ©Ú.0rc   r7   r   r   Ú
<listcomp>ø   ó    zHub.close.<locals>.<listcomp>c                    r…   r   r†   r‡   r7   r   r   r‰   ú   rŠ   )	r(   Úclearr)   r0   rA   r,   Úlistr-   r*   )r4   r!   rg   ÚtodosÚitemr   r7   r   r;   ÷   s   





ÿz	Hub.closec                 C   s4   t |ƒ}| j |d ¡ | j |d ¡ | j |¡ d S r   )r   r(   Úpopr)   r0   Údiscardrb   r   r   r   ra     s   zHub._discardc                 C   s   t jd||dd� d S )Nz Callback %r raised exception: %rr   rI   )rS   rT   )r4   rg   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  }}||@ r—z|| \}}W n9 |y–   |  |¡ Y qaw ||	@ r²z|| \}}W n |y±   |  |¡ Y qaw ||
@ r¹d}n	t t||¡ d}|rÜz| |¡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   )rZ   r   FTgš™™™™™¹?)r(   r)   r8   r   r_   rj   r'   rK   r0   r1   r+   r2   r-   r*   re   r{   Úappendr   r‚   rS   ÚinfoÚW_UNKNOWN_EVENTÚ	TypeErrorrn   rP   rQ   ÚEBADFrU   )!r4   Ú	generatorr   rV   rL   r   rm   r„   r   r   r   r(   r)   r   r_   Ú
hub_removeÚ	scheduledr0   r1   r+   rZ   ÚtodoÚtick_callbackrŽ   Úpoll_timeoutÚto_consolidateÚeventsrc   Ú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£   )r4   r£   r   r   r   r£   v  s   zHub.repr_activec                 C   s   ddl m} || |pg ƒS )Nr   )Úrepr_events)r¤   r¥   )r4   rž   r¥   r   r   r   r¥   z  s   zHub.repr_eventsc                 C   s
   t | jƒS r   )Úiterr'   r7   r   r   r   rM   ~  r:   zHub.schedulerc                 C   s   | j d u r
|  ¡ | _ | j S r   )r/   r¢   r7   r   r   r   r&   ‚  s   

zHub.loopr   )r   rH   rH   r   )r   F)0r   r   r   r   r   r   r   r,   r5   Úpropertyr8   Úsetterr<   r3   rA   rC   rG   r_   rd   rf   rj   rl   rk   rB   rr   rt   rv   ry   rz   r   r‚   r`   r;   ra   r‘   r—   r   rV   rL   r   rm   r„   r¢   r£   r¥   r   rM   r&   r   r   r   r   r   6   s\    



ÿ



ý`
r   )-r   Ú
__future__r   r   rQ   Ú
contextlibr   Útimer   Útypesr   r—   Ú
kombu.fiver   r   r	   Ú	kombu.logr
   Úkombu.utils.compatr   Úkombu.utils.eventior   r   r   r   Úkombu.utils.objectsr   Úviner   r   r'   r   Ú__all__r   rS   r%   r”   ÚBaseExceptionr   r    r#   r   r   Úobjectr   r   r   r   r   Ú<module>   s2   
