Client#

Misc#

JSON-RPC client.

class pjrpc.client.AbstractClient(request_class=<class 'pjrpc.common.v20.Request'>, response_class=<class 'pjrpc.common.v20.Response'>, batch_request_class=<class 'pjrpc.common.v20.BatchRequest'>, batch_response_class=<class 'pjrpc.common.v20.BatchResponse'>, error_cls=<class 'pjrpc.common.exceptions.JsonRpcError'>, id_gen_impl=<function sequential>, json_loader=<function loads>, json_dumper=<function dumps>, json_encoder=<class 'pjrpc.common.common.JSONEncoder'>, json_decoder=None, strict=True, request_args=None, tracers=(), retry_strategy=None)[source]#

Bases: BaseAbstractClient

Abstract synchronous JSON-RPC client.

Parameters:
property batch: Batch#

Client batch wrapper.

notify(method, *args, _trace_ctx=namespace(), **kwargs)[source]#

Makes a notification request

Parameters:
  • method (str) – method name

  • args (Any) – method positional arguments

  • kwargs (Any) – method named arguments

  • _trace_ctx (SimpleNamespace) – tracers request context

Return type:

Optional[Response]

call(method, *args, _trace_ctx=namespace(), **kwargs)[source]#

Makes JSON-RPC call.

Parameters:
  • method (str) – method name

  • args (Any) – method positional arguments

  • kwargs (Any) – method named arguments

  • _trace_ctx (SimpleNamespace) – tracers request context

Returns:

response result

Return type:

Any

send(request, _trace_ctx=namespace(), _retry_strategy=UNSET, **kwargs)[source]#

Sends a JSON-RPC request.

Parameters:
Returns:

response instance

Return type:

Optional[Response]

class pjrpc.client.AbstractAsyncClient(request_class=<class 'pjrpc.common.v20.Request'>, response_class=<class 'pjrpc.common.v20.Response'>, batch_request_class=<class 'pjrpc.common.v20.BatchRequest'>, batch_response_class=<class 'pjrpc.common.v20.BatchResponse'>, error_cls=<class 'pjrpc.common.exceptions.JsonRpcError'>, id_gen_impl=<function sequential>, json_loader=<function loads>, json_dumper=<function dumps>, json_encoder=<class 'pjrpc.common.common.JSONEncoder'>, json_decoder=None, strict=True, request_args=None, tracers=(), retry_strategy=None)[source]#

Bases: BaseAbstractClient

Abstract asynchronous JSON-RPC client.

Parameters:
property batch: AsyncBatch#

Client batch wrapper.

async send(request, _trace_ctx=namespace(), _retry_strategy=UNSET, **kwargs)[source]#

Sends a JSON-RPC request.

Parameters:
Returns:

response instance

Return type:

Optional[Response]

async notify(method, *args, _trace_ctx=namespace(), **kwargs)[source]#

Makes a notification request

Parameters:
  • method (str) – method name

  • args (Any) – method positional arguments

  • kwargs (Any) – method named arguments

  • _trace_ctx (SimpleNamespace) – tracers request context

Return type:

Optional[Response]

async call(method, *args, _trace_ctx=namespace(), **kwargs)[source]#

Makes JSON-RPC call.

Parameters:
  • method (str) – method name

  • args (Any) – method positional arguments

  • kwargs (Any) – method named arguments

  • _trace_ctx (SimpleNamespace) – tracers request context

Returns:

response result

Return type:

Any

class pjrpc.client.AsyncBatch(client)[source]#

Bases: BaseBatch

Asynchronous batch wrapper. Used to make asynchronous JSON-RPC batch requests.

Parameters:

client (AbstractAsyncClient) –

class Proxy(batch)[source]#

Bases: BaseProxy

Parameters:

batch (AsyncBatch) –

async call(_trace_ctx=namespace())[source]#

Makes an RPC call.

Parameters:

_trace_ctx (SimpleNamespace) – tracers request context

