B
    18\H                 @   s  d dl mZmZ d dlmZ d dlmZ d dlZd dlZd dl	Z	dZ
dZdd Zed	d
dddgZde_e	jdkrdej_dej_dej_dej_G dd deZG dd dedZG dd deZG dd deZG dd deZeedrG d d! d!eZeed"rG d#d$ d$eZeed%r6G d&d' d'eZeed(rRG d)d* d*eZd*e krdeZn:d$e krveZn(d'e kreZnd!e kreZneZdS )+    )ABCMetaabstractmethod)
namedtuple)MappingN      c          
   C   sf   t | tr| }n<yt|  }W n* tttfk
rJ   td| d Y nX |dk rbtd||S )NzInvalid file object: {!r}r   zInvalid file descriptor: {})
isinstanceintfilenoAttributeError	TypeError
ValueErrorformat)fileobjfd r   M/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/selectors.py_fileobj_to_fd   s    
r   SelectorKeyr   r   eventsdatazSelectorKey(fileobj, fd, events, data)

    Object used to associate a file object to its backing
    file descriptor, selected event mask, and attached data.
)      zFile object registered.zUnderlying file descriptor.z3Events that must be waited for on this file object.zzOptional opaque data associated to this file object.
    For example, this could be used to store a per-client session ID.c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_SelectorMappingc             C   s
   || _ d S )N)	_selector)selfselectorr   r   r   __init__?   s    z_SelectorMapping.__init__c             C   s   t | jjS )N)lenr   
_fd_to_key)r   r   r   r   __len__B   s    z_SelectorMapping.__len__c             C   sB   y| j |}| j j| S  tk
r<   td|d Y nX d S )Nz{!r} is not registered)r   _fileobj_lookupr   KeyErrorr   )r   r   r   r   r   r   __getitem__E   s
    z_SelectorMapping.__getitem__c             C   s   t | jjS )N)iterr   r   )r   r   r   r   __iter__L   s    z_SelectorMapping.__iter__N)__name__
__module____qualname__r   r    r#   r%   r   r   r   r   r   <   s   r   c               @   sj   e Zd ZedddZedd ZdddZeddd	Zd
d Zdd Z	edd Z
dd Zdd ZdS )BaseSelectorNc             C   s   t d S )N)NotImplementedError)r   r   r   r   r   r   r   register_   s    zBaseSelector.registerc             C   s   t d S )N)r*   )r   r   r   r   r   
unregisterv   s    zBaseSelector.unregisterc             C   s   |  | | |||S )N)r,   r+   )r   r   r   r   r   r   r   modify   s    
zBaseSelector.modifyc             C   s   t d S )N)r*   )r   timeoutr   r   r   select   s    zBaseSelector.selectc             C   s   d S )Nr   )r   r   r   r   close   s    zBaseSelector.closec             C   sJ   |   }|d krtdy|| S  tk
rD   td|d Y nX d S )NzSelector is closedz{!r} is not registered)get_mapRuntimeErrorr"   r   )r   r   mappingr   r   r   get_key   s    zBaseSelector.get_keyc             C   s   t d S )N)r*   )r   r   r   r   r1      s    zBaseSelector.get_mapc             C   s   | S )Nr   )r   r   r   r   	__enter__   s    zBaseSelector.__enter__c             G   s   |    d S )N)r0   )r   argsr   r   r   __exit__   s    zBaseSelector.__exit__)N)N)N)r&   r'   r(   r   r+   r,   r-   r/   r0   r4   r1   r5   r7   r   r   r   r   r)   P   s   
r)   )	metaclassc               @   sP   e Zd Zdd Zdd ZdddZdd	 Zdd
dZdd Zdd Z	dd Z
dS )_BaseSelectorImplc             C   s   i | _ t| | _d S )N)r   r   _map)r   r   r   r   r      s    z_BaseSelectorImpl.__init__c             C   sH   yt |S  tk
rB   x"| j D ]}|j|kr$|jS q$W  Y nX d S )N)r   r   r   valuesr   r   )r   r   keyr   r   r   r!      s    	

z!_BaseSelectorImpl._fileobj_lookupNc             C   sb   |r|t tB  @ r td|t|| |||}|j| jkrRtd||j|| j|j< |S )NzInvalid events: {!r}z"{!r} (FD {}) is already registered)	
EVENT_READEVENT_WRITEr   r   r   r!   r   r   r"   )r   r   r   r   r<   r   r   r   r+      s    z_BaseSelectorImpl.registerc             C   s@   y| j | |}W n$ tk
r:   td|d Y nX |S )Nz{!r} is not registered)r   popr!   r"   r   )r   r   r<   r   r   r   r,      s
    z_BaseSelectorImpl.unregisterc             C   s   y| j | | }W n$ tk
