o
    Ù­jñ  ã                   @   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   úL/var/www/html/CropPilot/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   l   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.   
ÿ
þòm