U
    ڲge                  	   @   s  d 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
 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 G d
d deZeeej  ee dddZG dd deddejZejeje	eeeejeejf dddZG dd dejej ej!Z"G dd dej!ej Z#G dd dej$Z%G dd dej&Z'G dd dej(Z)G dd  d ej*Z+G d!d" d"ej,Z-ej,eee
ej.ej/ej0ej1f   ej,d#d$d%Z2dS )&z+Implementation of gRPC Python interceptors.    N)AnyCallableOptionalSequenceTupleUnion   )DeserializingFunction)DoneCallbackType)MetadataType)RequestIterableType)SerializingFunctionc                   @   sp   e Zd ZU eej ed< eej dddZe	e
e	dddZe	e
ejejdd	d
Ze	ejejdddZdS )_ServicePipelineinterceptorsr   c                 C   s   t || _d S N)tupler   )selfr    r   5/tmp/pip-unpacked-wheel-8poujhl6/grpc/_interceptor.py__init__!   s    z_ServicePipeline.__init__)thunkindexreturnc                    s    fddS )Nc                    s     | S r   _intercept_at)contextr   r   r   r   r   <lambda>%       z0_ServicePipeline._continuation.<locals>.<lambda>r   )r   r   r   r   r   r   _continuation$   s    z_ServicePipeline._continuation)r   r   r   r   c                 C   s@   |t | jk r4| j| }| ||d }|||S ||S d S )Nr   )lenr   r    Zintercept_service)r   r   r   r   interceptorr   r   r   r   '   s
    
z_ServicePipeline._intercept_at)r   r   r   c                 C   s   |  |d|S )Nr   r   )r   r   r   r   r   r   execute1   s    z_ServicePipeline.executeN)__name__
__module____qualname__r   grpcServerInterceptor__annotations__r   r   r   intr    ZHandlerCallDetailsZRpcMethodHandlerr   r#   r   r   r   r   r      s   
   r   )r   r   c                 C   s   | rt | S d S r   )r   r   r   r   r   service_pipeline7   s    r+   c                   @   s   e Zd ZdS )_ClientCallDetailsN)r$   r%   r&   r   r   r   r   r,   =   s   r,   )methodtimeoutmetadatacredentialswait_for_readycompression)call_detailsdefault_detailsr   c                 C   s   z
| j }W n tk
r$   |j }Y nX z
| j}W n tk
rJ   |j}Y nX z
| j}W n tk
rp   |j}Y nX z
| j}W n tk
r   |j}Y nX z
| j}W n tk
r   |j}Y nX z
| j}W n tk
r   |j}Y nX ||||||fS r   )r-   AttributeErrorr.   r/   r0   r1   r2   )r3   r4   r-   r.   r/   r0   r1   r2   r   r   r   _unwrap_client_call_detailsN   s>    


