o
    7?e                     @  s  d Z ddlm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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& e'e(Z)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7d Z8dd%d&Z9dd*d+Z:dd.d/Z;dd0d1Z<dd2d3Z=G d4d5 d5e>d5d6ej?Z@G d7d- d-eAZBdd9d:ZCdd>d?ZDddAdBZEddEdFZFddHdIZGddMdNZHddOdPZIddSdTZJddUdVZKddWdXZLG dYdZ dZejMZNG d[d\ d\eAZOdd_d`ZP	dddhdiZQddmdnZRddsdtZSddvdwZTddxdyZUdd|d}ZVdd~dZWdddZXdddZYdddZZdddZ[dddZ\dddZ]dddZ^dddZ_dddZ`dddZadddZbdddZcd ddZdejeG dd dejfZgG dd deAZhdddZidddZjdddZkdddZldddZmdddZndddZodddĄZpdddƄZqddd˄Zrddd̈́ZsdddЄZtd	ddքZuG dd؄ dejvZwd
ddZxdS (  z+Service-side implementation of gRPC Python.    )annotationsN)futures)AnyCallableIterableIteratorListMappingOptionalSequenceSetTupleUnion)_common)_compression)_interceptor)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    eArequest_eventcygrpc.BaseEventreturnbytesc                 C  s   | j d  S Nr   )batch_operationsmessage)r&    r-   M/home/www/facesmatcher.com/pyenv/lib/python3.10/site-packages/grpc/_server.py_serialized_requestQ      r/   codegrpc.StatusCodecygrpc.StatusCodec                 C  s    t j| }|d u rtjjS |S N)r   Z!STATUS_CODE_TO_CYGRPC_STATUS_CODEgetr   
StatusCodeunknown)r1   Zcygrpc_coder-   r-   r.   _application_codeU   s   r8   state	_RPCStatec                 C  s   | j d u r	tjjS t| j S r4   )r1   r   r6   okr8   r9   r-   r-   r.   _completion_codeZ   s   

r=   c                 C  s   | j d u r|S t| j S r4   )r1   r8   )r9   r1   r-   r-   r.   _abortion_codea   s   

r>   c                 C  s   | j d u rdS | j S )N    )detailsr<   r-   r-   r.   _detailsj   s   rA   c                   @  s   e Zd ZdS )_HandlerCallDetailsN)__name__
__module____qualname__r-   r-   r-   r.   rB   n   s    
rB   )methodinvocation_metadatac                   @  s   e Zd ZU 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d ZdS )r:   zthreading.Condition	conditionr   requeststrclientboolinitial_metadata_allowedOptional[grpc.Compression]compression_algorithmdisable_next_compressionOptional[MetadataType]trailing_metadatazOptional[grpc.StatusCode]r1   Optional[bytes]r@   statusedzList[Exception]
rpc_errorsz#Optional[List[NullaryCallbackType]]	callbacksabortedc                 C  s^   t  | _t | _d | _t| _d| _d | _	d| _
d | _d | _d | _d| _g | _g | _d| _d S NTF)	threading	ConditionrH   setduerI   _OPENrK   rM   rO   rP   rR   r1   r@   rT   rU   rV   rW   selfr-   r-   r.   __init__   s   