Return type:

Any

property proxy: Proxy#

Batch request proxy object.

async call(_trace_ctx=namespace())[source]#

Makes a JSON-RPC request.

Parameters:

_trace_ctx (SimpleNamespace) – tracers request context

Returns:

request results as a tuple

Return type:

Optional[Any]

async send(request, _trace_ctx=namespace(), **kwargs)[source]#

Sends a JSON-RPC batch request.

Parameters:
  • request (BatchRequest) – request instance

  • kwargs (Any) – additional client request argument

  • _trace_ctx (SimpleNamespace) – tracers request context

Returns:

response instance

Return type:

Optional[BatchResponse]

class pjrpc.client.BaseBatch(client)[source]#

Bases: ABC

Base batch wrapper. Implements some methods to wrap multiple JSON-RPC requests into a single batch request.

Parameters:

client (BaseAbstractClient) – JSON-RPC client instance

class BaseProxy(batch)[source]#

Bases: ABC

Proxy object. Provides syntactic sugar to make method calls using dot notation.

Parameters:

batch (BaseBatch) – batch wrapper

abstract call(_trace_ctx=namespace())[source]#

Makes an RPC call.

Parameters:

_trace_ctx (SimpleNamespace) – tracers request context

Return type:

Union[Awaitable[Any], Any]

abstract property proxy: BaseProxy#

Batch request proxy object.

abstract call(_trace_ctx=namespace())[source]#

Makes a JSON-RPC request.

Parameters:

_trace_ctx (SimpleNamespace) – tracers request context

Returns:

request results as a tuple

Return type:

Union[Awaitable[Any], Any]

abstract send(request, _trace_ctx=namespace(), **kwargs)[source]#

Sends a JSON-RPC batch request.

Parameters:
  • request (BatchRequest) – request instance

  • kwargs (Any) – additional client request argument

  • _trace_ctx (SimpleNamespace) – tracers request context

Returns:

response instance

Return type:

Optional[Union[Awaitable[Optional[BatchResponse]], BatchResponse]]

add(method, *args, **kwargs)[source]#

Adds the method call to the batch.

Parameters:
  • method (str) – method name

  • args (Any) – method positional arguments

  • kwargs (Any) – method named arguments

Returns:

self

Return type:

BaseBatch

notify(method, *args, **kwargs)[source]#

Adds a notification request to the batch.

Parameters:
  • method (str) – method name

  • args (Any) – method positional arguments

  • kwargs (Any) – method named arguments

Return type:

BaseBatch

class pjrpc.client.BaseAbstractClient(request_class=<class 'pjrpc.common.v20.Request'>, response_class=<class 'pjrpc.common.v20.Response'>, batch_request_class=<class 'pjrpc.common.v20.BatchRequest'>, batch_response_class=<class 'pjrpc.common.v20.BatchResponse'>, error_cls=<class 'pjrpc.common.exceptions.JsonRpcError'>, id_gen_impl=<function sequential>, json_loader=<function loads>, json_dumper=<function dumps>, json_encoder=<class 'pjrpc.common.common.JSONEncoder'>, json_decoder=None, strict=True, request_args=None, tracers=(), retry_strategy=None)[source]#

Bases: ABC

Base abstract JSON-RPC client.

Parameters:
class Proxy(client)[source]#

Bases: object

Proxy object. Provides syntactic sugar to make method call using dot notation.

Parameters:

client (BaseAbstractClient) – JSON-RPC client instance

property proxy: Proxy#

Clint proxy object.

class pjrpc.client.Batch(client)[source]#

Bases: BaseBatch

Batch wrapper. Implements some methods to wrap multiple JSON-RPC requests into a single batch request.

Parameters:

client (AbstractClient) – JSON-RPC client instance

class Proxy(batch)[source]#

Bases: BaseProxy

Parameters:

batch (Batch) –

call(_trace_ctx=namespace())[source]#