r8   td|d Y nX ||jkr^| | | |||}n"||jkr|j|d}|| j |j	< |S )Nz{!r} is not registered)r   )
r   r!   r"   r   r   r,   r+   r   _replacer   )r   r   r   r   r<   r   r   r   r-      s    


z_BaseSelectorImpl.modifyc             C   s   | j   d | _d S )N)r   clearr:   )r   r   r   r   r0     s    
z_BaseSelectorImpl.closec             C   s   | j S )N)r:   )r   r   r   r   r1     s    z_BaseSelectorImpl.get_mapc             C   s$   y
| j | S  tk
r   d S X d S )N)r   r"   )r   r   r   r   r   _key_from_fd  s    	
z_BaseSelectorImpl._key_from_fd)N)N)r&   r'   r(   r   r!   r+   r,   r-   r0   r1   rB   r   r   r   r   r9      s   

r9   c                   s\   e Zd Z fddZd fdd	Z fddZejdkrDdd	d
Zne	j	ZdddZ	  Z
S )SelectSelectorc                s   t    t | _t | _d S )N)superr   set_readers_writers)r   )	__class__r   r   r   %  s    
zSelectSelector.__init__Nc                s@   t  |||}|t@ r&| j|j |t@ r<| j|j |S )N)rD   r+   r=   rF   addr   r>   rG   )r   r   r   r   r<   )rH   r   r   r+   *  s    zSelectSelector.registerc                s,   t  |}| j|j | j|j |S )N)rD   r,   rF   discardr   rG   )r   r   r<   )rH   r   r   r,   2  s    zSelectSelector.unregisterwin32c             C   s$   t  ||||\}}}||| g fS )N)r/   )r   rw_r.   xr   r   r   _select9  s    zSelectSelector._selectc       	      C   s   |d krd nt |d}g }y| | j| jg |\}}}W n tk
rL   |S X t|}t|}xV||B D ]J}d}||kr|tO }||kr|tO }| |}|rh|	|||j
@ f qhW |S )Nr   )maxrP   rF   rG   InterruptedErrorrE   r=   r>   rB   appendr   )	r   r.   readyrL   rM   rN   r   r   r<   r   r   r   r/   ?  s$    
zSelectSelector.select)N)N)N)r&   r'   r(   r   r+   r,   sysplatformrP   r/   __classcell__r   r   )rH   r   rC   "  s   
rC   c                   sZ   e Zd ZdZdZdZ fddZd fdd	Z fddZd fdd		Z	dd
dZ
  ZS )_PollLikeSelectorNc                s   t    |  | _d S )N)rD   r   _selector_clsr   )r   )rH   r   r   r   [  s    
z_PollLikeSelector.__init__c                sl   t  |||}d}|t@ r&|| jO }|t@ r8|| jO }y| j|j| W n   t  |  Y nX |S )Nr   )	rD   r+   r=   _EVENT_READr>   _EVENT_WRITEr   r   r,   )r   r   r   r   r<   Zpoller_events)rH   r   r   r+   _  s    

z_PollLikeSelector.registerc                s8   t  |}y| j|j W n tk
r2   Y nX |S )N)rD   r,   r   r   OSError)r   r   r<   )rH   r   r   r,   m  s    z_PollLikeSelector.unregisterc                s   y| j | | }W n$ tk
r8   t|dd Y nX d}||jkrd}|t@ r^|| jO }|t@ rp|| jO }y| j	|j
| W n   t |  Y nX d}||jkrd}|r|j||d}|| j |j
< |S )Nz is not registeredFr   T)r   r   )r   r!   r"   r   r=   rZ   r>   r[   r   r-   r   rD   r,   r   r@   )r   r   r   r   r<   ZchangedZselector_events)rH   r   r   r-   w  s.    