z_RPCState.__init__N)rC   rD   rE   __annotations__r   rJ   r\   r`   r-   r-   r-   r.   r:   {   s    
 Nonec                 C  s   t  }| j| |r4   )grpcZRpcErrorrU   append)r9   Z	rpc_errorr-   r-   r.   _raise_rpc_error   s   re   tokenrJ   r   c                 C  s2   | j | t| s| j s| j}d | _| |fS dS )NNr-   )r\   remove_is_rpc_state_activerV   )r9   rf   rV   r-   r-   r.   _possibly_finish_call   s   rj   r   c                       fdd}|S )Nc                   s4    j  t W  d    S 1 sw   Y  d S r4   )rH   rj   )Z$unused_send_status_from_server_eventr9   rf   r-   r.   r"         $z9_send_status_from_server.<locals>.send_status_from_serverr-   )r9   rf   r"   r-   rl   r.   _send_status_from_server   s   rn   metadatarQ   c                 C  sv   | j . | jr(t| jf}|d u r|W  d    S |t| W  d    S |W  d    S 1 s4w   Y  d S r4   )rH   rO   r   Z!compression_algorithm_to_metadatatuple)r9   ro   Zcompression_metadatar-   r-   r.   _get_initial_metadata   s   

$rq   cygrpc.Operationc                 C  s   t t| |t}|S r4   )r   ZSendInitialMetadataOperationrq   _EMPTY_FLAGS)r9   ro   	operationr-   r-   r.   _get_initial_metadata_operation   s   
ru   callcygrpc.Callr@   c                 C  s   | j turHt| |}| jd u r|n| j}| jr(t| d t| j||t	f}t
}nt| j||t	f}t}||t| | d| _| j| d S d S NT)rK   
_CANCELLEDr>   r@   rM   ru   r   SendStatusFromServerOperationrR   rs   8_SEND_INITIAL_METADATA_AND_SEND_STATUS_FROM_SERVER_TOKEN_SEND_STATUS_FROM_SERVER_TOKENstart_server_batchrn   rT   r\   add)r9   rv   r1   r@   Zeffective_codeZeffective_details
operationsrf   r-   r-   r.   _abort   s6   

	
r   c                       fdd}|S )Nc                   sd    j % | jd  rt _n jtu rt _ j   t t	W  d    S 1 s+w   Y  d S r*   )
rH   r+   r%   ry   rK   r]   _CLOSED
notify_allrj   _RECEIVE_CLOSE_ON_SERVER_TOKEN)Zreceive_close_on_server_eventr<   r-   r.   r      s   

$z9_receive_close_on_server.<locals>.receive_close_on_serverr-   )r9   r   r-   r<   r.   _receive_close_on_server   s   	r   request_deserializerOptional[DeserializingFunction]c                       fdd}|S )Nc                   s   t | }|d u r/j jtu rt_j  ttW  d    S 1 s(w   Y  d S t	|}j# |d u rGt
 tjjd n|_j  ttW  d    S 1 s^w   Y  d S )Ns    Exception deserializing request!)r/   rH   rK   r]   r   r   rj   _RECEIVE_MESSAGE_TOKENr   Zdeserializer   r   r6   internalrI   )Zreceive_message_eventZserialized_requestrI   rv   r   r9   r-   r.   r      s.   

$
$z)_receive_message.<locals>.receive_messager-   )r9   rv   r   r    r-   r   r.   _receive_message   s   r   c                   r   )Nc                   s4    j  t tW  d    S 1 sw   Y  d S r4   )rH   rj   _SEND_INITIAL_METADATA_TOKEN)Z"unused_send_initial_metadata_eventr<   r-   r.   r   "  rm   z5_send_initial_metadata.<locals>.send_initial_metadatar-   )r9   r   r-   r<   r.   _send_initial_metadata!  s   r   c                   rk   )Nc                   s>    j   j   t W  d    S 1 sw   Y  d S r4   )rH   r   rj   )Zunused_send_message_eventrl   r-   r.   r!   *  s   
$z#_send_message.<locals>.send_messager-   )r9   rf   r!   r-   rl   r.   _send_message)  s   r   c                   @  s  e Zd ZU ded< ded< ded< dLd	d
ZdMddZdNddZdOddZdPddZdOddZ	dQddZ
dRdd ZdSd"d#ZdTd%d&ZdUd(d)ZdVd,d-ZdWd0d1ZdXd3d4ZdQd5d6ZdYd:d;ZdZd>d?Zd[d@dAZd\dBdCZd]dDdEZd^dGdHZdOdIdJZdKS )__Contextr'   
_rpc_eventr:   _stater   r   	rpc_eventr9   c                 C     || _ || _|| _d S r4   )r   r   _request_deserializer)r_   r   r9   r   r-   r-   r.   r`   7     
z_Context.__init__r(   rL   c                 C  s6   | j j t| j W  d    S 1 sw   Y  d S r4   )r   rH   ri   r^   r-   r-   r.   	is_activeA  s   
$z_Context.is_activefloatc                 C  s   t | jjjt  dS r*   )maxr   call_detailsdeadlinetimer^   r-   r-   r.   time_remainingE  s   z_Context.time_remainingrb   c                 C  s   | j j  d S r4   )r   rv   cancelr^   r-   r-   r.   r   H  s   z_Context.cancelcallbackr   c                 C  s\   | j j  | j jd u r	 W d    dS | j j| 	 W d    dS 1 s'w   Y  d S )NFT)r   rH   rV   rd   )r_   r   r-   r-   r.   add_callbackK  s   
$z_Context.add_callbackc                 C  s6   | j j d| j _W d    d S 1 sw   Y  d S rx   )r   rH   rP   r^   r-   r-   r.    disable_next_message_compressionS     

