OpenRPC provides classes to rapidly develop an OpenRPC server.
Project description
Installation
OpenRPC is on PyPI and can be installed with:
pip install openrpc
Usage
This library provides an RPCServer
class that can be used to quickly
create an OpenRPC Server; it needs at minimum a title and version.
from openrpc.server import RPCServer
rpc = RPCServer(title="Demo Server", version="1.0.0")
Register a function as an RPC Method
To register a method with the RPCServer add the @rpc.method
decorator
to a function.
@rpc.method
def add(a: int, b: int) -> int:
return a + b
Process JSON RPC Request
OpenRPC is transport agnostic. To use it, pass JSON RPC requests as
strings or byte strings to the process_request
method.
The process_request
will return a JSON RPC response as a string.
req = """
{
"id": 1,
"method": "add",
"params": {"a": 2, "b": 2},
"jsonrpc": "2.0"
}
"""
rpc.process_request(req) # '{"id": 1, "result": 4, "jsonrpc": "2.0}'
RPC Discover
The rpc.discover
method is automatically generated. It relies heavily
on type hints.
Pydantic Support
For data classes to work properly use Pydantic.
RPCServer will use Pydantic for JSON serialization/deserialization as
well as generating schemas when calling rpc.discover
.
Async Support (v1.2+)
RPCServer has async support:
await rpc.process_request_async(req)
Example
from flask import Flask, request
from openrpc.server import RPCServer
app = Flask(__name__)
rpc = RPCServer(title="Demo Server", version="1.0.0")
@rpc.method
def add(a: int, b: int) -> int:
return a + b
@app.post("/api/v1/")
def process_rpc() -> str:
return rpc.process_request(request.data)
if __name__ == "__main__":
app.run()
Example In
[
{
"id": 1,
"method": "add",
"params": {"a": 1, "b": 3},
"jsonrpc": "2.0"
}, {
"id": 2,
"method": "add",
"params": [11, "thirteen"],
"jsonrpc": "2.0"
}
]
Example Result Out
[
{
"id": 1,
"result": 4,
"jsonrpc": "2.0"
}, {
"id": 2,
"error": {
"code": -32000,
"message": "TypeError: unsupported operand type(s) for +: 'int' and 'str'"
},
"jsonrpc": "2.0"
}
]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.