o
    f/                     @   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   D/var/www/html/venv/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