U
    ËZjÅÆ  ã                	   @  s,  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	 +e,¡Z-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:d Z;d!Z<d"d#d$œd%d&„Z=d'd(d)œd*d+„Z>d,d(d-œd.d/„Z?d,d(d(d0œd1d2„Z@d,d#d-œd3d4„ZAG d5d6„ d6e Bd6d7¡ejCƒZDG d8d9„ d9ejEƒZFG d:d;„ d;eFƒZGG d<d=„ d=eFƒZHG d>d,„ d,eIƒZJd,d?d-œd@dA„ZKd,dBdCdDœdEdF„ZLd,dBdGdDœdHdI„ZMd,dJdJdKœdLdM„ZNd,dJdNdKœdOdP„ZOd,dQd(d#d?dRœdSdT„ZPd,dGd-œdUdV„ZQd,dQdWdGdXœdYdZ„ZRd,dGd-œd[d\„ZSd,dBdGdDœd]d^„ZTG d_d`„ d`ejUƒZVG dadb„ dbeIƒZWd"d,dWdcddœdedf„ZXdçd"d,dgdhdWdidjdkœdldm„ZYd"d,dndodpœdqdr„ZZd"d,dhdsdtduœdvdw„Z[d,dxd-œdydz„Z\d,d?d-œd{d|„Z]d"d,d#d}d~œdd€„Z^d"d,dtd?d~œd�d‚„Z_d"d,dgdcdsdsd?dƒœd„d…„Z`d"d,dgdcdWdsd?dƒœd†d‡„Zad,d}d-œdˆd‰„Zbd"d,dŠdnd?d‹œdŒd�„ZcdgdŽdŽd�œd�d‘„Zdd"d,d’dŽd“d”œd•d–„Zed"d,d’dŽd“d”œd—d˜„Zfd"d,d’dŽd“d”œd™dš„Zgd"d,d’dŽd“d”œd›dœ„Zhd"d,d9d�dždŸœd d¡„Zid"d,d(d#d¢œd£d¤„Zjd"d,d’dŽd“d¥œd¦d§„Zkd"d9d�dŽd}d¨d©œdªd«„ZlejmG d¬d­„ d­ejnƒƒZoG d®d¯„ d¯eIƒZpd¯d°d?d±œd²d³„Zqd¯d´d?dµœd¶d·„Zrd¯d#d¸d¹œdºd»„Zsd¯d#d¼d¸d½œd¾d¿„Ztd¯d?d-œdÀdÁ„Zud¯dBd?dÂœdÃdÄ„Zvd¯d}d-œdÅdÆ„Zwd¯d?d-œdÇdÈ„Zxd¯d"d}dÉœdÊdË„Zyd¯d?d-œdÌdÍ„Zzd¯d?d-œdÎdÏ„Z{d¯dÐdÑdÒœdÓdÔ„Z|d¯d?d-œdÕdÖ„Z}d°d?d×œdØdÙ„Z~dÚdÛd}dÚdÜœdÝdÞ„ZG dßdà„ dàej€ƒZ�dŽdádâdÚdãdÛd}dàdäœdådæ„Z‚dS )è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    eÍÍAúcygrpc.BaseEventÚbytes)Úrequest_eventÚreturnc                 C  s   | j d  ¡ S ©Nr   )Úbatch_operationsÚmessage)r*   © r/   úO/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/grpc/_server.pyÚ_serialized_requestU   s    r1   úgrpc.StatusCodezcygrpc.StatusCode©Úcoder+   c                 C  s    t j | ¡}|d krtjjS |S ©N)r   Z!STATUS_CODE_TO_CYGRPC_STATUS_CODEÚgetr   Ú
StatusCodeÚunknown)r4   Zcygrpc_coder/   r/   r0   Ú_application_codeY   s    r9   Ú	_RPCState)Ústater+   c                 C  s    | j d krtjjS t| j ƒS d S r5   )r4   r   r7   Úokr9   ©r;   r/   r/   r0   Ú_completion_code^   s    
r>   )r;   r4   r+   c                 C  s   | j d kr|S t| j ƒS d S r5   )r4   r9   )r;   r4   r/   r/   r0   Ú_abortion_codee   s    
r?   c                 C  s   | j d krdS | j S )Nó    )Údetailsr=   r/   r/   r0   Ú_detailsn   s    rB   c                   @  s   e Zd ZdS )Ú_HandlerCallDetailsN)Ú__name__Ú
__module__Ú__qualname__r/   r/   r/   r0   rC   r   s   
rC   )ÚmethodÚinvocation_metadatac                   @  s6   e Zd Zejddœdd„ƒZejdddœdd	„ƒZd
S )Ú_MethodúOptional[str]©r+   c                 C  s
   t ƒ ‚d S r5   ©ÚNotImplementedError©Úselfr/   r/   r0   Úname€   s    z_Method.namerC   úOptional[grpc.RpcMethodHandler]©Úhandler_call_detailsr+   c                 C  s
   t ƒ ‚d S r5   rL   ©rO   rS   r/   r/   r0   Úhandler„   s    z_Method.handlerN)rD   rE   rF   ÚabcÚabstractmethodrP   rU   r/   r/   r/   r0   rI      s   rI   c                   @  s:   e Zd Zdddœdd„Zddœdd	„Zd
ddœdd„ZdS )Ú_RegisteredMethodÚstrrQ   )rP   Úregistered_handlerc                 C  s   || _ || _d S r5   )Ú_nameÚ_registered_handler)rO   rP   rZ   r/   r/   r0   Ú__init__Œ   s    z_RegisteredMethod.__init__rJ   rK   c                 C  s   | j S r5   )r[   rN   r/   r/   r0   rP   ”   s    z_RegisteredMethod.namerC   rR   c                 C  s   | j S r5   )r\   rT   r/   r/   r0   rU   —   s    z_RegisteredMethod.handlerN©rD   rE   rF   r]   rP   rU   r/   r/   r/   r0   rX   ‹   s   rX   c                   @  s8   e Zd Zddœdd„Zddœdd„Zd	d
dœdd„ZdS )Ú_GenericMethodúList[grpc.GenericRpcHandler])Úgeneric_handlersc                 C  s
   || _ d S r5   )Ú_generic_handlers)rO   ra   r/   r/   r0   r]   ž   s    z_GenericMethod.__init__rJ   rK   c                 C  s   d S r5   r/   rN   r/   r/   r0   rP   ¤   s    z_GenericMethod.namerC   rQ   rR   c                 C  s*   | j D ]}| |¡}|d k	r|  S qd S r5   )rb   Úservice)rO   rS   Zgeneric_handlerÚmethod_handlerr/   r/   r0   rU   §   s
    


