o
    |j6h                     @   s   d Z ddlZddlZddlZddlZddlmZmZmZm	Z	 ddl
Z
ddl
mZ ddlmZ eeZdZG dd ded	d
e
jZG dd de
jZG dd de
jZde
jdefddZdededefddZdS )z#Internal utilities for gRPC Python.    N)CallableDictOptionalSequence)_common)DoneCallbackTypez6Exception calling connectivity future "done" callback!c                   @   s   e Zd ZdS )RpcMethodHandlerN)__name__
__module____qualname__ r   r   ^/var/www/html/chefvision.cloud.itp360.com/venv/lib/python3.10/site-packages/grpc/_utilities.pyr   !   s    r   _RpcMethodHandler)request_streamingresponse_streamingrequest_deserializerresponse_serializerunary_unaryunary_streamstream_unarystream_streamc                   @   sl   e Zd ZU eed< eeejf ed< dedeeejf fddZdefdd	Z	d
ej
deej fddZdS )DictionaryGenericHandler_name_method_handlersservicemethod_handlersc                    s"    | _  fdd| D | _d S )Nc                    s   i | ]\}}t  ||qS r   )r   fully_qualified_method).0methodmethod_handlerr   r   r   
<dictcomp><   s    z5DictionaryGenericHandler.__init__.<locals>.<dictcomp>)r   itemsr   )selfr   r   r   r    r   __init__8   s   
z!DictionaryGenericHandler.__init__returnc                 C   s   | j S N)r   r#   r   r   r   service_nameA   s   z%DictionaryGenericHandler.service_namehandler_call_detailsc                 C   s   |j }| j|S r&   )r   r   get)r#   r)   details_methodr   r   r   r   D   s   z DictionaryGenericHandler.serviceN)r	   r
   r   str__annotations__r   grpcr   r$   r(   HandlerCallDetailsr   r   r   r   r   r   r   4   s   
 
	r   c                   @   s  e Zd ZU ejed< ejed< eed< eed< e	e
 ed< dejfddZd	ee d
dfddZdeej d
dfddZd
efddZd
efddZd
efddZd
efddZd&d	ee d
dfddZd&d	ee d
dfddZd&d	ee d
dfddZdefd d!Zd"d# Zd$d% ZdS )'_ChannelReadyFuture
_condition_channel_matured
_cancelled_done_callbackschannelc                 C   s&   t  | _|| _d| _d| _g | _d S )NF)	threading	Conditionr1   r2   r3   r4   r5   )r#   r6   r   r   r   r$   T   s
   

z_ChannelReadyFuture.__init__timeoutr%   Nc                 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   )r9   )timer1   r4   r.   FutureCancelledErrorr3   waitFutureTimeoutError)r#   r9   until	remainingr   r   r   _block\   s    z_ChannelReadyFuture._blockconnectivityc              	   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 ]}z||  W q? tyU   tt Y q?w d S )NT)r1   r4   r.   ChannelConnectivityREADYr3   r2   unsubscribe_update
notify_alltupler5   	Exception_LOGGER	exception$_DONE_CALLBACK_EXCEPTION_LOG_MESSAGE)r#   rA   done_callbacksdone_callbackr   r   r   rE   n   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 ]}z||  W q9 t	yO   t
t Y q9w dS )NTF)r1   r3   r4   r2   rD   rE   rF   rG   r5   rH   rI   rJ   rK   )r#   rL   rM   r   r   r   cancel   s$   


z_ChannelReadyFuture.cancelc                 C   s0   | j  | jW  d    S 1 sw   Y  d S r&   )r1   r4   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&   r1   r4   r3   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&   rP   r'   r   r   r   done   s   
$z_ChannelReadyFuture.donec                 C      |  | d S r&   r@   r#   r9   r   r   r   result      z_ChannelReadyFuture.resultc                 C   rS   r&   rT   rU   r   r   r   rJ      rW   z_ChannelReadyFuture.exceptionc                 C   rS   r&   rT   rU   r   r   r   	traceback   rW   z_ChannelReadyFuture.tracebackfnc                 C   s\   | j  | js| js| j| 	 W d    d S W d    n1 s#w   Y  ||  d S r&   )r1   r4   r3   r5   append)r#   rY   r   r   r   add_done_callback   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)r1   r2   	subscriberE   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&   )r1   r4   r3   r2   rD   rE   r'   r   r   r   __del__   s   "z_ChannelReadyFuture.__del__r&   )r	   r
   r   r7   r8   r-   r.   Channelboolr   r   r$   r   floatr@   rB   rE   rN   rO   rQ   rR   rV   rJ   rX   r   r[   r^   r_   r   r   r   r   r0   M   s&   
 

r0   r6   r%   c                 C   s   t | }|  |S r&   )r0   r^   )r6   ready_futurer   r   r   channel_ready_future   s   rd   version1version2c                 C   s   |  d}| d}z)tdD ]"}t|| t|| k r! W dS t|| t|| kr1 W dS qW n
 ty=   Y dS w t|t|k S )a  
    Compares two versions in the format '1.60.1' or '1.60.1.dev0'.

    This method will be used in all stubs generated by grpcio-tools to check whether
    the stub version is compatible with the runtime grpcio.

    Args:
        version1: The first version string.
        version2: The second version string.

    Returns:
        True if version1 is lower, False otherwise.
    .   TF)splitrangeint
ValueErrorlen)re   rf   version1_listversion2_listir   r   r   first_version_is_lower   s   

rq   )__doc__collectionsloggingr7   r:   typingr   r   r   r   r.   r   grpc._typingr   	getLoggerr	   rI   rK   
namedtupler   ServiceRpcHandlerr   Futurer0   r`   rd   r,   ra   rq   r   r   r   r   <module>   s.   

o