
    Ag                       d Z ddlmZ ddlZddlZddlmZ ddl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mZmZmZmZmZmZmZmZmZmZm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d
lm Z  ddl!m"Z" ddl!m#Z# ddl!m$Z$ ddl!m%Z% ddl!m&Z& ddl!m'Z' ddl!m(Z( ddl!m)Z) ddl!m*Z*  e	jV                  e,      Z-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:d Z;d!Z<dkd"Z=dld#Z>dmd%Z?	 	 	 	 	 	 dnd&Z@dod'ZA G d( d) ej                  d)d*      ej                        ZD G d+ d,ej                        ZF G d- d.eF      ZG G d/ d0eF      ZH G d1 d$eI      ZJdpd2ZK	 	 	 	 	 	 dqd3ZLdrd4ZM	 	 	 	 	 	 dsd5ZN	 	 	 	 	 	 dtd6ZO	 	 	 	 	 	 	 	 	 	 dud7ZPdvd8ZQ	 	 	 	 	 	 	 	 dwd9ZRdvd:ZSdrd;ZT G d< d=ej                        ZV G d> d?eI      ZW	 	 	 	 	 	 	 	 dxd@ZX	 dy	 	 	 	 	 	 	 	 	 	 	 	 	 dzdAZY	 	 	 	 	 	 	 	 d{dBZZ	 	 	 	 	 	 	 	 	 	 d|dCZ[	 	 	 	 d}dDZ\dpdEZ]	 	 	 	 	 	 	 	 d~dFZ^	 	 	 	 	 	 	 	 ddGZ_	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddHZ`	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddIZaddJZb	 	 	 	 	 	 	 	 	 	 ddKZc	 	 	 	 	 	 ddLZd	 	 	 	 	 	 	 	 	 	 ddMZe	 	 	 	 	 	 	 	 	 	 ddNZf	 	 	 	 	 	 	 	 	 	 ddOZg	 	 	 	 	 	 	 	 	 	 ddPZh	 	 	 	 	 	 	 	 	 	 ddQZi	 	 	 	 	 	 	 	 ddRZj	 	 	 	 	 	 	 	 	 	 ddSZk	 	 	 	 	 	 	 	 	 	 	 	 ddTZlej                   G dU dVej                               Zo G dW dXeI      Zp	 	 	 	 	 	 ddYZq	 	 	 	 	 	 ddZZrdd[Zs	 	 	 	 	 	 	 	 dd\Ztdd]Zudd^Zvdd_Zwdd`Zx	 	 	 	 	 	 ddaZyddbZzddcZ{dddZ|ddeZ}	 	 	 	 ddfZ~	 	 	 	 	 	 	 	 ddgZ G dh diej                         Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddjZy)z+Service-side implementation of gRPC Python.    )annotationsN)futures)AnyCallableDictIterableIteratorListMappingOptionalSequenceSetTupleUnion)_common)_compression)_interceptor)_observability)cygrpc)ArityAgnosticMethodHandler)ChannelArgumentType)DeserializingFunction)MetadataType)NullaryCallbackType)ResponseType)SerializingFunction)ServerCallbackTag)ServerTagCallbackTypeshutdownrequest_callreceive_close_on_serversend_initial_metadatareceive_messagesend_messagez$send_initial_metadata * send_messagesend_status_from_serverz/send_initial_metadata * send_status_from_serveropenclosed	cancelledg      ?g    eAc                <    | j                   d   j                         S Nr   )batch_operationsmessage)request_events    A/var/www/openai/venv/lib/python3.12/site-packages/grpc/_server.py_serialized_requestr/   U   s    ))!,4466    c                |    t         j                  j                  |       }|t        j                  j
                  S |S N)r   !STATUS_CODE_TO_CYGRPC_STATUS_CODEgetr   
StatusCodeunknown)codecygrpc_codes     r.   _application_coder9   Y   s4    ;;??EK(3(;6$$LLr0   	_RPCStatec                x    | j                   t        j                  j                  S t	        | j                         S r2   )r7   r   r5   okr9   states    r.   _completion_coder?   ^   s-    zz  ### ,,r0   c                H    | j                   |S t        | j                         S r2   )r7   r9   )r>   r7   s     r.   _abortion_coderA   e   s"     zz ,,r0   c                6    | j                   dS | j                   S )Nr0   )detailsr=   s    r.   _detailsrD   n   s    --'3:U]]:r0   c                      e Zd Zy)_HandlerCallDetailsN)__name__
__module____qualname__ r0   r.   rF   rF   r   s     	r0   rF   )methodinvocation_metadatac                  `    e Zd Zej                  dd       Zej                  	 	 	 	 dd       Zy)_Methodc                    t               r2   NotImplementedErrorselfs    r.   namez_Method.name   s    !##r0   c                    t               r2   rP   rS   handler_call_detailss     r.   handlerz_Method.handler   s     "##r0   NreturnzOptional[str]rW   rF   rZ   Optional[grpc.RpcMethodHandler])rG   rH   rI   abcabstractmethodrT   rX   rJ   r0   r.   rN   rN      sD    $ $ 	$$7$	($ $r0   rN   c                  4    e Zd Z	 	 	 	 ddZddZ	 	 	 	 ddZy)_RegisteredMethodc                     || _         || _        y r2   )_name_registered_handler)rS   rT   registered_handlers      r.   __init__z_RegisteredMethod.__init__   s    
 
#5 r0   c                    | j                   S r2   )rb   rR   s    r.   rT   z_RegisteredMethod.name   s    zzr0   c                    | j                   S r2   )rc   rV   s     r.   rX   z_RegisteredMethod.handler   s     '''r0   N)rT   strrd   r\   rY   r[   rG   rH   rI   re   rT   rX   rJ   r0   r.   r`   r`      s3    66 <6($7(	((r0   r`   c                  0    e Zd Z	 	 ddZddZ	 	 	 	 ddZy)_GenericMethodc                    || _         y r2   )_generic_handlers)rS   generic_handlerss     r.   re   z_GenericMethod.__init__   s     "2r0   c                     y r2   rJ   rR   s    r.   rT   z_GenericMethod.name   s    r0   c                T    | j                   D ]  }|j                  |      }||c S  y r2   )rm   service)rS   rW   generic_handlermethod_handlers       r.   rX   z_GenericMethod.handler   s6    
  $55O,445IJN)%%  6 r0   N)rn   List[grpc.GenericRpcHandler]rY   r[   ri   rJ   r0   r.   rk   rk      s)    262	$7		(	r0   rk   c                      e Zd ZU ded<   ded<   ee   Zded<   ded<   d	ed
<   ded<   d	ed<   ded<   ded<   ded<   d	ed<   ded<   ded<   d	ed<   d Zy)r:   zcontextvars.Contextcontextzthreading.Condition	conditionr   requestrh   clientboolinitial_metadata_allowedOptional[grpc.Compression]compression_algorithmdisable_next_compressionOptional[MetadataType]trailing_metadatazOptional[grpc.StatusCode]r7   Optional[bytes]rC   statusedzList[Exception]
rpc_errorsz#Optional[List[NullaryCallbackType]]	callbacksabortedc                6   t        j                         | _        t        j                         | _        t               | _        d | _        t        | _
        d| _        d | _        d| _        d | _        d | _        d | _        d| _        g | _        g | _        d| _        y NTF)contextvarsContextrv   	threading	Conditionrw   setduerx   _OPENry   r{   r}   r~   r   r7   rC   r   r   r   r   rR   s    r.   re   z_RPCState.__init__   s    "**,",,.5(,%%)"(-%!%	r0   N)rG   rH   rI   __annotations__r   rh   r   re   rJ   r0   r.   r:   r:      s`      ""
