Skip to content

No good way to get ServicerContext code/details from interceptor when replaced with _OpenTracingServicerContext #24

@oscdc

Description

@oscdc

Hi, we've been using grpcext.intercept_server() UnaryServerInterceptor and inspecting the server's return code like this:

def intercept_unary(self, request, servicer_context, server_info, handler):
    try:
      handler(request, servicer_context)
    except:
      code = servicer_context._state.code
      ...

We know this is not great: technically _state is private, but the ServicerContext offers no other public API for getting the code out of it.

The problem comes when we ALSO try to use open_tracing_server_interceptor(). When we do that, the servicer_context is replaced with an _OpenTracingServicerContext. And _OpenTracingServicerContext does not expose _state, so the above code breaks.

Yes, we know it's our fault for relying on the private _state field. But would it be possible to request a way to read the code/details from within a UnaryServerInterceptor, that would work whether or not we're using open_tracing_server_interceptor()?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions