o
    ˷eO                     @   s   d Z ddlZddlZddlZG dd deZdd ZG dd dedd	ejZ	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dd ZdS )z+Implementation of gRPC Python interceptors.    Nc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_ServicePipelinec                 C   s   t || _d S N)tupleinterceptors)selfr    r   H/var/www/ideatree/venv/lib/python3.10/site-packages/grpc/_interceptor.py__init__      z_ServicePipeline.__init__c                    s    fddS )Nc                    s     | S r   _intercept_at)contextindexr   thunkr   r   <lambda>   s    z0_ServicePipeline._continuation.<locals>.<lambda>r   )r   r   r   r   r   r   _continuation      z_ServicePipeline._continuationc                 C   s<   |t | jk r| j| }| ||d }|||S ||S )N   )lenr   r   intercept_service)r   r   r   r   interceptorr   r   r   r      s
   
z_ServicePipeline._intercept_atc                 C   s   |  |d|S )Nr   r   )r   r   r   r   r   r   execute&   r
   z_ServicePipeline.executeN)__name__
__module____qualname__r	   r   r   r   r   r   r   r   r      s
    r   c                 C   s   | rt | S d S r   )r   )r   r   r   r   service_pipeline*   r   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compressionc                 C   s   z| j }W n ty   |j }Y nw z| j}W n ty#   |j}Y nw z| j}W n ty5   |j}Y nw z| j}W n tyG   |j}Y nw z| j}W n tyY   |j}Y nw z| j}W n tyk   |j}Y nw ||||||fS r   )r   AttributeErrorr   r    r!   r"   r#   )call_detailsdefault_detailsr   r   r    r!   r"   r#   r   r   r   _unwrap_client_call_details6   s>   











r'   c                       s   e Zd Z f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dZd(ddZd(ddZdd Zd d! Zd"d# Zd$d% Zd&d' Z  ZS ))_FailureOutcomec                    s   t t|   || _|| _d S r   )superr(   r	   
_exception
_traceback)r   	exception	traceback	__class__r   r   r	   Z   s   
z_FailureOutcome.__init__c                 C      d S r   r   r   r   r   r   initial_metadata_      z _FailureOutcome.initial_metadatac                 C   r0   r   r   r1   r   r   r   trailing_metadatab   r3   z!_FailureOutcome.trailing_metadatac                 C   s   t jjS r   )grpc
StatusCodeINTERNALr1   r   r   r   codee      z_FailureOutcome.codec                 C      dS )Nz+Exception raised while intercepting the RPCr   r1   r   r   r   detailsh   r3   z_FailureOutcome.detailsc                 C   r:   NFr   r1   r   r   r   cancelk   r3   z_FailureOutcome.cancelc                 C   r:   r<   r   r1   r   r   r   	cancelledn   r3   z_FailureOutcome.cancelledc                 C   r:   r<   r   r1   r   r   r   	is_activeq   r3   z_FailureOutcome.is_activec                 C   r0   r   r   r1   r   r   r   time_remainingt   r3   z_FailureOutcome.time_remainingc                 C   r:   r<   r   r1   r   r   r   runningw   r3   z_FailureOutcome.runningc                 C   r:   NTr   r1   r   r   r   donez   r3   z_FailureOutcome.doneNc                 C      | j r   r*   r   ignored_timeoutr   r   r   result}      z_FailureOutcome.resultc                 C      | j S r   rE   rF   r   r   r   r,      rI   z_FailureOutcome.exceptionc                 C   rJ   r   )r+   rF   r   r   r   r-      rI   z_FailureOutcome.tracebackc                 C   r:   r<   r   )r   unused_callbackr   r   r   add_callback   r3   z_FailureOutcome.add_callbackc                 C      ||  d S r   r   r   fnr   r   r   add_done_callback      z!_FailureOutcome.add_done_callbackc                 C      | S r   r   r1   r   r   r   __iter__   r3   z_FailureOutcome.__iter__c                 C   rD   r   rE   r1   r   r   r   __next__   rI   z_FailureOutcome.__next__c                 C   s   |   S r   )rT   r1   r   r   r   next   r9   z_FailureOutcome.nextr   )r   r   r   r	   r2   r4   r8   r;   r=   r>   r?   r@   rA   rC   rH   r,   r-   rL   rP   rS   rT   rU   __classcell__r   r   r.   r   r(   X   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dZd"ddZd"ddZd d! ZdS )#_UnaryOutcomec                 C      || _ || _d S r   )	_response_call)r   responsecallr   r   r   r	         
z_UnaryOutcome.__init__c                 C   
   | j  S r   )rZ   r2   r1   r   r   r   r2         