z_GenericMethod.handlerNr^   r/   r/   r/   r0   r_   �   s   r_   c                   @  sŽ   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d„ ZdS )r:   zcontextvars.ContextÚcontextzthreading.ConditionÚ	conditionr   ÚrequestrY   ÚclientÚboolÚinitial_metadata_allowedúOptional[grpc.Compression]Úcompression_algorithmÚdisable_next_compressionúOptional[MetadataType]Útrailing_metadatazOptional[grpc.StatusCode]r4   úOptional[bytes]rA   ÚstatusedzList[Exception]Ú
rpc_errorsz#Optional[List[NullaryCallbackType]]Ú	callbacksÚabortedc                 C  sh   t  ¡ | _t ¡ | _tƒ | _d | _t	| _
d| _d | _d| _d | _d | _d | _d| _g | _g | _d| _d S ©NTF)ÚcontextvarsÚContextre   Ú	threadingÚ	Conditionrf   ÚsetÚduerg   Ú_OPENrh   rj   rl   rm   ro   r4   rA   rq   rr   rs   rt   rN   r/   r/   r0   r]   Ä   s    

z_RPCState.__init__N)rD   rE   rF   Ú__annotations__r   rY   r{   r]   r/   r/   r/   r0   r:   ³   s    
ÚNonec                 C  s   t  ¡ }| j |¡ |‚d S r5   )ÚgrpcZRpcErrorrr   Úappend)r;   Z	rpc_errorr/   r/   r0   Ú_raise_rpc_errorÖ   s    r�   rY   r   )r;   Útokenr+   c                 C  s6   | j  |¡ t| ƒs.| j s.| j}d | _| |fS dS d S )N©Nr/   )r{   ÚremoveÚ_is_rpc_state_activers   )r;   r‚   rs   r/   r/   r0   Ú_possibly_finish_callÜ   s    r†   r   c                   s   ‡ ‡fdd„}|S )Nc              
     s(   ˆ j � tˆ ˆƒW  5 Q R £ S Q R X d S r5   )rf   r†   )Z$unused_send_status_from_server_event©r;   r‚   r/   r0   r$   é   s    z9_send_status_from_server.<locals>.send_status_from_serverr/   )r;   r‚   r$   r/   r‡   r0   Ú_send_status_from_serverè   s    rˆ   rn   )r;   Úmetadatar+   c              
   C  sl   | j �\ | jrNt | j¡f}|d kr4|W  5 Q R £ S |t|ƒ W  5 Q R £ S n|W  5 Q R £ S W 5 Q R X d S r5   )rf   rl   r   Z!compression_algorithm_to_metadataÚtuple)r;   r‰   Zcompression_metadatar/   r/   r0   Ú_get_initial_metadatað   s    ÿÿr‹   zcygrpc.Operationc                 C  s   t  t| |ƒt¡}|S r5   )r   ZSendInitialMetadataOperationr‹   Ú_EMPTY_FLAGS)r;   r‰   Ú	operationr/   r/   r0   Ú_get_initial_metadata_operation  s
     ÿrŽ   úcygrpc.Call)r;   Úcallr4   rA   r+   c                 C  s�   | j tk	rŒt| |ƒ}| jd kr"|n| j}| jrPt| d ƒt | j||t	¡f}t
}nt | j||t	¡f}t}| |t| |ƒ¡ d| _| j |¡ d S ©NT)rh   Ú
_CANCELLEDr?   rA   rj   rŽ   r   ÚSendStatusFromServerOperationro   rŒ   Ú8_SEND_INITIAL_METADATA_AND_SEND_STATUS_FROM_SERVER_TOKENÚ_SEND_STATUS_FROM_SERVER_TOKENÚstart_server_batchrˆ   rq   r{   Úadd)r;   r�   r4   rA   Zeffective_codeZeffective_detailsÚ
operationsr‚   r/   r/   r0   Ú_abort  s6    

üþ	üÿ ÿr™   c                   s   ‡ fdd„}|S )Nc              
     sX   ˆ j �H | jd  ¡ rtˆ _nˆ jtkr.tˆ _ˆ j  ¡  tˆ t	ƒW  5 Q R £ S Q R X d S r,   )
rf   r-   r'   r’   rh   r|   Ú_CLOSEDÚ
notify_allr†   Ú_RECEIVE_CLOSE_ON_SERVER_TOKEN)Zreceive_close_on_server_eventr=   r/   r0   r    .  s    

z9_receive_close_on_server.<locals>.receive_close_on_serverr/   )r;   r    r/   r=   r0   Ú_receive_close_on_server-  s    	r�   úOptional[DeserializingFunction])r;   r�   Úrequest_deserializerr+   c                   s   ‡ ‡‡fdd„}|S )Nc              
     s°   t | ƒ}|d krPˆj�2 ˆjtkr(tˆ_ˆj ¡  tˆtƒW  5 Q R £ S Q R X n\t 	|ˆ¡}ˆj�D |d kr€t
ˆˆ tjjdƒ n|ˆ_ˆj ¡  tˆtƒW  5 Q R £ S Q R X d S )Ns    Exception deserializing request!)r1   rf   rh   r|   rš   r›   r†   Ú_RECEIVE_MESSAGE_TOKENr   Zdeserializer™   r   r7   Úinternalrg   )Zreceive_message_eventZserialized_requestrg   ©r�   rŸ   r;   r/   r0   r"   ?  s,    

 ÿü
