U
    "FZh                     @   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   Z/home/aprabhat/apps/x.techxrdev.in/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