"z)_Context.disable_next_message_compressionrQ   c                 C     | j jS r4   )r   rG   r^   r-   r-   r.   rG   W     z_Context.invocation_metadatarJ   c                 C  s   t | jj S r4   )r   decoder   rv   peerr^   r-   r-   r.   r   Z     z_Context.peerOptional[Sequence[bytes]]c                 C  s   t | jjS r4   )r   peer_identitiesr   rv   r^   r-   r-   r.   r   ]  r0   z_Context.peer_identitiesOptional[str]c                 C  s$   t | jj}|d u r|S t|S r4   )r   peer_identity_keyr   rv   r   r   )r_   Zid_keyr-   r-   r.   r   `  s   z_Context.peer_identity_keyMapping[str, Sequence[bytes]]c                 C  s0   t | jj}|d u ri n|}dd | D S )Nc                 S  s   i | ]
\}}t ||qS r-   )r   r   ).0keyvaluer-   r-   r.   
<dictcomp>g  s    
z)_Context.auth_context.<locals>.<dictcomp>)r   auth_contextr   rv   items)r_   r   Zauth_context_dictr-   r-   r.   r   d  s
   z_Context.auth_contextcompressiongrpc.Compressionc                 C  6   | j j || j _W d    d S 1 sw   Y  d S r4   )r   rH   rO   )r_   r   r-   r-   r.   set_compressionl  r   z_Context.set_compressioninitial_metadatar   c                 C  s   | j jC | j jtu rt| j  n&| j jr3t| j |}| jj	|ft
| j  d| j _| j jt ntdW d    d S W d    d S 1 sJw   Y  d S )NFz#Initial metadata no longer allowed!)r   rH   rK   ry   re   rM   ru   r   rv   r}   r   r\   r~   r   
ValueError)r_   r   rt   r-   r-   r.   r   p  s"   
"z_Context.send_initial_metadatarR   c                 C  r   r4   )r   rH   rR   )r_   rR   r-   r-   r.   set_trailing_metadata  r   z_Context.set_trailing_metadatac                 C  r   r4   )r   rR   r^   r-   r-   r.   rR     r   z_Context.trailing_metadatar1   r2   r@   c                 C  sd   |t jjkrtd t jj}d}| jj || j_t	
|| j_d| j_t 1 s+w   Y  d S )Nz4abort() called with StatusCode.OK; returning UNKNOWN T)rc   r6   OK_LOGGERerrorUNKNOWNr   rH   r1   r   encoder@   rW   	Exception)r_   r1   r@   r-   r-   r.   abort  s   
z_Context.abortstatusgrpc.Statusc                 C  s   |j | j_ | |j|j d S r4   )rR   r   r   r1   r@   )r_   r   r-   r-   r.   abort_with_status  s   
z_Context.abort_with_statusc                 C  r   r4   )r   rH   r1   )r_   r1   r-   r-   r.   set_code  r   z_Context.set_codec                 C  r   r4   )r   r1   r^   r-   r-   r.   r1     r   z_Context.codec                 C  s<   | j j t|| j _W d    d S 1 sw   Y  d S r4   )r   rH   r   r   r@   )r_   r@   r-   r-   r.   set_details  s   
"z_Context.set_detailsr)   c                 C  r   r4   )r   r@   r^   r-   r-   r.   r@     r   z_Context.detailsc                 C  s   d S r4   r-   r^   r-   r-   r.   _finalize_state     z_Context._finalize_stateN)r   r'   r9   r:   r   r   )r(   rL   )r(   r   r(   rb   )r   r   r(   rL   )r(   rQ   )r(   rJ   )r(   r   )r(   r   )r(   r   )r   r   r(   rb   )r   r   r(   rb   )rR   r   r(   rb   )r1   r2   r@   rJ   r(   rb   )r   r   r(   rb   )r1   r2   r(   rb   )r(   r2   )r@   rJ   r(   rb   )r(   r)   )rC   rD   rE   ra   r`   r   r   r   r   r   rG   r   r   r   r   r   r   r   rR   r   r   r   r1   r   r@   r   r-   r-   r-   r.   r   2  s4   
 





















