U
    d'                     @   sT  d Z ddlZddl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ZejZejZeeddZeed	dZeed
dZeeddZeeddZeeddZeeddZeeddZeeddZeeddZeeddZeeddZeeddZeeddZeedd Zeed!d"Z eed#d$Z!eed%dZ"eed&dZ#eed'dZ$eed(dZ%eed)d*Z&eed+d,Z'eed-dZ(eed.d/Z)eed0dZ*eed1dZ+eed2d*Z,eed3d,Z-eed4dZ.d Z/Z0d Z1Z2d5 Z3Z4zej5ej6hZ7W n e8k
r   ej5hZ7Y nX G d6d7 d7Z9G d8d9 d9Z:G d:d; d;Z;G d<d= d=Z<d>d? Z=d@d Z>dS )AzSelector Utilities.    N)Integral   )fileno)detect_environment)pollr   epollkqueuekevent	KQ_EV_ADDKQ_EV_DELETE   KQ_EV_ENABLE   KQ_EV_CLEAR    KQ_EV_ERRORi @  	KQ_EV_EOFi   KQ_FILTER_READKQ_FILTER_WRITEKQ_FILTER_AIOKQ_FILTER_VNODEKQ_FILTER_PROCKQ_FILTER_SIGNALiKQ_FILTER_TIMERiKQ_NOTE_LOWATKQ_NOTE_DELETEKQ_NOTE_WRITEKQ_NOTE_EXTENDKQ_NOTE_ATTRIB   KQ_NOTE_LINK   KQ_NOTE_RENAMEKQ_NOTE_REVOKE@   POLLINPOLLOUTPOLLERRPOLLHUPPOLLNVAL   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )_epollc                 C   s   t  | _d S N)r   r0   self r4   7/tmp/pip-unpacked-wheel-hqfrjlvz/kombu/utils/eventio.py__init__;   s    z_epoll.__init__c              
   C   sN   z| j || W n6 tk
rH } zt|dd tjkr8 W 5 d }~X Y nX |S Nerrno)r0   register	Exceptiongetattrr8   EEXIST)r3   fdeventsexcr4   r4   r5   r9   >   s    z_epoll.registerc                 C   sl   z| j | W nV ttttfk
r,   Y n< tk
rf } zt|dd tjtj	fkrV W 5 d }~X Y nX d S r7   )
r0   
unregisterOSError
ValueErrorKeyError	TypeErrorr;   r8   ENOENTEPERMr3   r=   r?   r4   r4   r5   r@   F   s    z_epoll.unregisterc              
   C   sV   z| j |d k	r|ndW S  tk
rP } zt|dd tjkr@ W 5 d }~X Y nX d S )Nr   r8   )r0   r   r:   r;   r8   EINTR)r3   timeoutr?   r4   r4   r5   r   O   s
    z_epoll.pollc                 C   s   | j   d S r1   )r0   closer2   r4   r4   r5   rJ   V   s    z_epoll.closeN)__name__
__module____qualname__r6   r9   r@   r   rJ   r4   r4   r4   r5   r0   9   s
   	r0   c                   @   s\   e Zd ZeeB eB eB 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 )_kqueuec                 C   s"   t  | _i | _d | _| jj| _d S r1   )r   rN   _activeon_file_changecontrol	_kcontrolr2   r4   r4   r5   r6   ^   s    z_kqueue.__init__c                 C   s   |  ||t || j|< |S r1   )_controlr
   rO   r3   r=   r>   r4   r4   r5   r9   d   s    
z_kqueue.registerc                 C   s>   | j |d }|r:z| ||t W n tk
r8   Y nX d S r1   )rO   poprS   r   rA   rT   r4   r4   r5   r@   i   s    z_kqueue.unregisterc                 C   s,   t |tttB tB | jd}| |gd d S N)filterflagsfflagsr   )r	   r   r
   r   r   w_fflagsrR   r3   r=   Zevr4   r4   r5   
watch_fileq   s    
z_kqueue.watch_filec                 C   s$   t |tt| jd}| |gd d S rV   )r	   r   r   rZ   rR   r[   r4   r4   r5   unwatch_filex   s    z_kqueue.unwatch_filec              	   C   s   |sd S g }|t @ r(|t|t|d |r4|t@ rH|t|t|d | j}|D ]*}z||gd W qR tk
rz   Y qRX qRd S )N)rW   rX   r   )WRITEappendr	   r   READr   rR   rB   )r3   r=   r>   rX   keventsrQ   er4   r4   r5   rS      s$    z_kqueue._controlc              
   C   s(  z|  d d|}W n@ tk