z)_receive_message.<locals>.receive_messager/   )r;   r�   rŸ   r"   r/   r¢   r0   Ú_receive_message:  s    r£   c                   s   ‡ fdd„}|S )Nc              
     s(   ˆ j � tˆ tƒW  5 Q R £ S Q R X d S r5   )rf   r†   Ú_SEND_INITIAL_METADATA_TOKEN)Z"unused_send_initial_metadata_eventr=   r/   r0   r!   \  s    z5_send_initial_metadata.<locals>.send_initial_metadatar/   )r;   r!   r/   r=   r0   Ú_send_initial_metadata[  s    r¥   c                   s   ‡ ‡fdd„}|S )Nc              
     s2   ˆ j �" ˆ j  ¡  tˆ ˆƒW  5 Q R £ S Q R X d S r5   )rf   r›   r†   )Zunused_send_message_eventr‡   r/   r0   r#   d  s    
z#_send_message.<locals>.send_messager/   )r;   r‚   r#   r/   r‡   r0   Ú_send_messagec  s    r¦   c                   @  sp  e Zd ZU ded< ded< ded< ddddœdd	„Zd
dœdd„Zddœdd„Zddœdd„Zdd
dœdd„Zddœdd„Z	ddœdd„Z
ddœdd„Zd dœd!d"„Zd#dœd$d%„Zd&dœd'd(„Zd)dd*œd+d,„Zd-dd.œd/d0„Zd-dd1œd2d3„Zddœd4d5„Zd6ddd7œd8d9„Zd:dd;œd<d=„Zd6dd>œd?d@„Zd6dœdAdB„ZdddCœdDdE„ZdFdœdGdH„ZddœdIdJ„ZdKS )LÚ_Contextr(   Ú
_rpc_eventr:   Ú_staterž   rŸ   )Ú	rpc_eventr;   rŸ   c                 C  s   || _ || _|| _d S r5   )r¨   r©   Ú_request_deserializer)rO   rª   r;   rŸ   r/   r/   r0   r]   q  s    z_Context.__init__ri   rK   c              
   C  s*   | j j� t| j ƒW  5 Q R £ S Q R X d S r5   )r©   rf   r…   rN   r/   r/   r0   Ú	is_active{  s    
z_Context.is_activeÚfloatc                 C  s   t | jjjt ¡  dƒS r,   )Úmaxr¨   Úcall_detailsÚdeadlineÚtimerN   r/   r/   r0   Útime_remaining  s    z_Context.time_remainingr~   c                 C  s   | j j ¡  d S r5   )r¨   r�   ÚcancelrN   r/   r/   r0   r³   ‚  s    z_Context.cancelr   )Úcallbackr+   c              	   C  sN   | j j�< | j jd kr$W 5 Q R £ dS | j j |¡ W 5 Q R £ dS W 5 Q R X d S )NFT)r©   rf   rs   r€   )rO   r´   r/   r/   r0   Úadd_callback…  s
    
z_Context.add_callbackc              	   C  s    | j j� d| j _W 5 Q R X d S r‘   )r©   rf   rm   rN   r/   r/   r0   Ú disable_next_message_compression�  s    
z)_Context.disable_next_message_compressionrn   c                 C  s   | j jS r5   )r¨   rH   rN   r/   r/   r0   rH   ‘  s    z_Context.invocation_metadatarY   c                 C  s   t  | jj ¡ ¡S r5   )r   Údecoder¨   r�   ÚpeerrN   r/   r/   r0   r¸   ”  s    z_Context.peerzOptional[Sequence[bytes]]c                 C  s   t  | jj¡S r5   )r   Úpeer_identitiesr¨   r�   rN   r/   r/   r0   r¹   —  s    z_Context.peer_identitiesrJ   c                 C  s$   t  | jj¡}|d kr|S t |¡S r5   )r   Úpeer_identity_keyr¨   r�   r   r·   )rO   Zid_keyr/   r/   r0   rº   š  s    z_Context.peer_identity_keyzMapping[str, Sequence[bytes]]c                 C  s0   t  | jj¡}|d kri n|}dd„ | ¡ D ƒS )Nc                 S  s   i | ]\}}t  |¡|“qS r/   )r   r·   )Ú.0ÚkeyÚvaluer/   r/   r0   Ú
<dictcomp>¡  s   ÿ z)_Context.auth_context.<locals>.<dictcomp>)r   Úauth_contextr¨   r�   Úitems)rO   r¿   Zauth_context_dictr/   r/   r0   r¿   ž  s
    þz_Context.auth_contextzgrpc.Compression)Úcompressionr+   c              	   C  s    | j j� || j _W 5 Q R X d S r5   )r©   rf   rl   )rO   rÁ   r/   r/   r0   Úset_compression¦  s    
z_Context.set_compressionr   )Úinitial_metadatar+   c              	   C  s|   | j j�j | j jtkr"t| j ƒ nL| j jrft| j |ƒ}| jj 	|ft
| j ƒ¡ d| j _| j j t¡ ntdƒ‚W 5 Q R X d S )NFz#Initial metadata no longer allowed!)r©   rf   rh   r’   r�   rj   rŽ   r¨   r�   r–   r¥   r{   r—   r¤   Ú
ValueError)rO   rÃ   r�   r/   r/   r0   r!   ª  s    
 ÿ ÿz_Context.send_initial_metadata)ro   r+   c              	   C  s    | j j� || j _W 5 Q R X d S r5   )r©   rf   ro   )rO   ro   r/   r/   r0   Úset_trailing_metadata»  s    