c(CLK""55""--
##N22Mr0   c                d    t        j                         }| j                  j                  |       |r2   )grpcRpcErrorr   append)r>   	rpc_errors     r.   _raise_rpc_errorr      s&    I	I&
Or0   c                    | j                   j                  |       t        |       s#| j                   s| j                  }d | _        | |fS y)NNrJ   )r   remove_is_rpc_state_activer   )r>   tokenr   s      r.   _possibly_finish_callr      sB     
IIU&uyyOO	ir0   c                      fd}|S )Nc                `    j                   5  t              cd d d        S # 1 sw Y   y xY wr2   )rw   r   )$unused_send_status_from_server_eventr>   r   s    r.   r%   z9_send_status_from_server.<locals>.send_status_from_server   s    __(6 __s   $-rJ   )r>   r   r%   s   `` r.   _send_status_from_serverr      s    7 #"r0   c                    | j                   5  | j                  rDt        j                  | j                        f}||cd d d        S |t	        |      z   cd d d        S |cd d d        S # 1 sw Y   y xY wr2   )rw   r}   r   !compression_algorithm_to_metadatatuple)r>   metadatacompression_metadatas      r.   _get_initial_metadatar      si     
&&>>//$ 
 + 
 ,eHo= 
  
s   0A)A)A))A2c                N    t        j                  t        | |      t              }|S r2   )r   SendInitialMetadataOperationr   _EMPTY_FLAGS)r>   r   	operations      r.   _get_initial_metadata_operationr     s(     33eX.I r0   c                   | j                   t        urt        | |      }| j                  |n| j                  }| j                  r9t        | d       t        j                  | j                  ||t              f}t        }n-t        j                  | j                  ||t              f}t        }|j                  |t        | |             d| _        | j                  j!                  |       y y NT)ry   
_CANCELLEDrA   rC   r{   r   r   SendStatusFromServerOperationr   r   8_SEND_INITIAL_METADATA_AND_SEND_STATUS_FROM_SERVER_TOKEN_SEND_STATUS_FROM_SERVER_TOKENstart_server_batchr   r   r   add)r>   callr7   rC   effective_codeeffective_details
operationsr   s           r.   _abortr     s     ||:%'t4',}}'<G%--))/t<44++"% 	J ME 44++"% 	J 3E0>	
 		e9 &r0   c                      fd}|S )Nc                (   j                   5  | j                  d   j                         rt        _        nj                  t
        u rt        _        j                   j                          t        t              cd d d        S # 1 sw Y   y xY wr*   )
rw   r+   r(   r   ry   r   _CLOSED
notify_allr   _RECEIVE_CLOSE_ON_SERVER_TOKEN)receive_close_on_server_eventr>   s    r.   r!   z9_receive_close_on_server.<locals>.receive_close_on_server.  s`    __,==a@JJL)&&OO&&((0NO __s   A0BBrJ   )r>   r!   s   ` r.   _receive_close_on_serverr   -  s    P #"r0   c                      fd}|S )Nc                   t        |       }|]j                  5  j                  t        u rt        _        j                  j                          t        t              cd d d        S t        j                  |      }j                  5  |'t        t        j                  j                  d       n|_        j                  j                          t        t              cd d d        S # 1 sw Y   y xY w# 1 sw Y   y xY w)Ns    Exception deserializing request!)r/   rw   ry   r   r   r   r   _RECEIVE_MESSAGE_TOKENr   deserializer   r   r5   internalrx   )receive_message_eventserialized_requestrx   r   request_deserializerr>   s      r.   r#   z)_receive_message.<locals>.receive_message?  s    01FG%<<5(#*EL**,,U4JK	 ! ))"$8G ?))22;	 %,EM**,,U4JK ! ! !s   AC2AC>2C;>DrJ   )r>   r   r   r#   s   ``` r.   _receive_messager   :  s    
L2 r0   c                      fd}|S )Nc                h    j                   5  t        t              cd d d        S # 1 sw Y   y xY wr2   )rw   r   _SEND_INITIAL_METADATA_TOKEN)"unused_send_initial_metadata_eventr>   s    r.   r"   z5_send_initial_metadata.<locals>.send_initial_metadata\  s    __(0LM __s   (1rJ   )r>   r"   s   ` r.   _send_initial_metadatar   [  s    N ! r0   c                      fd}|S )Nc                    j                   5  j                   j                          t              cd d d        S # 1 sw Y   y xY wr2   )rw   r   r   )unused_send_message_eventr>   r   s    r.   r$   z#_send_message.<locals>.send_messaged  s.    __OO&&((6 __s	   &>ArJ   )r>   r   r$   s   `` r.   _send_messager   c  s    7
 r0   c                      e Zd ZU ded<   ded<   ded<   	 	 	 	 	 	 d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Zd&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Zd.dZd/dZd0dZd!dZy)1_Contextcygrpc.BaseEvent
