o
    ˷e$                     @   s  d 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	 ddlm
Z
 ddlmZ ddlmZ ddlZeeZdZd	Zd
ZdZdZdZd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d Z$dd Z%G d d! d!e&d!d"ej'Z(G d#d$ d$e)Z*d%d& Z+d'd( Z,d)d* Z-d+d, Z.d-d. Z/d/d0 Z0d1d2 Z1d3d4 Z2d5d6 Z3d7d8 Z4G d9d: d:ej5Z6G d;d< d<e)Z7d=d> Z8	dd?d@Z9dAdB Z:dCdD Z;dEdF Z<dGdH Z=dIdJ Z>dKdL Z?dMdN Z@dOdP ZAdQdR ZBdSdT ZCdUdV ZDdWdX ZEdYdZ ZFd[d\ ZGd]d^ ZHd_d` ZIdadb ZJdcdd ZKdedf ZLejMG dgdh dhejNZOG didj dje)ZPdkdl ZQdmdn ZRdodp ZSdqdr ZTdsdt ZUdudv ZVdwdx ZWdydz ZXd{d| ZYd}d~ ZZdd Z[dd Z\dd Z]G dd dej^Z_dd Z`dS )z+Service-side implementation of gRPC Python.    N)futures)_common)_compression)_interceptor)cygrpc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                 C   s   | j d  S Nr   )batch_operationsmessage)request_event r   C/var/www/ideatree/venv/lib/python3.10/site-packages/grpc/_server.py_serialized_request7      r   c                 C   s    t j| }|d u rtjjS |S N)r   !STATUS_CODE_TO_CYGRPC_STATUS_CODEgetr   
StatusCodeunknown)codecygrpc_coder   r   r   _application_code;   s   r    c                 C   s   | j d u r	tjjS t| j S r   )r   r   r   okr    stater   r   r   _completion_code@   s   

r$   c                 C   s   | j d u r|S t| j S r   )r   r    )r#   r   r   r   r   _abortion_codeG   s   

r%   c                 C   s   | j d u rdS | j S )N    )detailsr"   r   r   r   _detailsN   s   r(   c                   @   s   e Zd ZdS )_HandlerCallDetailsN)__name__
__module____qualname__r   r   r   r   r)   R   s    r)   )methodinvocation_metadatac                   @      e Zd Zdd ZdS )	_RPCStatec                 C   s^   t  | _t | _d | _t| _d| _d | _	d| _
d | _d | _d | _d| _g | _g | _d| _d S NTF)	threading	Condition	conditionsetduerequest_OPENclientinitial_metadata_allowedcompression_algorithmdisable_next_compressiontrailing_metadatar   r'   statused
rpc_errors	callbacksabortedselfr   r   r   __init__\   s   

z_RPCState.__init__Nr*   r+   r,   rD   r   r   r   r   r0   Z   s    r0   c                 C   s   t  }| j| |r   )grpcRpcErrorr?   append)r#   	rpc_errorr   r   r   _raise_rpc_errorm   s   rJ   c                 C   s2   | j | t| s| j s| j}d | _| |fS dS )NNr   )r6   remove_is_rpc_state_activer@   )r#   tokenr@   r   r   r   _possibly_finish_calls   s   rO   c                        fdd}|S )Nc                    s4    j  t W  d    S 1 sw   Y  d S r   )r4   rO   )$unused_send_status_from_server_eventr#   rN   r   r   r         $z9_send_status_from_server.<locals>.send_status_from_serverr   )r#   rN   r   r   rR   r   _send_status_from_server}   s   rT   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 r   )r4   r;   r   !compression_algorithm_to_metadatatuple)r#   metadatacompression_metadatar   r   r   _get_initial_metadata   s   

$rY   c                 C   s   t t| |t}|S r   )r   SendInitialMetadataOperationrY   _EMPTY_FLAGS)r#   rW   	operationr   r   r   _get_initial_metadata_operation   s   
r]   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)r9   
_CANCELLEDr%   r'   r:   r]   r   SendStatusFromServerOperationr=   r[   8_SEND_INITIAL_METADATA_AND_SEND_STATUS_FROM_SERVER_TOKEN_SEND_STATUS_FROM_SERVER_TOKENstart_server_batchrT   r>   r6   add)r#   callr   r'   effective_codeeffective_details
operationsrN   r   r   r   _abort   s.   

ri   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   )
r4   r   r   r_   r9   r8   _CLOSED
notify_allrO   _RECEIVE_CLOSE_ON_SERVER_TOKEN)receive_close_on_server_eventr"   r   r   r	      s   