Makes an RPC call.

Parameters:

_trace_ctx (SimpleNamespace) – tracers request context

Return type:

Any

property proxy: Proxy#

Batch request proxy object.

call(_trace_ctx=namespace())[source]#

Makes a JSON-RPC request.

Parameters:

_trace_ctx (SimpleNamespace) – tracers request context

Returns:

request results as a tuple

Return type:

Optional[Any]

send(request, _trace_ctx=namespace(), **kwargs)[source]#

Sends a JSON-RPC batch request.

Parameters:
  • request (BatchRequest) – request instance

  • kwargs (Any) – additional client request argument

  • _trace_ctx (SimpleNamespace) – tracers request context

Returns:

response instance

Return type:

Optional[BatchResponse]

class pjrpc.client.LoggingTracer(logger=<Logger pjrpc.client (WARNING)>, level=10)[source]#

Bases: Tracer

JSON-RPC client logging tracer.

Parameters:
on_request_begin(trace_context, request)[source]#

Handler called before JSON-RPC request begins.

Parameters:
Return type:

None

on_request_end(trace_context, request, response)[source]#

Handler called after JSON-RPC request ends.

Parameters:
Return type:

None

on_error(trace_context, request, error)[source]#

Handler called when JSON-RPC request failed.

Parameters:
Return type:

None

class pjrpc.client.Tracer[source]#

Bases: object

JSON-RPC client tracer.

on_request_begin(trace_context, request)[source]#

Handler called before JSON-RPC request begins.

Parameters:
Return type:

None

on_request_end(trace_context, request, response)[source]#

Handler called after JSON-RPC request ends.

Parameters:
Return type:

None

on_error(trace_context, request, error)[source]#

Handler called when JSON-RPC request failed.

Parameters:
Return type:

None

Backends#

class pjrpc.client.backend.requests.Client(url, session=None, **kwargs)[source]#

Bases: AbstractClient

Requests library client backend.

Parameters:
close()[source]#

Closes the current http session.

Return type:

None

class pjrpc.client.backend.aiohttp.Client(url, session_args=None, session=None, **kwargs)[source]#

Bases: AbstractAsyncClient

Aiohttp library client backend.

Parameters:
async close()[source]#

Closes current http session.

Return type:

None

class pjrpc.client.backend.kombu.Client(broker_url, queue_name=None, conn_args=None, exchange_name=None, exchange_args=None, routing_key=None, result_queue_name=None, result_queue_args=None, **kwargs)[source]#

Bases: AbstractClient

kombu based JSON-RPC client. Note: the client is not thread-safe.

Parameters:
  • broker_url (str) – broker connection url

  • conn_args (Optional[Dict[str, Any]]) – broker connection arguments.

  • queue_name (Optional[str]) – queue name to publish requests to

  • exchange_name (Optional[str]) – exchange to publish requests to. If None default exchange is used

  • exchange_args (Optional[Dict[str, Any]]) – exchange arguments

  • routing_key (Optional[str]) – reply message routing key. If None queue name is used

  • result_queue_name (Optional[str]) – result queue name. If None random exclusive queue is declared for each request

  • conn_args – additional connection arguments

  • kwargs (Any) – parameters to be passed to pjrpc.client.AbstractClient

  • result_queue_args (Optional[Dict[str, Any]]) –

close()[source]#

Closes the current broker connection.

Return type:

None

class pjrpc.client.backend.aio_pika.Client(broker_url, queue_name=None, conn_args=None, exchange_name=None, exchange_args=None, routing_key=None, result_queue_name=None, result_queue_args=None, **kwargs)[source]#

Bases: AbstractAsyncClient

aio_pika based JSON-RPC client.

