a
    !fc                  	   @   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   R/var/www/html/python-backend/venv/lib/python3.9/site-packages/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_pipeline6   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y"   |j }Y n0 z
| j}W n tyF   |j}Y n0 z
| j}W n tyj   |j}Y n0 z
| j}W n ty   |j}Y n0 z
| j}W n ty   |j}Y n0 z
| j}W n ty   |j}Y n0 ||||||fS r   )r-   AttributeErrorr.   r/   r0   r1   r2   )r3   r4   r-   r.   r/   r0   r1   r2   r   r   r   _unwrap_client_call_detailsD   s2    





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   n   s    z_FailureOutcome.__init__r   c                 C   s   d S r   r   r   r   r   r   initial_metadatas   s    z _FailureOutcome.initial_metadatac                 C   s   d S r   r   r@   r   r   r   trailing_metadatav   s    z!_FailureOutcome.trailing_metadatac                 C   s   t jjS r   )r'   
StatusCodeZINTERNALr@   r   r   r   codey   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   j   s8   

  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yl }
 z|
W  Y d }
~
S d }
~
0  ty } zt|t	 d W  Y d }~S d }~0 0 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   continuation  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{   $  s    	z"_UnaryUnaryMultiCallable.with_callc           	   
      sp   t j|||||  fdd}zj| |W S  tyj } zt|t d W  Y d }~S d }~0 0 d S )Nc                    s2   t |  \}}}}}}|j||||||dS rr   r6   rk   futurer   rq   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   4  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      sx   

     
     (          
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   X  s    z"_UnaryStreamMultiCallable.__init__N)rq   r.   r/   r0   r1   r2   c           	   
      sp   t j|||||  fdd}zj| |W S  tyj } zt|t d W  Y d }~S d }~0 0 d S )Nc                    s0   t |  \}}}}}}|||||||dS rr   r6   rk   r   r   r   r   r   i  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  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yl }
 z|
W  Y d }
~
S d }
~
0  ty } zt|t	 d W  Y d }~S d }~0 0 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           	   
      sp   t j|||||  fdd}zj| |W S  tyj } zt|t d W  Y d }~S d }~0 0 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   |  sx   

     
     (          
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           	   
      sp   t j|||||  fdd}zj| |W S  tyj } zt|t d W  Y d }~S d }~0 0 d S )Nc                    s0   t |  \}}}}}}|||||||dS rr   r   r   r   r   r   r      s    

z9_StreamStreamMultiCallable.__call__.<locals>.continuationry   )r,   rl   rm   Zintercept_stream_streamr[   r7   r}   r~   r   r   r   r   rw     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     s&   

     r   c                   @   s  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jdddZd!eee ee ejdddZd"eee ee ejdddZd#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_deserializerr   c                    s8    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   0  s   
z&_Channel.unary_unary.<locals>.<lambda>)
isinstancerm   r'   r   rj   r   r-   r   r   r   r   r   r   r   *  s    z_Channel.unary_unaryc                    s8    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   7  s    z_Channel.unary_streamc                    s8    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   J  s   
z'_Channel.stream_unary.<locals>.<lambda>)r   rm   r'   r   r   r   r   r   r   r   D  s    z_Channel.stream_unaryc                    s8    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   W  s   
z(_Channel.stream_stream.<locals>.<lambda>)r   rm   r'   r   r   r   r   r   r   r   Q  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__a  s    z_Channel.__enter__c                 C   s   |    dS rF   )r   )r   exc_typeexc_valexc_tbr   r   r   __exit__d  s    z_Channel.__exit__c                 C   s   | j   d S r   r   r@   r   r   r   r   h  s    z_Channel.close)F)NN)NN)NN)NN) 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     sn   



         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_channell  s    


r   )3__doc__collectionsr}   r\   typingr   r   r   r   r   r   r'   Z_typingr	   r
   r   r   r   objectr   r(   r+   
namedtupleZClientCallDetailsr,   r^   r`   r   r_   r   r6   r|   Futureri   r7   rb   r   rj   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sR    
	&E6n)n)Z
