JSON RPC

You can use descanso to write a JSON RPC client.

The logic is similar to REST-like case but you need to create JsonRPCBuilder instance and use it as a decorator.

from adaptix import Retort
from descanso.transformers.request import Query
from descanso import JsonRPCBuilder

jsonrpc = JsonRPCBuilder(
    url="/endpoint",
    request_body_dumper=Retort(),
    response_body_loader=Retort(),
)

class Client:
    @jsonrpc("methodname")
    def get(self, body: ParamsModel) -> ResultModel:
        ...

It is expected that first parameter of decorator is method name sent in request, while the only function parameter is the value of params. Request ID is generated automatically.

In case of error response received, JsonRPCError with corresponding fields will be raised.

You need to provide request_body_dumper and response_body_loader to convert models to something that can be serialized in json.

Many params except jsonrpc method name can be set both in builder and when applying a decorator

API

class descanso.JsonRPCBuilder(*transformers, http_method, url, id_generator, request_body_dumper, request_body_post_dump, response_body_loader, response_body_pre_load, error_raiser, json_rpc_error_raiser)
Parameters:
  • transformers (RequestTransformer | ResponseTransformer)

  • http_method (str)

  • url (str | Callable | Url)

  • id_generator (IdGenerator)

  • request_body_dumper (Dumper | None)

  • request_body_post_dump (RequestTransformer | None)

  • response_body_loader (Loader | None)

  • response_body_pre_load (ResponseTransformer | None)

  • error_raiser (ResponseTransformer | None)

  • json_rpc_error_raiser (ResponseTransformer | None)