o
    r¨Êh/  ã                   @   s‚   d dl Z d dlZG dd„ dƒZG dd„ deƒZG dd„ deƒZG dd	„ d	eƒZd
d„ Zdd„ Zeƒ r6eZdS eƒ r=eZdS eZdS )é    Nc                   @   s\   e Z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dS )Ú
BasePollerc                 C   s   || _ |  ¡  d S ©N)ÚoptionsÚ
initialize)Úselfr   © r   úC/var/www/html/env/lib/python3.10/site-packages/supervisor/poller.pyÚ__init__   ó   zBasePoller.__init__c                 C   ó   d S r   r   ©r   r   r   r   r   
   ó   zBasePoller.initializec                 C   ó   t ‚r   ©ÚNotImplementedError©r   Úfdr   r   r   Úregister_readable   r   zBasePoller.register_readablec                 C   r   r   r   r   r   r   r   Úregister_writable   r   zBasePoller.register_writablec                 C   r   r   r   r   r   r   r   Úunregister_readable   r   zBasePoller.unregister_readablec                 C   r   r   r   r   r   r   r   Úunregister_writable   r   zBasePoller.unregister_writablec                 C   r   r   r   )r   Útimeoutr   r   r   Úpoll   r   zBasePoller.pollc                 C   r   r   r   r   r   r   r   Úbefore_daemonize   r   zBasePoller.before_daemonizec                 C   r   r   r   r   r   r   r   Úafter_daemonize   r   zBasePoller.after_daemonizec                 C   r   r   r   r   r   r   r   Úclose"   r   zBasePoller.closeN)Ú__name__Ú
__module__Ú__qualname__r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s    r   c                   @   óL   e Z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S )ÚSelectPollerc                 C   s   t | _|  ¡  d S r   )ÚselectÚ_selectÚ_init_fdsetsr   r   r   r   r   (   r
   zSelectPoller.initializec                 C   ó   | j  |¡ d S r   )Ú	readablesÚaddr   r   r   r   r   ,   ó   zSelectPoller.register_readablec                 C   r$   r   )Ú	writablesr&   r   r   r   r   r   /   r'   zSelectPoller.register_writablec                 C   r$   r   )r%   Údiscardr   r   r   r   r   2   r'   z SelectPoller.unregister_readablec                 C   r$   r   )r(   r)   r   r   r   r   r   5   r'   z SelectPoller.unregister_writablec                 C   ó   |   ¡  d S r   )r#   r   r   r   r   Úunregister_all8   ó   zSelectPoller.unregister_allc              
   C   s°   z| j  | j| jg |¡\}}}W ||fS  tjyW } z7|jd tjkr5| jj	 