r   c                   @  sl   e Zd ZU ded< ded< ded< dd
dZdddZdddZdddZdddZdddZ	dddZ
dS ) _RequestIteratorr:   r   rw   _callr   r   r9   rv   r   c                 C  r   r4   )r   r   r   )r_   r9   rv   r   r-   r-   r.   r`     r   z_RequestIterator.__init__r(   rb   c                 C  s`   | j jtu rt| j  d S t| j st | jt	t
ft| j | j| j | j jt d S r4   )r   rK   ry   re   ri   StopIterationr   r}   r   ReceiveMessageOperationrs   r   r   r\   r~   r   r^   r-   r-   r.   _raise_or_start_receive_message  s   

z0_RequestIterator._raise_or_start_receive_messager   c                 C  sN   | j jtu rt| j  t | j jd u rt| j jvrt | j j}d | j _|S r4   )	r   rK   ry   re   rI   r   r\   r   AssertionErrorr_   rI   r-   r-   r.   _look_for_request  s   


z"_RequestIterator._look_for_requestc                 C  sX   | j j |   	 | j j  |  }|d ur!|W  d    S q
1 s%w   Y  d S r4   )r   rH   r   waitr   r   r-   r-   r.   _next  s   
z_RequestIterator._nextc                 C  s   | S r4   r-   r^   r-   r-   r.   __iter__  r   z_RequestIterator.__iter__c                 C     |   S r4   r   r^   r-   r-   r.   __next__  r   z_RequestIterator.__next__c                 C  r   r4   r   r^   r-   r-   r.   next  r   z_RequestIterator.nextN)r9   r:   rv   rw   r   r   r   )r(   r   )r(   r   )rC   rD   rE   ra   r`   r   r   r   r   r   r   r-   r-   r-   r.   r     s   
 





	
r   r   Callable[[], Any]c                   r   )Nc                    s   j p ts	 W d    d S jttftj  j	t
 	 j   jd u rcjtu rTdjj} tjtjjt|  	 W d    d S jtu rb	 W d    d S nj}d _|W  d    S q(1 svw   Y  d S )NTz*"{}" requires exactly one request message.)rH   ri   rv   r}   r   r   rs   r   r\   r~   r   r   rI   rK   r   formatr   rF   r   r6   unimplementedr   r   ry   )r@   rI   r   r   r9   r-   r.   unary_request  sH   




z%_unary_request.<locals>.unary_requestr-   )r   r9   r   r   r-   r   r.   _unary_request  s   !r   behaviorr   argumentr   send_response_callback(Optional[Callable[[ResponseType], None]]8Tuple[Union[ResponseType, Iterator[ResponseType]], bool]c                 C  sV  ddl m} || ||}zd }|d ur||||}n|||}|dfW W  d    S  ty }	 zi|jQ |jrEt|| jtjj	d n;|	|j
vrzd|	}
W n tyi   d}
ttt|	|	|	j Y nw t  t|
 t|| jtjj	t|
 W d    n1 sw   Y  W Y d }	~	W d    dS d }	~	ww 1 sw   Y  d S )Nr   )_create_servicer_contextT   RPC Abortedz!Exception calling application: {}z1Calling application raised unprintable Exception!NF)rc   r   r   rH   rW   r   rv   r   r6   r7   rU   r   r   	exception	tracebackformat_exceptiontype__traceback__	print_excr   r   )r   r9   r   r   r   r   r   contextZresponse_or_iteratorr   r@   r-   r-   r.   _call_behavior  sl   



 r   response_iteratorIterator[ResponseType]Tuple[ResponseType, bool]c                 C  s   zt |dfW S  ty   Y dS  ty` } zD|j2 |jr*t|| jtjj	d n||j
vrFd|}t| t|| jtjj	t| W d    n1 sPw   Y  W Y d }~dS d }~ww )NTrx   r   z!Exception iterating responses: {}r   )r   r   r   rH   rW   r   rv   r   r6   r7   rU   r   r   r   r   r   )r   r9   r   r   r@   r-   r-   r.   %_take_response_from_response_iteratorN  s6   


