o
     JAfPL                     @   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rHd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r~G dd deZeedrG d d! d!eZeed"rG d#d$ d$eZeed%rG d&d' d'eZd(d) Zed%reZdS edreZdS ed"reZdS edreZdS eZdS )*    )ABCMetaabstractmethod)
namedtuple)MappingN      c              
   C   sb   	 t | tr	| }nzt|  }W n tttfy#   td| d w |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.10/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__@      
z_SelectorMapping.__init__c                 C      t | jjS r   )lenr   
_fd_to_keyr   r   r   r   __len__C      z_SelectorMapping.__len__c                 C   s:   z| j |}| j j| W S  ty   td|d w N{!r} is not registered)r   _fileobj_lookupr"   KeyErrorr   )r   r   r   r   r   r   __getitem__F   s   z_SelectorMapping.__getitem__c                 C   r    r   )iterr   r"   r#   r   r   r   __iter__M   r%   z_SelectorMapping.__iter__N)__name__
__module____qualname__r   r$   r*   r,   r   r   r   r   r   =   s    r   c                   @   sl   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      	 t r   NotImplementedErrorr   r   r   r   r   r   r   register`   s   zBaseSelector.registerc                 C   r1   r   r2   )r   r   r   r   r   
unregisterw      zBaseSelector.unregisterc                 C   s   	 |  | | |||S r   )r6   r5   r4   r   r   r   modify   s   
zBaseSelector.modifyc                 C   r1   r   r2   )r   timeoutr   r   r   select   r7   zBaseSelector.selectc                 C   s   	 d S r   r   r#   r   r   r   close   s   zBaseSelector.closec                 C   sD   	 |   }|d u rtdz|| W S  ty!   td|d w )NzSelector is closedr'   )get_mapRuntimeErrorr)   r   )r   r   mappingr   r   r   get_key   s   
zBaseSelector.get_keyc                 C   r1   r   r2   r#   r   r   r   r<      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   )r;   )r   argsr   r   r   __exit__   r%   zBaseSelector.__exit__r   )r-   r.   r/   r   r5   r6   r8   r:   r;   r?   r<   r@   rB   r   r   r   r   r0   Q   s    


r0   )	metaclassc                   @   sR   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   sF   	 zt |W S  ty"   | j D ]}|j|u r |j   Y S q w 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 r)t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   rH   r   r   r   r5      s   
z_BaseSelectorImpl.registerc                 C   s8   z| j | |}W |S  ty   td|d w r&   )r"   popr(   r)   r   rG   r   r   r   r6      s   z_BaseSelectorImpl.unregisterc                 C   s   z
| j | | }W n ty   td|d w ||jkr-| | | |||}|S ||jkr>|j|d}|| j |j	< |S )Nr'   )r   )
r"   r(   r)   r   r   r6   r5   r   _replacer   rK   r   r   r   r8      s   


z_BaseSelectorImpl.modifyc                 C   s   | j   d | _d S r   )r"   clearrE   r#   r   r   r   r;     s   

z_BaseSelectorImpl.closec                 C   s   | j S r   )rE   r#   r   r   r   r<     s   z_BaseSelectorImpl.get_mapc                 C   s$   	 z| j | W S  ty   Y d S w r   )r"   r)   )r   r   r   r   r   _key_from_fd  s   z_BaseSelectorImpl._key_from_fdr   )r-   r.   r/   r   r(   r5   r6   r8   r;   r<   rO   r   r   r   r   rD      s    

rD   c                       s^   e Zd Z	  fddZd fdd	Z fddZejdkr#d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   )rQ   r5   rI   rS   addr   rJ   rT   rK   rU   r   r   r5   +  s   zSelectSelector.registerc                    s,   t  |}| j|j | j|j |S r   )rQ   r6   rS   discardr   rT   rG   rU   r   r   r6   3  s   zSelectSelector.unregisterwin32c                 C   s$   t  ||||\}}}||| g fS r   )r:   )r   rw_r9   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y'   | Y S w t|}t|}||B D ]%}d}||v r@|tO }||v rH|tO }| |}|rY|	|||j
@ f q4|S Nr   )maxr^   rS   rT   InterruptedErrorrR   rI   rJ   rO   appendr   )	r   r9   readyrZ   r[   r\   r   r   rH   r   r   r   r:   @  s(   
zSelectSelector.selectr   )r-   r.   r/   r   r5   r6   sysplatformr^   r:   __classcell__r   r   rU   r   rP   #  s    
rP   c                       s\   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   )rQ   r   _selector_clsr   r#   rU   r   r   r   \     
z_PollLikeSelector.__init__c                    sd   t  |||}d}|t@ r|| jO }|t@ r|| jO }z| j|j| W |S    t  |  r_   )	rQ   r5   rI   _EVENT_READrJ   _EVENT_WRITEr   r   r6   )r   r   r   r   rH   poller_eventsrU   r   r   r5   `  s   