z_PollLikeSelector.modifyc             C   s   |d krd }n|dkrd}nt |d }g }y| j|}W n tk
rR   |S X x^|D ]V\}}d}|| j @ rz|tO }|| j @ r|tO }| 	|}|rZ|
|||j@ f qZW |S )Nr   g     @@)mathceilr   pollrR   rZ   r>   r[   r=   rB   rS   r   )r   r.   rT   fd_event_listr   eventr   r<   r   r   r   r/     s(    
z_PollLikeSelector.select)N)N)N)r&   r'   r(   rY   rZ   r[   r   r+   r,   r-   r/   rW   r   r   )rH   r   rX   U  s   
rX   r_   c               @   s   e Zd ZejZejZejZ	dS )PollSelectorN)
r&   r'   r(   r/   r_   rY   POLLINrZ   POLLOUTr[   r   r   r   r   rb     s   rb   epollc                   s@   e Zd ZejZejZejZ	dd Z
dddZ fddZ  ZS )	EpollSelectorc             C   s
   | j  S )N)r   r
   )r   r   r   r   r
     s    zEpollSelector.filenoNc       	      C   s   |d krd}n |dkrd}nt |d d }tt| jd}g }y| j||}W n tk
rh   |S X x^|D ]V\}}d}|tj	 @ r|t
O }|tj @ r|tO }| |}|rp||||j@ f qpW |S )Nr   g     @@gMbP?r   )r]   r^   rQ   r   r   r   r_   rR   r/   EPOLLINr>   EPOLLOUTr=   rB   rS   r   )	r   r.   max_evrT   r`   r   ra   r   r<   r   r   r   r/     s*    
zEpollSelector.selectc                s   | j   t   d S )N)r   r0   rD   )r   )rH   r   r   r0     s    
zEpollSelector.close)N)r&   r'   r(   r/   re   rY   rh   rZ   ri   r[   r
   r0   rW   r   r   )rH   r   rf     s   
 rf   devpollc                   s6   e Zd ZejZejZejZ	dd Z
 fddZ  ZS )DevpollSelectorc             C   s
   | j  S )N)r   r
   )r   r   r   r   r
     s    zDevpollSelector.filenoc                s   | j   t   d S )N)r   r0   rD   )r   )rH   r   r   r0     s    
zDevpollSelector.close)r&   r'   r(   r/   rk   rY   rc   rZ   rd   r[   r
   r0   rW   r   r   )rH   r   rl     s
   rl   kqueuec                   sT   e Zd Z fddZdd Zd fdd	Z fdd	Zdd
dZ fddZ  Z	S )KqueueSelectorc                s   t    t | _d S )N)rD   r   r/   rm   r   )r   )rH   r   r   r     s    
zKqueueSelector.__init__c             C   s
   | j  S )N)r   r
   )r   r   r   r   r
     s    zKqueueSelector.filenoNc                s   t  |||}y`|t@ r@t|jtjtj}| j	|gdd |t
@ rnt|jtjtj}| j	|gdd W n   t  |  Y nX |S )Nr   )rD   r+   r=   r/   keventr   KQ_FILTER_READZ	KQ_EV_ADDr   controlr>   KQ_FILTER_WRITEr,   )r   r   r   r   r<   kev)rH   r   r   r+     s    zKqueueSelector.registerc                s   t  |}|jt@ rVt|jtjtj}y| j	
|gdd W n tk
rT   Y nX |jt@ rt|jtjtj}y| j	
|gdd W n tk
r   Y nX |S )Nr   )rD   r,   r   r=   r/   ro   r   rp   ZKQ_EV_DELETEr   rq   r\   r>   rr   )r   r   r<   rs   )rH   r   r   r,     s     

zKqueueSelector.unregisterc       
      C   s   |d krd nt |d}t| j}g }y| jd ||}W n tk
rL   |S X xb|D ]Z}|j}|j}d}|tj	krz|t
O }|tjkr|tO }| |}	|	rT||	||	j@ f qTW |S )Nr   )rQ   r   r   r   rq   rR   identfilterr/   rp   r=   rr   r>   rB   rS   r   )
r   r.   rj   rT   Zkev_listrs   r   flagr   r<   r   r   r   r/   )  s&    




zKqueueSelector.selectc                s   | j   t   d S )N)r   r0   rD   )r   )rH   r   r   r0   ?  s    
zKqueueSelector.close)N)N)
r&   r'   r(   r   r
   r+   r,   r/   r0   rW   r   r   )rH   r   rn     s   
rn   ) abcr   r   collectionsr   collections.abcr   r]   r/   rU   r=   r>   r   r   __doc__version_infor   r   r   r   r   r)   r9   rC   rX   hasattrrb   rf   rl   rn   globalsZDefaultSelectorr   r   r   r   <module>   sJ   
~T3Z
.M