o
    —¨Êh¬.  ã                   @  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   úH/var/www/html/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#   Ú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  }}||@ r”z|| \}}W n9 |y“   |  |¡ Y q^w ||	@ r¯z|| \}}W n |y®   |  |¡ Y q^w ||
@ r¶d}n	t t||¡ d}|rÙz| |¡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    