$z9_receive_close_on_server.<locals>.receive_close_on_serverr   )r#   r	   r   r"   r   _receive_close_on_server   s   	ro   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   r4   r9   r8   rk   rl   rO   _RECEIVE_MESSAGE_TOKENr   deserializeri   r   r   internalr7   )receive_message_eventserialized_requestr7   re   request_deserializerr#   r   r   r      s(   

$
$z)_receive_message.<locals>.receive_messager   )r#   re   rw   r   r   rv   r   _receive_message   s   rx   c                    rj   )Nc                    s4    j  t tW  d    S 1 sw   Y  d S r   )r4   rO   _SEND_INITIAL_METADATA_TOKEN)"unused_send_initial_metadata_eventr"   r   r   r
      rS   z5_send_initial_metadata.<locals>.send_initial_metadatar   )r#   r
   r   r"   r   _send_initial_metadata   s   r{   c                    rP   )Nc                    s>    j   j   t W  d    S 1 sw   Y  d S r   )r4   rl   rO   )unused_send_message_eventrR   r   r   r      s   
$z#_send_message.<locals>.send_messager   )r#   rN   r   r   rR   r   _send_message   s   r}   c                   @   s   e Z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d'd( Zd)d* Zd+d, Zd-S )._Contextc                 C      || _ || _|| _d S r   )
_rpc_event_state_request_deserializer)rC   	rpc_eventr#   rw   r   r   r   rD         
z_Context.__init__c                 C   s6   | j j t| j W  d    S 1 sw   Y  d S r   )r   r4   rM   rB   r   r   r   	is_active   s   
$z_Context.is_activec                 C   s   t | jjjt  dS r   )maxr   call_detailsdeadlinetimerB   r   r   r   time_remaining   s   z_Context.time_remainingc                 C   s   | j j  d S r   )r   re   cancelrB   r   r   r   r      s   z_Context.cancelc                 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   r4   r@   rH   )rC   callbackr   r   r   add_callback   s   
$z_Context.add_callbackc                 C   s6   | j j d| j _W d    d S 1 sw   Y  d S r^   )r   r4   r<   rB   r   r   r    disable_next_message_compression     

"z)_Context.disable_next_message_compressionc                 C      | j jS r   )r   r.   rB   r   r   r   r.   	     z_Context.invocation_metadatac                 C   s   t | jj S r   )r   decoder   re   peerrB   r   r   r   r        z_Context.peerc                 C   s   t | jjS r   )r   peer_identitiesr   re   rB   r   r   r   r     r   z_Context.peer_identitiesc                 C   s$   t | jj}|d u r|S t|S r   )r   peer_identity_keyr   re   r   r   )rC   id_keyr   r   r   r     s   z_Context.peer_identity_keyc                 C   s   dd t t| jjD S )Nc                 S   s   i | ]
\}}t ||qS r   )r   r   ).0keyvaluer   r   r   
<dictcomp>  s    z)_Context.auth_context.<locals>.<dictcomp>)six	iteritemsr   auth_contextr   re   rB   r   r   r   r     s
   z_Context.auth_contextc                 C   6   | j j || j _W d    d S 1 sw   Y  d S r   )r   r4   r;   )rC   compressionr   r   r   set_compression  r   z_Context.set_compressionc                 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   r4   r9   r_   rJ   r:   r]   r   re   rc   r{   r6   rd   ry   
ValueError)rC   initial_metadatar\   r   r   r   r
      s"   

"z_Context.send_initial_metadatac                 C   r   r   )r   r4   r=   )rC   r=   r   r   r   set_trailing_metadata/  r   z_Context.set_trailing_metadatac                 C   r   r   )r   r=   rB   r   r   r   r=   3  r   z_Context.trailing_metadatac                 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)rF   r   OK_LOGGERerrorUNKNOWNr   r4   r   r   encoder'   rA   	Exception)rC   r   r'   r   r   r   abort6  s   
z_Context.abortc                 C   s   |j | j_ | |j|j d S r   )r=   r   r   r   r'   )rC   statusr   r   r   abort_with_statusC  s   
z_Context.abort_with_statusc                 C   r   r   )r   r4   r   )rC   r   r   r   r   set_codeG  r   z_Context.set_codec                 C   r   r   )r   r   rB   r   r   r   r   K  r   z_Context.codec                 C   s<   | j j t|| j _W d    d S 1 sw   Y  d S r   )r   r4   r   r   r'   )rC   r'   r   r   r   set_detailsN  s   
"z_Context.set_detailsc                 C   r   r   )r   r'   rB   r   r   r   r'   R  r   z_Context.detailsc                 C   s   d S r   r   rB   r   r   r   _finalize_stateU     z_Context._finalize_stateN)r*   r+   r,   rD   r   r   r   r   r   r.   r   r   r   r   r   r
   r   r=   r   r   r   r   r   r'   r   r   r   r   r   r~      s.    r~   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )_RequestIteratorc                 C   r   r   )r   _callr   )rC   r#   re   rw   r   r   r   rD   [  r   z_RequestIterator.__init__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 r   )r   r9   r_   rJ   rM   StopIterationr   rc   r   ReceiveMessageOperationr[   rx   r   r6   rd   rq   rB   r   r   r   _raise_or_start_receive_message`  s   