z_PollLikeSelector.registerc                    s6   t  |}z
| j|j W |S  ty   Y |S w r   )rQ   r6   r   r   OSErrorrG   rU   r   r   r6   n  s   z_PollLikeSelector.unregisterc                    s   z
| j | | }W n ty   t|dd w d}||jkrLd}|t@ r,|| jO }|t@ r5|| jO }z
| j	|j
| W n
   t |  d}||jkrSd}|rb|j||d}|| j |j
< |S )Nz is not registeredFr   T)r   r   )r"   r(   r)   r   rI   rj   rJ   rk   r   r8   r   rQ   r6   r   rM   )r   r   r   r   rH   changedselector_eventsrU   r   r   r8   x  s0   



z_PollLikeSelector.modifyc                 C   s   |d u rd }n|dkrd}nt |d }g }z| j|}W n ty*   | Y S w |D ]+\}}d}|| j @ r=|tO }|| j @ rG|tO }| 	|}|rX|
|||j@ f q-|S )Nr        @@)mathceilr   pollra   rj   rJ   rk   rI   rO   rb   r   )r   r9   rc   fd_event_listr   eventr   rH   r   r   r   r:     s,   
z_PollLikeSelector.selectr   )r-   r.   r/   rh   rj   rk   r   r5   r6   r8   r:   rf   r   r   rU   r   rg   V  s    
rg   rs   c                   @   s    e Zd Z	 ejZejZejZ	dS )PollSelectorN)
r-   r.   r/   r:   rs   rh   POLLINrj   POLLOUTrk   r   r   r   r   rv     s
    
rv   epollc                       sB   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   
   | j  S r   r   r
   r#   r   r   r   r
     r   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y5   | Y S w |D ]+\}}d}|tj	 @ rH|t
O }|tj @ rR|tO }| |}|rc||||j@ f q8|S )Nr   rp   gMbP?r   )rq   rr   r`   r!   r"   r   rs   ra   r:   EPOLLINrJ   EPOLLOUTrI   rO   rb   r   )	r   r9   max_evrc   rt   r   ru   r   rH   r   r   r   r:     s.   
zEpollSelector.selectc                       | j   t   d S r   r   r;   rQ   r#   rU   r   r   r;     ri   zEpollSelector.closer   )r-   r.   r/   r:   ry   rh   r~   rj   r   rk   r
   r;   rf   r   r   rU   r   rz     s    
 rz   devpollc                       s8   e Zd Z	 ejZejZejZ	dd Z
 fddZ  ZS )DevpollSelectorc                 C   r{   r   r|   r#   r   r   r   r
     r   zDevpollSelector.filenoc                    r   r   r   r#   rU   r   r   r;     ri   zDevpollSelector.close)r-   r.   r/   r:   r   rh   rw   rj   rx   rk   r
   r;   rf   r   r   rU   r   r     s    r   kqueuec                       sV   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   )rQ   r   r:   r   r   r#   rU   r   r   r     ri   zKqueueSelector.__init__c                 C   r{   r   r|   r#   r   r   r   r
     r   zKqueueSelector.filenoNc                    s   t  |||}z4|t@ r t|jtjtj}| j	|gdd |t
@ r:t|jtjtj}| j	|gdd W |S W |S    t  |  r_   )rQ   r5   rI   r:   keventr   KQ_FILTER_READZ	KQ_EV_ADDr   controlrJ   KQ_FILTER_WRITEr6   )r   r   r   r   rH   kevrU   r   r   r5     s$   zKqueueSelector.registerc                    s   t  |}|jt@ r*t|jtjtj}z| j	
|gdd W n	 ty)   Y nw |jt@ rPt|jtjtj}z| j	
|gdd W |S  tyO   Y |S w |S r_   )rQ   r6   r   rI   r:   r   r   r   ZKQ_EV_DELETEr   r   rm   rJ   r   )r   r   rH   r   rU   r   r   r6     s,   

zKqueueSelector.unregisterc           
      C   s   |d u rd nt |d}t t| jd}g }z
| jd ||}W n ty*   | Y S w |D ]-}|j}|j}d}|tj	kr@|t
O }|tjkrI|tO }| |}	|	rZ||	||	j@ f q-|S )Nr   r   )r`   r!   r"   r   r   ra   identfilterr:   r   rI   r   rJ   rO   rb   r   )
r   r9   r   rc   Zkev_listr   r   flagr   rH   r   r   r   r:   *  s*   


zKqueueSelector.selectc                    r   r   r   r#   rU   r   r   r;   C  ri   zKqueueSelector.closer   )
r-   r.   r/   r   r
   r5   r6   r:   r;   rf   r   r   rU   r   r     s    
r   c                 C   s\   	 t t| d }|d u rdS z| }| dkr|d W dS |  W dS  ty-   Y dS w )NFrs   r   T)getattrr:   rs   r;   rm   )methodr   selector_objr   r   r   _can_useH  s   
r   ) abcr   r   collectionsr   collections.abcr   rq   r:   rd   rI   rJ   r   r   __doc__version_infor   r   r   r   r   r0   rD   rP   rg   hasattrrv   rz   r   r   r   DefaultSelectorr   r   r   r   <module>   sP    
~T3
Z

.
M