a
    zePL                     @   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	g d
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"r2G d#d$ d$eZeed%rNG d&d' d'eZd(d) Zed%rfeZn4edrveZn$ed"reZnedreZneZdS )*    )ABCMetaabstractmethod)
namedtuple)MappingN      c              
   C   sd   t | tr| }n:zt|  }W n( tttfyH   td| d Y n0 |dk r`td||S )NzInvalid file object: {!r}r   zInvalid file descriptor: {})
isinstanceintfilenoAttributeError	TypeError
ValueErrorformat)fileobjfd r   /usr/lib/python3.9/selectors.py_fileobj_to_fd   s    
r   SelectorKey)r   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 r   )lenr   
_fd_to_keyr   r   r   r   __len__C   s    z_SelectorMapping.__len__c                 C   sB   z| j |}| j j| W S  ty<   td|d Y n0 d S N{!r} is not registered)r   _fileobj_lookupr    KeyErrorr   )r   r   r   r   r   r   __getitem__F   s
    z_SelectorMapping.__getitem__c                 C   s   t | jjS r   )iterr   r    r!   r   r   r   __iter__M   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 r   NotImplementedErrorr   r   r   r   r   r   r   register`   s    zBaseSelector.registerc                 C   s   t d S r   r.   )r   r   r   r   r   
unregisterw   s    zBaseSelector.unregisterc                 C   s   |  | | |||S r   )r2   r1   r0   r   r   r   modify   s    
zBaseSelector.modifyc                 C   s   t d S r   r.   )r   timeoutr   r   r   select   s    zBaseSelector.selectc                 C   s   d S r   r   r!   r   r   r   close   s    zBaseSelector.closec                 C   sJ   |   }|d u rtdz
|| W S  tyD   td|d Y n0 d S )NzSelector is closedr$   )get_mapRuntimeErrorr&   r   )r   r   mappingr   r   r   get_key   s    
zBaseSelector.get_keyc                 C   s   t d S r   r.   r!   r   r   r   r7      s    zBaseSelector.get_mapc                 C   s   | S r   r   r!   r   r   r   	__enter__   s    zBaseSelector.__enter__c                 G   s   |    d S r   )r6   )r   argsr   r   r   __exit__   s    zBaseSelector.__exit__)N)N)N)r*   r+   r,   r   r1   r2   r3   r5   r6   r:   r7   r;   r=   r   r   r   r   r-   Q   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 r   )r    r   _mapr!   r   r   r   r      s    z_BaseSelectorImpl.__init__c                 C   sL   z
t |W S  tyF   | j D ]}|j|u r"|j   Y S q" Y n0 d S r   )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v 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   rC   r   r   r   r1      s    z_BaseSelectorImpl.registerc                 C   s>   z| j | |}W n" ty8   td|d Y n0 |S r#   )r    popr%   r&   r   rB   r   r   r   r2      s
    z_BaseSelectorImpl.unregisterc                 C   s   z| j | | }W n" ty6   td|d Y n0 ||jkr\| | | |||}n"||jkr~|j|d}|| j |j	< |S )Nr$   )r   )
r    r%   r&   r   r   r2   r1   r   _replacer   rF   r   r   r   r3      s    


z_BaseSelectorImpl.modifyc                 C   s   | j   d | _d S r   )r    clearr@   r!   r   r   r   r6     s    
z_BaseSelectorImpl.closec                 C   s   | j S r   )r@   r!   r   r   r   r7     s    z_BaseSelectorImpl.get_mapc                 C   s&   z| j | W S  ty    Y d S 0 d S r   )r    r&   )r   r   r   r   r   _key_from_fd  s    	z_BaseSelectorImpl._key_from_fd)N)N)r*   r+   r,   r   r%   r1   r2   r3   r6   r7   rJ   r   r   r   r   r?      s   

r?   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 r   )superr   set_readers_writersr!   	__class__r   r   r   &  s    
zSelectSelector.__init__Nc                    s@   t  |||}|t@ r&| j|j |t@ r<| j|j |S r   )rL   r1   rD   rN   addr   rE   rO   rF   rP   r   r   r1   +  s    zSelectSelector.registerc                    s,   t  |}| j|j | j|j |S r   )rL   r2   rN   discardr   rO   rB   rP   r   r   r2   3  s    zSelectSelector.unregisterwin32c                 C   s$   t  ||||\}}}||| g fS r   )r5   )r   rw_r4   xr   r   r   _select:  s    zSelectSelector._selectc           	      C   s   |d u rd nt |d}g }z| | j| jg |\}}}W n tyN   | Y S 0 t|}t|}||B D ]J}d}||v r|tO }||v r|tO }| |}|rh|	|||j
@ f qh|S Nr   )maxrY   rN   rO   InterruptedErrorrM   rD   rE   rJ   appendr   )	r   r4   readyrU   rV   rW   r   r   rC   r   r   r   r5   @  s$    

