Skip to main content

No project description provided

Project description

nest-rpc-client

PyPI Python

Async Python client for RPC transport interoperability with NestJS microservices. Supports RabbitMQ, Redis, NATS (and planned support for Kafka, MQTT).

Features

  • Fully async transports
  • Pluggable transport architecture
  • Compatible with NestJS microservices patterns (send, emit)
  • Extras-based installation

Installation

Install with a specific transport:

pip install "nest-rpc-client[rabbitmq]"
pip install "nest-rpc-client[redis]"
pip install "nest-rpc-client[nats]"

Usage

from nest_rpc_client.client import Client
from nest_rpc_client.transports.rabbitmq import RabbitMQTransport
from nest_rpc_client.config.rabbitmq import RabbitMQConfig

transport = RabbitMQTransport(RabbitMQConfig(url="amqp://guest:guest@localhost/", queue="rpc_queue"))

async with Client(transport) as client:
    result = await client.send("get_user", {"id": 123})
    await client.emit("user_created", {"id": 123})

You can also use only transport:

from nest_rpc_client.transports.rabbitmq import RabbitMQTransport
from nest_rpc_client.config.rabbitmq import RabbitMQConfig

transport = RabbitMQTransport(RabbitMQConfig(url="amqp://guest:guest@localhost/", queue="rpc_queue"))

await transport.connect()

result = await transport.send("get_user", {"id": 123})
await transport.emit("user_created", {"id": 123})

await transport.close()

Pattern usage with dictionaries

If your pattern is a dictionary (object in js, for example: {cmd: "sum"}), you need to serialize it to a string before using it. Example:

pattern = json.dumps({"cmd": "sum"}) # '{"cmd": "sum"}'
await client.send(pattern, data)

Custom Transport

nest-rpc-client allows you to use your own custom transports. To do this, inherit from the Transport base class and implement its abstract methods:

from nest_rpc_client.transport import Transport

class MyCustomTransport(Transport):
    async def connect(self) -> None:
        # Initialize any connections or resources
        ...

    async def close(self) -> None:
        # Clean up resources or close connections
        ...

    async def send(self, pattern: str, data: dict) -> dict:
        # Implement the RPC request (expects a response)
        ...

    async def emit(self, pattern: str, data: dict) -> None:
        # Implement the fire-and-forget event
        ...

You can then use your custom transport exactly like the built-in ones:

transport = MyCustomTransport()
async with Client(transport) as client:
    result = await client.send("my_pattern", {"foo": "bar"})

Tests:

This project includes both unit tests and full integration tests.

  • Unit tests are included in this repository and can be run with: pytest
  • Full integration tests are available in a separate repository: nest-rpc-client-tests

TODO:

  • Implement tcp transport
  • Implement kafka transport
  • Implement mqtt transport

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

nest_rpc_client-1.0.1b0.tar.gz (5.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nest_rpc_client-1.0.1b0-py3-none-any.whl (8.1 kB view details)

Uploaded Python 3

File details

Details for the file nest_rpc_client-1.0.1b0.tar.gz.

File metadata

  • Download URL: nest_rpc_client-1.0.1b0.tar.gz
  • Upload date:
  • Size: 5.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.11.2 Linux/6.1.0-31-amd64

File hashes

Hashes for nest_rpc_client-1.0.1b0.tar.gz
Algorithm Hash digest
SHA256 b310863bd9cf96c099fcb15d5a5c4cba3294090d6885af4f95f8e78a775906de
MD5 d9003a06c3e7fe175d626a7307c59c58
BLAKE2b-256 7bec310db1230b92fb76e664f8508eb9ae0960baa78df7cb990592a897f68ca4

See more details on using hashes here.

File details

Details for the file nest_rpc_client-1.0.1b0-py3-none-any.whl.

File metadata

  • Download URL: nest_rpc_client-1.0.1b0-py3-none-any.whl
  • Upload date:
  • Size: 8.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.11.2 Linux/6.1.0-31-amd64

File hashes

Hashes for nest_rpc_client-1.0.1b0-py3-none-any.whl
Algorithm Hash digest
SHA256 36f6257d7fb857b00e0330f1a4a720d970bfe3cf13a2d4e5096f40e4b3fd62b1
MD5 b9888a8894a0aa61bbc4ef70871e2f6e
BLAKE2b-256 51d1e9919d989db56a14afd88b6442acca05aebd4829e829d494ffbf2b3c70d5

See more details on using hashes here.

Supported by

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