Skip to main content

django-grpc

CircleCI

Easy way to launch gRPC server with access to Django ORM and other handy stuff. gRPC calls are much faster that traditional HTTP requests because communicate over persistent connection and are compressed. Underlying gRPC library is written in C which makes it work faster than any RESTful framework where a lot of time is spent on serialization/deserialization.

Note that you need this project only if you want to use Django functionality in gRPC service. For pure python implementation read this

  • Supported Python: 3.4+
  • Supported Django: 2.X and 3.X

Installation

pip install django-grpc

Update settings.py

INSTALLED_APPS = [
    # ...
    'django_grpc',
]

GRPCSERVER = {
    'servicers': ['dotted.path.to.callback.eg.grpc_hook'],  # see `grpc_hook()` below
    'interceptors': ['dotted.path.to.interceptor_class',],  # optional, interceprots are similar to middleware in Django
    'maximum_concurrent_rpcs': None,
}

The callback that initializes "servicer" must look like following:

import my_pb2
import my_pb2_grpc

def grpc_hook(server):
    my_pb2_grpc.add_MYServicer_to_server(MYServicer(), server)

...
class MYServicer(my_pb2_grpc.MYServicer):

    def GetPage(self, request, context):
        response = my_pb2.PageResponse(title="Demo object")
        return response

Usage

python manage.py grpcserver

For developer's convenience add --autoreload flag during development.

Signals

The package uses Django signals to allow decoupled applications get notified when some actions occur:

  • django_grpc.signals.grpc_request_started - sent before gRPC server begins processing a request
  • django_grpc.signals.grpc_request_finished - sent when gRPC server finishes delivering response to the client
  • django_grpc.signals.grpc_got_request_exception - this signal is sent whenever RPC encounters an exception while processing an incoming request.

Note that signal names are similar to Django's built-in signals, but have "grpc_" prefix.

Serializers

There is an easy way to serialize django model to gRPC message using django_grpc.serializers.serialize_model.

Testing

Test your RPCs just like regular python methods which return some structure or generator. You need to provide them with only 2 parameters: request (protobuf structure or generator) and context (use FakeServicerContext from the example below).

Fake Context

You can pass instance of django_grpc_testtools.context.FakeServicerContext to your gRPC method to verify how it works with context (aborts, metadata and etc.).

import grpc
from django_grpc_testtools.context import FakeServicerContext
from tests.sampleapp.servicer import Greeter
from tests.sampleapp.helloworld_pb2 import HelloRequest

servicer = Greeter()
context = FakeServicerContext()
request = HelloRequest(name='Tester')

# To check metadata set by RPC 
response = servicer.SayHello(request, context)
assert context.get_trailing_metadata("Header1") == '...'

# To check status code
try:
    servicer.SayHello(request, context) 
except Exception:
    pass

assert context.abort_status == grpc.StatusCode.INVALID_ARGUMENT
assert context.abort_message == 'Cannot say hello to John'

In addition to standard gRPC context methods, FakeServicerContext provides:

  • .set_invocation_metadata() allows to simulate metadata from client to server.
  • .get_trailing_metadata() to get metadata set by your server
  • .abort_status and .abort_message to check if .abort() was called

Metadata

Release files for django-grpc 1.0.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-grpc 1.0.8
File Size Uploaded Provenance
django-grpc-1.0.8.tar.gz 10.5 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for django-grpc 1.0.8
File Interpreter ABI Platform
django_grpc-1.0.8-py2.py3-none-any.whl Python 3, Python 2 none any Details

Total release size: 22.4 kB

Release files / django-grpc-1.0.8.tar.gz

Download URL django-grpc-1.0.8.tar.gz
Size 10.5 kB
Tags Source
SHA-256 checksum
How to use checksums
abd5b729af5bc25d3e778f77cdec65d8ec3e36583dae45f6a75ec262e068dcd4
BLAKE2b-256 checksum
How to use checksums
3f005c8043f0d685379bc56472707b223a69f989806b1fa5abc00afc5e22e40f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.4.2 requests/2.18.4 setuptools/40.7.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.9

Release files / django_grpc-1.0.8-py2.py3-none-any.whl

Download URL django_grpc-1.0.8-py2.py3-none-any.whl
Size 12.0 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
c582065868ba623f87fd5cc637d86c6f16b8167a559a77050f564f0f93cf561b
BLAKE2b-256 checksum
How to use checksums
1da85b71f8d6afc5fcf794c55bae26cd50a40986a1b8290801bfb1a3be37c66d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.4.2 requests/2.18.4 setuptools/40.7.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.9

Security for django-grpc 1.0.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.0.8 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page