U
    ËZjƒ  ã                   @   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e
jedœdd„Zeeedœ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   úR/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/grpc/_utilities.pyr   !   s   r   Z_RpcMethodHandler)Zrequest_streamingZresponse_streamingZrequest_deserializerZresponse_serializerZunary_unaryZunary_streamZstream_unaryZstream_streamc                   @   sh   e Zd ZU eed< eeejf ed< eeeejf dœdd„Zedœdd„Z	ej
eej d	œ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   Zfully_qualified_method)Ú.0ÚmethodZ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_detailsr   c                 C   s   |j }| j |¡S r   )r   r   Úget)r   r   Zdetails_methodr   r   r   r   D   s    ÿz DictionaryGenericHandler.serviceN)r	   r
   r   ÚstrÚ__annotations__r   Úgrpcr   r   r   Z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< ejdœdd„Zee d	d
œdd„Zeej d	dœdd„Zedœdd„Zedœdd„Zedœdd„Zedœdd„Zd&ee d	d
œdd„Zd'ee d	d
œdd„Zd(ee d	d
œdd„Zedœ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Ú	Conditionr%   r&   r'   r(   r)   )r   r*   r   r   r   r   T   s
    
z_ChannelReadyFuture.__init__N)Útimeoutr   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   )r-   )Útimer%   r(   r#   ZFutureCancelledErrorr'   ÚwaitZFutureTimeoutError)r   r-   ZuntilÚ	remainingr   r   r   Ú_block\   s    

z_ChannelReadyFuture._block)Úconnectivityr   c              	   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 ]0}z|| ƒ W qf tk
r”   t t¡ Y qfX qfd S )NT)r%   r(   r#   ÚChannelConnectivityZREADYr'   r&   ÚunsubscribeÚ_updateÚ
notify_allÚtupler)   Ú	ExceptionÚ_LOGGERÚ	exceptionÚ$_DONE_CALLBACK_EXCEPTION_LOG_MESSAGE)r   r2   Údone_callbacksÚdone_callbackr   r   r   r5   n   s     ÿ
þ

z_ChannelReadyFuture._updater   c              	   C   s�   | j �J | js>d| _| j | j¡ | j  ¡  t| jƒ}d | _nW 5 Q R £ dS W 5 Q R X |D ]0}z|| ƒ W qZ t	k
rˆ   t
 t¡ Y qZX qZdS )NTF)r%   r'   r(   r&   r4   r5   r6   r7   r)   r8   r9   r:   r;   )r   r<   r=   r   r   r   Úcancel‚   s    

z_ChannelReadyFuture.cancelc              
   C   s$   | j � | jW  5 Q R £ S Q R X d S r   )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   Úrunning™   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   Údone�   s    z_ChannelReadyFuture.donec                 C   s   |   |¡ d S r   ©r1   ©r   r-   r   r   r   Úresult¡   s    z_ChannelReadyFuture.resultc                 C   s   |   |¡ d S r   rC   rD   r   r   r   r:   ¤   s    z_ChannelReadyFuture.exceptionc                 C   s   |   |¡ d S r   rC   rD   r   r   r   Ú	traceback§   s    z_ChannelReadyFuture.traceback)Úfnc              	   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   rG   r   r   r   Úadd_done_callbackª   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&   Ú	subscriber5   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&   r4   r5   r   r   r   r   Ú__del__¶   s    z_ChannelReadyFuture.__del__)N)N)N)r	   r
   r   r+   r,   r"   r#   ÚChannelÚboolr   r   r   r   Úfloatr1   r3   r5   r>   r?   rA   rB   rE   r:   rF   r   rI   rK   rL   r   r   r   r   r$   M   s$   


r$   )r*   r   c                 C   s   t | ƒ}| ¡  |S r   )r$   rK   )r*   Zready_futurer   r   r   Úchannel_ready_future¼   s    rP   )Úversion1Úversion2r   c                 C   sŽ   |   d¡}|  d¡}zRtdƒD ]D}t|| ƒt|| ƒk rB W dS t|| ƒt|| ƒkr W dS qW n tk
r|   Y dS X 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)rQ   rR   Zversion1_listZversion2_listÚir   r   r   Úfirst_version_is_lowerÂ   s    

r[   )Ú__doc__ÚcollectionsÚloggingr+   r.   Útypingr   r   r   r   r#   r   Zgrpc._typingr   Ú	getLoggerr	   r9   r;   Ú
namedtupler   ZServiceRpcHandlerr   ÚFuturer$   rM   rP   r!   rN   r[   r   r   r   r   Ú<module>   s,   
ÿ
þòo