z0_RequestIterator._raise_or_start_receive_messagec                 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 r   )	r   r9   r_   rJ   r7   rq   r6   r   AssertionErrorrC   r7   r   r   r   _look_for_requestl  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 r   )r   r4   r   waitr   r   r   r   r   _nexty  s   
z_RequestIterator._nextc                 C   s   | S r   r   rB   r   r   r   __iter__  r   z_RequestIterator.__iter__c                 C      |   S r   r   rB   r   r   r   __next__  r   z_RequestIterator.__next__c                 C   r   r   r   rB   r   r   r   next  r   z_RequestIterator.nextN)
r*   r+   r,   rD   r   r   r   r   r   r   r   r   r   r   r   Y  s    	r   c                    rp   )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.)r4   rM   re   rc   r   r   r[   rx   r6   rd   rq   r   r7   r9   rk   formatr   r-   ri   r   unimplementedr   r   r_   )r'   r7   rw   r   r#   r   r   unary_request  sD   




	z%_unary_request.<locals>.unary_requestr   )r   r#   rw   r   r   r   r   _unary_request  s   r   c                 C   s  ddl m} || ||v}zd }|d ur||||}n|||}|dfW W  d    S  ty }	 zJ|j2 |jrEt|| jtjj	d n|	|j
vrad|	}
t|
 t|| jtjj	t|
 W d    n1 skw   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: {}NF)rF   r   r   r4   rA   ri   re   r   r   r   r?   r   r   	exceptionr   r   )r   r#   behaviorargumentrw   send_response_callbackr   contextresponse_or_iteratorr   r'   r   r   r   _call_behavior  sF   






r   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 )NTr^   r   z!Exception iterating responses: {}r   )r   r   r   r4   rA   ri   re   r   r   r   r?   r   r   r   r   r   )r   r#   response_iteratorr   r'   r   r   r   %_take_response_from_response_iterator  s*   


	r   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   	serializer4   ri   re   r   r   rs   )r   r#   responseresponse_serializerserialized_responser   r   r   _serialize_response  s   
r   c                 C   s   | j rtjjS tS r   )r<   r   	WriteFlagno_compressr[   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   )r4   r<   r"   r   r   r   _reset_per_message_state  s   "r   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   )r4   rM   r:   r]   r   SendMessageOperationr   -_SEND_INITIAL_METADATA_AND_SEND_MESSAGE_TOKEN_SEND_MESSAGE_TOKENre   rc   r}   r6   rd   r   r   )r   r#   r   rh   rN   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 r^   )r4   r9   r_   r$   r(   r   r`   r=   r[   r:   rH   r]   r   r   re   rc   rT   rb   r>   r   r6   rd   )r   r#   r   r   r'   rh   r   r   r   _status  s8   
"r   c           
      C   s   t |  z@| }|d ur1t| ||||\}}|r8t| |||}	|	d ur?t| ||	 W t   d S W t   d S W t   d S W t   d S t   w r   )r   'install_context_from_request_call_eventr   r   r   uninstall_context)
r   r#   r   argument_thunkrw   r   r   r   proceedr   r   r   r   _unary_response_in_pool*  s(   
	r   c           
         s   t   fdd}zI| }|d urBt|dr(|jr(t||||d n(t|||\}}	|	rIt|| W t   d S W t   d S W t   d S W t   d S t   w )Nc                    sB   | d u rt d  d S t|  }|d urt| d S d S r   )r   r   r   )r   r   r   r   r#   r   r   send_response?  s   z/_stream_response_in_pool.<locals>.send_responseexperimental_non_blocking)r   )r   r   hasattrr   r   3_send_message_callback_to_blocking_iterator_adapterr   )
r   r#   r   r   rw   r   r   r   r   r   r   r   r   _stream_response_in_pool;  s:   