z_Context.set_trailing_metadatac                 C  s   | j jS r5   )r©   ro   rN   r/   r/   r0   ro   ¿  s    z_Context.trailing_metadatar2   )r4   rA   r+   c              	   C  s^   |t jjkr"t d¡ t jj}d}| jj�* || j_t	 
|¡| j_d| j_tƒ ‚W 5 Q R X d S )Nz4abort() called with StatusCode.OK; returning UNKNOWNÚ T)r   r7   ÚOKÚ_LOGGERÚerrorÚUNKNOWNr©   rf   r4   r   ÚencoderA   rt   Ú	Exception)rO   r4   rA   r/   r/   r0   ÚabortÂ  s    ÿ
z_Context.abortzgrpc.Status)Ústatusr+   c                 C  s   |j | j_ |  |j|j¡ d S r5   )ro   r©   rÍ   r4   rA   )rO   rÎ   r/   r/   r0   Úabort_with_statusÐ  s    
z_Context.abort_with_statusr3   c              	   C  s    | j j� || j _W 5 Q R X d S r5   )r©   rf   r4   )rO   r4   r/   r/   r0   Úset_codeÔ  s    
z_Context.set_codec                 C  s   | j jS r5   )r©   r4   rN   r/   r/   r0   r4   Ø  s    z_Context.code)rA   r+   c              	   C  s&   | j j� t |¡| j _W 5 Q R X d S r5   )r©   rf   r   rË   rA   )rO   rA   r/   r/   r0   Úset_detailsÛ  s    
z_Context.set_detailsr)   c                 C  s   | j jS r5   )r©   rA   rN   r/   r/   r0   rA   ß  s    z_Context.detailsc                 C  s   d S r5   r/   rN   r/   r/   r0   Ú_finalize_stateâ  s    z_Context._finalize_stateN)rD   rE   rF   r}   r]   r¬   r²   r³   rµ   r¶   rH   r¸   r¹   rº   r¿   rÂ   r!   rÅ   ro   rÍ   rÏ   rÐ   r4   rÑ   rA   rÒ   r/   r/   r/   r0   r§   l  s2   

