Services

Django gRPC framework provides an Service class, which is pretty much the same as using a regular gRPC generated servicer interface. For example:

import grpc
from django_grpc_framework.services import Service
from blog.models import Post
from blog.serializers import PostProtoSerializer


class PostService(Service):
    def get_object(self, pk):
        try:
            return Post.objects.get(pk=pk)
        except Post.DoesNotExist:
            self.context.abort(grpc.StatusCode.NOT_FOUND, 'Post:%s not found!' % pk)

    def Retrieve(self, request, context):
        post = self.get_object(request.id)
        serializer = PostProtoSerializer(post)
        return serializer.message

Service instance attributes

The following attributes are available in a service instance.

  • .request - the gRPC request object
  • .context - the grpc.ServicerContext object
  • .action - the name of the current service method

As servicer method

classmethod Service.as_servicer(**initkwargs)

Returns a gRPC servicer instance:

servicer = PostService.as_servicer()
add_PostControllerServicer_to_server(servicer, server)