U
    gG                     @  s   d dl mZ d dlZd dlZd dlmZ ddgZddddd	dd
ddZddddd	dd
ddZddddZ	ddddd	dd
dda
ddd	ddddZddd	ddddZdS )    )annotationsN)partialwait_for_readwait_for_writeFzsocket.socketboolfloat | None)sockreadwritetimeoutreturnc           
      C  sb   |s|st dg }g }|r&||  |r4||  ttj|||}||\}}}	t|p^|p^|	S )N2must specify at least one of read=True, write=True)RuntimeErrorappendr   selectr   )
r   r	   r
   r   rcheckwcheckfnrreadywreadyxready r   5/tmp/pip-unpacked-wheel-f4zjg0cl/urllib3/util/wait.pyselect_wait_for_socket!   s    

r   c                   sd   |s|st dd}|r"|tjO }|r0|tjO }t   | | ddd fdd}t||S )Nr   r   r   zlist[tuple[int, int]])tr   c                   s   | d k	r| d9 }   | S )Ni  )poll)r   poll_objr   r   do_pollJ   s    z%poll_wait_for_socket.<locals>.do_poll)r   r   POLLINPOLLOUTr   registerr   )r   r	   r
   r   maskr   r   r   r   poll_wait_for_socket9   s    

r#   )r   c               	   C  s:   zt  } | d W n ttfk
r0   Y dS X dS d S )Nr   FT)r   r   AttributeErrorOSErrorr   r   r   r   _have_working_pollR   s    r&   c                 C  s(   t  rtanttdrtat| |||S )Nr   )r&   r#   wait_for_sockethasattrr   r   )r   r	   r
   r   r   r   r   r'   _   s
    
r'   )r   r   r   c                 C  s   t | d|dS )zWaits 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   r'   r   r   r   r   r   r   q   s    c                 C  s   t | d|dS )zWaits 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   r)   r*   r   r   r   r   x   s    )FFN)FFN)FFN)N)N)
__future__r   r   socket	functoolsr   __all__r   r#   r&   r'   r   r   r   r   r   r   <module>   s&            