
    rne<                        d Z ddlZddlZddlZddlZddlZddlmZ ddlZ ej                  e	      Z
dZ G d d ej                  dd      ej                        Z G d	 d
ej                        Z G d dej                         Zd Zy)z#Internal utilities for gRPC Python.    N)_commonz6Exception calling connectivity future "done" callback!c                       e Zd Zy)RpcMethodHandlerN)__name__
__module____qualname__     /lib/python3.12/site-packages/grpc/_utilities.pyr   r      s     	r
   r   _RpcMethodHandler)request_streamingresponse_streamingrequest_deserializerresponse_serializerunary_unaryunary_streamstream_unarystream_streamc                       e Zd Zd Zd Zd Zy)DictionaryGenericHandlerc                     || _         t        j                  |      D ci c]  \  }}t        j                  ||      | c}}| _        y c c}}w N)_namesix	iteritemsr   fully_qualified_method_method_handlers)selfservicemethod_handlersmethodmethod_handlers        r   __init__z!DictionaryGenericHandler.__init__/   sJ    
 +.--*H!
& **7F;^K!
 !
s   !Ac                     | j                   S r   )r   r   s    r   service_namez%DictionaryGenericHandler.service_name6   s    zzr
   c                 L    | j                   j                  |j                        S r   )r   getr!   )r   handler_call_detailss     r   r   z DictionaryGenericHandler.service9   s     $$(()=)D)DEEr
   N)r   r   r   r#   r&   r   r	   r
   r   r   r   -   s    
Fr
   r   c                   `    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dd	Z
dd
ZddZd Zd Zd Zy)_ChannelReadyFuturec                 n    t        j                         | _        || _        d| _        d| _        g | _        y )NF)	threading	Condition
_condition_channel_matured
_cancelled_done_callbacks)r   channels     r   r#   z_ChannelReadyFuture.__init__?   s/    #--/!r
   c                    |d nt        j                          |z   }| j                  5  	 | j                  rt        j                         | j
                  r
	 d d d        y || j                  j                          nL|t        j                          z
  }|dk  rt        j                         | j                  j                  |       # 1 sw Y   y xY w)Nr   )timeout)timer/   r2   grpcFutureCancelledErrorr1   waitFutureTimeoutError)r   r6   until	remainings       r   _blockz_ChannelReadyFuture._blockG   s    TYY[7-B__ 	D??3355]]	D 	D },,.$)DIIK$7	$q="&"9"9";; OO000C 	D 	Ds   /C
 A*C

Cc                    | j                   5  | j                  s|t        j                  j                  u rcd| _        | j                  j                  | j                         | j                   j                          t        | j                        }d | _        n
	 d d d        y 	 d d d        D ]  }	  ||         y # 1 sw Y   xY w# t        $ r t        j                  t               Y ?w xY w)NT)r/   r2   r8   ChannelConnectivityREADYr1   r0   unsubscribe_update
notify_alltupler3   	Exception_LOGGER	exception$_DONE_CALLBACK_EXCEPTION_LOG_MESSAGE)r   connectivitydone_callbacksdone_callbacks       r   rC   z_ChannelReadyFuture._updateY   s    __ 		OO D$<$<$B$BB $))$,,7**,!&t';';!<'+$		 		 %		 , 	HMHd#	H		 		  H!!"FGHs   BB=2C	=C	"C.-C.c                    | j                   5  | j                  scd| _        | j                  j	                  | j
                         | j                   j                          t        | j                        }d | _        n
	 d d d        y	 d d d        D ]  }	  ||         y# 1 sw Y   xY w# t        $ r t        j                  t               Y ?w xY w)NTF)r/   r1   r2   r0   rB   rC   rD   rE   r3   rF   rG   rH   rI   )r   rK   rL   s      r   cancelz_ChannelReadyFuture.cancelk   s    __ 	=="&))$,,7**,!&t';';!<'+$	 	 %	 , 	HMHd#	H !	 	  H!!"FGHs   A1B!B-!B*-"CCc                 ^    | j                   5  | j                  cd d d        S # 1 sw Y   y xY wr   )r/   r2   r%   s    r   	cancelledz_ChannelReadyFuture.cancelled~   s%    __ 	#??	# 	# 	#s   #,c                 ~    | j                   5  | j                   xr | j                   cd d d        S # 1 sw Y   y xY wr   r/   r2   r1   r%   s    r   runningz_ChannelReadyFuture.running   s4    __ 	=&<t}}+<	= 	= 	=s   3<c                 z    | j                   5  | j                  xs | j                  cd d d        S # 1 sw Y   y xY wr   rR   r%   s    r   donez_ChannelReadyFuture.done   s.    __ 	4??3dmm	4 	4 	4s   1:Nc                 &    | j                  |       y r   r>   r   r6   s     r   resultz_ChannelReadyFuture.result       Gr
   c                 &    | j                  |       y r   rW   rX   s     r   rH   z_ChannelReadyFuture.exception   rZ   r
   c                 &    | j                  |       y r   rW   rX   s     r   	tracebackz_ChannelReadyFuture.traceback   rZ   r
   c                     | j                   5  | j                  s1| j                  s%| j                  j	                  |       	 d d d        y d d d         ||        y # 1 sw Y   xY wr   )r/   r2   r1   r3   append)r   fns     r   add_done_callbackz%_ChannelReadyFuture.add_done_callback   sU    __ 	??4==$$++B/	 	 	
 	4	 	s   5AA%c                     | j                   5  | j                  j                  | j                  d       d d d        y # 1 sw Y   y xY w)NT)try_to_connect)r/   r0   	subscriberC   r%   s    r   startz_ChannelReadyFuture.start   s=    __ 	GMM##DLL#F	G 	G 	Gs	   (>Ac                     | j                   5  | j                  s1| j                  s%| j                  j	                  | j
                         d d d        y # 1 sw Y   y xY wr   )r/   r2   r1   r0   rB   rC   r%   s    r   __del__z_ChannelReadyFuture.__del__   sA    __ 	8??4==))$,,7	8 	8 	8s   >AAr   )r   r   r   r#   r>   rC   rN   rP   rS   rU   rY   rH   r]   ra   re   rg   r	   r
   r   r+   r+   =   sF    "D$H$&#=4G8r
   r+   c                 <    t        |       }|j                          |S r   )r+   re   )r4   ready_futures     r   channel_ready_futurerj      s    &w/Lr
   )__doc__collectionsloggingr-   r7   r8   r   r   	getLoggerr   rG   rI   
namedtupler   ServiceRpcHandlerr   Futurer+   rj   r	   r
   r   <module>rr      s    *       

'

H
% = %	2 	5
 		 !!	Ft55 F e8$++ e8Pr
   