alorence/django-modern-rpc

Simple XML-RPC and JSON-RPC server for modern Django

django
plugin
python3
rpc
rpc-framework

django-modern-rpc

Tests Documentation Status Downloads Link to demo

Embed an XML-RPC and/or JSON-RPC server in your Django project!

Main features

  • XML-RPC and JSON-RPC 2.0 support (JSON-RPC 1.0 is NOT supported)
  • Custom authentication
  • Error handling
  • Sync and async procedures
  • Multiple entry-points

Requirements

The following Django / Python versions are supported, according to Django Installation FAQ

Python ➞ 3.8 3.9 3.10 3.11 3.12 3.13
Django 3.2 🟢 🟢 🟢 🔴 🔴 🔴
Django 4.0 🟢 🟢 🟢 🔴 🔴 🔴
Django 4.1 🟢 🟢 🟢 🟢 🔴 🔴
Django 4.2 🟢 🟢 🟢 🟢 🟢 🔴
Django 5.0 🔴 🔴 🟢 🟢 🟢 🔴
Django 5.1 🔴 🔴 🟢 🟢 🟢 🟢
Django 5.2 🔴 🔴 🟢 🟢 🟢 🟢

To enforce security, defusedxml will be installed as a dependency.

Quickstart

Install django-modern-rpc in your environment

pip install django-modern-rpc

Create an RpcServer instance and register your first procedure, in myapp/rpc.py

from modernrpc.server import RpcServer

server = RpcServer()


@server.register_procedure
def add(a: int, b: int) -> int:
    """Add two numbers and return the result.

    :param a: First number
    :param b: Second number
    :return: Sum of a and b
    """
    return a + b

Configure a path to allow RPC clients calling your procedures, in urls.py

from django.urls import path
from myapp.rpc import server

urlpatterns = [
    # ... other url patterns
    path('rpc/', server.view),  # Synchronous view
]

The server's view is already configured with CSRF exemption and POST-only restrictions.

Code quality

The projects uses nox as a task runner to launch tests suite with all supported Python / Django combinations. In addition, ruff is used to lint and format the codebase and mypy is used to perform type checking.

All these tools are run automatically in various GitHub Actions workflows and to upload coverage results and static code analysis reports to the following tools.

Codacy Grade Codacy Coverage Coveralls

Stars
101
1.98% more than last month
Forks
19
Open Issues
4