o
    Ù­jû  ã                   @   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   úP/var/www/html/CropPilot/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   7   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   ÚcancelJ   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   Úrunning`   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   Údoned   s   
$ÿz_ChannelReadyFuture.doneNc                 C   ó   |   |¡ d S r'   ©r   ©r   r   r   r   r   Úresulth   ó   z_ChannelReadyFuture.resultc                 C   r-   r'   r.   r/   r   r   r   Ú	exceptionk   r1   z_ChannelReadyFuture.exceptionc                 C   r-   r'   r.   r/   r   r   r   Ú	tracebackn   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_callbackq   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   Ústarty   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   ÿe