r6   c                       s\  e Zd ZU eed< ejed< eejd fddZee	 dddZ
ee	 dd	d
Zeej dddZee dddZedddZedddZedddZee dddZedddZedddZd/ee dddZd0ee ee dd d!Zd1ee eej dd"d#Zedd$d%Zedd&d'd(Zd)d* Zd+d, Z d-d. Z!  Z"S )2_FailureOutcome
_exception
_traceback)	exception	tracebackc                    s   t t|   || _|| _d S r   )superr7   r   r8   r9   )r   r:   r;   	__class__r   r   r      s    z_FailureOutcome.__init__r   c                 C   s   d S r   r   r   r   r   r   initial_metadata   s    z _FailureOutcome.initial_metadatac                 C   s   d S r   r   r@   r   r   r   trailing_metadata   s    z!_FailureOutcome.trailing_metadatac                 C   s   t jjS r   )r'   
StatusCodeZINTERNALr@   r   r   r   code   s    z_FailureOutcome.codec                 C   s   dS )Nz+Exception raised while intercepting the RPCr   r@   r   r   r   details   s    z_FailureOutcome.detailsc                 C   s   dS NFr   r@   r   r   r   cancel   s    z_FailureOutcome.cancelc                 C   s   dS rF   r   r@   r   r   r   	cancelled   s    z_FailureOutcome.cancelledc                 C   s   dS rF   r   r@   r   r   r   	is_active   s    z_FailureOutcome.is_activec                 C   s   d S r   r   r@   r   r   r   time_remaining   s    z_FailureOutcome.time_remainingc                 C   s   dS rF   r   r@   r   r   r   running   s    z_FailureOutcome.runningc                 C   s   dS NTr   r@   r   r   r   done   s    z_FailureOutcome.doneNignored_timeoutc                 C   s
   | j d S r   r8   r   rO   r   r   r   result   s    z_FailureOutcome.result)rO   r   c                 C   s   | j S r   rP   rQ   r   r   r   r:      s    z_FailureOutcome.exceptionc                 C   s   | j S r   )r9   rQ   r   r   r   r;      s    z_FailureOutcome.tracebackc                 C   s   dS rF   r   )r   Zunused_callbackr   r   r   add_callback   s    z_FailureOutcome.add_callbackfnr   c                 C   s   ||  d S r   r   r   rU   r   r   r   add_done_callback   s    z!_FailureOutcome.add_done_callbackc                 C   s   | S r   r   r@   r   r   r   __iter__   s    z_FailureOutcome.__iter__c                 C   s
   | j d S r   rP   r@   r   r   r   __next__   s    z_FailureOutcome.__next__c                 C   s   |   S r   )rY   r@   r   r   r   next   s    z_FailureOutcome.next)N)N)N)#r$   r%   r&   	Exceptionr)   typesTracebackTyper   r   r   rA   rB   r'   rC   rD   strrE   boolrG   rH   rI   floatrJ   rK   rM   rR   r:   r;   rS   r
   rW   rX   rY   rZ   __classcell__r   r   r=   r   r7      s:   

  r7   c                   @   s.  e Zd ZU eed< ejed< eejdddZee	 dddZ
ee	 dd	d
Zeej dddZee dddZedddZee dddZedddZedddZedddZedddZedddZd(ee ddd Zd)ee dd!d"Zd*ee dd#d$Zedd%d&d'ZdS )+_UnaryOutcome	_response_call)responsecallc                 C   s   || _ || _d S r   )rc   rd   )r   re   rf   r   r   r   r      s    z_UnaryOutcome.__init__r?   c                 C   s
   | j  S r   )rd   rA   r@   r   r   r   rA      s    z_UnaryOutcome.initial_metadatac                 C   s
   | j  S r   )rd   rB   r@   r   r   r   rB      s    z_UnaryOutcome.trailing_metadatac                 C   s
   | j  S r   )rd   rD   r@   r   r   r   rD      s    z_UnaryOutcome.codec                 C   s
   | j  S r   )rd   rE   r@   r   r   r   rE      s    z_UnaryOutcome.detailsc                 C   s
   | j  S r   )rd   rI   r@   r   r   r   rI      s    z_UnaryOutcome.is_activec                 C   s
   | j  S r   )rd   rJ   r@   r   r   r   rJ      s    z_UnaryOutcome.time_remainingc                 C   s
   | j  S r   )rd   rG   r@   r   r   r   rG      s    z_UnaryOutcome.cancelc                 C   s   | j |S r   )rd   rS   r   callbackr   r   r   rS      s    z_UnaryOutcome.add_callbackc                 C   s   dS rF   r   r@   r   r   r   rH      s    z_UnaryOutcome.cancelledc                 C   s   dS rF   r   r@   r   r   r   rK      s    z_UnaryOutcome.runningc                 C   s   dS rL   r   r@   r   r   r   rM      s    z_UnaryOutcome.doneNrN   c                 C   s   | j S r   )rc   rQ   r   r   r   rR      s    z_UnaryOutcome.resultc                 C   s   d S r   r   rQ   r   r   r   r:      s    z_UnaryOutcome.exceptionc                 C   s   d S r   r   rQ   r   r   r   r;      s    z_UnaryOutcome.tracebackrT   c                 C   s   ||  d S r   r   rV   r   r   r   rW      s    z_UnaryOutcome.add_done_callback)N)N)N)r$   r%   r&   r   r)   r'   Callr   r   r   rA   rB   rC   rD   r^   rE   r_   rI   r`   rJ   rG   rS   rH   rK   rM   rR   r:   r;   r
   rW   r   r   r   r   rb      s$   