r   responseresponse_serializerOptional[SerializingFunction]rS   c                 C  sX   t ||}|d u r*|j t|| jtjjd W d    d S 1 s#w   Y  d S |S )Ns   Failed to serialize response!)r   	serializerH   r   rv   r   r6   r   )r   r9   r   r   serialized_responser-   r-   r.   _serialize_responsel  s   
r   Union[int, cygrpc.WriteFlag]c                 C  s   | j rtjjS tS r4   )rP   r   Z	WriteFlagZno_compressrs   r<   r-   r-   r.   %_get_send_message_op_flags_from_state  s   r   c                 C  s2   | j  d| _W d    d S 1 sw   Y  d S r   )rH   rP   r<   r-   r-   r.   _reset_per_message_state  s   "r   r   rL   c                 C  s   |j Z t|s	 W d    dS |jr't|d t|t|f}d|_t}nt|t|f}t}| j	
|t|| |j| t| 	 |j   ||jvr\t|W  d    S qG1 s`w   Y  d S r   )rH   ri   rM   ru   r   SendMessageOperationr   -_SEND_INITIAL_METADATA_AND_SEND_MESSAGE_TOKEN_SEND_MESSAGE_TOKENrv   r}   r   r\   r~   r   r   )r   r9   r   r   rf   r-   r-   r.   _send_response  s>   


r   c                 C  s   |j Y |jturTt|}t|}t|j||tg}|j	r&|
t|d  |d ur5|
t|t| | j|t|t d|_t| |jt W d    d S W d    d S 1 s_w   Y  d S rx   )rH   rK   ry   r=   rA   r   rz   rR   rs   rM   rd   ru   r   r   rv   r}   rn   r|   rT   r   r\   r~   )r   r9   r   r1   r@   r   r-   r-   r.   _status  s6   

"r   argument_thunkc           
      C  s   t |  zBz&| }|d ur+t| ||||\}}|r+t| |||}	|	d ur+t| ||	 W n ty9   t  Y nw W t   d S W t   d S t   w r4   )	r   'install_context_from_request_call_eventr   r   r   r   r   r   uninstall_context)
r   r9   r   r  r   r   r   r   proceedr   r-   r-   r.   _unary_response_in_pool  s*   

r  c           
        s   t  d	 fdd}zKz/| }|d ur=t|dr*|jr*t||||d nt|||\}}	|	r=t|| W n tyK   t  Y nw W t 	  d S W t 	  d S t 	  w )
Nr   r   r(   rb   c                   sB   | d u rt d  d S t|  }|d urt| d S d S r4   )r   r   r   )r   r   r   r   r9   r-   r.   send_response  s   z/_stream_response_in_pool.<locals>.send_responseexperimental_non_blocking)r   )r   r   r(   rb   )
r   r  hasattrr  r   3_send_message_callback_to_blocking_iterator_adapterr   r   r   r  )
r   r9   r   r  r   r   r  r   r   r  r-   r  r.   _stream_response_in_pool  s@   

	
r  c                 C  s   | j tuo| j S r4   )rK   ry   rT   r<   r-   r-   r.   ri     r   ri   Callable[[ResponseType], None]c                 C  s2   	 t | ||\}}|r|| t|sd S nd S qr4   )r   ri   )r   r9   r   r   r   r  r-   r-   r.   r
  #  s   r
  default_thread_poolfutures.ThreadPoolExecutorc                 C  s"   t | drt| jtjr| jS |S )Nexperimental_thread_pool)r	  
isinstancer  r   ThreadPoolExecutor)r   r  r-   r-   r.    _select_thread_pool_for_behavior5  s
   r  method_handlergrpc.RpcMethodHandlerfutures.Futurec              	   C  6   t | ||j}t|j|}|t| ||j||j|jS r4   )r   r   r  Zunary_unarysubmitr  r   r   r9   r  r  r   thread_poolr-   r-   r.   _handle_unary_unaryA     r  c              	   C  r  r4   )r   r   r  Zunary_streamr  r  r   r  r-   r-   r.   _handle_unary_streamX  r  r  c              	     @   t || j|j t|j|}|t| ||j fdd|j|jS )Nc                         S r4   r-   r-   Zrequest_iteratorr-   r.   <lambda>      z&_handle_stream_unary.<locals>.<lambda>)r   rv   r   r  Zstream_unaryr  r  r   r   r9   r  r  r  r-   r  r.   _handle_stream_unaryo     

r#  c              	     r  )Nc                     r  r4   r-   r-   r  r-   r.   r     r!  z'_handle_stream_stream.<locals>.<lambda>)r   rv   r   r  Zstream_streamr  r  r   r"  r-   r  r.   _handle_stream_stream  r$  r%  generic_handlersList[grpc.GenericRpcHandler]interceptor_pipeline'Optional[_interceptor._ServicePipeline]Optional[grpc.RpcMethodHandler]c                   s@   d fdd}t t| jj| j}|d ur|||S ||S )Nhandler_call_detailsrB   r(   r*  c                   s(    D ]}| | }|d ur|  S qd S r4   )service)r+  Zgeneric_handlerr  r&  r-   r.   query_handlers  s   
z,_find_method_handler.<locals>.query_handlers)r+  rB   r(   r*  )rB   r   r   r   rF   rG   execute)r   r&  r(  r.  r+  r-   r-  r.   _find_method_handler  s   	r0  r   c                   sB   t   t d tttd ||tf}| j| fdd  S )Nc                   s    dfS rg   r-   )Zignored_event	rpc_stater-   r.   r     s   z_reject_rpc.<locals>.<lambda>)r:   ru   r   ReceiveCloseOnServerOperationrs   rz   rv   r}   )r   r   r@   r   r-   r1  r.   _reject_rpc  s   
r4  r   Tuple[_RPCState, futures.Future]c                 C  s   t  }|j] | jttft| |j	t
 |jr@|jr0|t| |||fW  d    S |t| |||fW  d    S |jrS|t| |||fW  d    S |t| |||fW  d    S 1 sfw   Y  d S r4   )r:   rH   rv   r}   r   r3  rs   r   r\   r~   r   Zrequest_streamingZresponse_streamingr%  r#  r  r  )r   r  r  r9   r-   r-   r.   _handle_with_method_handler  s4   
$r6  concurrency_exceeded4Tuple[Optional[_RPCState], Optional[futures.Future]]c              
   C  s   | j sdS | jjd urZzt| ||}W n& ty9 } zd|}t| t| t	j
jdd fW  Y d }~S d }~ww |d u rHt| t	j
jdd fS |rTt| t	j
jdd fS t| ||S dS )N)NNzException servicing handler: {}s   Error in service handler!s   Method not found!s   Concurrent RPC limit exceeded!)successr   rF   r0  r   r   r   r   r4  r   r6   r7   r   Zresource_exhaustedr6  )r   r&  r(  r  r7  r  r   r@   r-   r-   r.   _handle_call  sN   

	r:  c                   @  s   e Zd ZdZdZdZdS )_ServerStagestoppedstartedgraceN)rC   rD   rE   STOPPEDSTARTEDGRACEr-   r-   r-   r.   r;     s    r;  c                   @  s   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!ddZd S )"_ServerStatezthreading.RLocklockcygrpc.CompletionQueuecompletion_queuecygrpc.Serverserverr'  r&  r)  r(  r  r  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\   rL   server_deallocated Sequence[grpc.GenericRpcHandler]c                 C  sn   t  | _|| _|| _t|| _|| _|| _t	j
| _t  | _| jg| _|| _d| _t | _t | _d| _d S )Nr   F)rY   RLockrC  rE  rG  listr&  r(  r  r;  r?  rH  EventrJ  rK  rM  rO  r[   rP  r\   rQ  )r_   rE  rG  r&  r(  r  rM  r-   r-   r.   r`   8  s   
	



