B
    't\[                 @   s   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ddddgZ	d	d Z
G d
d deejeZG dd deZG dd deZG dd deZG dd deZefddZdS )z%
Selectors for the Posix event loop.
    )unicode_literalsabsolute_importNAutoSelectorPollSelectorSelectSelectorSelector	fd_to_intc             C   s2   t | tst| dstt | tr&| S |  S d S )Nfileno)
isinstanceinthasattrAssertionErrorr	   )fd r   >lib/python3.7/site-packages/prompt_toolkit/eventloop/select.pyr      s    
c               @   sD   e Zd Zejdd Zejdd Zejdd Zejdd Zd	S )
r   c             C   s   t |tstd S )N)r
   r   r   )selfr   r   r   r   register   s    zSelector.registerc             C   s   t |tstd S )N)r
   r   r   )r   r   r   r   r   
unregister"   s    zSelector.unregisterc             C   s   d S )Nr   )r   timeoutr   r   r   select&   s    zSelector.selectc             C   s   d S )Nr   )r   r   r   r   close*   s    zSelector.closeN)	__name__
__module____qualname__abcabstractmethodr   r   r   r   r   r   r   r   r      s   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )r   c             C   sl   g | _ t | _| jg| _ttdr:t | _| j| j nd | _t	j
dkrbt | _| j| j nd | _d S )Npoll)      )_fdsr   _select_selector
_selectorsr   r   r   _poll_selectorappendsysversion_infoPython3Selector_py3_selector)r   r   r   r   __init__0   s    


zAutoSelector.__init__c             C   s8   t |tst| j| x| jD ]}|| q"W d S )N)r
   r   r   r   r#   r!   r   )r   r   selr   r   r   r   F   s    zAutoSelector.registerc             C   s8   t |tst| j| x| jD ]}|| q"W d S )N)r
   r   r   r   remover!   r   )r   r   r)   r   r   r   r   N   s    zAutoSelector.unregisterc             C   sf   | j r(y| j |S  tk
r&   Y nX y| j|S  tk
r`   | jd k	rZ| j|S  Y nX d S )N)r'   r   PermissionErrorr    
ValueErrorr"   )r   r   r   r   r   r   V   s    
zAutoSelector.selectc             C   s   x| j D ]}|  qW d S )N)r!   r   )r   r)   r   r   r   r   o   s    zAutoSelector.closeN)r   r   r   r(   r   r   r   r   r   r   r   r   r   /   s
   c               @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )r&   z\
    Use of the Python3 'selectors' module.

    NOTE: Only use on Python 3.5 or newer!
    c             C   s$   t jdkstdd l}| | _d S )N)r   r   r   )r$   r%   r   	selectorsZDefaultSelector_sel)r   r-   r   r   r   r(   z   s    zPython3Selector.__init__c             C   s,   t |tstdd l}| j||jd  d S )Nr   )r
   r   r   r-   r.   r   Z
EVENT_READ)r   r   r-   r   r   r   r      s    zPython3Selector.registerc             C   s   t |tst| j| d S )N)r
   r   r   r.   r   )r   r   r   r   r   r      s    zPython3Selector.unregisterc             C   s   | j j|d}dd |D S )N)r   c             S   s   g | ]\}}|j qS r   )Zfileobj).0keymaskr   r   r   
<listcomp>   s    z*Python3Selector.select.<locals>.<listcomp>)r.   r   )r   r   Zeventsr   r   r   r      s    zPython3Selector.selectc             C   s   | j   d S )N)r.   r   )r   r   r   r   r      s    zPython3Selector.closeN)	r   r   r   __doc__r(   r   r   r   r   r   r   r   r   r&   t   s   r&   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )r   c             C   s   t  | _d S )N)r   r   _poll)r   r   r   r   r(      s    zPollSelector.__init__c             C   s"   t |tst| j|tj d S )N)r
   r   r   r4   r   r   ZPOLLIN)r   r   r   r   r   r      s    zPollSelector.registerc             C   s   t |tstd S )N)r
   r   r   )r   r   r   r   r   r      s    zPollSelector.unregisterc             C   s   | j |}dd |D S )Nc             S   s   g | ]}|d  qS )r   r   )r/   tr   r   r   r2      s    z'PollSelector.select.<locals>.<listcomp>)r4   r   )r   r   Ztuplesr   r   r   r      s    zPollSelector.selectc             C   s   d S )Nr   )r   r   r   r   r      s    zPollSelector.closeN)r   r   r   r(   r   r   r   r   r   r   r   r   r      s
   c               @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )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             C   s
   g | _ d S )N)r   )r   r   r   r   r(      s    zSelectSelector.__init__c             C   s   | j | d S )N)r   r#   )r   r   r   r   r   r      s    zSelectSelector.registerc             C   s   | j | d S )N)r   r*   )r   r   r   r   r   r      s    zSelectSelector.unregisterc          
   C   sb   x\yt  | jg g |d S  t jk
rX } z |jrF|jd tjkrFwn W d d }~X Y qX qW d S )Nr   )r   r   errorargserrnoZEINTR)r   r   er   r   r   r      s    zSelectSelector.selectc             C   s   d S )Nr   )r   r   r   r   r      s    zSelectSelector.closeN)	r   r   r   r3   r(   r   r   r   r   r   r   r   r   r      s   c                sh   t dd | D  | }z@x| D ]}|| q W ||}|dk	rV fdd|D S W d|  X dS )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             s   s   | ]}t ||fV  qd S )N)r   )r/   r   r   r   r   	<genexpr>   s    zselect_fds.<locals>.<genexpr>Nc                s   g | ]} t | qS r   )r   )r/   r   )fd_mapr   r   r2      s    zselect_fds.<locals>.<listcomp>)dictr   r   r   )Zread_fdsr   Zselectorr)   r   resultr   )r;   r   
select_fds   s    	

r>   )r3   Z
__future__r   r   r$   r   r8   r   Zsix__all__r   Zwith_metaclassABCMetaobjectr   r   r&   r   r   r>   r   r   r   r   <module>   s$   	E