Profile
Back to NewsBack
GitHub Trending 2 min
Reader Mode
alorence/django-modern-rpc: Simple XML-RPC and JSON-RPC server for modern Django

alorence/django-modern-rpc: Simple XML-RPC and JSON-RPC server for modern Django

10 hours ago

django-modern-rpc

Tests</a> Documentation Status</a> Downloads</a> Link to demo</a>

Embed an XML-RPC / 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 process
  • Custom error handling
  • Sync and async procedures
  • Multiple servers
  • Customizable XML / JSON backends with builtin support for orjson, msgspec, ujson, rapidjson, lxml, etree, etc.

Requirements

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

| Python ➞ | 3.10 | 3.11 | 3.12 | 3.13 | 3.14 | 3.15 | |-----------:|:----:|:----:|:----:|:----:|:----:|:----:| | Django 4.2 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | | Django 5.0 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | 🔴 | | Django 5.1 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | 🔴 | | Django 5.2 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🔴 | | Django 6.0 | 🔴 | 🔴 | 🟢 | 🟢 | 🟢 | 🟢 | | Django 6.1 | 🔴 | 🔴 | 🟢 | 🟢 | 🟢 | 🟢 |

To enforce security, defusedxml will be installed as a dependency, along with typing-extensions.

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 # Alternatively, you can use the asynchronous view: # path('rpc/', server.async_view), ]

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

Code quality

The project uses nox as a task runner to launch tests suite against all supported Python / Django combinations and generate a coverage report file. Ruff is used to lint and format the codebase, and pyrefly is used to perform type checking.

All these tools are automatically run in various GitHub Actions workflows, and external tools are used to perform static code analysis and collect coverage results.

SonarQube

Sonar Coverage</a> Sonar Quality Gate</a> Sonar Tech Debt</a> Sonar Violations</a>

Codacy

Codacy Coverage</a> Codacy Grade</a>

Coveralls

Coveralls</a>

Chat with me