z_UnaryOutcome.initial_metadatac                 C   r^   r   )rZ   r4   r1   r   r   r   r4      r_   z_UnaryOutcome.trailing_metadatac                 C   r^   r   )rZ   r8   r1   r   r   r   r8      r_   z_UnaryOutcome.codec                 C   r^   r   )rZ   r;   r1   r   r   r   r;      r_   z_UnaryOutcome.detailsc                 C   r^   r   )rZ   r?   r1   r   r   r   r?      r_   z_UnaryOutcome.is_activec                 C   r^   r   )rZ   r@   r1   r   r   r   r@      r_   z_UnaryOutcome.time_remainingc                 C   r^   r   )rZ   r=   r1   r   r   r   r=      r_   z_UnaryOutcome.cancelc                 C   s   | j |S r   )rZ   rL   r   callbackr   r   r   rL      rQ   z_UnaryOutcome.add_callbackc                 C   r:   r<   r   r1   r   r   r   r>      r3   z_UnaryOutcome.cancelledc                 C   r:   r<   r   r1   r   r   r   rA      r3   z_UnaryOutcome.runningc                 C   r:   rB   r   r1   r   r   r   rC      r3   z_UnaryOutcome.doneNc                 C   rJ   r   )rY   rF   r   r   r   rH      rI   z_UnaryOutcome.resultc                 C   r0   r   r   rF   r   r   r   r,      r3   z_UnaryOutcome.exceptionc                 C   r0   r   r   rF   r   r   r   r-      r3   z_UnaryOutcome.tracebackc                 C   rM   r   r   rN   r   r   r   rP      rQ   z_UnaryOutcome.add_done_callbackr   )r   r   r   r	   r2   r4   r8   r;   r?   r@   r=   rL   r>   rA   rC   rH   r,   r-   rP   r   r   r   r   rW      s"    


rW   c                   @   d   e Zd Zdd Z					dddZ					dddZ					ddd	Z					dd
dZdS )_UnaryUnaryMultiCallablec                 C      || _ || _|| _d S r   _thunk_method_interceptorr   r   r   r   r   r   r   r	         
z!_UnaryUnaryMultiCallable.__init__Nc           	      C      | j ||||||d\}}|S Nr   r    r!   r"   r#   
_with_call)	r   requestr   r    r!   r"   r#   r[   ignored_callr   r   r   __call__      
z!_UnaryUnaryMultiCallable.__call__c           	         >   t j|||||  fdd}j| |}| |fS )Nc              
         t |  \}}}}}}z|j||||||d\}}	t||	W S  tjy6 }
 z|
W  Y d }
~
S d }
~
w tyP } zt|t	 d W  Y d }~S d }~ww Nrm      
r'   rf   	with_callrW   r5   RpcError	Exceptionr(   sysexc_info)new_detailsrp   
new_methodnew_timeoutnew_metadatanew_credentialsnew_wait_for_readynew_compressionr[   r\   	rpc_errorr,   client_call_detailsr   r   r   continuation   .   


z9_UnaryUnaryMultiCallable._with_call.<locals>.continuation)r   rg   rh   intercept_unary_unaryrH   )	r   rp   r   r    r!   r"   r#   r   r\   r   r   r   ro         z#_UnaryUnaryMultiCallable._with_callc                 C      | j ||||||dS rl   rn   )r   rp   r   r    r!   r"   r#   r   r   r   ry        z"_UnaryUnaryMultiCallable.with_callc           	   
      l   t j|||||  fdd}z	j| |W S  ty5 } zt|t d W  Y d }~S d }~ww )Nc                    2   t |  \}}}}}}|j||||||dS rl   r'   rf   futurer~   rp   r   r   r   r   r   r   r   r   r   r        

z5_UnaryUnaryMultiCallable.future.<locals>.continuationrw   )r   rg   rh   r   r{   r(   r|   r}   	r   rp   r   r    r!   r"   r#   r   r,   r   r   r   r        z_UnaryUnaryMultiCallable.futureNNNNNr   r   r   r	   rr   ro   ry   r   r   r   r   r   rc      4    

%
rc   c                   @   (   e Zd Zdd Z					dddZdS )_UnaryStreamMultiCallablec                 C   rd   r   re   ri   r   r   r   r	   2  rj   z"_UnaryStreamMultiCallable.__init__Nc           	   
      r   )Nc                    0   t |  \}}}}}}|||||||dS rl   r'   rf   r   r   r   r   r   B     