rb   c                
   @   s   e Zd ZU eed< eed< ejed< eeejdddZde	e
e e
e e
ej e
e e
ej e	dd	d
Zde	e
e e
e e
ej e
e e
ej ee	ejf dddZde	e
e e
e e
ej e
e e
ej ee	ejf dddZde	e
e e
e e
ej e
e e
ej e	dddZdS )_UnaryUnaryMultiCallable_thunk_method_interceptorr   r-   r"   c                 C   s   || _ || _|| _d S r   rk   rl   rm   r   r   r-   r"   r   r   r   r     s    z!_UnaryUnaryMultiCallable.__init__N)requestr.   r/   r0   r1   r2   r   c           	      C   s   | j ||||||d\}}|S Nr.   r/   r0   r1   r2   
_with_call)	r   rq   r.   r/   r0   r1   r2   re   ignored_callr   r   r   __call__  s    	
z!_UnaryUnaryMultiCallable.__call__c           	         s>   t j|||||  fdd}j| |}| |fS )Nc              
      s   t |  \}}}}}}z,|j||||||d\}}	t||	W S  tjk
rn }
 z|
 W Y S d }
~
X Y n8 tk
r } zt|t	 d  W Y S d }~X Y nX d S Nrs      
r6   rk   	with_callrb   r'   RpcErrorr[   r7   sysexc_info)new_detailsrq   
new_methodnew_timeoutnew_metadatanew_credentialsnew_wait_for_readynew_compressionre   rf   	rpc_errorr:   Zclient_call_detailsr   r   r   continuation1  s,    

z9_UnaryUnaryMultiCallable._with_call.<locals>.continuation)r,   rl   rm   intercept_unary_unaryrR   )	r   rq   r.   r/   r0   r1   r2   r   rf   r   r   r   ru     s    		  z#_UnaryUnaryMultiCallable._with_callc                 C   s   | j ||||||dS rr   rt   )r   rq   r.   r/   r0   r1   r2   r   r   r   r{   N  s    	z"_UnaryUnaryMultiCallable.with_callc           	   
      sr   t j|||||  fdd}zj| |W S  tk
rl } zt|t d  W Y S d }~X Y nX d S )Nc                    s2   t |  \}}}}}}|j||||||dS rr   r6   rk   futurer   rq   r   r   r   r   r   r   r   r   r   r   r  s     
z5_UnaryUnaryMultiCallable.future.<locals>.continuationry   )r,   rl   rm   r   r[   r7   r}   r~   	r   rq   r.   r/   r0   r1   r2   r   r:   r   r   r   r   `  s"    		  z_UnaryUnaryMultiCallable.future)NNNNN)NNNNN)NNNNN)NNNNN)r$   r%   r&   r   r)   r^   r'   UnaryUnaryClientInterceptorr   r   r   r`   r   CallCredentialsr_   Compressionrw   r   ri   ru   r{   r   r   r   r   r   rj      s~   

          2          rj   c                   @   sn   e Zd ZU eed< eed< ejed< eeejdddZde	e
e e
e e
ej e
e e
ej dd	d
ZdS )_UnaryStreamMultiCallablerk   rl   rm   rn   c                 C   s   || _ || _|| _d S r   ro   rp   r   r   r   r     s    z"_UnaryStreamMultiCallable.__init__N)rq   r.   r/   r0   r1   r2   c           	   
      sr   t j|||||  fdd}zj| |W S  tk