Parameters:
  • broker_url (URL) – broker connection url

  • conn_args (Optional[Dict[str, Any]]) – broker connection arguments.

  • queue_name (Optional[str]) – queue name to publish requests to

  • exchange_name (Optional[str]) – exchange to publish requests to. If None default exchange is used

  • exchange_args (Optional[Dict[str, Any]]) – exchange arguments

  • routing_key (Optional[str]) – reply message routing key. If None queue name is used

  • result_queue_name (Optional[str]) – result queue name. If None random exclusive queue is declared for each request

  • conn_args – additional connection arguments

  • kwargs (Any) – parameters to be passed to pjrpc.client.AbstractClient

  • result_queue_args (Optional[Dict[str, Any]]) –

async connect()[source]#

Opens a connection to the broker.

Return type:

None

async close()[source]#

Closes current broker connection.

Return type:

None

Tracer#

class pjrpc.client.tracer.Tracer[source]#

Bases: object

JSON-RPC client tracer.

on_request_begin(trace_context, request)[source]#

Handler called before JSON-RPC request begins.

Parameters:
Return type:

None

on_request_end(trace_context, request, response)[source]#

Handler called after JSON-RPC request ends.

Parameters:
Return type:

None

on_error(trace_context, request, error)[source]#

Handler called when JSON-RPC request failed.

Parameters:
Return type:

None

class pjrpc.client.tracer.LoggingTracer(logger=<Logger pjrpc.client (WARNING)>, level=10)[source]#

Bases: Tracer

JSON-RPC client logging tracer.

Parameters:
on_request_begin(trace_context, request)[source]#

Handler called before JSON-RPC request begins.

Parameters:
Return type:

None

on_request_end(trace_context, request, response)[source]#

Handler called after JSON-RPC request ends.

Parameters:
Return type:

None

on_error(trace_context, request, error)[source]#

Handler called when JSON-RPC request failed.

Parameters:
Return type:

None

Retry#

class pjrpc.client.retry.Backoff(attempts, jitter=<function Backoff.<lambda>>)[source]#

Bases: object

JSON-RPC request retry strategy.

Parameters:
  • attempts (int) – retries number

  • jitter (Callable[[], float]) – retry delay jitter generator

class pjrpc.client.retry.PeriodicBackoff(attempts, jitter=<function Backoff.<lambda>>, interval=1.0)[source]#

Bases: Backoff

Periodic request retry strategy.

Parameters:
class pjrpc.client.retry.ExponentialBackoff(attempts, jitter=<function Backoff.<lambda>>, base=1.0, factor=2.0, max_value=None)[source]#

Bases: Backoff

Exponential request retry strategy.

Parameters:
  • base (float) – exponentially growing delay base

  • factor (float) – exponentially growing delay factor (multiplier)

  • max_value (Optional[float]) – delay max value

  • attempts (int) –

  • jitter (Callable[[], float]) –

class pjrpc.client.retry.FibonacciBackoff(attempts, jitter=<function Backoff.<lambda>>, multiplier=1.0, max_value=1.0)[source]#

Bases: Backoff

Fibonacci request retry strategy.

Parameters:
  • multiplier (float) – fibonacci interval sequence multiplier

  • max_value (float) – delay max value

  • attempts (int) –

  • jitter (Callable[[], float]) –

class pjrpc.client.retry.RetryStrategy(backoff, codes=None, exceptions=None)[source]#

Bases: object

JSON-RPC request retry strategy.

Parameters:
  • backoff (Backoff) – backoff delay generator

  • codes (Optional[Set[int]]) – JSON-RPC response codes receiving which the request will be retried

  • exceptions (Optional[Set[Type[Exception]]]) – exceptions catching which the request will be retried

pjrpc.client.retry.retry(func, retry_strategy)[source]#

Synchronous function retry decorator.

Parameters:
Returns:

decorated function

Return type:

Callable[[…], AbstractResponse]

pjrpc.client.retry.retry_async(func, retry_strategy)[source]#

Asynchronous function retry decorator.

Parameters:
Returns:

decorated function

Return type:

Callable[[…], Awaitable[AbstractResponse]]

Integrations#