I think this <https://github.com/grpc/grpc/blob/4dd0bba12e90f490fcccef2dca1ae7e907cebbbf/src/python/grpcio/grpc/_interceptor.py#L251> is the code block you're wondering about. There's one for each of the four arities.
I hope that answers your question. Let me know if you want any more info. On Thursday, November 18, 2021 at 3:17:29 AM UTC-8 shmis...@gmail.com wrote: > If a exception happened at one of trailing interceptors > > gRPC somehow replace the response with _FailureOutcome > <https://github.com/grpc/grpc/blob/4dd0bba12e90f490fcccef2dca1ae7e907cebbbf/src/python/grpcio/grpc/_interceptor.py#L88> > and makes the interceptor has no problem. > > So I thought there should be some where wrapping > user overrided method > <https://github.com/grpc/grpc/blob/4dd0bba12e90f490fcccef2dca1ae7e907cebbbf/examples/python/interceptors/default_value/default_value_client_interceptor.py#L60> > > with try / except > > and when Exception is raised, replace the response with _FailureOutcome > <https://github.com/grpc/grpc/blob/4dd0bba12e90f490fcccef2dca1ae7e907cebbbf/src/python/grpcio/grpc/_interceptor.py#L88> > > *pseudocode* > > ```python > # somewhere deep in grpcio ... > > def run_user_defined_interceptor_method(response): > try : > response = intercept_unary_unary( continuation, client_call_details, > request ) > except Exception as e: > response = _FailureOutcome(exception = e) > return response > ``` > so even I run into a exception in interceptor and interceptor handle well > eventually at client code, not handling error > <https://github.com/grpc/grpc/blob/4dd0bba12e90f490fcccef2dca1ae7e907cebbbf/examples/python/interceptors/default_value/greeter_client.py#L38>bump > > into exception > > I'm quite sure about how it works because > codes under where exception happened doesn't run > > I can't find where *those wrappings* are happened like pseudocode > > class > <https://github.com/grpc/grpc/blob/4dd0bba12e90f490fcccef2dca1ae7e907cebbbf/src/python/grpcio/grpc/__init__.py#L426> > > that implements abstract method "intercept_unary_unary" > has no more than a abstract code, > > so as I said, there should be something more under grpcio > > ... > > This design was impressive because > it looked like mocking kind of Javascript's then(), catch() > and async pattern, but not actually async (in a way of propagating error) > and makes it easy to trace errors > > most of all, as a client side, it looks like real network connection even > it was problem from interceptor > > and as for enterprise level, it looked quite safe from unexpected errors > > I have no experience with using gRPC as enterprise level, > just got interested at gRPC, I'm senior freshman now. > -- You received this message because you are subscribed to the Google Groups "grpc.io" group. To unsubscribe from this group and stop receiving emails from it, send an email to grpc-io+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/grpc-io/e57ed6aa-9b30-4f51-9124-d7d98da55ad9n%40googlegroups.com.