r§   c                   @  sŒ   e Zd ZU ded< ded< ded< ddddœdd	„Zd
dœdd„Zddœdd„Zddœdd„Zd dœdd„Zddœdd„Z	ddœdd„Z
dS )Ú_RequestIteratorr:   r©   r�   Ú_callrž   r«   )r;   r�   rŸ   c                 C  s   || _ || _|| _d S r5   )r©   rÔ   r«   )rO   r;   r�   rŸ   r/   r/   r0   r]   ë  s    z_RequestIterator.__init__r~   rK   c                 C  s`   | j jtkrt| j ƒ nDt| j ƒs*tƒ ‚n2| j t 	t
¡ft| j | j| jƒ¡ | j j t¡ d S r5   )r©   rh   r’   r�   r…   ÚStopIterationrÔ   r–   r   ÚReceiveMessageOperationrŒ   r£   r«   r{   r—   r    rN   r/   r/   r0   Ú_raise_or_start_receive_messageõ  s    

  ÿþz0_RequestIterator._raise_or_start_receive_messager   c                 C  sV   | j jtkrt| j ƒ n4| j jd kr8t| j jkr8tƒ ‚n| j j}d | j _|S tƒ ‚d S r5   )	r©   rh   r’   r�   rg   r    r{   rÕ   ÚAssertionError©rO   rg   r/   r/   r0   Ú_look_for_request  s    
ÿ
þz"_RequestIterator._look_for_requestc              
   C  sN   | j j�< |  ¡  | j j ¡  |  ¡ }|d k	r|W  5 Q R £ S qW 5 Q R X d S r5   )r©   rf   r×   ÚwaitrÚ   rÙ   r/   r/   r0   Ú_next  s    
z_RequestIterator._nextc                 C  s   | S r5   r/   rN   r/   r/   r0   Ú__iter__  s    z_RequestIterator.__iter__c                 C  s   |   ¡ S r5   ©rÜ   rN   r/   r/   r0   Ú__next__  s    z_RequestIterator.__next__c                 C  s   |   ¡ S r5   rÞ   rN   r/   r/   r0   Únext!  s    z_RequestIterator.nextN)rD   rE   rF   r}   r]   r×   rÚ   rÜ   rÝ   rß   rà   r/   r/   r/   r0   rÓ   æ  s   

	rÓ   zCallable[[], Any])rª   r;   rŸ   r+   c                   s   ‡ ‡‡fdd„}|S )Nc               
     sä   ˆj �Ô tˆƒsW 5 Q R £ d S ˆj t t¡ftˆˆjˆ ƒ¡ ˆj 	t
¡ ˆj  ¡  ˆjd kr¸ˆjtkržd ˆjj¡} tˆˆjtjjt | ¡ƒ W 5 Q R £ d S ˆjtkrÔW 5 Q R £ d S qJˆj}d ˆ_|W  5 Q R £ S qJW 5 Q R X d S )Nz*"{}" requires exactly one request message.)rf   r…   r�   r–   r   rÖ   rŒ   r£   r{   r—   r    rÛ   rg   rh   rš   Úformatr¯   rG   r™   r7   Úunimplementedr   rË   r’   )rA   rg   ©rŸ   rª   r;   r/   r0   Úunary_request*  s<    
  ÿþ


ÿü
z%_unary_request.<locals>.unary_requestr/   )rª   r;   rŸ   rä   r/   rã   r0   Ú_unary_request%  s    !rå   r   r   z(Optional[Callable[[ResponseType], None]]z8Tuple[Union[ResponseType, Iterator[ResponseType]], bool])rª   r;   ÚbehaviorÚargumentrŸ   Úsend_response_callbackr+   c                 C  sB  ddl m} || ||ƒ��}z:d }|d k	r8||||ƒ}n
|||ƒ}|dfW W  5 Q R £ S  tk
�r2 }	 z¼|j�œ |jrŽt|| jtjj	dƒ nz|	|j
k�rzd |	¡}
W n: tk
râ   d}
t t t|	ƒ|	|	j¡¡ t ¡  Y nX t |
¡ t|| jtjj	t |
¡ƒ W 5 Q R X W Y ¢W 5 Q R £ dS d }	~	X Y nX W 5 Q R X d S )Nr   )Ú_create_servicer_contextTó   RPC Abortedz!Exception calling application: {}z1Calling application raised unprintable Exception!©NF)r   ré   rÌ   rf   rt   r™   r�   r   r7   r8   rr   rá   rÈ   Ú	exceptionÚ	tracebackÚformat_exceptionÚtypeÚ__traceback__Ú	print_excr   rË   )rª   r;   ræ   rç   rŸ   rè   ré   re   Zresponse_or_iteratorrì   rA   r/   r/   r0   Ú_call_behaviorN  sd      ÿ  ÿ
üÿÿýÿ
ürò   zIterator[ResponseType]zTuple[ResponseType, bool])rª   r;   Úresponse_iteratorr+   c                 C  s¶   zt |ƒdfW S  tk
r$   Y dS  tk
r° } zp|j�Z |jrXt|| jtjj	dƒ n8||j
kr�d |¡}t |¡ t|| jtjj	t |¡ƒ W 5 Q R X W Y ¢dS d }~X Y nX d S )NTr‘   rê   z!Exception iterating responses: {}rë   )rà   rÕ   rÌ   rf   rt   r™   r�   r   r7   r8   rr   rá   rÈ   rì   r   rË   )rª   r;   ró   rì   rA   r/   r/   r0   Ú%_take_response_from_response_iteratorˆ  s.    ü


ürô   zOptional[SerializingFunction]rp   )rª   r;   ÚresponseÚresponse_serializerr+   c              	   C  sF   t  ||¡}|d kr>|j� t|| jtjjdƒ W 5 Q R X d S |S d S )Ns   Failed to serialize response!)r   Ú	serializerf   r™   r�   r   r7   r¡   )rª   r;   rõ   rö   Úserialized_responser/   r/   r0   Ú_serialize_response¦  s    ürù   zUnion[int, cygrpc.WriteFlag]c                 C  s   | j rtjjS tS d S r5   )rm   r   Z	WriteFlagZno_compressrŒ   r=   r/   r/   r0   Ú%_get_send_message_op_flags_from_stateº  s    rú   c              	   C  s   | j � d| _W 5 Q R X d S rë   )rf   rm   r=   r/   r/   r0   Ú_reset_per_message_stateÃ  s    rû   ri   )rª   r;   rø   r+   c              
   C  sÀ   |j �° t|ƒsW 5 Q R £ dS |jrJt|d ƒt |t|ƒ¡f}d|_t}nt |t|ƒ¡f}t}| j	 
|t||ƒ¡ |j |¡ t|ƒ |j  ¡  ||jkrˆt|ƒW  5 Q R £ S qˆW 5 Q R X d S rë   )rf   r…   rj   rŽ   r   ÚSendMessageOperationrú   Ú-_SEND_INITIAL_METADATA_AND_SEND_MESSAGE_TOKENÚ_SEND_MESSAGE_TOKENr�   r–   r¦   r{   r—   rû   rÛ   )rª   r;   rø   r˜   r‚   r/   r/   r0   Ú_send_responseÈ  s6    þþþÿ ÿ

rÿ   c              	   C  s¦   |j �– |jtk	r˜t|ƒ}t|ƒ}t |j||t¡g}|j	rL| 
t|d ƒ¡ |d k	rj| 
t |t|ƒ¡¡ | j |t|tƒ¡ d|_t|ƒ |j t¡ W 5 Q R X d S r‘   )rf   rh   r’   r>   rB   r   r“   ro   rŒ   rj   r€   rŽ   rü   rú   r�   r–   rˆ   r•   rq   rû   r{   r—   )rª   r;   rø   r4   rA   r˜   r/   r/   r0   Ú_statusì  s6    
   ÿÿþÿþr   )rª   r;   ræ   Úargument_thunkrŸ   rö   r+   c           
      C  sˆ   t  | ¡ znzL|ƒ }|d k	rVt| ||||ƒ\}}|rVt| |||ƒ}	|	d k	rVt| ||	ƒ W n tk
rt   t ¡  Y nX W 5 t  ¡  X d S r5   )	r   Ú'install_context_from_request_call_eventÚuninstall_contextrò   rù   r   rÌ   rí   rñ   )
rª   r;   ræ   r  rŸ   rö   rç   rõ   Úproceedrø   r/   r/   r0   Ú_unary_response_in_pool  s.    
    ÿ   ÿr  c           
        s²   t  ˆ¡ dddœ‡ ‡‡fdd„}z€z^|ƒ }|d k	r€t|dƒrZ|jrZtˆˆ||||d� n&tˆˆ|||ƒ\}}	|	r€tˆˆ||ƒ W n tk
rž   t 	¡  Y nX W 5 t  ¡  X d S )Nr   r~   )rõ   r+   c                   s<   | d krt ˆˆd ƒ n"tˆˆ| ˆ ƒ}|d k	r8tˆˆ|ƒ d S r5   )r   rù   rÿ   )rõ   rø   ©rö   rª   r;   r/   r0   Úsend_response2  s       ÿz/_stream_response_in_pool.<locals>.send_responseÚexperimental_non_blocking)rè   )
r   r  r  Úhasattrr  rò   Ú3_send_message_callback_to_blocking_iterator_adapterrÌ   rí   rñ   )
rª   r;   ræ   r  rŸ   rö   r  rç   ró   r  r/   r  r0   Ú_stream_response_in_pool(  sD    

ÿþú	    ÿ   ÿr  c                 C  s   | j tk	o| j S r5   )rh   r’   rq   r=   r/   r/   r0   r…   Y  s    r…   zCallable[[ResponseType], None])rª   r;   rè   ró   r+   c                 C  s0   t | ||ƒ\}}|r,||ƒ t|ƒs*q,q q,q d S r5   )rô   r…   )rª   r;   rè   ró   rõ   r  r/   r/   r0   r
  ]  s      ÿr
  úfutures.ThreadPoolExecutor)ræ   Údefault_thread_poolr+   c                 C  s&   t | dƒrt| jtjƒr| jS |S d S )NÚexperimental_thread_pool)r	  Ú
isinstancer  r   ZThreadPoolExecutor)ræ   r  r/   r/   r0   Ú _select_thread_pool_for_behavioro  s     ÿr  zgrpc.RpcMethodHandlerzfutures.Future)rª   r;   rd   r  r+   c              
   C  s<   t | ||jƒ}t|j|ƒ}| |jjt| ||j||j|j¡S r5   )	rå   rŸ   r  Zunary_unaryÚsubmitre   Úrunr  rö   ©rª   r;   rd   r  rä   Úthread_poolr/   r/   r0   Ú_handle_unary_unary{  s&      ÿ ÿør  c              
   C  s<   t | ||jƒ}t|j|ƒ}| |jjt| ||j||j|j¡S r5   )	rå   rŸ   r  Zunary_streamr  re   r  r  rö   r  r/   r/   r0   Ú_handle_unary_stream“  s&      ÿ ÿør  c              
     sF   t || j|jƒ‰ t|j|ƒ}| |jjt| ||j‡ fdd„|j|j	¡S )Nc                     s   ˆ S r5   r/   r/   ©Zrequest_iteratorr/   r0   Ú<lambda>½  r@   z&_handle_stream_unary.<locals>.<lambda>)
rÓ   r�   rŸ   r  Zstream_unaryr  re   r  r  rö   ©rª   r;   rd   r  r  r/   r  r0   Ú_handle_stream_unary«  s&      ÿ ÿ
ør  c              
     sF   t || j|jƒ‰ t|j|ƒ}| |jjt| ||j‡ fdd„|j|j	¡S )Nc                     s   ˆ S r5   r/   r/   r  r/   r0   r  Õ  r@   z'_handle_stream_stream.<locals>.<lambda>)
rÓ   r�   rŸ   r  Zstream_streamr  re   r  r  rö   r  r/   r  r0   Ú_handle_stream_streamÃ  s&      ÿ ÿ
ør  ú'Optional[_interceptor._ServicePipeline]rQ   )rª   r;   Úmethod_with_handlerÚinterceptor_pipeliner+   c                   sf   dddœ‡ fdd„}ˆ   ¡ }|s.t | jj¡}t|| jƒ}|d k	rT|j |j	||¡S |j ||¡S d S )NrC   rQ   rR   c                   s
   ˆ   | ¡S r5   )rU   )rS   ©r  r/   r0   Úquery_handlersá  s    z,_find_method_handler.<locals>.query_handlers)
rP   r   r·   r¯   rG   rC   rH   re   r  Úexecute)rª   r;   r  r  r   Úmethod_namerS   r/   r  r0   Ú_find_method_handlerÛ  s    þ  ÿr#  )rª   Ú	rpc_staterÎ   rA   c                   s<   t ˆ d ƒt t¡t d ||t¡f}| j |‡ fdd„¡ d S )Nc                   s   ˆ dfS rƒ   r/   )Zignored_event©r$  r/   r0   r    s    þz_reject_rpc.<locals>.<lambda>)rŽ   r   ÚReceiveCloseOnServerOperationrŒ   r“   r�   r–   )rª   r$  rÎ   rA   r˜   r/   r%  r0   Ú_reject_rpc÷  s       ÿý
þr'  )rª   r;   rd   r  r+   c              
   C  s¸   |j �¨ | j t t¡ft|ƒ¡ |j t	¡ |j
rp|jrTt| |||ƒW  5 Q R £ S t| |||ƒW  5 Q R £ S n:|jr�t| |||ƒW  5 Q R £ S t| |||ƒW  5 Q R £ S W 5 Q R X d S r5   )rf   r�   r–   r   r&  rŒ   r�   r{   r—   rœ   Zrequest_streamingZresponse_streamingr  r  r  r  )rª   r;   rd   r  r/   r/   r0   Ú_handle_with_method_handler  sB    
þ   ÿ   ÿ   ÿ   ÿr(  z4Tuple[Optional[_RPCState], Optional[futures.Future]])rª   r  r  r  Úconcurrency_exceededr+   c           	   
   C  sä   | j s
dS | jjs| ¡ rÜtƒ }zt| |||ƒ}W nT tk
r† } z6d |¡}t 	|¡ t
| |tjjdƒ |df W Y ¢S d}~X Y nX |dkrªt
| |tjjdƒ |dfS |rÈt
| |tjjdƒ |dfS |t| |||ƒfS ndS dS )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¯   rG   rP   r:   r#  rÌ   rá   rÈ   rì   r'  r   r7   r8   râ   Zresource_exhaustedr(  )	rª   r  r  r  r)  r$  rd   rì   rA   r/   r/   r0   Ú_handle_call-  s\    ü

üüü   ÿþr+  c                   @  s   e Zd ZdZdZdZdS )Ú_ServerStageÚstoppedÚstartedÚgraceN)rD   rE   rF   ÚSTOPPEDÚSTARTEDÚGRACEr/   r/   r/   r0   r,  o  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ed< ddddddd œd!d"„Zd#S )$Ú_ServerStatezthreading.RLockÚlockzcygrpc.CompletionQueueÚcompletion_queuezcygrpc.ServerÚserverr`   ra   ú Dict[str, grpc.RpcMethodHandler]Úregistered_method_handlersr  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{   ri   Úserver_deallocatedú Sequence[grpc.GenericRpcHandler])r5  r6  ra   r  r  r>  c                 C  st   t  ¡ | _|| _|| _t|ƒ| _|| _|| _t	j
| _t  ¡ | _| jg| _|| _d| _i | _tƒ | _tƒ | _d| _d S )Nr   F)rx   ÚRLockr4  r5  r6  Úlistra   r  r  r,  r0  r9  ÚEventr;  r<  r>  r@  r8  rz   rA  r{   rB  )rO   r5  r6  ra   r  r  r>  r/   r/   r0   r]   ˆ  s    	