rl } zt|t d  W Y S d }~X Y nX d S )Nc                    s0   t |  \}}}}}}|||||||dS rr   r6   rk   r   r   r   r   r     s     z8_UnaryStreamMultiCallable.__call__.<locals>.continuationry   )r,   rl   rm   Zintercept_unary_streamr[   r7   r}   r~   r   r   r   r   rw     s"    		  z"_UnaryStreamMultiCallable.__call__)NNNNN)r$   r%   r&   r   r)   r^   r'   UnaryStreamClientInterceptorr   r   r   r`   r   r   r_   r   rw   r   r   r   r   r     s(   

     r   c                
   @   s   e Zd ZU eed< eed< ejed< eeejdddZde	e
e e
e e
ej e
e e
ej edd	d
Zde	e
e e
e e
ej e
e e
ej eeejf dddZde	e
e e
e e
ej e
e e
ej eeejf dddZde	e
e e
e e
ej e
e e
ej edddZdS )_StreamUnaryMultiCallablerk   rl   rm   rn   c                 C   s   || _ || _|| _d S r   ro   rp   r   r   r   r     s    z"_StreamUnaryMultiCallable.__init__N)request_iteratorr.   r/   r0   r1   r2   r   c           	      C   s   | j ||||||d\}}|S rr   rt   )	r   r   r.   r/   r0   r1   r2   re   rv   r   r   r   rw     s    	
z"_StreamUnaryMultiCallable.__call__c           	         s>   t j|||||  fdd}j| |}| |fS )Nc              
      s   t |  \}}}}}}z,|j||||||d\}}	t||	W S  tjk
rn }
 z|
 W Y S d }
~
X Y n8 tk
r } zt|t	 d  W Y S d }~X Y nX d S rx   rz   )r   r   r   r   r   r   r   r   re   rf   r   r:   r   r   r   r     s,    

z:_StreamUnaryMultiCallable._with_call.<locals>.continuation)r,   rl   rm   intercept_stream_unaryrR   )	r   r   r.   r/   r0   r1   r2   r   rf   r   r   r   ru     s    		  z$_StreamUnaryMultiCallable._with_callc                 C   s   | j ||||||dS rr   rt   )r   r   r.   r/   r0   r1   r2   r   r   r   r{     s    	z#_StreamUnaryMultiCallable.with_callc           	   
      sr   t j|||||  fdd}zj| |W S  tk
rl } zt|t d  W Y S d }~X Y nX d S )Nc                    s2   t |  \}}}}}}|j||||||dS rr   r   r   r   r   r   r   r   r   r   r   r   r   r   <  s     
z6_StreamUnaryMultiCallable.future.<locals>.continuationry   )r,   rl   rm   r   r[   r7   r}   r~   	r   r   r.   r/   r0   r1   r2   r   r:   r   r   r   r   *  s"    		  z _StreamUnaryMultiCallable.future)NNNNN)NNNNN)NNNNN)NNNNN)r$   r%   r&   r   r)   r^   r'   StreamUnaryClientInterceptorr   r   r   r`   r   r   r_   r   r   rw   r   ri   ru   r{   r   r   r   r   r   r     s~   

          2          r   c                   @   sn   e Zd ZU eed< eed< ejed< eeejdddZde	e
e e
e e
ej e
e e
ej dd	d
ZdS )_StreamStreamMultiCallablerk   rl   rm   rn   c                 C   s   || _ || _|| _d S r   ro   rp   r   r   r   r   [  s    z#_StreamStreamMultiCallable.__init__N)r   r.   r/   r0   r1   r2   c           	   
      sr   t j|||||  fdd}zj| |W S  tk
rl } zt|t d  W Y S d }~X Y nX d S )Nc                    s0   t |  \}}}}}}|||||||dS rr   r   r   r   r   r   r   w  s     z9_StreamStreamMultiCallable.__call__.<locals>.continuationry   )r,   rl   rm   Zintercept_stream_streamr[   r7   r}   r~   r   r   r   r   rw   e  s"    		  z#_StreamStreamMultiCallable.__call__)NNNNN)r$   r%   r&   r   r)   r^   r'   StreamStreamClientInterceptorr   r   r   r`   r   r   r_   r   rw   r   r   r   r   r   V  s(   

     r   c                   @   s6  e Zd ZU ejed< eejejej	ej
