o
    |j6h                     @   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   b/var/www/html/chefvision.cloud.itp360.com/venv/lib/python3.10/site-packages/grpc/beta/utilities.py__init__   s
   

z_ChannelReadyFuture.__init__c                 C   s   |d u rd nt   | }| j5 	 | jrt | jr$	 W d    d S |d u r.| j  n|t    }|dk r<t | jj|d q1 sGw   Y  d S )NTr   )timeout)timer	   r   r   CancelledErrorr   waitTimeoutError)r   r   until	remainingr   r   r   _block'   s    z_ChannelReadyFuture._blockc                 C   s   | j 2 | js%|tjju r%d| _| j| j | j 	  t
| j}d | _n		 W d    d S W d    n1 s8w   Y  |D ]	}t|t|  q?d S )NT)r	   r   r   ChannelConnectivityREADYr   r
   unsubscribe_update
notify_alltupler   r   call_logging_exceptions$_DONE_CALLBACK_EXCEPTION_LOG_MESSAGE)r   connectivitydone_callbacksdone_callbackr   r   r   r   9   s$   

	z_ChannelReadyFuture._updatec                 C   s   | j , | jsd| _| j| j | j   t| j}d | _n		 W d    dS W d    n1 s2w   Y  |D ]	}t	
|t|  q9d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   s0   | j  | jW  d    S 1 sw   Y  d S N)r	   r   r   r   r   r   	cancelled^   s   $z_ChannelReadyFuture.cancelledc                 C   s:   | j  | j o| j W  d    S 1 sw   Y  d S r'   r	   r   r   r(   r   r   r   runningb   s   $z_ChannelReadyFuture.runningc                 C   s6   | j  | jp	| jW  d    S 1 sw   Y  d S r'   r*   r(   r   r   r   donef   s   
$z_ChannelReadyFuture.doneNc                 C      |  | d S r'   r   r   r   r   r   r   resultj      
z_ChannelReadyFuture.resultc                 C   r-   r'   r.   r/   r   r   r   	exceptionn   r1   z_ChannelReadyFuture.exceptionc                 C   r-   r'   r.   r/   r   r   r   	tracebackr   r1   z_ChannelReadyFuture.tracebackc                 C   s\   | j  | js| js| j| 	 W d    d S W d    n1 s#w   Y  ||  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 d    d S 1 sw   Y  d S )NT)try_to_connect)r	   r
   	subscriber   r(   r   r   r   start~   s   "z_ChannelReadyFuture.startc                 C   sf   | j & | js| js!| j| j W d    d S W d    d S W d    d S 1 s,w   Y  d S r'   )r	   r   r   r
   r   r   r(   r   r   r   __del__   s   "z_ChannelReadyFuture.__del__r'   )__name__
__module____qualname__r   r   r   r&   r)   r+   r,   r0   r2   r3   r6   r9   r:   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   r9   )r   ready_futurer   r   r   channel_ready_future   s   r?   )__doc__r   r   	grpc.betar   r   grpc.framework.foundationr   r   r"   Futurer   r?   r   r   r   r   <module>   s   j