z_ServerState.__init__N)rE  rD  rG  rF  r&  rR  r(  r)  r  r  rM  rL  )rC   rD   rE   ra   r`   r-   r-   r-   r.   rB  '  s    
 rB   Iterable[grpc.GenericRpcHandler]c                 C  s8   | j  | j| W d    d S 1 sw   Y  d S r4   )rC  r&  extend)r9   r&  r-   r-   r.   _add_generic_handlersU  s   "rX  addressrN  c                 C  s6   | j  | j|W  d    S 1 sw   Y  d S r4   )rC  rG  add_http2_port)r9   rY  r-   r-   r.   _add_insecure_port\  s   
$r[  server_credentialsgrpc.ServerCredentialsc                 C  s:   | j  | j||jW  d    S 1 sw   Y  d S r4   )rC  rG  rZ  Z_credentials)r9   rY  r\  r-   r-   r.   _add_secure_porta  s
   $r^  c                 C  s$   | j | j| jt | jt d S r4   )rG  r   rE  _REQUEST_CALL_TAGr\   r~   r<   r-   r-   r.   _request_calll  s   
r`  c                 C  s:   | j s| js| j  | jD ]}|  qtj| _dS dS rX   )	rP  r\   rG  destroyrK  r[   r;  r?  rH  )r9   shutdown_eventr-   r-   r.   _stop_servingt  s   


