3 \�K�@s�ddlmZmZddlmZmZddlZddlZddlZd(Z d)Z dd�Z eddd d d g�Z d e _ ejd*kr�de j_ de j_ de j_ de j_ Gdd�de�ZGdd�ded�ZGdd�de�ZGdd�de�Zeed�r�Gdd�de�Zeed��rGd d!�d!e�Zeed"��rGd#d$�d$e�Zeed%��r:Gd&d'�d'e�Zd'e�k�rLeZn:d!e�k�r^eZn(d$e�k�rpeZnde�k�r�eZneZdS)+�)�ABCMeta�abstractmethod)� namedtuple�MappingN�c Csft|t�r|}nsz_SelectorMapping.__init__cCs t|jj�S)N)�lenr� _fd_to_key)rrrr�__len__Asz_SelectorMapping.__len__c CsBy|jj|�}|jj|Stk r<tdj|��d�YnXdS)Nz{!r} is not registered)r�_fileobj_lookupr�KeyErrorr )rrrrrr� __getitem__Ds   z_SelectorMapping.__getitem__cCs t|jj�S)N)�iterrr)rrrr�__iter__Ksz_SelectorMapping.__iter__N)�__name__� __module__� __qualname__rrr!r#rrrrr;src@sjeZdZeddd��Zedd��Zddd�Zeddd ��Zd d �Zd d �Z edd��Z dd�Z dd�Z dS)� BaseSelectorNcCst�dS)N)�NotImplementedError)rrrrrrr�register^szBaseSelector.registercCst�dS)N)r()rrrrr� unregisteruszBaseSelector.unregistercCs|j|�|j|||�S)N)r*r))rrrrrrr�modify�s zBaseSelector.modifycCst�dS)N)r()r�timeoutrrr�select�szBaseSelector.selectcCsdS)Nr)rrrr�close�szBaseSelector.closec CsJ|j�}|dkrtd��y||Stk rDtdj|��d�YnXdS)NzSelector is closedz{!r} is not registered)�get_map� RuntimeErrorr r )rr�mappingrrr�get_key�szBaseSelector.get_keycCst�dS)N)r()rrrrr/�szBaseSelector.get_mapcCs|S)Nr)rrrr� __enter__�szBaseSelector.__enter__cGs |j�dS)N)r.)r�argsrrr�__exit__�szBaseSelector.__exit__)N)N)N) r$r%r&rr)r*r+r-r.r2r/r3r5rrrrr'Os     r')� metaclassc@sPeZdZdd�Zdd�Zddd�Zdd �Zdd d �Zd d �Zdd�Z dd�Z dS)�_BaseSelectorImplcCsi|_t|�|_dS)N)rr�_map)rrrrr�sz_BaseSelectorImpl.__init__c CsHyt|�Stk rBx"|jj�D]}|j|kr$|jSq$W�YnXdS)N)rr r�valuesrr)rr�keyrrrr�s   z!_BaseSelectorImpl._fileobj_lookupNcCsd| s|ttB@r"tdj|���t||j|�||�}|j|jkrTtdj||j���||j|j<|S)NzInvalid events: {!r}z"{!r} (FD {}) is already registered) � EVENT_READ� EVENT_WRITEr r rrrrr )rrrrr:rrrr)�s   z_BaseSelectorImpl.registerc Cs@y|jj|j|��}Wn$tk r:tdj|��d�YnX|S)Nz{!r} is not registered)r�poprr r )rrr:rrrr*�s z_BaseSelectorImpl.unregisterc Cs�y|j|j|�}Wn$tk r8tdj|��d�YnX||jkr^|j|�|j|||�}n"||jkr�|j|d�}||j|j <|S)Nz{!r} is not registered)r) rrr r rr*r)r�_replacer)rrrrr:rrrr+�s     z_BaseSelectorImpl.modifycCs|jj�d|_dS)N)r�clearr8)rrrrr. s z_BaseSelectorImpl.closecCs|jS)N)r8)rrrrr/sz_BaseSelectorImpl.get_mapc Cs$y |j|Stk rdSXdS)N)rr )rrrrr� _key_from_fds  z_BaseSelectorImpl._key_from_fd)N)N) r$r%r&rrr)r*r+r.r/r@rrrrr7�s  r7cs\eZdZ�fdd�Zd �fdd� Z�fdd�ZejdkrDdd d �Zne j Zdd d �Z �Z S)�SelectSelectorcst�j�t�|_t�|_dS)N)�superr�set�_readers�_writers)r)� __class__rrr%s zSelectSelector.__init__Ncs@t�j|||�}|t@r&|jj|j�|t@r<|jj|j�|S)N)rBr)r;rD�addrr<rE)rrrrr:)rFrrr)*s zSelectSelector.registercs,t�j|�}|jj|j�|jj|j�|S)N)rBr*rD�discardrrE)rrr:)rFrrr*2s zSelectSelector.unregisterZwin32cCs$tj||||�\}}}|||gfS)N)r-)r�r�w�_r,�xrrr�_select9szSelectSelector._selectc Cs�|dkr dnt|d�}g}y|j|j|jg|�\}}}Wntk rL|SXt|�}t|�}xV||BD]J}d}||kr�|tO}||kr�|tO}|j|�}|rh|j |||j @f�qhW|S)Nr) �maxrMrDrE�InterruptedErrorrCr;r<r@�appendr) rr,�readyrIrJrKrrr:rrrr-?s$ zSelectSelector.select)N)N)N) r$r%r&rr)r*�sys�platformrMr-� __classcell__rr)rFrrA"s    rA�pollcs@eZdZ�fdd�Zd �fdd� Z�fdd�Zd dd �Z�ZS) � PollSelectorcst�j�tj�|_dS)N)rBrr-rU�_poll)r)rFrrrZs zPollSelector.__init__NcsLt�j|||�}d}|t@r&|tjO}|t@r8|tjO}|jj|j|�|S)Nr) rBr)r;r-�POLLINr<�POLLOUTrWr)rrrrr:� poll_events)rFrrr)^s  zPollSelector.registercst�j|�}|jj|j�|S)N)rBr*rWr)rrr:)rFrrr*hs zPollSelector.unregisterc Cs�|dkrd}n|dkrd}ntj|d�}g}y|jj|�}Wntk rR|SXx^|D]V\}}d}|tj@rz|tO}|tj@r�|t O}|j |�}|rZ|j |||j @f�qZW|S)Nrg@�@) �math�ceilrWrUrOr-rXr<rYr;r@rPr)rr,rQ� fd_event_listr�eventrr:rrrr-ms(   zPollSelector.select)N)N)r$r%r&rr)r*r-rTrr)rFrrVWs  rV�epollcsTeZdZ�fdd�Zdd�Zd�fdd� Z�fdd �Zdd d �Z�fd d �Z�Z S)� EpollSelectorcst�j�tj�|_dS)N)rBrr-r_�_epoll)r)rFrrr�s zEpollSelector.__init__cCs |jj�S)N)rar )rrrrr �szEpollSelector.filenoNc stt�j|||�}d}|t@r&|tjO}|t@r8|tjO}y|jj|j|�Wn"t k rnt�j |��YnX|S)Nr) rBr)r;r-�EPOLLINr<�EPOLLOUTrar� BaseExceptionr*)rrrrr:Z epoll_events)rFrrr)�s   zEpollSelector.registerc s8t�j|�}y|jj|j�Wntk r2YnX|S)N)rBr*rar�OSError)rrr:)rFrrr*�s  zEpollSelector.unregisterc Cs�|dkrd}n |dkrd}ntj|d�d}tt|j�d�}g}y|jj||�}Wntk rh|SXx^|D]V\}}d}|tj @r�|t O}|tj @r�|t O}|j |�}|rp|j|||j@f�qpW|S)Nrrg@�@g����MbP?�����)r[r\rNrrrarUrOr-rbr<rcr;r@rPr) rr,�max_evrQr]rr^rr:rrrr-�s*   zEpollSelector.selectcs|jj�t�j�dS)N)rar.rB)r)rFrrr.�s zEpollSelector.close)N)N) r$r%r&rr r)r*r-r.rTrr)rFrr`�s   r`�devpollcsTeZdZ�fdd�Zdd�Zd�fdd� Z�fdd �Zdd d �Z�fd d �Z�Z S)�DevpollSelectorcst�j�tj�|_dS)N)rBrr-rh�_devpoll)r)rFrrr�s zDevpollSelector.__init__cCs |jj�S)N)rjr )rrrrr �szDevpollSelector.filenoNcsLt�j|||�}d}|t@r&|tjO}|t@r8|tjO}|jj|j|�|S)Nr) rBr)r;r-rXr<rYrjr)rrrrr:rZ)rFrrr)�s  zDevpollSelector.registercst�j|�}|jj|j�|S)N)rBr*rjr)rrr:)rFrrr*�s zDevpollSelector.unregisterc Cs�|dkrd}n|dkrd}ntj|d�}g}y|jj|�}Wntk rR|SXx^|D]V\}}d}|tj@rz|tO}|tj@r�|t O}|j |�}|rZ|j |||j @f�qZW|S)Nrg@�@) r[r\rjrUrOr-rXr<rYr;r@rPr)rr,rQr]rr^rr:rrrr-�s(   zDevpollSelector.selectcs|jj�t�j�dS)N)rjr.rB)r)rFrrr.s zDevpollSelector.close)N)N) r$r%r&rr r)r*r-r.rTrr)rFrri�s    ri�kqueuecsTeZdZ�fdd�Zdd�Zd�fdd� Z�fdd �Zdd d �Z�fd d �Z�Z S)�KqueueSelectorcst�j�tj�|_dS)N)rBrr-rk�_kqueue)r)rFrrrs zKqueueSelector.__init__cCs |jj�S)N)rmr )rrrrr szKqueueSelector.filenoNc s�t�j|||�}y`|t@r@tj|jtjtj�}|jj |gdd�|t @rntj|jtj tj�}|jj |gdd�Wn"t k r�t�j |��YnX|S)Nr)rBr)r;r-�keventr�KQ_FILTER_READZ KQ_EV_ADDrm�controlr<�KQ_FILTER_WRITErdr*)rrrrr:�kev)rFrrr)s   zKqueueSelector.registercs�t�j|�}|jt@rVtj|jtjtj�}y|j j |gdd�Wnt k rTYnX|jt @r�tj|jtj tj�}y|j j |gdd�Wnt k r�YnX|S)Nr)rBr*rr;r-rnrroZ KQ_EV_DELETErmrprer<rq)rrr:rr)rFrrr*'s      zKqueueSelector.unregisterc Cs�|dkr dnt|d�}t|j�}g}y|jjd||�}Wntk rL|SXxb|D]Z}|j}|j}d}|tj krz|t O}|tj kr�|t O}|j |�} | rT|j| || j@f�qTW|S)Nr)rNrrrmrprOZident�filterr-ror;rqr<r@rPr) rr,rgrQZkev_listrrr�flagrr:rrrr-<s&     zKqueueSelector.selectcs|jj�t�j�dS)N)rmr.rB)r)rFrrr.Rs zKqueueSelector.close)N)N) r$r%r&rr r)r*r-r.rTrr)rFrrl s    rlr�)rr)�abcrr� collectionsrrr[r-rRr;r<rr�__doc__� version_inforrrrrr'r7rA�hasattrrVr`rirl�globalsZDefaultSelectorrrrr�sF ~U3 1 G 8 M