This is a compact and simple JSON-RPC client implementation for asyncio python code. This code is forked from https://github.com/gciotta/jsonrpc-requests
Main Features
Supports nested namespaces (eg. app.users.getUsers())
100% test coverage
Usage
It is recommended to manage the aiohttp ClientSession object externally and pass it to the Server constructor. (See the aiohttp documentation.) If not passed to Server, a ClientSession object will be created automatically.
Execute remote JSON-RPC functions
import asyncio
from jsonrpc_async import Server
async def routine():
async with Server('http://localhost:8080') as server:
await server.foo(1, 2)
await server.foo(bar=1, baz=2)
await server.foo({'foo': 'bar'})
await server.foo.bar(baz=1, qux=2)
asyncio.get_event_loop().run_until_complete(routine())
A notification
import asyncio
from jsonrpc_async import Server
async def routine():
async with Server('http://localhost:8080') as server:
await server.foo(bar=1, _notification=True)
asyncio.get_event_loop().run_until_complete(routine())
Pass through arguments to aiohttp (see also aiohttp documentation)
import asyncio
import aiohttp
from jsonrpc_async import Server
async def routine():
async with Server(
'http://localhost:8080',
auth=aiohttp.BasicAuth('user', 'pass'),
headers={'x-test2': 'true'}
) as server:
await server.foo()
asyncio.get_event_loop().run_until_complete(routine())
Pass through aiohttp exceptions
import asyncio
import aiohttp
from jsonrpc_async import Server
async def routine():
async with Server('http://unknown-host') as server:
try:
await server.foo()
except TransportError as transport_error:
print(transport_error.args[1]) # this will hold a aiohttp exception instance
asyncio.get_event_loop().run_until_complete(routine())
Tests
Install the Python tox package and run tox, it’ll test this package with various versions of Python.
Changelog
2.1.3 (2025-08-21)
2.1.2 (2023-07-10)
2.1.1 (2022-05-03)
Unpin test dependencies
2.1.0 (2021-05-03)
Bumped jsonrpc-base to version 2.1.0
2.0.0 (2021-03-16)
Bumped jsonrpc-base to version 2.0.0
BREAKING CHANGE: Allow single mapping as a positional parameter. Previously, when calling with a single dict as a parameter (example: server.foo({'bar': 0})), the mapping was used as the JSON-RPC keyword parameters. This made it impossible to send a mapping as the first and only positional parameter. If you depended on the old behavior, you can recreate it by spreading the mapping as your method’s kwargs. (example: server.foo(**{'bar': 0}))
1.1.1 (2019-11-12)
Bumped jsonrpc-base to version 1.0.3
1.1.0 (2018-09-04)
1.0.1 (2018-08-23)
Bumped jsonrpc-base to version 1.0.2
1.0.0 (2018-07-06)
Bumped minimum aiohttp version to 3.0.0
Bumped jsonrpc-base to version 1.0.1
Credits
@gciotta for creating the base project jsonrpc-requests.
@mbroadst for providing full support for nested method calls, JSON-RPC RFC compliance and other improvements.
@vaab for providing api and tests improvements, better RFC compliance.
Release files for jsonrpc-async 2.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| jsonrpc_async-2.1.3.tar.gz | 5.0 kB | Details |
Release files / jsonrpc_async-2.1.3.tar.gz
| Download URL | jsonrpc_async-2.1.3.tar.gz |
|---|---|
| Size | 5.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
47fe02478098a7c2d811a54ae138ae8a72992d6337a5a3ee90ceb3a266fdf1e2
|
|
BLAKE2b-256 checksum How to use checksums |
96870449d2ad2d8c85fe62dc71ce4a5c02fa58920a1d7b7bc977ec54d7286d02
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.5
|