_rpc_eventr:   _stateOptional[DeserializingFunction]r   c                .    || _         || _        || _        y r2   )r   r   _request_deserializer)rS   	rpc_eventr>   r   s       r.   re   z_Context.__init__q  s     $%9"r0   c                    | j                   j                  5  t        | j                         cd d d        S # 1 sw Y   y xY wr2   )r   rw   r   rR   s    r.   	is_activez_Context.is_active{  s'    [[""'4 #""s   6?c                    t        | j                  j                  j                  t	        j                         z
  d      S r*   )maxr   call_detailsdeadlinetimerR   s    r.   time_remainingz_Context.time_remaining  s*    4??//88499;FJJr0   c                L    | j                   j                  j                          y r2   )r   r   cancelrR   s    r.   r   z_Context.cancel  s    ##%r0   c                    | j                   j                  5  | j                   j                  
	 d d d        y| j                   j                  j                  |       	 d d d        y# 1 sw Y   y xY w)NFT)r   rw   r   r   )rS   callbacks     r.   add_callbackz_Context.add_callback  sS    [[""{{$$, #" %%,,X6 #""s   A'&A''A0c                |    | j                   j                  5  d| j                   _        d d d        y # 1 sw Y   y xY wr   )r   rw   r~   rR   s    r.    disable_next_message_compressionz)_Context.disable_next_message_compression  s'    [[""37DKK0 #""   2;c                .    | j                   j                  S r2   )r   rL   rR   s    r.   rL   z_Context.invocation_metadata  s    222r0   c                p    t        j                  | j                  j                  j	                               S r2   )r   decoder   r   peerrR   s    r.   r   z_Context.peer  s$    ~~doo22779::r0   c                T    t        j                  | j                  j                        S r2   )r   peer_identitiesr   r   rR   s    r.   r   z_Context.peer_identities  s    %%doo&:&:;;r0   c                    t        j                  | j                  j                        }||S t	        j
                  |      S r2   )r   peer_identity_keyr   r   r   r   )rS   id_keys     r.   r   z_Context.peer_identity_key  s4    ))$//*>*>?vCW^^F-CCr0   c                    t        j                  | j                  j                        }|i n|}|j	                         D ci c]  \  }}t        j                  |      | c}}S c c}}w r2   )r   auth_contextr   r   itemsr   r   )rS   r   auth_context_dictkeyvalues        r.   r   z_Context.auth_context  sk    **4??+?+?@"."6BL 0557
7
U NN3&7
 	
 
s    A'c                |    | j                   j                  5  || j                   _        d d d        y # 1 sw Y   y xY wr2   )r   rw   r}   )rS   compressions     r.   set_compressionz_Context.set_compression  s'    [[""0;DKK- #""r   c                   | j                   j                  5  | j                   j                  t        u rt	        | j                          n| j                   j
                  rt        | j                   |      }| j                  j                  j                  |ft        | j                                d| j                   _        | j                   j                  j                  t               nt        d      d d d        y # 1 sw Y   y xY w)NFz#Initial metadata no longer allowed!)r   rw   ry   r   r   r{   r   r   r   r   r   r   r   r   
ValueError)rS   initial_metadatar   s      r.   r"   z_Context.send_initial_metadata  s    [[""{{!!Z/ -;;77 ?%5!I OO((;;"&<T[[&I <ADKK8KKOO''(DE$%JKK #""s   CC??Dc                |    | j                   j                  5  || j                   _        d d d        y # 1 sw Y   y xY wr2   )r   rw   r   )rS   r   s     r.   set_trailing_metadataz_Context.set_trailing_metadata  s'    [["",=DKK) #""r   c                .    | j                   j                  S r2   )r   r   rR   s    r.   r   z_Context.trailing_metadata  s    {{,,,r0   c                   |t         j                  j                  k(  r1t        j	                  d       t         j                  j
                  }d}| j                  j                  5  || j                  _        t        j                  |      | j                  _        d| j                  _        t               # 1 sw Y   y xY w)Nz4abort() called with StatusCode.OK; returning UNKNOWN T)r   r5   OK_LOGGERerrorUNKNOWNr   rw   r7   r   encoderC   r   	Exception)rS   r7   rC   s      r.   abortz_Context.abort  s    4??%%%MMF ??**DG[[""#DKK").."9DKK"&DKK+	 #"s   %AB66B?c                    |j                   | j                  _         | j                  |j                  |j                         y r2   )r   r   r
  r7   rC   )rS   statuss     r.   abort_with_statusz_Context.abort_with_status  s*    (.(@(@%

6;;/r0   c                |    | j                   j                  5  || j                   _        d d d        y # 1 sw Y   y xY wr2   )r   rw   r7   )rS   r7   s     r.   set_codez_Context.set_code  s'    [[""#DKK #""r   c                .    | j                   j                  S r2   )r   r7   rR   s    r.   r7   z_Context.code  s    {{r0   c                    | j                   j                  5  t        j                  |      | j                   _        d d d        y # 1 sw Y   y xY wr2   )r   rw   r   r  rC   )rS   rC   s     r.   set_detailsz_Context.set_details  s0    [[""").."9DKK #""s   %AAc                .    | j                   j                  S r2   )r   rC   rR   s    r.   rC   z_Context.details  s    {{"""r0   c                     y r2   rJ   rR   s    r.   _finalize_statez_Context._finalize_state  s    r0   N)r   r   r>   r:   r   r   )rZ   rz   )rZ   floatrZ   None)r   r   rZ   rz   )rZ   r   )rZ   rh   )rZ   zOptional[Sequence[bytes]]rY   )rZ   zMapping[str, Sequence[bytes]])r   zgrpc.CompressionrZ   r  )r   r   rZ   r  )r   r   rZ   r  )r7   grpc.StatusCoderC   rh   rZ   r  )r  zgrpc.StatusrZ   r  )r7   r  rZ   r  )rZ   r  )rC   rh   rZ   r  )rZ   bytes)rG   rH   rI   r   re   r   r   r   r   r   rL   r   r   r   r   r   r"   r   r   r
  r  r  r7   r  rC   r  rJ   r0   r.   r   r   l  s      99:#: : >	:5K&83;<D
<L">-0$ :#r0   r   c                  p    e Zd ZU ded<   ded<   ded<   	 	 	 	 	 	 ddZddZdd	Zdd
ZddZddZ	ddZ
y)_RequestIteratorr:   r   cygrpc.Call_callr   r   c                .    || _         || _        || _        y r2   )r   r  r   )rS   r>   r   r   s       r.   re   z_RequestIterator.__init__  s     
%9"r0   c                   | j                   j                  t        u rt        | j                          y t	        | j                         s
t               | j                  j                  t        j                  t              ft        | j                   | j                  | j                               | j                   j                  j                  t               y r2   )r   ry   r   r   r   StopIterationr  r   r   ReceiveMessageOperationr   r   r   r   r   r   rR   s    r.   _raise_or_start_receive_messagez0_RequestIterator._raise_or_start_receive_message  s    ;;+T[[)%dkk2/!JJ))//=? KKT-G-G KKOO 67r0   c                B   | j                   j                  t        u rt        | j                          t               | j                   j                  &t
        | j                   j                  vr