d¡ g g fW  Y d }~S |jd tjkrR| jj	 
d¡ |  ¡  g g fW  Y d }~S ‚ d }~ww )Nr   úEINTR encountered in pollzEBADF encountered in poll)r"   r!   r%   r(   ÚerrorÚargsÚerrnoÚEINTRr   ÚloggerÚblatherÚEBADFr+   )r   r   ÚrÚwÚxÚerrr   r   r   r   ;   s$   ý÷€øzSelectPoller.pollc                 C   s   t ƒ | _t ƒ | _d S r   )Úsetr%   r(   r   r   r   r   r#   M   s   zSelectPoller._init_fdsetsN)r   r   r   r   r   r   r   r   r+   r   r#   r   r   r   r   r    &   s    r    c                   @   r   )Ú
PollPollerc                 C   s:   t  ¡ | _t jt jB t jB | _t j| _t	ƒ | _
t	ƒ | _d S r   )r!   r   Ú_pollerÚPOLLINÚPOLLPRIÚPOLLHUPÚREADÚPOLLOUTÚWRITEr9   r%   r(   r   r   r   r   r   S   s
   
zPollPoller.initializec                 C   ó    | j  || j¡ | j |¡ d S r   )r;   Úregisterr?   r%   r&   r   r   r   r   r   Z   ó   zPollPoller.register_readablec                 C   rB   r   )r;   rC   rA   r(   r&   r   r   r   r   r   ^   rD   zPollPoller.register_writablec                 C   ó:   | j  |¡ | j |¡ || jv r| j || j¡ d S d S r   )r%   r)   r;   Ú
unregisterr(   rC   rA   r   r   r   r   r   b   ó
   
ÿzPollPoller.unregister_readablec                 C   rE   r   )r(   r)   r;   rF   r%   rC   r?   r   r   r   r   r   h   rG   zPollPoller.unregister_writablec                 C   s`   |   |¡}g g }}|D ]\}}|  ||¡rq|| j@ r!| |¡ || j@ r+| |¡ q||fS r   )Ú	_poll_fdsÚ_ignore_invalidr?   ÚappendrA   )r   r   Úfdsr%   r(   r   Ú	eventmaskr   r   r   r   n   s   





€zPollPoller.pollc              
   C   s^   z	| j  |d ¡W S  tjy. } z|jd tjkr)| jj 	d¡ g W  Y d }~S ‚ d }~ww )Néè  r   r-   )
r;   r   r!   r.   r/   r0   r1   r   r2   r3   )r   r   r8   r   r   r   rH   z   s   €üzPollPoller._poll_fdsc                 C   s6   |t j@ r| j |¡ | j |¡ | j |¡ dS dS )NTF)r!   ÚPOLLNVALr;   rF   r%   r)   r(   )r   r   rL   r   r   r   rI   ƒ   s   
zPollPoller._ignore_invalidN)r   r   r   r   r   r   r   r   r   rH   rI   r   r   r   r   r:   Q   s    	r:   c                   @   sd   e Zd ZdZ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dS )ÚKQueuePollerz.
    Wrapper for select.kqueue()/kevent()
    rM   c                 C   s   t  ¡ | _tƒ | _tƒ | _d S r   )r!   ÚkqueueÚ_kqueuer9   r%   r(   r   r   r   r   r   –   s   
zKQueuePoller.initializec                 C   ó0   | j  |¡ tj|tjtjd�}|  ||¡ d S ©N)ÚfilterÚflags)r%   r&   r!   ÚkeventÚKQ_FILTER_READÚ	KQ_EV_ADDÚ_kqueue_control©r   r   rV   r   r   r   r   ›   ó
   
ÿzKQueuePoller.register_readablec                 C   rR   rS   )r(   r&   r!   rV   ÚKQ_FILTER_WRITErX   rY   rZ   r   r   r   r   ¡   r[   zKQueuePoller.register_writablec                 C   ó0   t j|t jt jd�}| j |¡ |  ||¡ d S rS   )r!   rV   rW   ÚKQ_EV_DELETEr%   r)   rY   rZ   r   r   r   r   §   ó
   
ÿz KQueuePoller.unregister_readablec                 C   r]   rS   )r!   rV   r\   r^   r(   r)   rY   rZ   r   r   r   r   ­   r_   z KQueuePoller.unregister_writablec              
   C   s`   z| j  |gd¡ W d S  ty/ } z|jtjkr#| jj d| ¡ n‚ W Y d }~d S d }~ww )Nr   z7EBADF encountered in kqueue. Invalid file descriptor %s)rQ   ÚcontrolÚOSErrorr0   r4   r   r2   r3   )r   r   rV   r.   r   r   r   rY   ³   s   
ÿý€þzKQueuePoller._kqueue_controlc              
   C   s¬   g g }}z| j  d | j|¡}W n$ ty4 } z|jtjkr/| jj d¡ ||fW  Y d }~S ‚ d }~ww |D ]}|j	t
jkrE| |j¡ |j	t
jkrQ| |j¡ q7||fS )Nr-   )rQ   r`   Ú
max_eventsra   r0   r1   r   r2   r3   rT   r!   rW   rJ   Úidentr\   )r   r   r%   r(   Úkeventsr.   rV   r   r   r   r   ½   s"   
€ü€zKQueuePoller.pollc                 C   r*   r   )r   r   r   r   r   r   Ð   r,   zKQueuePoller.before_daemonizec                 C   s:   t  ¡ | _| jD ]}|  |¡ q| jD ]}|  |¡ qd S r   )r!   rP   rQ   r%   r   r(   r   r   r   r   r   r   Ó   s   


ÿzKQueuePoller.after_daemonizec                 C   s   | j  ¡  d | _ d S r   )rQ   r   r   r   r   r   r   Ú   s   

zKQueuePoller.closeN)r   r   r   Ú__doc__rb   r   r   r   r   r   rY   r   r   r   r   r   r   r   r   rO   �   s    
rO   c                   C   ó
   t tdƒS )Nr   ©Úhasattrr!   r   r   r   r   Úimplements_pollÞ   ó   
ri   c                   C   rf   )NrP   rg   r   r   r   r   Úimplements_kqueueá   rj   rk   )	r!   r0   r   r    r:   rO   ri   rk   ÚPollerr   r   r   r   Ú<module>   s    "+>O