z_ServerState.__init__N)rD   rE   rF   r}   r]   r/   r/   r/   r0   r3  v  s    
r3  ú Iterable[grpc.GenericRpcHandler])r;   ra   r+   c              	   C  s"   | j � | j |¡ W 5 Q R X d S r5   )r4  ra   Úextend)r;   ra   r/   r/   r0   Ú_add_generic_handlers¦  s    rI  r7  )r;   Úmethod_handlersr+   c              	   C  s"   | j � | j |¡ W 5 Q R X d S r5   )r4  r8  Úupdate)r;   rJ  r/   r/   r0   Ú_add_registered_method_handlers­  s    rL  r?  )r;   Úaddressr+   c              
   C  s*   | j � | j |¡W  5 Q R £ S Q R X d S r5   )r4  r6  Úadd_http2_port)r;   rM  r/   r/   r0   Ú_add_insecure_port´  s    rO  úgrpc.ServerCredentials)r;   rM  Úserver_credentialsr+   c              
   C  s.   | j � | j ||j¡W  5 Q R £ S Q R X d S r5   )r4  r6  rN  Z_credentials)r;   rM  rQ  r/   r/   r0   Ú_add_secure_port¹  s
     ÿrR  c                 C  s$   | j  | j| jt¡ | j t¡ d S r5   )r6  r   r5  Ú_REQUEST_CALL_TAGr{   r—   r=   r/   r/   r0   Ú_request_callÄ  s      ÿrT  )r;   rG   r+   c                 C  s*   |}| j  | j| j||¡ | j |¡ d S r5   )r6  Zrequest_registered_callr5  r{   r—   )r;   rG   Zregistered_call_tagr/   r/   r0   Ú_request_registered_callË  s    ürU  c                 C  s>   | j s6| js6| j ¡  | jD ]}| ¡  qtj| _dS dS d S ru   )	rA  r{   r6  Údestroyr<  rz   r,  r0  r9  )r;   Úshutdown_eventr/   r/   r0   Ú_stop_serving×  s    