rc  c                 C  s:   | j  |  jd8  _W d    d S 1 sw   Y  d S )N   )rC  rO  r<   r-   r-   r.   _on_call_completed  s   "re  eventc              	     s  d}|j tu r1 j  jt t rd}W d    |S W d    |S 1 s*w   Y  |S |j tu r jf  jt  jd uoJ j jk}t	| j
 j j|\}}|d urb j| |d urv  jd7  _| fdd  jtju rt  nt rd}W d    |S W d    |S W d    |S 1 sw   Y  |S | |\}}|D ]}z|  W q ty   td Y qw |d ur j  j| t rd}W d    |S W d    |S 1 sw   Y  |S )NTFrd  c                   s   t  S r4   )re  )Zunused_futurer<   r-   r.   r     s    z-_process_event_and_continue.<locals>.<lambda>zException calling callback!)tag_SHUTDOWN_TAGrC  r\   rh   rc  r_  rM  rO  r:  r&  r(  r  rP  r~   add_done_callbackrH  r;  r@  r`  r   r   r   )r9   rf  Zshould_continuer7  r2  Z
rpc_futurerV   r   r-   r<   r.   _process_event_and_continue  s   

)
))





$
$
$$


rj  c                 C  sJ   	 t   t }| j|}| jrt|  |jtjj	kr"t
| |s"d S d }qr4   )r   "_DEALLOCATED_SERVER_CHECK_PERIOD_SrE  pollrQ  _begin_shutdown_oncecompletion_typer   ZCompletionTypeZqueue_timeoutrj  )r9   timeoutrf  r-   r-   r.   _serve  s   
rp  c                 C  sl   | j ) | jtju r$| j| jt tj| _| j	
t W d    d S W d    d S 1 s/w   Y  d S r4   )rC  rH  r;  r@  rG  r   rE  rh  rA  r\   r~   r<   r-   r-   r.   rm    s   "rm  r>  Optional[float]rI  c                   s   j R jtju rt   W  d    S t t j	  d u r3j
  n fdd}tj|d}|  W  d    S W d    n1 sXw   Y    S )Nc                     sB   j  d j j  W d    d S 1 sw   Y  d S N)ro  )r   rC  rG  cancel_all_callsr-   r>  rb  r9   r-   r.   cancel_all_calls_after_grace  s   "z+_stop.<locals>.cancel_all_calls_after_grace)target)rC  rH  r;  r?  rY   rU  r[   rm  rK  rd   rG  rs  Threadstartr   )r9   r>  ru  threadr-   rt  r.   _stop  s(   
rz  c                 C  sx   | j / | jtjurtd| j  tj| _t|  t	j
t| fd}d|_|  W d    d S 1 s5w   Y  d S )Nz$Cannot start already-started server!)rv  argsT)rC  rH  r;  r?  r   rG  rx  r@  r`  rY   rw  rp  daemon)r9   ry  r-   r-   r.   _start  s   

"r}  generic_rpc_handlersc                 C  s0   | D ]}t |dd }|d u rtd|qd S )Nr,  zT"{}" must conform to grpc.GenericRpcHandler type but does not have "service" method!)getattrAttributeErrorr   )r~  Zgeneric_rpc_handlerZservice_attributer-   r-   r.   _validate_generic_rpc_handlers  s   r  base_optionsSequence[ChannelArgumentType]r   rN   c                 C  s   t |}t| | S r4   )r   Zcreate_channel_optionrp   )r  r   Zcompression_optionr-   r-   r.   _augment_options  s   
r  c                   @  sf   e Zd ZU ded< d/ddZd0ddZd1ddZd2d d!Zd3d"d#Zd4d5d'd(Z	d6d+d,Z
d-d. Zd$S )7_ServerrB  r   r  r  r&  rR  interceptors Sequence[grpc.ServerInterceptor]optionsr  rM  rL  r   rN   xdsrL   c           
      C  sB   t  }t t|||}	|	| t||	|t|||| _d S r4   )	r   ZCompletionQueueServerr  Zregister_completion_queuerB  r   Zservice_pipeliner   )