t               | j                   j                  }d | j                   _        |S r2   )	r   ry   r   r   rx   r   r   r!  AssertionErrorrS   rx   s     r.   _look_for_requestz"_RequestIterator._look_for_request  su    ;;+T[[)  KK'&dkkoo=/!kk))G"&DKKNr0   c                    | j                   j                  5  | j                          	 | j                   j                  j                          | j	                         }||cd d d        S B# 1 sw Y   y xY wr2   )r   rw   r#  waitr'  r&  s     r.   _nextz_RequestIterator._next  s_    [[""002%%**,002&" #" #"s   A	A+*A++A4c                    | S r2   rJ   rR   s    r.   __iter__z_RequestIterator.__iter__  s    r0   c                "    | j                         S r2   r*  rR   s    r.   __next__z_RequestIterator.__next__      zz|r0   c                "    | j                         S r2   r.  rR   s    r.   nextz_RequestIterator.next!  r0  r0   N)r>   r:   r   r  r   r   r  )rZ   r   )rZ   r  )rG   rH   rI   r   re   r#  r'  r*  r,  r/  r2  rJ   r0   r.   r  r    sS    :::: : >	:8#r0   r  c                      fd}|S )Nc            	        j                   5  t              s
	 d d d        y j                  j                  t	        j
                  t              ft        j                               j                  j                  t               	 j                   j                          j                  j                  t        u rrdj                  j                   j"                        } t%        j                  t        j&                  j(                  t+        j,                  |              	 d d d        y j                  t.        u r(	 d d d        y j                  }d _        |cd d d        S # 1 sw Y   y xY w)Nz*"{}" requires exactly one request message.)rw   r   r   r   r   r"  r   r   r   r   r   r)  rx   ry   r   formatr   rK   r   r5   unimplementedr   r  r   )rC   rx   r   r   r>   s     r.   unary_requestz%_unary_request.<locals>.unary_request*  s,   __'. _ 1133LAC$y~~/C 		45OO((*}}, <<72&R&Y&Y ) 6 6 = ='G # % ) & 1 1 ? ? 'w 7	 $(1 _2 #\\Z7#'5 _8 #(--(,&= _  _s#   E2D