r   c                 C   s   | j tuo| j S r   )r9   r_   r>   r"   r   r   r   rM   ^  r   rM   c                 C   s2   	 t | ||\}}|r|| t|sd S nd S qr   )r   rM   )r   r#   r   r   r   r   r   r   r   r   b  s   r   c                 C   s"   t | drt| jtjr| jS |S )Nexperimental_thread_pool)r   
isinstancer   r   ThreadPoolExecutor)r   default_thread_poolr   r   r    _select_thread_pool_for_behaviorp  s
   r   c              	   C   6   t | ||j}t|j|}|t| ||j||j|jS r   )r   rw   r   unary_unarysubmitr   r   r   r#   method_handlerr   r   thread_poolr   r   r   _handle_unary_unaryx     
r   c              	   C   r   r   )r   rw   r   unary_streamr   r   r   r   r   r   r   _handle_unary_stream  r   r   c              	      @   t || j|j t|j|}|t| ||j fdd|j|jS )Nc                          S r   r   r   request_iteratorr   r   <lambda>      z&_handle_stream_unary.<locals>.<lambda>)r   re   rw   r   stream_unaryr   r   r   r   r#   r   r   r   r   r   r   _handle_stream_unary  s   

r  c              	      r   )Nc                      r   r   r   r   r   r   r   r     r   z'_handle_stream_stream.<locals>.<lambda>)r   re   rw   r   stream_streamr   r   r   r  r   r   r   _handle_stream_stream  s   

r  c                    s>    fdd}t t| jj| j}|d ur|||S ||S )Nc                    s(    D ]}| | }|d ur|  S qd S r   )service)handler_call_detailsgeneric_handlerr   generic_handlersr   r   query_handlers  s   
z,_find_method_handler.<locals>.query_handlers)r)   r   r   r   r-   r.   execute)r   r
  interceptor_pipeliner  r  r   r	  r   _find_method_handler  s   r  c                    sB   t   t d tttd ||tf}| j| fdd  S )Nc                    s    dfS rK   r   )ignored_event	rpc_stater   r   r     s   z_reject_rpc.<locals>.<lambda>)r0   r]   r   ReceiveCloseOnServerOperationr[   r`   re   rc   )r   r   r'   rh   r   r  r   _reject_rpc  s   
r  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 r   )r0   r4   re   rc   r   r  r[   ro   r6   rd   rm   request_streamingresponse_streamingr  r  r   r   )r   r   r   r#   r   r   r   _handle_with_method_handler  s4   

$r  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   r-   r  r   r   r   r   r  r   r   r   r   resource_exhaustedr  )r   r
  r  r   concurrency_exceededr   r   r'   r   r   r   _handle_call  sB   




r  c                   @   s   e Zd ZdZdZdZdS )_ServerStagestoppedstartedgraceN)r*   r+   r,   STOPPEDSTARTEDGRACEr   r   r   r   r    s    r  c                   @   r/   )_ServerStatec                 C   sn   t  | _|| _|| _t|| _|| _|| _t	j
| _t  | _| jg| _|| _d| _t | _t | _d| _d S )Nr   F)r2   RLocklockcompletion_queueserverlistr
  r  r   r  r  stageEventtermination_eventshutdown_eventsmaximum_concurrent_rpcsactive_rpc_countr5   
rpc_statesr6   server_deallocated)rC   r%  r&  r
  r  r   r,  r   r   r   rD     s   




z_ServerState.__init__NrE   r   r   r   r   r"    s    r"  c                 C   s8   | j  | j| W d    d S 1 sw   Y  d S r   )r$  r
  extend)r#   r
  r   r   r   _add_generic_handlers  s   "r1  c                 C   s6   | j  | j|W  d    S 1 sw   Y  d S r   )r$  r&  add_http2_port)r#   addressr   r   r   _add_insecure_port   s   
$r4  c                 C   s:   | j  | j||jW  d    S 1 sw   Y  d S r   )r$  r&  r2  _credentials)r#   r3  server_credentialsr   r   r   _add_secure_port%  s
   $r7  c                 C   s$   | j | j| jt | jt d S r   )r&  r   r%  _REQUEST_CALL_TAGr6   rd   r"   r   r   r   _request_call+  s   r9  c                 C   s:   | j s| js| j  | jD ]}|  qtj| _dS dS r1   )	r.  r6   r&  destroyr+  r5   r  r  r(  )r#   shutdown_eventr   r   r   _stop_serving2  s   


r<  c                 C   s:   | j  |  jd8  _W d    d S 1 sw   Y  d S )N   )r$  r-  r"   r   r   r   _on_call_completed=  s   "r>  c              	      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 )NTFr=  c                    s   t  S r   )r>  )unused_futurer"   r   r   r   X  s    z-_process_event_and_continue.<locals>.<lambda>zException calling callback!)tag_SHUTDOWN_TAGr$  r6   rL   r<  r8  r,  r-  r  r
  r  r   r.  rd   add_done_callbackr(  r  r   r9  r   r   r   )r#   eventshould_continuer  r  
rpc_futurer@   r   r   r"   r   _process_event_and_continueB  s   

$
$$










rF  c                 C   sJ   	 t   t }| j|}| jrt|  |jtjj	kr"t
| |s"d S d }qr   )r   "_DEALLOCATED_SERVER_CHECK_PERIOD_Sr%  pollr/  _begin_shutdown_oncecompletion_typer   CompletionTypequeue_timeoutrF  )r#   timeoutrC  r   r   r   _servel  s   
rN  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 r   )r$  r(  r  r   r&  r   r%  rA  r!  r6   rd   r"   r   r   r   rI  {  s   "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)rM  )r   r$  r&  cancel_all_callsr   r  r;  r#   r   r   cancel_all_calls_after_grace  s   "z+_stop.<locals>.cancel_all_calls_after_grace)target)r$  r(  r  r  r2   r)  r5   rI  r+  rH   r&  rP  Threadstartr   )r#   r  rR  threadr   rQ  r   _stop  s(   
rW  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!)rS  argsT)r$  r(  r  r  r   r&  rU  r   r9  r2   rT  rN  daemon)r#   rV  r   r   r   _start  s   

"rZ  c                 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   )generic_rpc_handlersgeneric_rpc_handlerservice_attributer   r   r   _validate_generic_rpc_handlers  s   r`  c                 C   s   t |}t| | S r   )r   create_channel_optionrV   )base_optionsr   compression_optionr   r   r   _augment_options  s   
rd  c                   @   sN   e Z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d Z
dS )_Serverc           
      C   sB   t  }t t|||}	|	| t||	|t|||| _d S r   )	r   CompletionQueueServerrd  register_completion_queuer"  r   service_pipeliner   )