zSelectSelector.select)N)N)N)r*   r+   r,   r   r1   r2   sysplatformrY   r5   __classcell__r   r   rP   r   rK   #  s   
rK   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 r   )rL   r   _selector_clsr   r!   rP   r   r   r   \  s    
z_PollLikeSelector.__init__c                    sl   t  |||}d}|t@ r&|| jO }|t@ r8|| jO }z| j|j| W n   t  |  Y n0 |S rZ   )	rL   r1   rD   _EVENT_READrE   _EVENT_WRITEr   r   r2   )r   r   r   r   rC   poller_eventsrP   r   r   r1   `  s    

z_PollLikeSelector.registerc                    s6   t  |}z| j|j W n ty0   Y n0 |S r   )rL   r2   r   r   OSErrorrB   rP   r   r   r2   n  s    z_PollLikeSelector.unregisterc                    s   z| j | | }W n" ty6   t|dd Y n0 d}||jkrd}|t@ r\|| jO }|t@ rn|| jO }z| j	|j
| W n   t |  Y n0 d}||jkrd}|r|j||d}|| j |j
< |S )Nz is not registeredFr   T)r   r   )r    r%   r&   r   rD   rd   rE   re   r   r3   r   rL   r2   r   rH   )r   r   r   r   rC   changedselector_eventsrP   r   r   r3   x  s.    



z_PollLikeSelector.modifyc                 C   s   |d u rd }n|dkrd}nt |d }g }z| j|}W n tyT   | Y S 0 |D ]V\}}d}|| j @ rz|tO }|| j @ r|tO }| 	|}|rZ|
|||j@ f qZ|S )Nr        @@)mathceilr   pollr\   rd   rE   re   rD   rJ   r]   r   )r   r4   r^   fd_event_listr   eventr   rC   r   r   r   r5     s(    

z_PollLikeSelector.select)N)N)N)r*   r+   r,   rc   rd   re   r   r1   r2   r3   r5   ra   r   r   rP   r   rb   V  s   
rb   rm   c                   @   s   e Zd ZejZejZejZ	dS )PollSelectorN)
r*   r+   r,   r5   rm   rc   POLLINrd   POLLOUTre   r   r   r   r   rp     s   rp   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 r   r   r
   r!   r   r   r   r
     s    zEpollSelector.filenoNc           	      C   s   |d u rd}n |dkrd}nt |d d }tt| jd}g }z| j||}W n tyj   | Y S 0 |D ]V\}}d}|tj	 @ r|t
O }|tj @ r|tO }| |}|rp||||j@ f qp|S )Nr   rj   gMbP?r   )rk   rl   r[   r   r    r   rm   r\   r5   EPOLLINrE   EPOLLOUTrD   rJ   r]   r   )	r   r4   max_evr^   rn   r   ro   r   rC   r   r   r   r5     s*    

zEpollSelector.selectc                    s   | j   t   d S r   r   r6   rL   r!   rP   r   r   r6     s    
zEpollSelector.close)N)r*   r+   r,   r5   rs   rc   rw   rd   rx   re   r
   r6   ra   r   r   rP   r   rt     s   
 rt   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 r   ru   r!   r   r   r   r
     s    zDevpollSelector.filenoc                    s   | j   t   d S r   rz   r!   rP   r   r   r6     s    
zDevpollSelector.close)r*   r+   r,   r5   r{   rc   rq   rd   rr   re   r
   r6   ra   r   r   rP   r   r|     s
   r|   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 r   )rL   r   r5   r}   r   r!   rP   r   r   r     s    
zKqueueSelector.__init__c                 C   s
   | j  S r   ru   r!   r   r   r   r
     s    zKqueueSelector.filenoNc                    s   t  |||}z`|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0 |S rZ   )rL   r1   rD   r5   keventr   KQ_FILTER_READZ	KQ_EV_ADDr   controlrE   KQ_FILTER_WRITEr2   )r   r   r   r   rC   kevrP   r   r   r1     s     zKqueueSelector.registerc                    s   t  |}|jt@ rTt|jtjtj}z| j	
|gdd W n tyR   Y n0 |jt@ rt|jtjtj}z| j	
|gdd W n ty   Y n0 |S rZ   )rL   r2   r   rD   r5   r   r   r   ZKQ_EV_DELETEr   r   rg   rE   r   )r   r   rC   r   rP   r   r   r2     s$    

zKqueueSelector.unregisterc           
      C   s   |d u rd nt |d}t t| jd}g }z| jd ||}W n tyT   | Y S 0 |D ]Z}|j}|j}d}|tj	kr|t
O }|tjkr|tO }| |}	|	rZ||	||	j@ f qZ|S )Nr   r   )r[   r   r    r   r   r\   identfilterr5   r   rD   r   rE   rJ   r]   r   )
r   r4   ry   r^   Zkev_listr   r   flagr   rC   r   r   r   r5   *  s&    



zKqueueSelector.selectc                    s   | j   t   d S r   rz   r!   rP   r   r   r6   C  s    
zKqueueSelector.close)N)N)
r*   r+   r,   r   r
   r1   r2   r5   r6   ra   r   r   rP   r   r~     s   
r~   c                 C   sZ   t t| d }|d u rdS z(| }| dkr4|d n|  W dS  tyT   Y dS 0 d S )NFrm   r   T)getattrr5   rm   r6   rg   )methodr   selector_objr   r   r   _can_useH  s    r   ) abcr   r   collectionsr   collections.abcr   rk   r5   r_   rD   rE   r   r   __doc__version_infor   r   r   r   r   r-   r?   rK   rb   hasattrrp   rt   r|   r~   r   DefaultSelectorr   r   r   r   <module>   sL   
~T3Z
.M