E27E2E21E22E;rJ   )r   r>   r   r7  s   ``` r.   _unary_requestr8  %  s    
'B r0   c                :   ddl m}  || ||      5 }	 d }| ||||      }n	 |||      }|dfcd d d        S # t        $ rL}	|j                  5  |j                  r1t        || j                  t        j                  j                  d       n|	|j                  vr	 dj                  |	      }
nb# t        $ rV d}
t        j                  t        j                  t!        |	      |	|	j"                               t        j$                          Y nw xY wt        j                  |
       t        || j                  t        j                  j                  t'        j(                  |
             d d d        n# 1 sw Y   nxY wY d }	~	d d d        yd }	~	ww xY w# 1 sw Y   y xY w)Nr   )_create_servicer_contextT   RPC Abortedz!Exception calling application: {}z1Calling application raised unprintable Exception!NF)r   r:  r	  rw   r   r   r   r   r5   r6   r   r5  r  	exception	tracebackformat_exceptiontype__traceback__	print_excr   r  )r   r>   behaviorargumentr   send_response_callbackr:  rv   response_or_iteratorr=  rC   s              r.   _call_behaviorrG  N  s    .	!5.
	*	#' %1'/g'=($ (0''B$'-
 
  !	==!))11&	 e&6&66."E"L"L%# % .O    ))%66 $Y ) ) 7 7 "++-. %%g.!))11w/	5 !@ [
 
!	
 
sk   F8
FF	AE0B-,E0-AD		E0D	AE0'	F	0E95F	<F	FFFc           
     
   	 t        |      dfS # t        $ r Y yt        $ r}|j                  5  |j                  r1t        || j                  t        j                  j                  d       nw||j                  vridj                  |      }t        j                  |       t        || j                  t        j                  j                  t        j                  |             d d d        n# 1 sw Y   nxY wY d }~yd }~ww xY w)NTr   r;  z!Exception iterating responses: {}r<  )r2  r!  r	  rw   r   r   r   r   r5   r6   r   r5  r  r=  r   r  )r   r>   response_iteratorr=  rC   s        r.   %_take_response_from_response_iteratorrJ    s    
%&,,  __}}NN%%--"	 %"2"22=DDYO!!'*NN%%--NN7+	 __" %s1    	DDC=B5C,#	C=,C5	1C==Dc                    t        j                  ||      }|F|j                  5  t        || j                  t
        j                  j                  d       d d d        y |S # 1 sw Y   y xY w)Ns   Failed to serialize response!)r   	serializerw   r   r   r   r5   r   )r   r>   responseresponse_serializerserialized_responses        r.   _serialize_responserP    sd     "++H6IJ"__!!**0	  ""  s   1A!!A*c                Z    | j                   rt        j                  j                  S t        S r2   )r~   r   	WriteFlagno_compressr   r=   s    r.   %_get_send_message_op_flags_from_staterT    s%     %%+++r0   c                T    | j                   5  d| _        d d d        y # 1 sw Y   y xY wr<  )rw   r~   r=   s    r.   _reset_per_message_staterV    s    	).& 
s   'c                H   |j                   5  t        |      s
	 d d d        y|j                  r9t        |d       t	        j
                  |t        |            f}d|_        t        }n&t	        j
                  |t        |            f}t        }| j                  j                  |t        ||             |j                  j                  |       t        |       	 |j                   j                          ||j                  vrt        |      cd d d        S =# 1 sw Y   y xY wr<  )rw   r   r{   r   r   SendMessageOperationrT  -_SEND_INITIAL_METADATA_AND_SEND_MESSAGE_TOKEN_SEND_MESSAGE_TOKENr   r   r   r   r   rV  r)  )r   r>   rO  r   r   s        r.   _send_responser[    s     
#E* 
 --3E4@//+=eD
 27.E //+=eD
 ,NN--M%7 IIMM% $U+$$&		)/6= 
6 7 
s   DC*DDD!c           	     H   |j                   5  |j                  t        urt        |      }t	        |      }t        j                  |j                  ||t              g}|j                  r|j                  t        |d              |.|j                  t        j                  |t        |                   | j                  j                  |t!        |t"                     d|_        t'        |       |j(                  j+                  t"               d d d        y # 1 sw Y   y xY wr   )rw   ry   r   r?   rD   r   r   r   r   r{   r   r   rX  rT  r   r   r   r   r   rV  r   r   )r   r>   rO  r7   rC   r   s         r.   _statusr]    s    
 
<<z)#E*DuoG44++T7LJ
 --!!"A%"NO".!!//+=eD NN--(0NO "EN$U+IIMM891 
s   DDD!c                D   t        j                  |        	  |       }|1t        | ||||      \  }}|rt        | |||      }	|	t	        | ||	       t        j                          y # t
        $ r t        j                          Y 4w xY w# t        j                          w xY wr2   )	r   'install_context_from_request_call_eventrG  rP  r]  r	  r>  rB  uninstall_context)
r   r>   rC  argument_thunkr   rN  rD  rM  proceedrO  s
             r.   _unary_response_in_poolrc    s     229=#!# .5(H6J!Hg &9uh0C'# '2Iu.AB 	  "   	  "s#   :A& &BB	 BB	 	Bc                    t        j                          d fd}	  |       }|Lt        |d      r|j                  rt	         ||||       n"t	         |||      \  }}	|	rt         ||       t        j                          y # t        $ r t        j                          Y 4w xY w# t        j                          w xY w)Nc                b    | t        d        y t        |       }|t        |       y y r2   )r]  rP  r[  )rM  rO  rN  r   r>   s     r.   send_responsez/_stream_response_in_pool.<locals>.send_response2  sD    Iud+"55(,?# #.y%1DE /r0   experimental_non_blocking)rE  )rM  r   rZ   r  )
r   r_  hasattrrg  rG  3_send_message_callback_to_blocking_iterator_adapterr	  r>  rB  r`  )
r   r>   rC  ra  r   rN  rf  rD  rI  rb  s
   ``   `    r.   _stream_response_in_poolrj  (  s     229=F#!#"=>66(+8 .<uh:N.*!7 G!5-9J 	  "   	  "s$   AB B,)B/ +B,,B/ /Cc                D    | j                   t        uxr | j                   S r2   )ry   r   r   r=   s    r.   r   r   Y  s    <<z)@%...@@r0   c                T    	 t        | ||      \  }}|r ||       t        |      sy y (r2   )rJ  r   )r   r>   rE  rI  rM  rb  s         r.   ri  ri  ]  s>     Au/
' "8,'. r0   c                ~    t        | d      r0t        | j                  t        j                        r| j                  S |S )Nexperimental_thread_pool)rh  
isinstancern  r   ThreadPoolExecutor)rC  default_thread_pools     r.    _select_thread_pool_for_behaviorrr  o  s;     x34))7+E+E: 000""r0   c           
         t        | ||j                        }t        |j                  |      }|j	                  |j
                  j                  t        | ||j                  ||j                  |j                        S r2   )	r8  r   rr  unary_unarysubmitrv   runrc  rN  r   r>   rs   rq  r7  thread_pools         r.   _handle_unary_unaryry  {  s|     #5.==M 3""$7K ""++**	 	r0   c           
         t        | ||j                        }t        |j                  |      }|j	                  |j
                  j                  t        | ||j                  ||j                  |j                        S r2   )	r8  r   rr  unary_streamru  rv   rv  rj  rN  rw  s         r.   _handle_unary_streamr|    s|     #5.==M 3##%8K  ##++**	 	r0   c           
        t        || j                  |j                        t        |j                  |      }|j                  |j                  j                  t        | ||j                  fd|j                  |j                        S )Nc                      S r2   rJ   request_iterators   r.   <lambda>z&_handle_stream_unary.<locals>.<lambda>       r0   )
r  r   r   rr  stream_unaryru  rv   rv  rc  rN  r   r>   rs   rq  rx  r  s        @r.   _handle_stream_unaryr    s     (y~~~BB 3##%8K ## ++**	 	r0   c           
        t        || j                  |j                        t        |j                  |      }|j                  |j                  j                  t        | ||j                  fd|j                  |j                        S )Nc                      S r2   rJ   r  s   r.   r  z'_handle_stream_stream.<locals>.<lambda>  r  r0   )
r  r   r   rr  stream_streamru  rv   rv  rj  rN  r  s        @r.   _handle_stream_streamr    s     (y~~~BB 3$$&9K  $$ ++**	 	r0   c                D   	 	 	 	 dfd}j                         }|s)t        j                  | j                  j                        }t        || j                        }|'|j                  j                  |j                  ||      S |j                  j                  ||      S )Nc                &    j                  |       S r2   )rX   )rW   method_with_handlers    r.   query_handlersz,_find_method_handler.<locals>.query_handlers  s     #**+?@@r0   r[   )
rT   r   r   r   rK   rF   rL   rv   rv  execute)r   r>   r  interceptor_pipeliner  method_namerW   s     `    r.   _find_method_handlerr    s    A1A	(A
 &**,KnnY%;%;%B%BC.%%
 '}}   ((.:N
 	
 }}  1EFFr0   c                    t        d       t        j                  t              t        j                  d ||t              f}| j
                  j                  |fd       y )Nc                    dfS r   rJ   )ignored_event	rpc_states    r.   r  z_reject_rpc.<locals>.<lambda>  s    
