@@ -50,14 +50,29 @@ def __getitem__(self, _):
5050GRPC_VERSION = parse_version (grpc .__version__ )
5151
5252
53+ def _is_channel_intercepted (channel : "Channel" ) -> bool :
54+ interceptor = getattr (channel , "_interceptor" , None )
55+ while interceptor is not None :
56+ if isinstance (interceptor , ClientInterceptor ):
57+ return True
58+
59+ inner_channel = getattr (channel , "_channel" , None )
60+ if inner_channel is None :
61+ return False
62+
63+ channel = inner_channel
64+ interceptor = getattr (channel , "_interceptor" , None )
65+
66+ return False
67+
68+
5369def _wrap_channel_sync (func : "Callable[P, Channel]" ) -> "Callable[P, Channel]" :
5470 "Wrapper for synchronous secure and insecure channel."
5571
5672 @wraps (func )
5773 def patched_channel (* args : "Any" , ** kwargs : "Any" ) -> "Channel" :
5874 channel = func (* args , ** kwargs )
59- if not ClientInterceptor ._is_intercepted :
60- ClientInterceptor ._is_intercepted = True
75+ if not _is_channel_intercepted (channel ):
6176 return intercept_channel (channel , ClientInterceptor ())
6277 else :
6378 return channel
@@ -70,7 +85,7 @@ def _wrap_intercept_channel(func: "Callable[P, Channel]") -> "Callable[P, Channe
7085 def patched_intercept_channel (
7186 channel : "Channel" , * interceptors : "grpc.ServerInterceptor"
7287 ) -> "Channel" :
73- if ClientInterceptor . _is_intercepted :
88+ if _is_channel_intercepted ( channel ) :
7489 interceptors = tuple (
7590 [
7691 interceptor
0 commit comments