U
    ËZj�  ã                   @   sf   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddlmZ dZ	G dd	„ d	ej
ƒZd
d„ ZdS )z'Utilities for the gRPC Python Beta API.é    N)Úimplementations)Ú
interfaces)Úcallable_util)Úfuturez6Exception calling connectivity future "done" callback!c                   @   sz   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	ddd„Z
ddd„Zddd„Zdd„ Zdd„ Zdd„ ZdS )Ú_ChannelReadyFuturec                 C   s&   t  ¡ | _|| _d| _d| _g | _d S )NF)Ú	threadingÚ	ConditionÚ
_conditionÚ_channelÚ_maturedÚ
_cancelledÚ_done_callbacks)ÚselfÚchannel© r   úV/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/grpc/beta/utilities.pyÚ__init__   s
    
z_ChannelReadyFuture.__init__c              	   C   s”   |d krd n
t   ¡ | }| j�l | jr0t ¡ ‚q | jrDW 5 Q R £ d S |d krX| j ¡  q |t   ¡  }|dk rvt ¡ ‚q | jj|d� q W 5 Q R X d S )Nr   )Útimeout)Útimer	   r   r   ZCancelledErrorr   ÚwaitÚTimeoutError)r   r   ZuntilÚ	remainingr   r   r   Ú_block'   s    

z_ChannelReadyFuture._blockc              	   C   s~   | j �V | jsJ|tjjkrJd| _| j | j¡ | j  	¡  t
| jƒ}d | _nW 5 Q R £ d S W 5 Q R X |D ]}t |t| ¡ qfd S )NT)r	   r   r   ZChannelConnectivityZREADYr   r
   ÚunsubscribeÚ_updateÚ
notify_allÚtupler   r   Úcall_logging_exceptionsÚ$_DONE_CALLBACK_EXCEPTION_LOG_MESSAGE)r   ZconnectivityÚdone_callbacksÚdone_callbackr   r   r   r   9   s"    ÿ
þ

  ÿz_ChannelReadyFuture._updatec              	   C   sr   | j �J | js>d| _| j | j¡ | j  ¡  t| jƒ}d | _nW 5 Q R £ dS W 5 Q R X |D ]}t	 
|t| ¡ qZdS )NTF)r	   r   r   r
   r   r   r   r   r   r   r   r   )r   r   r    r   r   r   ÚcancelL   s    

  ÿz_ChannelReadyFuture.cancelc              
   C   s$   | j � | jW  5 Q R £ S Q R X d S ©N)r	   r   ©r   r   r   r   Ú	cancelled^   s    z_ChannelReadyFuture.cancelledc              
   C   s.   | j � | j o| j W  5 Q R £ S Q R X d S r"   ©r	   r   r   r#   r   r   r   Úrunningb   s    z_ChannelReadyFuture.runningc              
   C   s*   | j � | jp| jW  5 Q R £ S Q R X d S r"   r%   r#   r   r   r   Údonef   s    z_ChannelReadyFuture.doneNc                 C   s   |   |¡ d S r"   ©r   ©r   r   r   r   r   Úresultj   s    
z_ChannelReadyFuture.resultc                 C   s   |   |¡ d S r"   r(   r)   r   r   r   Ú	exceptionn   s    
z_ChannelReadyFuture.exceptionc                 C   s   |   |¡ d S r"   r(   r)   r   r   r   Ú	tracebackr   s    
z_ChannelReadyFuture.tracebackc              	   C   sD   | j �, | js.| js.| j |¡ W 5 Q R £ d S W 5 Q R X || ƒ d S r"   )r	   r   r   r   Úappend)r   Úfnr   r   r   Úadd_done_callbackv   s
    z%_ChannelReadyFuture.add_done_callbackc              	   C   s(   | j � | jj| jdd� W 5 Q R X d S )NT)Ztry_to_connect)r	   r
   Ú	subscriber   r#   r   r   r   Ústart~   s    z_ChannelReadyFuture.startc              	   C   s0   | j �  | js"| js"| j | j¡ W 5 Q R X d S r"   )r	   r   r   r
   r   r   r#   r   r   r   Ú__del__‚   s    z_ChannelReadyFuture.__del__)N)N)N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r!   r$   r&   r'   r*   r+   r,   r/   r1   r2   r   r   r   r   r      s   


r   c                 C   s   t | ƒ}| ¡  |S )a&  Creates a future.Future tracking when an implementations.Channel is ready.

    Cancelling the returned future.Future does not tell the given
    implementations.Channel to abandon attempts it may have been making to
    connect; cancelling merely deactivates the return future.Future's
    subscription to the given implementations.Channel's connectivity.

    Args:
      channel: An implementations.Channel.

    Returns:
      A future.Future that matures when the given Channel has connectivity
        interfaces.ChannelConnectivity.READY.
    )r   r1   )r   Zready_futurer   r   r   Úchannel_ready_futureˆ   s    r6   )Ú__doc__r   r   Z	grpc.betar   r   Zgrpc.framework.foundationr   r   r   ÚFuturer   r6   r   r   r   r   Ú<module>   s   ÿj