3
Z_ð]Ñ
  ã               @   sX   d dl Z d dlmZ d dlZe jjdƒZejZdgZdddddgZ	d	d
„ Z
ddd„ZdS )é    N)Úget_hubÚselectZdevpollÚpollÚepollÚkqueueZkeventc             C   sf   y
| j }W n0 tk
r:   t| tjƒs6tdt| ƒ ƒ‚| S X |ƒ }t|tjƒs^tdt|ƒ ƒ‚|S d S )NzExpected int or long, got %s)ÚfilenoÚAttributeErrorÚ
isinstanceÚsixÚinteger_typesÚ	TypeErrorÚtype)ÚobjÚfÚrv© r   ú9/tmp/pip-build-yz_zf6az/eventlet/eventlet/green/select.pyÚ
get_fileno   s    
r   c                sÐ  |d k	r2yt |ƒ}W n tk
r0   tdƒ‚Y nX tƒ ‰g ‰tjƒ ‰ ˆjˆ k	sVtdƒ‚i ‰x| D ]}d|iˆt|ƒ< q`W x |D ]}|ˆj	t|ƒi ƒd< q~W x |D ]}|ˆj	t|ƒi ƒd< q W g }‡ ‡fdd„}‡ ‡fdd	„}	‡ fd
d„‰‡‡‡fdd„}
|d k	�rˆj
ˆj||
ƒƒ zœxptjˆƒD ]b\}}|jdƒ�rV|j
ˆjˆj||ˆ jdd„ ƒƒ |jdƒ�r"|j
ˆjˆj||	ˆ jdd„ ƒƒ �q"W zˆjƒ S x|D ]}ˆj|ƒ �q˜W X W d xˆD ]}|jƒ  �q¸W X d S )NzExpected number for timeoutz0do not call blocking functions from the mainloopÚreadÚwriteÚerrorc                s&   ˆt | ƒ d }ˆ j|gg g fƒ d S )Nr   )r   Úswitch)ÚdÚoriginal)ÚcurrentÚdsr   r   Úon_read3   s    zselect.<locals>.on_readc                s&   ˆt | ƒ d }ˆ jg |gg fƒ d S )Nr   )r   r   )r   r   )r   r   r   r   Úon_write7   s    zselect.<locals>.on_writec                  s   ˆ j g g g fƒ d S )N)r   r   )r   r   r   Úon_timeout2;   s    zselect.<locals>.on_timeout2c                  s   ˆj ˆ jdˆƒƒ d S )Nr   )ÚappendÚschedule_call_globalr   )Úhubr   Útimersr   r   Ú
on_timeout>   s    zselect.<locals>.on_timeoutc               S   s   d S )Nr   r   r   r   r   Ú<lambda>L   s    zselect.<locals>.<lambda>c               S   s   d S )Nr   r   r   r   r   r$   N   s    )ÚfloatÚ
ValueErrorr   r   ÚeventletZ
getcurrentZgreenletÚAssertionErrorr   Ú
setdefaultr   r    r
   Ú	iteritemsÚgetÚaddÚREADÚthrowÚWRITEr   ÚremoveÚcancel)Z	read_listZ
write_listZ
error_listÚtimeoutÚrÚwÚeZ	listenersr   r   r#   ÚkÚvÚlÚtr   )r   r   r!   r   r"   r   r      sF    


	
 &

)N)r'   Zeventlet.hubsr   r
   Zpatcherr   Z__selectr   Z__patched__Z__deleted__r   r   r   r   r   r   Ú<module>   s   