Skip to main content

SlxJsonRpc JsonRpc helper class, that uses pydantic.

Project description

slxjsonrpc

versions Test Status Lint Status Coverage pypi license SeluxitA/S Wappsto

SlxJsonRpc is a JsonRpc helper class, that uses pydantic.

SlxJsonRpc keep track of the JsonRpc schema, and procedure for each method. It also ensures to route each message to where it is expected.

SlxJsonRpc is build to be both a JsonRpc server & client. To enable the JsonRpc-server, the method_map need to be given.

Installation using pip

The slxjsonrpc package can be installed using PIP (Python Package Index) as follows:

$ pip install slxjsonrpc

Use case Examples

The given use case show how to use the slxJsonRpc Package. It expected that you have a send & a receive function/method to transport the Json RPC messages to and from the package.

The Client example code:

from typing import List, Union, Literal

from enum import Enum
import slxjsonrpc


def send(data: str) -> None: ...


def receive() -> Union[str, bytes, dict]: ...


class MethodList(str, Enum):
    ADD = "add"
    PING = "ping"


params = {
    MethodList.ADD: List[Union[int, float]],
    MethodList.PING: None,
}

result = {
    MethodList.ADD: Union[int, float],
    MethodList.PING: Literal["pong"]
}

client_jsonrpc = slxjsonrpc.SlxJsonRpc(
    methods=MethodsList,
    result=result,
    params=params,
)

ok = None


def reply(reply_data):
    nonlocal ok
    ok = reply_data  # Will be "pong"


ping_package = client_jsonrpc.create_request(method=MethodList.PING, callback=reply)
send(ping_package.json(exclude_none=True))
data = receive()
client_jsonrpc.parser(data)

print(f"OK: {ok}")

The Server example code:

from typing import List, Union, Literal

from enum import Enum
import slxjsonrpc


def send(data: str) -> None: ...


def receive() -> Union[str, bytes, dict]: ...


class MethodList(str, Enum):
    ADD = "add"
    PING = "ping"


params = {
    MethodList.ADD: List[Union[int, float]],
    MethodList.PING: None,
}

result = {
    MethodList.ADD: Union[int, float],
    MethodList.PING: Literal["pong"]
}


method_map = {
    MethodList.ADD: lambda data: sum(data),
    MethodList.PING: lambda data: "pong",
}


server_jsonrpc = slxjsonrpc.SlxJsonRpc(
    methods=MethodsList,
    result=result,
    params=params,
    method_cb=method_map,
)

data = receive()
return_data = server_jsonrpc.parser(data)
if return_data:
    send(return_data.json(exclude_none=True))

License

This project is licensed under the Apache License 2.0 - see the LICENSE.md file for details.

v0.9.2 (August 17, 2023)

Added

  • RcpBatch is now iterable and behave more list a list.

Fixed

  • Type hinting errors.
  • Most issues where the wrong combo of exclude_unset & exclude_none given to model_dump_json would result in a invalid JsonRpc.

Changed

  • Notifications can now not trigger an Error Rpc reply. as per the specification.

v0.9.1 (August 4, 2023)

Fixed

  • Type hinting errors.
  • A method to param mapping error.

v0.9.0 (August 3, 2023)

Changed

  • Now using Pydantic version 2.
  • Now require python 3.7 or later.

v0.8.2 (December 13, 2021)

Added

  • Change-log

Changed

  • How create_request adds a Result reply handling. So now it uses _add_result_handling, which mean it will be easier to hook into for work-a-rounds.

v0.8.1 (November 25, 2021)

Fixed

  • Type hinting errors.

v0.8.0 (November 12, 2021)

Added

  • First 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

slxjsonrpc-0.9.2.tar.gz (32.4 kB view details)

Uploaded Source

Built Distribution

slxjsonrpc-0.9.2-py3-none-any.whl (28.4 kB view details)

Uploaded Python 3

File details

Details for the file slxjsonrpc-0.9.2.tar.gz.

File metadata

  • Download URL: slxjsonrpc-0.9.2.tar.gz
  • Upload date:
  • Size: 32.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for slxjsonrpc-0.9.2.tar.gz
Algorithm Hash digest
SHA256 bf00ad5dad1f8f14bbac2e7b1a0a03fd954b41114c316bcba34f4322902676fd
MD5 955aa2858dd5ecbc4c5b5a56d92723e1
BLAKE2b-256 a55ac2585a538b147220a6936b107e21e1734e5ca63f8a09b0610fb933777c0f

See more details on using hashes here.

File details

Details for the file slxjsonrpc-0.9.2-py3-none-any.whl.

File metadata

  • Download URL: slxjsonrpc-0.9.2-py3-none-any.whl
  • Upload date:
  • Size: 28.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for slxjsonrpc-0.9.2-py3-none-any.whl
Algorithm Hash digest
SHA256 4092da50bbd307490d1bd85994ab2456023115e13a3aaf873ff9a23576cda727
MD5 dc91afe59d1fae2efd8a2ae077f5f28f
BLAKE2b-256 29b314c348b796556592638c53a68cd1908b4ba40769e96068a7d45db3a46374

See more details on using hashes here.

Supported by

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