f ed< ejeejejej	ej
f dddZdeee ddd	Zed
ddZd eee ee ee ejdddZd!eee ee ee ejdddZd"eee ee ee ejdddZd#eee ee ee ejdddZdd Zdd Zdd Zdd ZdS )$_Channel_channelrm   )channelr"   c                 C   s   || _ || _d S r   )r   rm   )r   r   r"   r   r   r   r     s    
z_Channel.__init__F)rh   try_to_connectc                 C   s   | j j||d d S )N)r   )r   	subscribe)r   rh   r   r   r   r   r     s    z_Channel.subscribe)rh   c                 C   s   | j | d S r   )r   unsubscriberg   r   r   r   r     s    z_Channel.unsubscribeN)r-   request_serializerresponse_deserializer_registered_methodr   c                    s:    fdd}t jtjr.t||jS ||S d S )Nc                    s   j |  S r   )r   unary_unarymr   r   r   r   r   r   r     s
   z&_Channel.unary_unary.<locals>.<lambda>)
isinstancerm   r'   r   rj   r   r-   r   r   r   r   r   r   r   r     s    z_Channel.unary_unaryc                    s:    fdd}t jtjr.t||jS ||S d S )Nc                    s   j |  S r   )r   unary_streamr   r   r   r   r     s
   z'_Channel.unary_stream.<locals>.<lambda>)r   rm   r'   r   r   r   r   r   r   r     s    z_Channel.unary_streamc                    s:    fdd}t jtjr.t||jS ||S d S )Nc                    s   j |  S r   )r   stream_unaryr   r   r   r   r     s
   z'_Channel.stream_unary.<locals>.<lambda>)r   rm   r'   r   r   r   r   r   r   r     s    z_Channel.stream_unaryc                    s:    fdd}t jtjr.t||jS ||S d S )Nc                    s   j |  S r   )r   stream_streamr   r   r   r   r     s
   z(_Channel.stream_stream.<locals>.<lambda>)r   rm   r'   r   r   r   r   r   r   r     s    z_Channel.stream_streamc                 C   s   | j   d S r   r   closer@   r   r   r   _close  s    z_Channel._closec                 C   s   | S r   r   r@   r   r   r   	__enter__  s    z_Channel.__enter__c                 C   s   |    dS rF   )r   )r   exc_typeexc_valexc_tbr   r   r   __exit__	  s    z_Channel.__exit__c                 C   s   | j   d S r   r   r@   r   r   r   r     s    z_Channel.close)F)NNF)NNF)NNF)NNF) r$   r%   r&   r'   Channelr)   r   r   r   r   r   r   r   r   r_   r   r   r^   r   r	   UnaryUnaryMultiCallabler   UnaryStreamMultiCallabler   StreamUnaryMultiCallabler   StreamStreamMultiCallabler   r   r   r   r   r   r   r   r   r     s   

	              r   )r   r   r   c                 G   sX   t t|D ]F}t|tjsHt|tjsHt|tjsHt|tjsHtdt	| |} q| S )Nzinterceptor must be grpc.UnaryUnaryClientInterceptor or grpc.UnaryStreamClientInterceptor or grpc.StreamUnaryClientInterceptor or grpc.StreamStreamClientInterceptor or )
reversedlistr   r'   r   r   r   r   	TypeErrorr   )r   r   r"   r   r   r   intercept_channel  s    



r   )3__doc__collectionsr}   r\   typingr   r   r   r   r   r   r'   _typingr	   r
   r   r   r   objectr   r(   r+   
namedtupleZClientCallDetailsr,   r^   r`   r   r_   r   r6   r|   ZFutureri   r7   rb   r   rj   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sn    
3
  F6 ; ; 