r_   r  r&  r  r  rM  r   r  rE  rG  r-   r-   r.   r`   
  s   


z_Server.__init__r~  rV  r(   rb   c                 C  s   t | t| j| d S r4   )r  rX  r   )r_   r~  r-   r-   r.   add_generic_rpc_handlers   s   z _Server.add_generic_rpc_handlersrY  rJ   rN  c                 C  s   t |t| jt |S r4   )r   validate_port_binding_resultr[  r   r   )r_   rY  r-   r-   r.   add_insecure_port&  s   z_Server.add_insecure_portr\  r]  c                 C  s   t |t| jt ||S r4   )r   r  r^  r   r   )r_   rY  r\  r-   r-   r.   add_secure_port+  s   z_Server.add_secure_portc                 C  s   t | j d S r4   )r}  r   r^   r-   r-   r.   rx  5  r0   z_Server.startNro  rq  c                 C  s   t j| jjj| jjj|dS rr  )r   r   r   rJ  is_set)r_   ro  r-   r-   r.   wait_for_termination8  s
   z_Server.wait_for_terminationr>  rI  c                 C  s   t | j|S r4   )rz  r   )r_   r>  r-   r-   r.   stopB  s   z_Server.stopc                 C  s   t | drd| j_d S d S )Nr   T)r	  r   rQ  r^   r-   r-   r.   __del__E  s   
z_Server.__del__)r  r  r&  rR  r  r  r  r  rM  rL  r   rN   r  rL   r~  rV  r(   rb   )rY  rJ   r(   rN  )rY  rJ   r\  r]  r(   rN  r   r4   )ro  rq  r(   rL   )r>  rq  r(   rI  )rC   rD   rE   ra   r`   r  r  r  rx  r  r  r  r-   r-   r-   r.   r    s   
 







r  rR  r  r  r  rM  rL  r  c                 C  s   t | t| ||||||S r4   )r  r  )r  r~  r  r  rM  r   r  r-   r-   r.   create_serverL  s   	r  )r&   r'   r(   r)   )r1   r2   r(   r3   )r9   r:   r(   r3   )r9   r:   r1   r3   r(   r3   )r9   r:   r(   r)   )r9   r:   r(   rb   )r9   r:   rf   rJ   r(   r   )r9   r:   rf   rJ   r(   r   )r9   r:   ro   rQ   r(   rQ   )r9   r:   ro   rQ   r(   rr   )
r9   r:   rv   rw   r1   r3   r@   r)   r(   rb   )r9   r:   r(   r   )r9   r:   rv   rw   r   r   r(   r   )r   r'   r9   r:   r   r   r(   r   r4   )r   r'   r9   r:   r   r   r   r   r   r   r   r   r(   r   )r   r'   r9   r:   r   r   r(   r   )
r   r'   r9   r:   r   r   r   r   r(   rS   )r9   r:   r(   r   )r   r'   r9   r:   r   r)   r(   rL   )r   r'   r9   r:   r   rS   r(   rb   )r   r'   r9   r:   r   r   r  r   r   r   r   r   r(   rb   )r   r'   r9   r:   r   r   r  r   r   r   r   r   r(   rb   )r9   r:   r(   rL   )
r   r'   r9   r:   r   r  r   r   r(   rb   )r   r   r  r  r(   r  )
r   r'   r9   r:   r  r  r  r  r(   r  )r   r'   r&  r'  r(  r)  r(   r*  )r   r'   r   r3   r@   r)   r(   r:   )r   r'   r  r  r  r  r(   r5  )r   r'   r&  r'  r(  r)  r  r  r7  rL   r(   r8  )r9   rB  r&  rV  r(   rb   )r9   rB  rY  r)   r(   rN  )r9   rB  rY  r)   r\  r]  r(   rN  )r9   rB  r(   rb   )r9   rB  r(   rL   )r9   rB  rf  r'   r(   rL   )r9   rB  r>  rq  r(   rI  r  )r  r  r   rN   r(   r  )r  r  r~  rR  r  r  r  r  rM  rL  r   rN   r  rL   r(   r  )y__doc__
__future__r   collections
concurrentr   enumloggingrY   r   r   typingr   r   r   r   r   r	   r
   r   r   r   r   rc   r   r   r   Zgrpc._cythonr   Zgrpc._typingr   r   r   r   r   r   r   r   r   	getLoggerrC   r   rh  r_  r   r   r   r   r   r|   r{   r]   r   ry   rs   rk  Z_INF_TIMEOUTr/   r8   r=   r>   rA   
namedtupleZHandlerCallDetailsrB   objectr:   re   rj   rn   rq   ru   r   r   r   r   r   ZServicerContextr   r   r   r   r   r   r   r   r   r   r  r  ri   r
  r  r  r  r#  r%  r0  r4  r6  r:  uniqueEnumr;  rB  rX  r[  r^  r`  rc  re  rj  rp  rm  rz  r}  r  r  r  r  r  r-   r-   r-   r.   <module>   s   4





	

!




	
"

!
	z
?/
:


	

$
 

1








 3.1F