r0   )r   r   ReceiveCloseOnServerOperationr   r   r   r   )r   r  r  rC   r   s    `   r.   _reject_rpcr    sW     	(	48,,\:,,&'<	
J NN%%	
r0   c                   |j                   5  | j                  j                  t        j                  t
              ft        |             |j                  j                  t               |j                  r:|j                  rt        | |||      cd d d        S t        | |||      cd d d        S |j                  rt        | |||      cd d d        S t        | |||      cd d d        S # 1 sw Y   y xY wr2   )rw   r   r   r   r  r   r   r   r   r   request_streamingresponse_streamingr  r  r|  ry  )r   r>   rs   rx  s       r.   _handle_with_method_handlerr    s     
))11,?A$U+	
 			45++00,unk 
 ,unk 
  00+unk# 
* +unk+ 
s   BC*C*0C*C**C3c                8   | j                   sy| j                  j                  s|j                         rt	               }	 t        | |||      }|*t        | |t        j                  j                  d       |dfS |r*t        | |t        j                  j                  d       |dfS |t!        | |||      fS y# t        $ rZ}dj                  |      }t        j                  |       t        | |t        j                  j                  d       |dfcY d}~S d}~ww xY w)a  Handles RPC based on provided handlers.

      When receiving a call event from Core, registered method will have its
    name as tag, we pass the tag as registered_method_name to this method,
    then we can find the handler in registered_method_handlers based on
    the method name.

      For call event with unregistered method, the method name will be included
    in rpc_event.call_details.method and we need to query the generics handlers
    to find the actual handler.
    )NNzException servicing handler: {}s   Error in service handler!Ns   Method not found!s   Concurrent RPC limit exceeded!)successr   rK   rT   r:   r  r	  r5  r  r=  r  r   r5   r6   r6  resource_exhaustedr  )	r   r  r  rx  concurrency_exceededr  rs   r=  rC   s	            r.   _handle_callr  -  s2   $ $$(;(@(@(BK		#1#$	N  !!!//$	 d?"!!!441	 d?" +y.+  E  		#7>>yIGg&!!)),	 d?"		#s   B6 6	D?ADDDc                      e Zd ZdZdZdZy)_ServerStagestoppedstartedgraceN)rG   rH   rI   STOPPEDSTARTEDGRACErJ   r0   r.   r  r  o  s    GGEr0   r  c                      e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   	 	 	 	 	 	 	 	 	 	 	 	 d!dZy )"_ServerStatezthreading.RLocklockcygrpc.CompletionQueuecompletion_queuecygrpc.Serverserverrt   rn    Dict[str, grpc.RpcMethodHandler]registered_method_handlers'Optional[_interceptor._ServicePipeline]r  futures.ThreadPoolExecutorrx  r  stagethreading.Eventtermination_eventzList[threading.Event]shutdown_eventsOptional[int]maximum_concurrent_rpcsintactive_rpc_countzSet[_RPCState]
rpc_stateszSet[str]r   rz   server_deallocatedc                   t        j                         | _        || _        || _        t        |      | _        || _        || _        t        j                  | _        t        j                         | _        | j                  g| _        || _        d| _        i | _        t%               | _        t%               | _        d| _        y )Nr   F)r   RLockr  r  r  listrn   r  rx  r  r  r  Eventr  r  r  r  r  r   r  r   r  )rS   r  r  rn   r  rx  r  s          r.   re   z_ServerState.__init__  s     OO%	 0 $%5 6$8!&!))
!*!2 $ 6 67'>$ !*,' %5 #(r0   N)r  r  r  r  rn    Sequence[grpc.GenericRpcHandler]r  r  rx  r  r  r  )rG   rH   rI   r   re   rJ   r0   r.   r  r  v  s    
,,22 @@AA++&&****	M(0( ( ;	(
 F( 0( "/(r0   r  c                |    | j                   5  | j                  j                  |       d d d        y # 1 sw Y   y xY wr2   )r  rn   extend)r>   rn   s     r.   _add_generic_handlersr    s*     
%%&67 
   2;c                |    | j                   5  | j                  j                  |       d d d        y # 1 sw Y   y xY wr2   )r  r  update)r>   method_handlerss     r.   _add_registered_method_handlersr    s)     
((//@ 
r  c                |    | j                   5  | j                  j                  |      cd d d        S # 1 sw Y   y xY wr2   )r  r  add_http2_port)r>   addresss     r.   _add_insecure_portr    s%    	||**73 
s   2;c                    | j                   5  | j                  j                  ||j                        cd d d        S # 1 sw Y   y xY wr2   )r  r  r  _credentials)r>   r  server_credentialss      r.   _add_secure_portr    s3    
 
||**'44
 
s	   &=Ac                    | j                   j                  | j                  | j                  t               | j                  j                  t               y r2   )r  r    r  _REQUEST_CALL_TAGr   r   r=   s    r.   _request_callr    s;    	LL 6 68I 
IIMM#$r0   c                    |}| j                   j                  | j                  | j                  ||       | j                  j	                  |       y r2   )r  request_registered_callr  r   r   )r>   rK   registered_call_tags      r.   _request_registered_callr    sE     	LL((	 
IIMM%&r0   c                    | j                   s]| j                  sQ| j                  j                          | j                  D ]  }|j                           t        j                  | _        yyr   )	r  r   r  destroyr  r   r  r  r  )r>   shutdown_events     r.   _stop_servingr    sP    EII#33N  4"**r0   c                p    | j                   5  | xj                  dz  c_        d d d        y # 1 sw Y   y xY w)N   )r  r  r=   s    r.   _on_call_completedr    s$    	!# 
s   ,5c                    d}|j                   t        u rC j                  5   j                  j	                  t               t               rd}d d d        |S |j                   t        u s'|j                    j                  j                         v rd }|j                    j                  j                         v r3|j                   }t        | j                  j                  |d             }nt         j                        } j                  5   j                  j	                  |j                           j                  d uxr  j                   j                  k\  }t        || j                    j"                  |      \  }}| j$                  j'                  |       |) xj                  dz  c_        |j)                   fd        j*                  t,        j.                  u r5| j                  j                         v rt1         |       nt3                nt               rd}d d d        |S |j                  |      \  }}|D ]
  }		  |	         |? j                  5   j$                  j	                  |       t               rd}d d d        |S |S # 1 sw Y   |S xY w# 1 sw Y   |S xY w# t4        $ r t6        j9                  d       Y w xY w# 1 sw Y   |S xY w)NTFr  c                    t              S r2   )r  )unused_futurer>   s    r.   r  z-_process_event_and_continue.<locals>.<lambda>  s    *<U*Cr0   zException calling callback!)tag_SHUTDOWN_TAGr  r   r   r  r  r  keysr`   r4   rk   rn   r  r  r  r  rx  r  r   add_done_callbackr  r  r  r  r  r	  r  r=  )