rR } z"t|dd tjkr@W Y 
d S  W 5 d }~X Y nX i g  }}|D ]}|j}|jtkr||dt	B ||< qb|jt
kr|jt@ rt||< n||dtB ||< qb|jtkr||dtB ||< qb|jtkrb|jt@ r | | || qb|r| | t| S )Ni  r8   r   )rR   r:   r;   r8   rH   identrW   r   getr`   r   rX   r   ERRr^   r   r   rY   r    r@   r_   rP   listitems)r3   rI   ra   r?   r>   Zfile_changeskr=   r4   r4   r5   r      s0    









z_kqueue.pollc                 C   s   | j   d S r1   )rN   rJ   r2   r4   r4   r5   rJ      s    z_kqueue.closeN)rK   rL   rM   r!   r"   r#   r    rZ   r6   r9   r@   r\   r]   rS   r   rJ   r4   r4   r4   r5   rN   Z   s   rN   c                   @   sH   e Zd Zdd Zdd Zdd Zejee	e
eeeefddZd	d
 ZdS )_pollc                 C   s*   t  | _| jj| _| jj| _| jj| _d S r1   )xpoll_pollerr   _quick_pollr9   _quick_registerr@   _quick_unregisterr2   r4   r4   r5   r6      s    

z_poll.__init__c                 C   sL   t |}d}|t@ r|tO }|t@ r,|tO }|t@ r<|tO }| || |S )Nr   )r   re   r,   r^   r+   r`   r*   rm   )r3   r=   r>   Z
poll_flagsr4   r4   r5   r9      s    z_poll.registerc              
   C   s\   zt |}W n@ tk
rL } z"t|dd tkr:| W Y S  W 5 d }~X Y nX | | |S r7   )r   rA   r;   SELECT_BAD_FDrn   rG   r4   r4   r5   r@      s    
z_poll.unregisterc
              
   C   s   |r|dk rdn||pdd }z|  |}
W nD ttfk
rr } z"t|dd tjkr`W Y 
d S  W 5 d }~X Y nX g }|
D ]t\}}d}||@ r||O }||@ r||O }||@ s|t@ s|t@ r||O }|stt	||	s|
 }|||f q||S )Nr   g     @@r8   )rl   
_selecterrrA   r;   r8   rH   r.   r-   AssertionError
isinstancer   r_   )r3   rI   roundr*   r+   r,   r`   r^   re   r   Z
event_listr?   readyr=   eventr>   r4   r4   r5   r      s*     

z
_poll.pollc                 C   s
   d | _ d S r1   )rk   r2   r4   r4   r5   rJ      s    z_poll.closeN)rK   rL   rM   r6   r9   r@   mathceilr*   r+   r,   r`   r^   re   r   r   rJ   r4   r4   r4   r5   ri      s        
ri   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )_selectc                 C   s&   t  t  t  f | _\| _| _| _d S r1   )setZ_all_rfd_wfd_efdr2   r4   r4   r5   r6      s
    z_select.__init__c                 C   sH   t |}|t@ r| j| |t@ r0| j| |t@ rD| j| |S r1   )r   re   r|   addr^   r{   r`   rz   rT   r4   r4   r5   r9      s    z_select.registerc                 C   sr   | j | jB | jB D ]Z}zt|gg g d W q ttfk
rj } zt|dd tkrZ| | W 5 d }~X Y qX qd S )Nr   r8   )	rz   r{   r|   _selectfrp   rA   r;   ro   r@   rG   r4   r4   r5   _remove_bad   s    z_select._remove_badc              
   C   st   zt |}W n> tk
rJ } z t|dd tkr8W Y 
d S  W 5 d }~X Y nX | j| | j| | j| d S r7   )r   rA   r;   ro   rz   discardr{   r|   rG   r4   r4   r5   r@     s    
z_select.unregisterc              
   C   s&  zt | j| j| j|\}}}W nd ttfk
r } zBt|dd tjkrPW Y *d S t|dd t	krp| 
  W Y S  W 5 d }~X Y nX i }|D ]*}t|ts| }||dtB ||< q|D ]*}t|ts| }||dtB ||< q|D ],}t|ts| }||dtB ||< qt| S )Nr8   r   )r~   rz   r{   r|   rp   rA   r;   r8   rH   ro   r   rr   r   r   rd   r`   r^   re   rf   rg   )r3   rI   readwriteerrorr?   r>   r=   r4   r4   r5   r     s6       


z_select.pollc                 C   s"   | j   | j  | j  d S r1   )rz   clearr{   r|   r2   r4   r4   r5   rJ   0  s    

z_select.closeN)	rK   rL   rM   r6   r9   r   r@   r   rJ   r4   r4   r4   r5   rx      s   
rx   c                   C   s8   t  dkrtS trtS tr(dtjkr(tS tr0t	S tS d S )NdefaultZnetbsd)
r   rx   r   r0   r   sysplatformrN   rj   ri   r4   r4   r4   r5   _get_poller6  s    
r   c                  O   s   t  | |S )zCreate new poller instance.)r   )argskwargsr4   r4   r5   r   E  s    )?__doc__r8   rv   selectZ
__select__r   Znumbersr    r   compatr   __all__r~   r   rp   r;   rj   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r%   r'   r(   r*   r+   r,   r-   r.   r`   Z	POLL_READr^   Z
POLL_WRITEre   ZPOLL_ERREBADFZWSAENOTSOCKro   AttributeErrorr0   rN   ri   rx   r   r   r4   r4   r4   r5   <module>   sj   !W>G