U
    .e'                     @  s`  d Z ddlm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/d0Z+eed1dZ,eed2dZ-eed3d+Z.eed4d-Z/eed5dZ0d Z1Z2d Z3Z4d6 Z5Z6zej7ej8hZ9W n e:k
r   ej7hZ9Y nX G d7d8 d8Z;G d9d: d:Z<G d;d< d<Z=G d=d> d>Z>d?d@ Z?dAd	 Z@dS )BzSelector Utilities.    )annotationsN)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   r1   self r5   7/tmp/pip-unpacked-wheel-48hrr5dg/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)r1   register	Exceptiongetattrr9   EEXIST)r4   fdeventsexcr5   r5   r6   r:   @   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 r8   )
r1   
unregisterOSError
ValueErrorKeyError	TypeErrorr<   r9   ENOENTEPERMr4   r>   r@   r5   r5   r6   rA   H   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   r9   )r1   r   r;   r<   r9   EINTR)r4   timeoutr@   r5   r5   r6   r   Q   s
    z_epoll.pollc                 C  s   | j   d S r2   )r1   closer3   r5   r5   r6   rK   X   s    z_epoll.closeN)__name__
__module____qualname__r7   r:   rA   r   rK   r5   r5   r5   r6   r1   ;   s
   	r1   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 r2   )r	   rO   _activeon_file_changecontrol	_kcontrolr3   r5   r5   r6   r7   `   s    z_kqueue.__init__c                 C  s   |  ||t || j|< |S r2   )_controlr   rP   r4   r>   r?   r5   r5   r6   r:   f   s    
z_kqueue.registerc                 C  s>   | j |d }|r:z| ||t W n tk
r8   Y nX d S r2   )rP   poprT   r   rB   rU   r5   r5   r6   rA   k   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_fflagsrS   r4   r>   Zevr5   r5   r6   
watch_files   s    
z_kqueue.watch_filec                 C  s$   t |tt| jd}| |gd d S rW   )r
   r   r   r[   rS   r\   r5   r5   r6   unwatch_filez   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)rX   rY   r   )WRITEappendr
   r   READr   rS   rC   )r4   r>   r?   rY   keventsrR   er5   r5   r6   rT      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  r9   r   )rS   r;   r<   r9   rI   identrX   r   getra   r   rY   r   ERRr_   r   r   rZ   r!   rA   r`   rQ   listitems)r4   rJ   rb   r@   r?   Zfile_changeskr>   r5   r5   r6   r      s0    









z_kqueue.pollc                 C  s   | j   d S r2   )rO   rK   r3   r5   r5   r6   rK      s    z_kqueue.closeN)rL   rM   rN   r"   r#   r$   r!   r[   r7   r:   rA   r]   r^   rT   r   rK   r5   r5   r5   r6   rO   \   s   rO   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 r2   )xpoll_pollerr   _quick_pollr:   _quick_registerrA   _quick_unregisterr3   r5   r5   r6   r7      s    

z_poll.__init__c                 C  sL   t |}d}|t@ r|tO }|t@ r,|tO }|t@ r<|tO }| || |S )Nr   )r   rf   r-   r_   r,   ra   r+   rn   )r4   r>   r?   Z
poll_flagsr5   r5   r6   r:      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 r8   )r   rB   r<   SELECT_BAD_FDro   rH   r5   r5   r6   rA      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     @@r9   )rm   
_selecterrrB   r<   r9   rI   r/   r.   AssertionError
isinstancer   r`   )r4   rJ   roundr+   r,   r-   ra   r_   rf   r   Z
event_listr@   readyr>   eventr?   r5   r5   r6   r      s*     

z
_poll.pollc                 C  s
   d | _ d S r2   )rl   r3   r5   r5   r6   rK      s    z_poll.closeN)rL   rM   rN   r7   r:   rA   mathceilr+   r,   r-   ra   r_   rf   r   r   rK   r5   r5   r5   r6   rj      s        
rj   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 r2   )setZ_all_rfd_wfd_efdr3   r5   r5   r6   r7      s
    z_select.__init__c                 C  sH   t |}|t@ r| j| |t@ r0| j| |t@ rD| j| |S r2   )r   rf   r}   addr_   r|   ra   r{   rU   r5   r5   r6   r:      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   r9   )	r{   r|   r}   _selectfrq   rB   r<   rp   rA   rH   r5   r5   r6   _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 r8   )r   rB   r<   rp   r{   discardr|   r}   rH   r5   r5   r6   rA   
  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 )Nr9   r   )r   r{   r|   r}   rq   rB   r<   r9   rI   rp   r   rs   r   r   re   ra   r_   rf   rg   rh   )r4   rJ   readwriteerrorr@   r?   r>   r5   r5   r6   r     s6       


z_select.pollc                 C  s"   | j   | j  | j  d S r2   )r{   clearr|   r}   r3   r5   r5   r6   rK   2  s    

z_select.closeN)	rL   rM   rN   r7   r:   r   rA   r   rK   r5   r5   r5   r6   ry      s   
ry   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   ry   r   r1   r	   sysplatformrO   rk   rj   r5   r5   r5   r6   _get_poller8  s    
r   c                  O  s   t  | |S )zCreate new poller instance.)r   )argskwargsr5   r5   r6   r   G  s    )A__doc__
__future__r   r9   rw   selectZ
__select__r   Znumbersr    r   compatr   __all__r   r   rq   r<   rk   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/   ra   Z	POLL_READr_   Z
POLL_WRITErf   ZPOLL_ERREBADFZWSAENOTSOCKrp   AttributeErrorr1   rO   rj   ry   r   r   r5   r5   r5   r6   <module>   sl   !W>G