r>   eventshould_continueregistered_method_namer  r  r  
rpc_futurer   r   s
   `         r.   _process_event_and_continuer    s    OyyM!ZZII]+U#"' ~ u 			&&9988==??!%9988==??%*YY""3&0044*D# #1&&# ZZIIUYY'--T9 L**e.K.KK ! %1#**!!$%!Iz $  $$Y/%&&!+&,,C {{l222*77<<>? -U4JK!%(u%"'; T   %yy/	9!HA
 "
    ''	2 '&+O  ? ~ U T   A!!"?@A  s6   -JDJ&J3$)KJ#&J03KKK!c                   	 t        j                          t        z   }| j                  j                  |      }| j                  rt        |        |j                  t        j                  j                  k7  rt        | |      sy d }r2   )r   "_DEALLOCATED_SERVER_CHECK_PERIOD_Sr  pollr  _begin_shutdown_oncecompletion_typer   CompletionTypequeue_timeoutr  )r>   timeoutr  s      r.   _server  /  sp    
))+ BB&&++G4## '  F$9$9$G$GG.ue<  r0   c                :   | j                   5  | j                  t        j                  u r^| j                  j                  | j                  t               t        j                  | _        | j                  j                  t               d d d        y # 1 sw Y   y xY wr2   )r  r  r  r  r  r   r  r  r  r   r   r=   s    r.   r  r  >  s\    	;;,...LL!!%"8"8-H&,,EKIIMM-(	 
s   A;BBc                $     j                   5   j                  t        j                  u r/t	        j
                         j                          cd d d        S t                t	        j
                          j                  j                          j                  j                          n8 fd}t	        j                  |      }|j                          cd d d        S 	 d d d        j                          S # 1 sw Y   xY w)Nc                     j                          j                  5  j                  j                          d d d        y # 1 sw Y   y xY wN)r  )r)  r  r  cancel_all_calls)r  r  r>   s   r.   cancel_all_calls_after_gracez+_stop.<locals>.cancel_all_calls_after_graceT  s5    "'''6557 $s   AA)target)r  r  r  r  r   r  r   r  r  r   r  r  Threadstartr)  )r>   r  r  threadr  s   ``  @r.   _stopr   F  s    	;;,...&__.N !	 
 !'&__.N!!((8}--/8
 #))1MN%) 
 0 
* - 
s   ADBDDc                   | j                   5  | j                  t        j                  urt	        d      | j
                  j                          t        j                  | _        | j                  j                         D ]  }t        | |        t        |        t        j                  t        | f      }d|_        |j                          d d d        y # 1 sw Y   y xY w)Nz$Cannot start already-started server!)r  argsT)r  r  r  r  r   r  r  r  r  r  r  r  r   r  r  daemon)r>   rK   r  s      r.   _startr  `  s    	;;l222CDD"**66;;=F$UF3 > 	e!!uh? 
s   C CCc                d    | D ]+  }t        |dd       }|t        dj                  |             y )Nrq   zT"{}" must conform to grpc.GenericRpcHandler type but does not have "service" method!)getattrAttributeErrorr5  )generic_rpc_handlersgeneric_rpc_handlerservice_attributes      r.   _validate_generic_rpc_handlersr  p  sB      4#$7DI$ --3V4G-H   4r0   c                x    t        j                  |      }t        j                  |      }t	        |       |z   |z   S r2   )r   create_channel_optionr   (create_server_call_tracer_factory_optionr   )base_optionsr   xdscompression_option'maybe_server_call_tracer_factory_options        r.   _augment_optionsr  |  sG    
 &;;KH??D , 	l
	
1	2r0   c                      e Zd ZU ded<   	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 ddZ	 	 	 	 	 	 ddZddZ	 	 	 	 	 	 ddZddZ	ddd
Z
ddZd Zy	)_Serverr  r   c                    t        j                         }t        j                  t        |||      |      }	|	j	                  |       t        ||	|t        j                  |      ||      | _        |	| _	        y r2   )
r   CompletionQueueServerr  register_completion_queuer  r   service_pipeliner   
_cy_server)
rS   rx  rn   interceptorsoptionsr  r   r  r  r  s
             r.   re   z_Server.__init__  sn     "113/cJCP(()9:")),7#
 !r0   c                F    t        |       t        | j                  |       y r2   )r  r  r   )rS   r  s     r.   add_generic_rpc_handlersz _Server.add_generic_rpc_handlers  s     	'';<dkk+?@r0   c                   | j                   j                  5  | j                   j                  t        j                  u r
	 d d d        y 	 d d d        |j                         D ci c]  \  }}t        j                  ||      | }}}|j                         D ]  }| j                  j                  |        t        | j                   |       y # 1 sw Y   xY wc c}}w r2   )r   r  r  r  r  r   r   fully_qualified_methodr  r  register_methodr  )rS   service_namer  rK   rs   method_to_handlersr!  s          r.   add_registered_method_handlersz&_Server.add_registered_method_handlers  s     [[{{  L$8$88 8  +:*?*?*A
*A& **<@.P*A 	 
 '9&=&=&?"OO++,BC '@'5GH 

s   (C$!CCc           	     |    t        j                  |t        | j                  t        j                  |                  S r2   )r   validate_port_binding_resultr  r   r  )rS   r  s     r.   add_insecure_portz_Server.add_insecure_port  s/    33'W^^G5LM
 	
