U
    žV_  ã                   @   sÐ   d dl Z d dlmZ d dlZd dlZzd dlmZ W n  ek
rT   d dlmZ Y nX dddgZG dd„ de	ƒZ
ejd	kr„d
d„ Zndd„ Zddd„Zddd„Zdd„ Zdd„ Zdd„ addd„Zddd„ZdS )é    N)Úpartial)Ú	monotonic)ÚtimeÚNoWayToWaitForSocketErrorÚwait_for_readÚwait_for_writec                   @   s   e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__© r   r   ú5/tmp/pip-unpacked-wheel-0gzb0gzi/urllib3/util/wait.pyr      s   )é   é   c                 C   s   | |ƒS )Nr   )ÚfnÚtimeoutr   r   r   Ú_retry_on_intr*   s    r   c              
   C   s˜   |d krt dƒ}n
tƒ | }z
| |ƒW S  ttjfk
r� } zF|jd tjkrR‚ n.|tƒ  }|dk rhd}|t dƒkrxd }W Y ¢qW 5 d }~X Y qX qd S )NÚinfr   )Úfloatr   ÚOSErrorÚselectÚerrorÚargsÚerrnoZEINTR)r   r   ÚdeadlineÚer   r   r   r   0   s    



Fc           
      C   sd   |s|st dƒ‚g }g }|r&| | ¡ |r4| | ¡ ttj|||ƒ}t||ƒ\}}}	t|p`|p`|	ƒS )Nú2must specify at least one of read=True, write=True)ÚRuntimeErrorÚappendr   r   r   Úbool)
ÚsockÚreadÚwriter   ÚrcheckÚwcheckr   ÚrreadyÚwreadyÚxreadyr   r   r   Úselect_wait_for_socketG   s    

r'   c                    s^   |s|st dƒ‚d}|r"|tjO }|r0|tjO }t ¡ ‰ ˆ  | |¡ ‡ fdd„}tt||ƒƒS )Nr   r   c                    s   | d k	r| d9 } ˆ   | ¡S )Niè  )Úpoll)Út©Úpoll_objr   r   Údo_pollf   s    z%poll_wait_for_socket.<locals>.do_poll)r   r   ÚPOLLINÚPOLLOUTr(   Úregisterr   r   )r   r    r!   r   Úmaskr,   r   r*   r   Úpoll_wait_for_socketZ   s    

r1   c                  O   s   t dƒ‚d S )Nzno select-equivalent available)r   ©r   Úkwargsr   r   r   Únull_wait_for_socketn   s    r4   c               	   C   s<   zt  ¡ } t| jdƒ W n ttfk
r2   Y dS X dS d S )Nr   FT)r   r(   r   ÚAttributeErrorr   r*   r   r   r   Ú_have_working_pollr   s    r6   c                  O   s*   t ƒ rtanttdƒrtantat| |ŽS )Nr   )r6   r1   Úwait_for_socketÚhasattrr   r'   r4   r2   r   r   r   r7      s    
r7   c                 C   s   t | d|d�S )z‡ Waits for reading to be available on a given socket.
    Returns True if the socket is readable, or False if the timeout expired.
    T)r    r   ©r7   ©r   r   r   r   r   r   Ž   s    c                 C   s   t | d|d�S )z‡ Waits for writing to be available on a given socket.
    Returns True if the socket is readable, or False if the timeout expired.
    T)r!   r   r9   r:   r   r   r   r   •   s    )FFN)FFN)N)N)r   Ú	functoolsr   r   Úsysr   r   ÚImportErrorÚ__all__Ú	Exceptionr   Úversion_infor   r'   r1   r4   r6   r7   r   r   r   r   r   r   Ú<module>   s&   