z8_UnaryStreamMultiCallable.__call__.<locals>.continuationrw   )r   rg   rh   intercept_unary_streamr{   r(   r|   r}   r   r   r   r   rr   7     z"_UnaryStreamMultiCallable.__call__r   r   r   r   r	   rr   r   r   r   r   r   0      r   c                   @   rb   )_StreamUnaryMultiCallablec                 C   rd   r   re   ri   r   r   r   r	   W  rj   z"_StreamUnaryMultiCallable.__init__Nc           	      C   rk   rl   rn   )	r   request_iteratorr   r    r!   r"   r#   r[   rq   r   r   r   rr   \  rs   z"_StreamUnaryMultiCallable.__call__c           	         rt   )Nc              
      ru   rv   rx   )r~   r   r   r   r   r   r   r   r[   r\   r   r,   r   r   r   r   v  r   z:_StreamUnaryMultiCallable._with_call.<locals>.continuation)r   rg   rh   intercept_stream_unaryrH   )	r   r   r   r    r!   r"   r#   r   r\   r   r   r   ro   k  r   z$_StreamUnaryMultiCallable._with_callc                 C   r   rl   rn   )r   r   r   r    r!   r"   r#   r   r   r   ry     r   z#_StreamUnaryMultiCallable.with_callc           	   
      r   )Nc                    r   rl   r   r~   r   r   r   r   r   r   r   r   r   r   r     r   z6_StreamUnaryMultiCallable.future.<locals>.continuationrw   )r   rg   rh   r   r{   r(   r|   r}   	r   r   r   r    r!   r"   r#   r   r,   r   r   r   r     r   z _StreamUnaryMultiCallable.futurer   r   r   r   r   r   r   U  r   r   c                   @   r   )_StreamStreamMultiCallablec                 C   rd   r   re   ri   r   r   r   r	     rj   z#_StreamStreamMultiCallable.__init__Nc           	   
      r   )Nc                    r   rl   r   r   r   r   r   r     r   z9_StreamStreamMultiCallable.__call__.<locals>.continuationrw   )r   rg   rh   intercept_stream_streamr{   r(   r|   r}   r   r   r   r   rr     r   z#_StreamStreamMultiCallable.__call__r   r   r   r   r   r   r     r   r   c                   @   s~   e Zd Zdd ZdddZdd Z		dd	d
Z		dddZ		dddZ		dddZ	dd Z
dd Zdd Zdd ZdS )_Channelc                 C   rX   r   )_channelrh   )r   channelr   r   r   r   r	     r]   z_Channel.__init__Fc                 C   s   | j j||d d S )N)try_to_connect)r   	subscribe)r   ra   r   r   r   r   r     s   z_Channel.subscribec                 C   s   | j | d S r   )r   unsubscriber`   r   r   r   r     r   z_Channel.unsubscribeNc                    4    fdd}t jtjrt||jS ||S )Nc                       j |  S r   )r   unary_unarymrequest_serializerresponse_deserializerr   r   r   r        
 z&_Channel.unary_unary.<locals>.<lambda>)
isinstancerh   r5   UnaryUnaryClientInterceptorrc   r   r   r   r   r   r   r   r   r        z_Channel.unary_unaryc                    r   )Nc                    r   r   )r   unary_streamr   r   r   r   r     r   z'_Channel.unary_stream.<locals>.<lambda>)r   rh   r5   UnaryStreamClientInterceptorr   r   r   r   r   r     r   z_Channel.unary_streamc                    r   )Nc                    r   r   )r   stream_unaryr   r   r   r   r     r   z'_Channel.stream_unary.<locals>.<lambda>)r   rh   r5   StreamUnaryClientInterceptorr   r   r   r   r   r     r   z_Channel.stream_unaryc                    r   )Nc                    r   r   )r   stream_streamr   r   r   r   r     r   z(_Channel.stream_stream.<locals>.<lambda>)r   rh   r5   StreamStreamClientInterceptorr   r   r   r   r   r     r   z_Channel.stream_streamc                 C      | j   d S r   r   closer1   r   r   r   _close  r
   z_Channel._closec                 C   rR   r   r   r1   r   r   r   	__enter__  r3   z_Channel.__enter__c                 C   s   |    dS r<   )r   )r   exc_typeexc_valexc_tbr   r   r   __exit__  s   z_Channel.__exit__c                 C   r   r   r   r1   r   r   r   r   "  r
   z_Channel.close)F)NN)r   r   r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s(    




r   c                 G   sX   t t|D ]#}t|tjs$t|tjs$t|tjs$t|tjs$tdt	| |} q| S )Nzinterceptor must be grpc.UnaryUnaryClientInterceptor or grpc.UnaryStreamClientInterceptor or grpc.StreamUnaryClientInterceptor or grpc.StreamStreamClientInterceptor or )
reversedlistr   r5   r   r   r   r   	TypeErrorr   )r   r   r   r   r   r   intercept_channel&  s   


r   )__doc__collectionsr|   r5   objectr   r   
namedtupleClientCallDetailsr   r'   rz   FutureCallr(   rW   UnaryUnaryMultiCallablerc   UnaryStreamMultiCallabler   StreamUnaryMultiCallabler   StreamStreamMultiCallabler   Channelr   r   r   r   r   r   <module>   s*   
">4f%f%F