
    l
j                         d dl Z d dlZd dlZd dlZd dlZ G d d      Z G d dej                        Zd Z G d dej                        Z
y)	    Nc                   $    e Zd Zd Zd Zd Zd Zy)StreamReponseWrapperc                     || _         y N)response)selfr   s     '/usr/libexec/warpinator/interceptors.py__init__zStreamReponseWrapper.__init__   s	         c                     | S r    r   s    r	   __iter__zStreamReponseWrapper.__iter__   s    r   c                     | j                   j                         }	 |j                  s|S t        j                  |j                        }||_        |S # t
        $ r}t        j                  d|z          d }~ww xY w)NzDecompression error: %s)r   __next__chunkzlib
decompress	Exceptionloggingwarning)r   r   dcchunkes       r	   r   zStreamReponseWrapper.__next__   sh    &&(
	;;//%++6% 	OO59:	s   A 'A 	A9A44A9c                 8    | j                   j                          y r   )r   cancelr   s    r	   r   zStreamReponseWrapper.cancel!   s    r   N)__name__
__module____qualname__r
   r   r   r   r   r   r	   r   r   
   s    ! r   r   c                       e Zd Zd Zd Zy)ChunkDecompressorc                      y r   r   r   s    r	   r
   zChunkDecompressor.__init__%   s    r   c                     |j                   dk7  r	 |||      S 	 |j                  }t        j                  d|z         |s	 |||      S t         |||            S # t        $ r d}Y Bw xY w)N/Warp/StartTransferFTransfer using compression: %d)methoduse_compressionAttributeErrorr   debugr   )r   continuationclient_call_detailsrequestuse_comps        r	   intercept_unary_streamz(ChunkDecompressor.intercept_unary_stream*   s}    %%)>> 3W==	..H 	6AB 3W==#L1Dg$NOO  	H	s   A A)(A)N)r   r   r   r
   r-   r   r   r	   r    r    $   s    
Pr   r    c                    | y | j                   s)| j                  r| j                  }t        j                  }n| j                   r)| j                  r| j
                  }t        j                  }nQ| j                   r)| j                  s| j                  }t        j                  }n| j                  }t        j                  } | ||| j                   | j                        | j                  | j                        S )N)request_deserializerresponse_serializer)request_streamingresponse_streamingunary_streamgrpcunary_stream_rpc_method_handlerstream_stream stream_stream_rpc_method_handlerstream_unarystream_unary_rpc_method_handlerunary_unaryunary_unary_rpc_method_handlerr/   r0   )handlerfnbehavior_fnhandler_factorys       r	   _wrap_rpc_behaviorr@   ;   s    ?((W-G-G!..K"BBO&&7+E+E!//K"CCO&&w/I/I!..K"BBO!--K"AAOr+")";";")"<"< > 5<4P4P3:3N3N	P 	Pr   c                       e Zd Zd Zy)ChunkCompressorc                 Z    |j                   dk7  r ||      S d }t         ||      |      S )Nr#   c                       fd}|S )Nc                     	 | j                   }t        j                  d|z         |s	 |       S t	        j
                          |       }fd} ||      S # t        $ r d}Y [w xY w)NFr$   c              3   L  K   | D ]>  }	 |j                   s| n*t        j                  |j                         |_         | @ y # t        $ rP}t	        j
                  d|z         j                  t        j                  j                  d|z         Y d }~d }~ww xY ww)N)levelzCompression error: %sz.Something went wrong with data compression: %s)codedetails)
r   r   compressr   r   r   abortr4   
StatusCode	DATA_LOSS)r   r   r   
comp_levelservicer_contexts      r	   
compressorzoChunkCompressor.intercept_service.<locals>.compression_wrapper.<locals>.replacement_handler.<locals>.compressorp   s     !) 
Q	Q#(;;&+.2mmEKKz.Z&+
Q  ) Q#OO,Ca,GH,228Q8Q  \L  OP  \P2  Q  QQs/   B$;AB$	B!ABB$B!!B$)r&   r'   r   r(   prefsget_compression_level)request_or_iteratorrO   r,   r   rP   rN   behaviors    `   @r	   replacement_handlerz[ChunkCompressor.intercept_service.<locals>.compression_wrapper.<locals>.replacement_handler[   s    %2BBH >IJ#$79IJJ #88:
#$79IJQ "(++7 & %$H%s   A A-,A-r   )rT   r1   r2   rU   s   `   r	   compression_wrapperz>ChunkCompressor.intercept_service.<locals>.compression_wrapperZ   s    #,J '&r   )r%   r@   )r   r)   handler_call_detailsrV   s       r	   intercept_servicez!ChunkCompressor.intercept_serviceS   s9    &&*?? 455&	'N ",/C"DFYZZr   N)r   r   r   rX   r   r   r	   rB   rB   R   s    .[r   rB   )r   r4   r   rQ   utilr   UnaryStreamClientInterceptorr    r@   ServerInterceptorrB   r   r   r	   <module>r\      sN         4P99 P.P./[d,, /[r   