rC   r   r
  interceptorsoptionsr,  r   xdsr%  r&  r   r   r   rD     s   

z_Server.__init__c                 C   s   t | t| j| d S r   )r`  r1  r   )rC   r]  r   r   r   add_generic_rpc_handlers  s   z _Server.add_generic_rpc_handlersc                 C   s   t |t| jt |S r   )r   validate_port_binding_resultr4  r   r   )rC   r3  r   r   r   add_insecure_port  s   z_Server.add_insecure_portc                 C   s   t |t| jt ||S r   )r   rn  r7  r   r   )rC   r3  r6  r   r   r   add_secure_port  s   z_Server.add_secure_portc                 C   s   t | j d S r   )rZ  r   rB   r   r   r   rU    r   z_Server.startNc                 C   s   t j| jjj| jjj|dS rO  )r   r   r   r*  is_set)rC   rM  r   r   r   wait_for_termination  s   z_Server.wait_for_terminationc                 C   s   t | j|S r   )rW  r   )rC   r  r   r   r   stop  s   z_Server.stopc                 C   s   t | drd| j_d S d S )Nr   T)r   r   r/  rB   r   r   r   __del__  s   
z_Server.__del__r   )r*   r+   r,   rD   rm  ro  rp  rU  rr  rs  rt  r   r   r   r   re    s    	
re  c                 C   s   t | t| ||||||S r   )r`  re  )r   r]  rj  rk  r,  r   rl  r   r   r   create_server  s   
ru  r   )a__doc__collections
concurrentr   enumloggingr2   r   rF   r   r   r   grpc._cythonr   r   	getLoggerr*   r   rA  r8  rm   ry   rq   r   r   rb   ra   r8   rk   r_   r[   rG  _INF_TIMEOUTr   r    r$   r%   r(   
namedtupleHandlerCallDetailsr)   objectr0   rJ   rO   rT   rY   r]   ri   ro   rx   r{   r}   ServicerContextr~   r   r   r   r   r   r   r   r   r   r   r   rM   r   r   r   r   r  r  r  r  r  r  uniqueEnumr  r"  r1  r4  r7  r9  r<  r>  rF  rN  rI  rW  rZ  r`  rd  rg  re  ru  r   r   r   r   <module>   s   



		
m3%
#*	/