Skip to main content

Python JSON-RPC 2.0 客户端库。

项目描述

JSON RPC PyClient

许可证:AGPL v3 代码风格:黑色 PyPI 版本 欢迎投稿

用于在 Python 中创建具有异步支持的 JSON RPC 2.0 客户端的库

安装

poetry add jsonrpc2-pyclient
pip install jsonrpc2-pyclient

RPCClient 抽象类

JSON-RPC 2.0 与传输无关。这个库提供了一个抽象类,可以扩展它来为不同的传输创建客户端。

实现

要为传输创建客户端,请扩展RPCClient类并实现将_send_and_get_json请求作为 str 并期望以 str 或字节字符串返回 JSON-RPC 2.0 响应。 RPCClient有一个call在内部使用它的方法。

提供了一个默认的 HTTP 实现:

class RPCHTTPClient(RPCClient):
    """A JSON-RPC HTTP Client."""

    def __init__(self, url: str, headers: Optional[Headers] = None) -> None:
        self._client = httpx.Client()
        headers = headers or {}
        headers["Content-Type"] = "application/json"
        self._client.headers = headers
        self.url = url
        super(RPCHTTPClient, self).__init__()

    def __del__(self) -> None:
        self._client.close()

    @property
    def headers(self) -> Headers:
        """HTTP headers to be sent with each request."""
        return self._client.headers

    @headers.setter
    def headers(self, headers) -> None:
        self._client.headers = headers

    def _send_and_get_json(self, request_json: str) -> Union[bytes, str]:
        return self._client.post(self.url, content=request_json).content

用法

RPCClient处理形成请求和解析响应。要调用具有 的实现的 JSON-RPC 2.0 方法RPCClient,请调用该call方法,将要调用的方法的名称和参数传递给它。

如果响应是 JSON-RPC 2.0 结果对象,则只返回结果,不返回任何包装器。

如果响应是 JSON-RPC 2.0 错误响应,则该错误会抛出异常。

from jsonrpc2pyclient.httpclient import RPCHTTPClient
from jsonrpcobjects.errors import JSONRPCError

client = RPCHTTPClient("http://localhost:5000/api/v1/")
try:
    res = client.call("divide", [0, 0])
    print(f"JSON-RPC Result: {res}")
except JSONRPCError as e:
    print(f"JSON-RPC Error: {e}")

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

jsonrpc2-pyclient-2.2.12.tar.gz (16.1 kB 查看哈希

已上传 source

内置分布

jsonrpc2_pyclient-2.2.12-py3-none-any.whl (17.1 kB 查看哈希

已上传 py3