rX  c              	   C  s$   | j � |  jd8  _W 5 Q R X d S )Né   )r4  r@  r=   r/   r/   r0   Ú_on_call_completedâ  s    rZ  )r;   Úeventr+   c           
   	     sâ  d}|j tkr<ˆ j� ˆ j t¡ tˆ ƒr.d}W 5 Q R X �n¢|j tksX|j ˆ j ¡ k�rbd }|j ˆ j ¡ krˆ|j }t	|ˆ j 
|d ¡ƒ}n
tˆ jƒ}ˆ j�Â ˆ j |j ¡ ˆ jd k	o¼ˆ jˆ jk}t||ˆ jˆ j|ƒ\}}|d k	rêˆ j |¡ |d k	�rˆ  jd7  _| ‡ fdd„¡ ˆ jtjk�rH|ˆ j ¡ k�r>tˆ |ƒ ntˆ ƒ ntˆ ƒ�rVd}W 5 Q R X n||  |¡\}}|D ]2}	z
|	ƒ  W n  tk
�r¢   t d¡ Y nX �qt|d k	�rÞˆ j�  ˆ j |¡ tˆ ƒ�rÔd}W 5 Q R X |S )NTFrY  c                   s   t ˆ ƒS r5   )rZ  )Zunused_futurer=   r/   r0   r    r@   z-_process_event_and_continue.<locals>.<lambda>zException calling callback!)ÚtagÚ_SHUTDOWN_TAGr4  r{   r„   rX  rS  r8  ÚkeysrX   r6   r_   ra   r>  r@  r+  r  r  rA  r—   Zadd_done_callbackr9  r,  r1  rU  rT  rÌ   rÈ   rì   )
r;   r[  Zshould_continueZregistered_method_namer  r)  r$  Z
rpc_futurers   r´   r/   r=   r0   Ú_process_event_and_continueè  s~    
ÿþ ÿþÿ

þû

ÿÿÿ




r_  c                 C  sL   t   ¡ t }| j |¡}| jr&t| ƒ |jtjj	krBt
| |ƒsBd S d }q d S r5   )r±   Ú"_DEALLOCATED_SERVER_CHECK_PERIOD_Sr5  ÚpollrB  Ú_begin_shutdown_onceÚcompletion_typer   ZCompletionTypeZqueue_timeoutr_  )r;   Útimeoutr[  r/   r/   r0   Ú_serve/  s    
re  c              	   C  sF   | j �6 | jtjkr8| j | jt¡ tj| _| j	 
t¡ W 5 Q R X d S r5   )r4  r9  r,  r1  r6  r   r5  r]  r2  r{   r—   r=   r/   r/   r0   rb  >  s
    rb  úOptional[float]r:  )r;   r/  r+   c              
     s®   ˆj �– ˆjtjkr4t ¡ ‰ˆ ¡  ˆW  5 Q R £ S tˆƒ t ¡ ‰ˆj 	ˆ¡ ˆ d krdˆj
 ¡  n4‡ ‡‡fdd„}tj|d�}| ¡  ˆW  5 Q R £ S W 5 Q R X ˆ ¡  ˆS )Nc                	     s,   ˆj ˆ d� ˆj� ˆj ¡  W 5 Q R X d S ©N)rd  )rÛ   r4  r6  Úcancel_all_callsr/   ©r/  rW  r;   r/   r0   Úcancel_all_calls_after_graceT  s    z+_stop.<locals>.cancel_all_calls_after_grace)Útarget)r4  r9  r,  r0  rx   rF  rz   rb  r<  r€   r6  rh  ÚThreadÚstartrÛ   )r;   r/  rj  Úthreadr/   ri  r0   Ú_stopF  s     ro  c              	   C  s|   | j �l | jtjk	rtdƒ‚| j ¡  tj| _| j 	¡ D ]}t
