Minimal python RPC implementation in a single file based on the JSON-RPC 2.0 specs from http://www.jsonrpc.org/specification.
Project description
Minimal python RPC implementation based on the JSON-RPC 2.0 specs.
Original source hosted at GitHub.
Usage
jsonrpyc.RPC
instances basically wrap an input stream and an output stream in order to communicate with other services.
A service is not even forced to be written in Python as long as it strictly implements the JSON-RPC 2.0 specs.
A suitable implementation for NodeJs is node-json-rpc.
A jsonrpyc.RPC
instance may wrap a target object.
Incomming requests will be routed to methods of this object whose result might be sent back as a response. Example implementation:
server.py
import jsonrpyc
class MyTarget(object):
def greet(self: MyTarget, name: str) -> str:
return f"Hi, {name}!"
jsonrpyc.RPC(MyTarget())
client.py
import jsonrpyc
from subprocess import Popen, PIPE
p = Popen(["python", "server.py"], stdin=PIPE, stdout=PIPE)
rpc = jsonrpyc.RPC(stdout=p.stdin, stdin=p.stdout)
#
# sync usage
#
print(rpc("greet", args=("John",), block=0.1))
# => "Hi, John!"
#
# async usage
#
def cb(err: Exception | None, res: str | None = None) -> None:
if err:
raise err
print(f"callback got: {res}")
rpc("greet", args=("John",), callback=cb)
# cb is called asynchronously which prints
# => "callback got: Hi, John!"
#
# shutdown
#
p.stdin.close()
p.stdout.close()
p.terminate()
p.wait()
Installation
Install simply via pip.
pip install jsonrpyc
# or with optional dev dependencies
pip install jsonrpyc[dev]
Contributing
If you like to contribute to jsonrpyc, I'm happy to receive pull requests. Just make sure to add new test cases, run them via
> pytest tests
and check for linting and typing errors with
> mypy jsonrpyc
> flake8 jsonrpyc
Development
- Source hosted at GitHub
- Report issues, questions, feature requests on GitHub Issues
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.