
    *                         d Z ddlmZmZ ddlZddlZddlZddlZddlZdZ	d Z
 G d d ej                  ej                  e            Z G d d	e      Z G d
 de      Z G d de      Z G d de      ZefdZy)z%
Selectors for the Posix event loop.
    )unicode_literalsabsolute_importN)AutoSelectorPollSelectorSelectSelectorSelector	fd_to_intc                     t        | t              st        | d      sJ t        | t              r| S | j                         S )Nfileno)
isinstanceinthasattrr   )fds    2lib/third_party/prompt_toolkit/eventloop/select.pyr	   r	      s6    b#'"h"777"c	yy{    c                       e Zd Zej                  d        Zej                  d        Zej                  d        Zej                  d        Zy)r   c                 (    t        |t              sJ y Nr   r   selfr   s     r   registerzSelector.register       "c"""r   c                 (    t        |t              sJ y r   r   r   s     r   
unregisterzSelector.unregister!   r   r   c                      y r    r   timeouts     r   selectzSelector.select%       r   c                      y r   r   r   s    r   closezSelector.close)   r!   r   N)	__name__
__module____qualname__abcabstractmethodr   r   r    r$   r   r   r   r   r      sh    # # 	# # 	  	 r   r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)r   c                    g | _         t               | _        | j                  g| _        t	        t
        d      r5t               | _        | j                  j                  | j                         nd | _        t        j                  dk\  r5t               | _        | j                  j                  | j                         y d | _        y )Npoll      )_fdsr   _select_selector
_selectorsr   r    r   _poll_selectorappendsysversion_infoPython3Selector_py3_selectorr#   s    r   __init__zAutoSelector.__init__/   s    	 . 0001 66""..DOO""4#6#67"&D
 v%!0!2DOO""4#5#56!%Dr   c                     t        |t              sJ | j                  j                  |       | j                  D ]  }|j                  |        y r   )r   r   r0   r4   r2   r   r   r   sels      r   r   zAutoSelector.registerE   s>    "c"""		??CLL #r   c                     t        |t              sJ | j                  j                  |       | j                  D ]  }|j                  |        y r   )r   r   r0   remover2   r   r;   s      r   r   zAutoSelector.unregisterM   s>    "c"""		??CNN2 #r   c                    | j                   r	 | j                   j                  |      S 	 | j                  j                  |      S # t        $ r Y 'w xY w# t        $ r+ | j
                  | j
                  j                  |      cY S  w xY wr   )r8   r    PermissionErrorr1   
ValueErrorr3   r   s     r   r    zAutoSelector.selectU   s    ))0099	 ((//88 # 
   	 "".**11'::	s"   A A 	AA0BBc                 F    | j                   D ]  }|j                           y r   )r2   r$   )r   r<   s     r   r$   zAutoSelector.closen   s    ??CIIK #r   Nr%   r&   r'   r9   r   r   r    r$   r   r   r   r   r   .   s    &,2r   r   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)r7   z\
    Use of the Python3 'selectors' module.

    NOTE: Only use on Python 3.5 or newer!
    c                 `    t         j                  dk\  sJ dd l}|j                         | _        y )Nr-   r   )r5   r6   	selectorsDefaultSelector_sel)r   rF   s     r   r9   zPython3Selector.__init__y   s)    6)))--/	r   c                 ~    t        |t              sJ dd l}| j                  j	                  ||j
                  d        y Nr   )r   r   rF   rH   r   
EVENT_READ)r   r   rF   s      r   r   zPython3Selector.register   s1    "c"""		2y33T:r   c                 ^    t        |t              sJ | j                  j                  |       y r   )r   r   rH   r   r   s     r   r   zPython3Selector.unregister   s$    "c"""		R r   c                     | j                   j                  |      }|D cg c]  \  }}|j                   c}}S c c}}w )N)r   )rH   r    fileobj)r   r   eventskeymasks        r   r    zPython3Selector.select   s9    !!'!2-34V	TV444s   <c                 8    | j                   j                          y r   )rH   r$   r#   s    r   r$   zPython3Selector.close   s    		r   N	r%   r&   r'   __doc__r9   r   r   r    r$   r   r   r   r7   r7   s   s     
0;
!5r   r7   c                   *    e Zd Zd Zd Zd Zd Zd Zy)r   c                 6    t        j                         | _        y r   )r    r,   _pollr#   s    r   r9   zPollSelector.__init__   s    [[]
r   c                 |    t        |t              sJ | j                  j                  |t        j
                         y r   )r   r   rW   r   r    POLLINr   s     r   r   zPollSelector.register   s*    "c"""

B.r   c                 (    t        |t              sJ y r   r   r   s     r   r   zPollSelector.unregister   s    "c"""r   c                 h    | j                   j                  |      }|D cg c]  }|d   	 c}S c c}w rJ   )rW   r,   )r   r   tuplests       r   r    zPollSelector.select   s0    )$%f!f%%%s   /c                      y r   r   r#   s    r   r$   zPollSelector.close       r   NrC   r   r   r   r   r      s    #/#&r   r   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)r   z
    Wrapper around select.select.

    When the SIGWINCH signal is handled, other system calls, like select
    are aborted in Python. This wrapper will retry the system call.
    c                     g | _         y r   )r0   r#   s    r   r9   zSelectSelector.__init__   s	    	r   c                 :    | j                   j                  |       y r   )r0   r4   r   s     r   r   zSelectSelector.register       		r   c                 :    | j                   j                  |       y r   )r0   r>   r   s     r   r   zSelectSelector.unregister   rc   r   c                     	 	 t        j                   | j                  g g |      d   S # t         j                  $ r7}|j                  r%|j                  d   t        j
                  k(  rY d }~k d }~ww xY wrJ   )r    r0   errorargserrnoEINTR)r   r   es      r   r    zSelectSelector.select   s\    }}TYYB@CC<< 66affQi5;;6s   $( A2,A-,A--A2c                      y r   r   r#   s    r   r$   zSelectSelector.close   r_   r   NrS   r   r   r   r   r      s     	r   r   c                 <   t        d | D              } |       }	 | D ]  }|j                  |        |j                  |      }|,|D cg c]  }|t        |          c}|j	                          S 	 |j	                          yc c}w # |j	                          w xY w)z
    Wait for a list of file descriptors (`read_fds`) to become ready for
    reading. This chooses the most appropriate select-tool for use in
    prompt-toolkit.
    c              3   6   K   | ]  }t        |      |f  y wr   )r	   ).0r   s     r   	<genexpr>zselect_fds.<locals>.<genexpr>   s     9"9R="%s   N)dictr   r    r	   r$   )read_fdsr   selectorfd_mapr<   r   results          r   
select_fdsru      s     999F *C	BLL  G$4:;FbF9R=)F;		  			 <		s   /B	 
BB	 B	 	B)rT   
__future__r   r   r5   r(   rh   r    six__all__r	   with_metaclassABCMetaobjectr   r   r7   r   r   ru   r   r   r   <module>r|      s    9 
 
   
!s!!#++v6 $B8 BJh :8 &X > ,8 r   