r0   c           	     ~    t        j                  |t        | j                  t        j                  |      |            S r2   )r   r'  r  r   r  )rS   r  r  s      r.   add_secure_portz_Server.add_secure_port  s7     33W^^G46H
 	
r0   c                .    t        | j                         y r2   )r  r   rR   s    r.   r  z_Server.start  s    t{{r0   Nc                    t        j                  | j                  j                  j                  | j                  j                  j                  |      S r  )r   r)  r   r  is_set)rS   r  s     r.   wait_for_terminationz_Server.wait_for_termination  s>     ||KK))..KK))00
 	
r0   c                .    t        | j                  |      S r2   )r   r   )rS   r  s     r.   stopz_Server.stop  s    T[[%((r0   c                @    t        | d      rd| j                  _        y y )Nr   T)rh  r   r  rR   s    r.   __del__z_Server.__del__  s    4" .2DKK* #r0   )rx  r  rn   r  r   Sequence[grpc.ServerInterceptor]r  Sequence[ChannelArgumentType]r  r  r   r|   r  rz   r   Iterable[grpc.GenericRpcHandler]rZ   r  )r#  rh   r  r  rZ   r  )r  rh   rZ   r  )r  rh   r  grpc.ServerCredentialsrZ   r  r  r2   )r  Optional[float]rZ   rz   )r  r8  rZ   r  )rG   rH   rI   r   re   r  r%  r(  r*  r  r.  r0  r2  rJ   r0   r.   r  r    s    !/! ;! 7	!
 /! "/! 0! !.A$DA	AII :I 
	I&



0F
	

)2r0   r  c           	     :    t        |       t        | ||||||      S r2   )r  r  )rx  r  r  r  r  r   r  s          r.   create_serverr:    s/     ##78 r0   )r-   r   rZ   r  )r7   r  rZ   cygrpc.StatusCode)r>   r:   rZ   r;  )r>   r:   r7   r;  rZ   r;  )r>   r:   rZ   r  )r>   r:   rZ   r  )r>   r:   r   rh   rZ   r   )r>   r:   r   rh   rZ   r   )r>   r:   r   r   rZ   r   )r>   r:   r   r   rZ   zcygrpc.Operation)
r>   r:   r   r  r7   r;  rC   r  rZ   r  )r>   r:   rZ   r   )r>   r:   r   r  r   r   rZ   r   )r   r   r>   r:   r   r   rZ   Callable[[], Any]r2   )r   r   r>   r:   rC  r   rD  r   r   r   rE  z(Optional[Callable[[ResponseType], None]]rZ   z8Tuple[Union[ResponseType, Iterator[ResponseType]], bool])r   r   r>   r:   rI  Iterator[ResponseType]rZ   zTuple[ResponseType, bool])
r   r   r>   r:   rM  r   rN  Optional[SerializingFunction]rZ   r   )r>   r:   rZ   zUnion[int, cygrpc.WriteFlag])r   r   r>   r:   rO  r  rZ   rz   )r   r   r>   r:   rO  r   rZ   r  )r   r   r>   r:   rC  r   ra  r<  r   r>  rN  r>  rZ   r  )r   r   r>   r:   rC  r   ra  r<  r   r   rN  r>  rZ   r  )r>   r:   rZ   rz   )
r   r   r>   r:   rE  zCallable[[ResponseType], None]rI  r=  rZ   r  )rC  r   rq  r  rZ   r  )
r   r   r>   r:   rs   grpc.RpcMethodHandlerrq  r  rZ   futures.Future)
r   r   r>   r:   r  rN   r  r  rZ   r\   )r   r   r  r:   r  r;  rC   r  )
r   r   r>   r:   rs   r?  rx  r  rZ   r@  )r   r   r  rN   r  r  rx  r  r  rz   rZ   z4Tuple[Optional[_RPCState], Optional[futures.Future]])r>   r  rn   r6  rZ   r  )r>   r  r  r  rZ   r  )r>   r  r  r  rZ   r  )r>   r  r  r  r  r7  rZ   r  )r>   r  rZ   r  )r>   r  rK   rh   rZ   r  )r>   r  rZ   rz   )r>   r  r  r   rZ   rz   )r>   r  r  r8  rZ   r  r5  )r  r4  r   r|   r  rz   rZ   r4  )rx  r  r  r  r  r3  r  r4  r  r  r   r|   r  rz   rZ   r  )__doc__
__future__r   r]   collections
concurrentr   r   enumloggingr   r   r>  typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   grpc._cythonr   grpc._typingr   r   r   r   r   r   r   r   r   	getLoggerrG   r  r  r  r   r   r   rZ  rY  r   r   r   r   r   r   r  _INF_TIMEOUTr/   r9   r?   rA   rD   
namedtupleHandlerCallDetailsrF   ABCrN   r`   rk   objectr:   r   r   r   r   r   r   r   r   r   r   ServicerContextr   r  r8  rG  rJ  rP  rT  rV  r[  r]  rc  rj  r   ri  rr  ry  r|  r  r  r  r  r  r  uniqueEnumr  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r:  rJ   r0   r.   <module>rS     s   2 " 
                  3 , . % , % , * .
'

H
%" !: 6 * $ * . "; 5 9 	

%( "7M
------;
	K	
 	
		$cgg 	$( ($W ,   F		 		# 6$ 6'/@KP	D
#
 : 	B!wt## wt<v <~&&& :& 	&^ HL777 )7 	7
 :7 E7 >7t . 	<### # 7	#
 #(!/
!7!7(1!7HM!7	!7H::: ): 
	:@### )# &	#
 8# 7# 
#8.#.#.# ).# &	.#
 :.# 7.# 
.#bA ; .	
 
$	#(	#3	#  	# * 4	
 0 * 4	
 0 * 4	
 0 * 4	
 0GGG !G B	G
 %G8  	, * ,	
 @?? ? B? ,	?
 ? :?D 499  -(6 -(`88+K8	8AA*JA	A4



 /
 		
%'$DD 0D	DN)4 	:			/+ 
 #	 W2dkk W2t+: 3 +	
 + , 
 r0   