Skip to main content

fast JSON-RPC protocol implementation for asyncio, without transport

Project description

aio-jsonrpc-2.0

Build Status Coverage Status

Description

json rpc 2.0 protocol implementation for asyncio, without transport.

specification: http://www.jsonrpc.org/

Usage:

Example to resolve request:

import asyncio
import json

from aio_jsonrpc_20 import RequestResolver


async def foo(msg):
    await asyncio.sleep(0.1)
    return 'foobar ' + str(msg)

router = {'foo': foo}
resolver = RequestResolver(router)
json_request = json.dumps(
    {"jsonrpc": "2.0", "method": "foo", "params": ["toto"], "id": 1}
)


async def main():
    json_response = await resolver.handle(json_request)
    print(json_response)

loop = asyncio.get_event_loop()
loop.run_until_complete(main())

Result:

{"jsonrpc": "2.0", "result": "foobar toto", "id": 1}

Example to build request:

from aio_jsonrpc_20 import RequestBuilder

builder = RequestBuilder()
json_request = builder.call(method="foo", params={"name": "bar"})
print(json_request)
json_request = builder.call(method="foo", params={"name": "bar2"})
print(json_request)
json_request = builder.notify(method="log", params=["hello"])
print(json_request)

Result:

{"jsonrpc": "2.0", "method": "foo", "params": {"name": "bar"}, "id": 1}
{"jsonrpc": "2.0", "method": "foo", "params": {"name": "bar2"}, "id": 2}
{"jsonrpc": "2.0", "method": "log", "params": ["hello"]}

Example to build batch request:

from aio_jsonrpc_20 import BatchRequestBuilder

batch_builder = BatchRequestBuilder()
id1 = batch_builder.call(method="foo", params={"name": "bar"})
id2 = batch_builder.call(method="foo2", params={"name": "bar"})
print(id1, id2)
batch_builder.notify(method="foo3", params={"name": "bar"})
json_request = batch_builder.get_request()
print(json_request)

Result:

1 2
[
    {"jsonrpc": "2.0", "method": "foo", "params": {"name": "bar"}, "id": 1},
    {"jsonrpc": "2.0", "method": "foo2", "params": {"name": "bar"}, "id": 2},
    {"jsonrpc": "2.0", "method": "foo3", "params": {"name": "bar"}}
]

TODO:

  • Fix definitely interface for builders
  • More Test
  • Documentation
  • Optimisation
  • ...

Testing:

py.test --cov=aio_jsonrpc_20 --cov-report term-missing tests/

0.1.2

fix(README): Fixed encoding error

0.1.0

Initial release.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aio-jsonrpc-2.0-0.1.2.tar.gz (7.5 kB view details)

Uploaded Source

File details

Details for the file aio-jsonrpc-2.0-0.1.2.tar.gz.

File metadata

  • Download URL: aio-jsonrpc-2.0-0.1.2.tar.gz
  • Upload date:
  • Size: 7.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.0.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.8.2

File hashes

Hashes for aio-jsonrpc-2.0-0.1.2.tar.gz
Algorithm Hash digest
SHA256 18e6af68836cb5a2fa1a86a3eaabb6ee0b5c6961d18544e8dd74bb7781b4d949
MD5 465527e659e32541f64b10997b91cc62
BLAKE2b-256 d4a343396ee65afb256204a867acbe57d260222d44b247df7c495d2a0e2f5114

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page