| |ƒ q8t| ƒ tjt| fd�}d|_| ¡  W 5 Q R X d S )Nz$Cannot start already-started server!)rk  ÚargsT)r4  r9  r,  r0  rÄ   r6  rm  r1  r8  r^  rU  rT  rx   rl  re  Údaemon)r;   rG   rn  r/   r/   r0   Ú_start`  s    
rr  ©Úgeneric_rpc_handlersr+   c                 C  s0   | D ]&}t |dd ƒ}|d krtd |¡ƒ‚qd S )Nrc   zT"{}" must conform to grpc.GenericRpcHandler type but does not have "service" method!)ÚgetattrÚAttributeErrorrá   )rt  Zgeneric_rpc_handlerZservice_attributer/   r/   r0   Ú_validate_generic_rpc_handlersp  s    ÿÿrw  úSequence[ChannelArgumentType]rk   )Úbase_optionsrÁ   Úxdsr+   c                 C  s$   t  |¡}t |¡}t| ƒ| | S r5   )r   Zcreate_channel_optionr   Z(create_server_call_tracer_factory_optionrŠ   )ry  rÁ   rz  Zcompression_optionZ'maybe_server_call_tracer_factory_optionr/   r/   r0   Ú_augment_options|  s    
ÿÿþÿr{  c                   @  s¬   e Zd ZU ded< ddddddd	d
œdd„Zdddœdd„Zddddœdd„Zdddœdd„Zddddœdd„Zddœd d!„Z	d-d#d	d$œd%d&„Z
d#d'd(œd)d*„Zd+d,„ Zd"S ).Ú_Serverr3  r©   r  rC  ú Sequence[grpc.ServerInterceptor]rx  r=  rk   ri   )r  ra   ÚinterceptorsÚoptionsr>  rÁ   rz  c           
      C  sJ   t  ¡ }t  t|||ƒ|¡}	|	 |¡ t||	|t |¡||ƒ| _|	| _	d S r5   )
r   ZCompletionQueueÚServerr{  Zregister_completion_queuer3  r   Zservice_pipeliner©   Ú
_cy_server)
rO   r  ra   r~  r  r>  rÁ   rz  r5  r6  r/   r/   r0   r]   �  s    

úz_Server.__init__rG  r~   rs  c                 C  s   t |ƒ t| j|ƒ d S r5   )rw  rI  r©   )rO   rt  r/   r/   r0   Úadd_generic_rpc_handlers§  s    z _Server.add_generic_rpc_handlersrY   r7  )Úservice_namerJ  r+   c              	     sp   | j j�" | j jtjkr&W 5 Q R £ d S W 5 Q R X ‡ fdd„| ¡ D ƒ}| ¡ D ]}| j |¡ qNt	| j |ƒ d S )Nc                   s   i | ]\}}t  ˆ |¡|“qS r/   )r   Úfully_qualified_method)r»   rG   rd   ©rƒ  r/   r0   r¾   ¸  s   ÿ
 z:_Server.add_registered_method_handlers.<locals>.<dictcomp>)
r©   r4  r9  r,  r1  rÀ   r^  r�  Zregister_methodrL  )rO   rƒ  rJ  Zmethod_to_handlersr„  r/   r…  r0   Úadd_registered_method_handlers­  s    

þz&_Server.add_registered_method_handlersr?  )rM  r+   c                 C  s   t  |t| jt  |¡ƒ¡S r5   )r   Úvalidate_port_binding_resultrO  r©   rË   )rO   rM  r/   r/   r0   Úadd_insecure_portÀ  s     ÿz_Server.add_insecure_portrP  )rM  rQ  r+   c                 C  s   t  |t| jt  |¡|ƒ¡S r5   )r   r‡  rR  r©   rË   )rO   rM  rQ  r/   r/   r0   Úadd_secure_portÅ  s      ÿþz_Server.add_secure_portrK   c                 C  s   t | jƒ d S r5   )rr  r©   rN   r/   r/   r0   rm  Ï  s    z_Server.startNrf  )rd  r+   c                 C  s   t j| jjj| jjj|d�S rg  )r   rÛ   r©   r;  Úis_set)rO   rd  r/   r/   r0   Úwait_for_terminationÒ  s
    ýz_Server.wait_for_terminationr:  )r/  r+   c                 C  s   t | j|ƒS r5   )ro  r©   )rO   r/  r/   r/   r0   ÚstopÜ  s    z_Server.stopc                 C  s   t | dƒrd| j_d S )Nr©   T)r	  r©   rB  rN   r/   r/   r0   Ú__del__ß  s    
z_Server.__del__)N)rD   rE   rF   r}   r]   r‚  r†  rˆ  r‰  rm  r‹  rŒ  r�  r/   r/   r/   r0   r|  Œ  s   


r|  rC  r}  r=  )r  rt  r~  r  r>  rÁ   rz  r+   c                 C  s   t |ƒ t| ||||||ƒS r5   )rw  r|  )r  rt  r~  r  r>  rÁ   rz  r/   r/   r0   Úcreate_serveræ  s    	ùrŽ  )N)ƒÚ__doc__Ú
__future__r   rV   ÚcollectionsZ
concurrentr   rv   ÚenumÚloggingrx   r±   rí   Útypingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   Zgrpc._cythonr   Zgrpc._typingr   r   r   r   r   r   r   r   r   Ú	getLoggerrD   rÈ   r]  rS  rœ   r¤   r    rþ   rý   r•   r”   r|   rš   r’   rŒ   r`  Z_INF_TIMEOUTr1   r9   r>   r?   rB   Ú
namedtupleZHandlerCallDetailsrC   ÚABCrI   rX   r_   Úobjectr:   r�   r†   rˆ   r‹   rŽ   r™   r�   r£   r¥   r¦   ZServicerContextr§   rÓ   rå   rò   rô   rù   rú   rû   rÿ   r   r  r  r…   r
  r  r  r  r  r  r#  r'  r(  r+  ÚuniqueÚEnumr,  r3  rI  rL  rO  rR  rT  rU  rX  rZ  r_  re  rb  ro  rr  rw  r{  r€  r|  rŽ  r/   r/   r/   r0   Ú<module>   sä   8
ÿÿ	
þø#	"!	z?/ ú:	$ 1 B0GZ