
    \jm                        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mZmZmZ 	 d d	lZd d
lmZmZ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r	d dlmZm Z  n G d d      Z G d d      Z! e!       Z  ed      Z" eejF                        Z$ddde%fdZ&d!dZ'd!dZ(	 	 	 	 d"dZ)d#dZ*d$dZ+ G d d e      Z,y	# e$ r	  ed      w xY w)%    wraps)Integration)parse_version)DidNotEnable   )ClientInterceptor)ServerInterceptor)TYPE_CHECKINGAnyOptionalSequenceN)ChannelServerintercept_channel)r   )r   )!SentryUnaryUnaryClientInterceptor)"SentryUnaryStreamClientInterceptorzgrpcio is not installed.)	ParamSpecCallablec                       e Zd Zd Zy)r   c                      d | _         d | _        y N)argskwargsself_s     O/root/env/lib/python3.12/site-packages/sentry_sdk/integrations/grpc/__init__.py__init__zParamSpec.__init__$   s    DIDK    N)__name__
__module____qualname__r    r    r   r   r   #   s    	r    r   c                       e Zd Zd Zy)	_Callablec                      y r   r$   r   s     r   __getitem__z_Callable.__getitem__*   s    r    N)r!   r"   r#   r(   r$   r    r   r&   r&   )   s    	r    r&   Pchannelr   returnc                     t        | dd       }|3t        |t              ryt        | dd       }|y|} t        | dd       }|3y)N_interceptorT_channelF)getattr
isinstancer	   )r*   interceptorinner_channels      r   _is_channel_interceptedr3   5   s[    '>48K

!k#45T: g~t< 
! r    c                 0     t               d fd       }|S )z4Wrapper for synchronous secure and insecure channel.c                  V     | i |}t        |      st        |t                     S |S r   )r3   r   r	   )r   r   r*   funcs      r   patched_channelz+_wrap_channel_sync.<locals>.patched_channelH   s0    ''&w/$W.?.ABBNr    )r   r   r   r   r+   r   r   r6   r7   s   ` r   _wrap_channel_syncr9   E   s#     4[  r    c                 6    t        |       	 	 	 	 	 	 dd       }|S )Nc           	          t        |       r*t        |D cg c]  }t        |t              s| c}      }n|}t	        | g| S c c}w r   )r3   tupler0   r	   r   )r*   interceptorsr1   s      r   patched_intercept_channelz:_wrap_intercept_channel.<locals>.patched_intercept_channelT   sU     #7+  (4#%k3DE  L (L 8<88s   A)r*   r   r=   zgrpc.ServerInterceptorr+   r   r   )r6   r>   s     r   _wrap_intercept_channelr?   S   s8    
4[99+C9	9 9 %$r    c                 D     t               dd	 	 	 	 	 	 	 d fd       }|S )z5Wrapper for asynchronous secure and insecure channel.Nr=   c                 T    t               t               g}g || xs g }  |d| i|S Nr=   ) AsyncUnaryUnaryClientInterceptor AsyncUnaryStreamClientIntercetor)r=   r   r   sentry_interceptorsr6   s       r   r7   z,_wrap_channel_async.<locals>.patched_channell   sF     -.,.
 E,D0BDT????r    )r   P.argsr=   z.Optional[Sequence[grpc.aio.ClientInterceptor]]r   P.kwargsr+   r   r   r8   s   ` r   _wrap_channel_asyncrI   g   sT    
 4[ JN
@
@F
@ 
@ 
	
@ 
@ r    c                 D     t               dd	 	 	 	 	 	 	 d fd       }|S )zWrapper for synchronous server.NrA   c                     | xs g D cg c]  }t        |t              s| } }t               }|g| xs g }  |d| i|S c c}w rC   )r0   r
   )r=   r   r   r1   server_interceptorr6   s        r   patched_serverz)_wrap_sync_server.<locals>.patched_server   si      ,1r
k+<= 
 

 /0*Bl.@bBT????
s   Ar   rG   r=   z*Optional[Sequence[grpc.ServerInterceptor]]r   rH   r+   r   r   )r6   rM   s   ` r   _wrap_sync_serverrO   |   sT     4[ FJ@@B@ @ 
	@ @ r    c                 D     t               dd	 	 	 	 	 	 	 d fd       }|S )z Wrapper for asynchronous server.NrA   c                     t               }|g| xs g } 	 t        t        dk  rt        |       }  |d| i|S # t        $ r Y w xY w)N)r   *   r   r=   )AsyncServerInterceptorGRPC_VERSIONr<   	Exception)r=   r   r   rL   r6   s       r   patched_aio_serverz._wrap_async_server.<locals>.patched_aio_server   sn     45<
 b<

	
 'L:,E$\2 T????  		s   : 	AArN   r   )r6   rV   s   ` r   _wrap_async_serverrW      sT     4[ FJ@@B@ @ 
	@ @. r    c                   "    e Zd ZdZedd       Zy)GRPCIntegrationgrpcNc                     dd l } t        | j                        | _        t        | j                        | _        t	        | j
                        | _        t        | j                  j                        | j                  _        t        | j                  j                        | j                  _        t        | j                        | _	        t        | j                  j                        | j                  _	        y )Nr   )rZ   r9   insecure_channelsecure_channelr?   r   rI   aiorO   serverrW   )rZ   s    r   
setup_oncezGRPCIntegration.setup_once   s     243H3H I01D1DE!89O9O!P$78Q8Q$R!"5dhh6M6M"N'4,TXX__=r    )r+   N)r!   r"   r#   
identifierstaticmethodr`   r$   r    r   rY   rY      s    J> >r    rY   )r6   Callable[P, Channel]r+   rc   )r6   Callable[P, AsyncChannel]r+   rd   )r6   Callable[P, Server]r+   re   )r6   Callable[P, AsyncServer]r+   rf   )-	functoolsr   sentry_sdk.integrationsr   sentry_sdk.utilsr   r   clientr	   r_   r
   typingr   r   r   r   rZ   r   r   r   grpc.aioAsyncChannelAsyncServer
aio.serverrS   
aio.clientr   rD   r   rE   ImportErrorr   r   r&   r)   __version__rT   boolr3   r9   r?   rI   rO   rW   rY   r$   r    r   <module>rt      s     / * 0 % % 9 93770.G **  
 {HcNT--.Y 4  %(
% **<>k >m  3
1
223s   ,C
 
C