Skip to main content

rb_zenoh

rb_zenoh is a shared Zenoh-based communication package. Its main features are publish/subscribe, query/queryable, and ZenohRouter decorator-based routing.

Installation/Dependencies

  • Python: >=3.12,<3.13
  • Package dependencies: flatbuffers, psutil, rb_utils, rb_modules
  • The _core native extension is not built during package installation. Build the _core*.so/_core*.pyd for the required platforms first, then include it in the package.
# For the current host
bash scripts/backend/build_cpp_core.sh zenoh

# For Docker/Linux
RB_CPP_CORE_TARGETS="linux/amd64 linux/arm64" bash scripts/backend/build_cpp_core.sh zenoh

The distributed rainbow-rb-zenoh is not built as a fat wheel; it is split into per-platform wheels. Each wheel contains only the single _core artifact for its platform.

Core Objects

  • ZenohClient: low-level communication API
  • ZenohRouter: decorator-based router
  • SubscribeOptions: options controlling subscribe behavior

1) publish

from rb_zenoh.client import ZenohClient

client = ZenohClient()
client.publish("muscat/sample/topic", payload={"ok": True})

Publishing a FlatBuffer request:

from rb_flat_buffers.IPC.Request_MotionPause import Request_MotionPauseT

req = Request_MotionPauseT()
client.publish(
    "C500920/call_pause",
    flatbuffer_req_obj=req,
    flatbuffer_buf_size=64,
)

2) subscribe

from rb_zenoh.client import ZenohClient
from rb_zenoh.schema import SubscribeOptions

client = ZenohClient()

async def on_msg(*, topic, mv, obj_payload, dict_payload, attachment):
    print(topic, obj_payload, dict_payload, attachment)

client.subscribe(
    "muscat/sample/topic",
    on_msg,
    options=SubscribeOptions(dispatch="immediate"),
)

Callback signature:

  • topic: topic string
  • mv: raw payload (memoryview)
  • obj_payload: object parsed via flatbuffer_obj_t=<FlatBuffer T class> (T | None)
  • dict_payload: dict conversion result, regardless of whether flatbuffer_obj_t is set (dict | None)
  • attachment: sender, sender_id information

3) queryable

def on_query(req=None, params=None):
    return {"status": "ok"}

client.queryable("muscat/sample/query", on_query)

Callback arguments:

  • req: query payload body
    • Injected only when flatbuffer_req_t/flatbuffer_req_T_class is specified.
    • A FlatBuffer ...T object parsed internally via InitFromPackedBuf(...).
    • If flatbuffer_req_t is specified but the request has no payload, an error is raised.
  • params: query parameters
    • The internal q.parameters value is injected as a dict[str, str].
    • Used to pass filters/options separately from the payload (req).

Notes:

  • Arguments are auto-injected only when the callback parameters are named exactly req and params.
  • Parameters declared with other names such as request or query_params are not injected.
  • If neither is declared, the callback is invoked with no arguments.

4) query_one / query_all

query_one

res = client.query_one("muscat/program/state", timeout=0.3)
print(res.get("dict_payload"))
  • Returns only the first reply
  • Raises ZenohNoReply if there is no reply

query_all

res_list = client.query_all("*/health", timeout=0.5)
for item in res_list:
    print(item.get("key"), item.get("dict_payload"))
  • Returns all replies received within the timeout as a list
  • Returns an empty list if there are no replies

Which to use when

  • Calling a single target: query_one
  • Collecting from wildcards/multiple services: query_all

FlatBuffer Parameter Details

flatbuffer_req_obj

  • Meaning: the FlatBuffer object to send as the request (an object supporting Pack())
  • Used in: publish, query_one, query_all
  • Internal behavior: packed with a builder, then sent as a bytes payload

flatbuffer_buf_size

  • Meaning: initial buffer size of the FlatBuffer serialization builder
  • Used in:
    • Request serialization: publish, query_one, query_all
    • queryable response serialization: queryable(..., flatbuffer_res_buf_size=...)
  • Serialization may fail if it is too small
  • Recommended: start from 64/128/256/512 and increase to fit the payload size

flatbuffer_res_T_class

  • Meaning: specifies which FlatBuffer type to parse the response payload as
  • Used in: query_one, query_all
  • Type: must be a FlatBuffer Object API class (T class)
    • e.g. Response_FunctionsT, State_CoreT
    • Usually a class whose name ends in ...T
    • Parsed internally via InitFromPackedBuf(...)
  • Result:
    • If specified: parsed object in obj_payload
    • If not specified: rely mainly on dict_payload/raw payload

Example:

from rb_flat_buffers.IPC.Request_MotionPause import Request_MotionPauseT
from rb_flat_buffers.IPC.Response_Functions import Response_FunctionsT

res = client.query_one(
    "C500920/call_pause",
    flatbuffer_req_obj=Request_MotionPauseT(),
    flatbuffer_res_T_class=Response_FunctionsT,
    flatbuffer_buf_size=64,
    timeout=0.3,
)
obj = res.get("obj_payload")

5) Using ZenohRouter

from rb_zenoh.router import ZenohRouter

router = ZenohRouter(prefix="muscat/common")

@router.subscribe("health")
async def on_health(*, topic, obj_payload, dict_payload, attachment):
    pass

@router.queryable("echo")
async def on_echo(params=None):
    return {"ok": True}

Lifecycle:

  • On startup: await router.startup()
  • On shutdown: await router.shutdown()

Exceptions/Notes

  • query_one no-reply: ZenohNoReply
  • Transport reconnection errors: ZenohTransportError
  • ZenohClient is a per-process singleton, so avoid unnecessary frequent close() calls

Metadata

Release files for rainbow-rb-zenoh 0.10.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for rainbow-rb-zenoh 0.10.4
File Actions
rainbow_rb_zenoh-0.10.4-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for rainbow_rb_zenoh-0.10.4-cp313-cp313-win_amd64.whl
rainbow_rb_zenoh-0.10.4-cp313-cp313-manylinux_2_35_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.35+ x86-64 Details for rainbow_rb_zenoh-0.10.4-cp313-cp313-manylinux_2_35_x86_64.whl
rainbow_rb_zenoh-0.10.4-cp313-cp313-manylinux_2_35_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.35+ ARM64 Details for rainbow_rb_zenoh-0.10.4-cp313-cp313-manylinux_2_35_aarch64.whl
rainbow_rb_zenoh-0.10.4-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for rainbow_rb_zenoh-0.10.4-cp312-cp312-win_amd64.whl
rainbow_rb_zenoh-0.10.4-cp312-cp312-manylinux_2_35_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.35+ x86-64 Details for rainbow_rb_zenoh-0.10.4-cp312-cp312-manylinux_2_35_x86_64.whl
rainbow_rb_zenoh-0.10.4-cp312-cp312-manylinux_2_35_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.35+ ARM64 Details for rainbow_rb_zenoh-0.10.4-cp312-cp312-manylinux_2_35_aarch64.whl
rainbow_rb_zenoh-0.10.4-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for rainbow_rb_zenoh-0.10.4-cp311-cp311-win_amd64.whl
rainbow_rb_zenoh-0.10.4-cp311-cp311-manylinux_2_35_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.35+ x86-64 Details for rainbow_rb_zenoh-0.10.4-cp311-cp311-manylinux_2_35_x86_64.whl
rainbow_rb_zenoh-0.10.4-cp311-cp311-manylinux_2_35_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.35+ ARM64 Details for rainbow_rb_zenoh-0.10.4-cp311-cp311-manylinux_2_35_aarch64.whl

Total release size: 53.2 MB

Release files / rainbow_rb_zenoh-0.10.4-cp313-cp313-win_amd64.whl

Download URL rainbow_rb_zenoh-0.10.4-cp313-cp313-win_amd64.whl
Size 6.0 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
b48fa44a76376fc05e0443d2f256ab2a0fd0202cf9e3e99f673b7683fb38ab02
BLAKE2b-256 checksum
How to use checksums
f2b3f7f987573b772e84df84c69cd6ad679a5a9a955fbdf1f890cfe0082f54f1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / rainbow_rb_zenoh-0.10.4-cp313-cp313-manylinux_2_35_x86_64.whl

Download URL rainbow_rb_zenoh-0.10.4-cp313-cp313-manylinux_2_35_x86_64.whl
Size 6.0 MB
Tags CPython 3.13 Linux glibc 2.35+ x86-64
SHA-256 checksum
How to use checksums
4b232746a0b4c1a83daa424d4c2d41d1a7a45691ebba260661f030dd9fecf9ae
BLAKE2b-256 checksum
How to use checksums
047cdcc0e04d4f8065a5a67b084aad1f7a191d67751d8d84789607362787dba0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / rainbow_rb_zenoh-0.10.4-cp313-cp313-manylinux_2_35_aarch64.whl

Download URL rainbow_rb_zenoh-0.10.4-cp313-cp313-manylinux_2_35_aarch64.whl
Size 5.7 MB
Tags CPython 3.13 Linux glibc 2.35+ ARM64
SHA-256 checksum
How to use checksums
fa4bc6dfe0a7adc5b9b5d060c66328d2865ffb6cf12b7029073d56caca4f6fcd
BLAKE2b-256 checksum
How to use checksums
7e23c08cde18d4e99819217c18b2ad68ccc55205daa114310456280acda302fc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / rainbow_rb_zenoh-0.10.4-cp312-cp312-win_amd64.whl

Download URL rainbow_rb_zenoh-0.10.4-cp312-cp312-win_amd64.whl
Size 6.0 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
40a9b731c5487b118ff647e0ddb4657d637f7ef10f065b18e56100d110ba3503
BLAKE2b-256 checksum
How to use checksums
e84fe8a22afc52a2456c1ae005cefe894dd86543823359058016e402e3f1a083
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / rainbow_rb_zenoh-0.10.4-cp312-cp312-manylinux_2_35_x86_64.whl

Download URL rainbow_rb_zenoh-0.10.4-cp312-cp312-manylinux_2_35_x86_64.whl
Size 6.0 MB
Tags CPython 3.12 Linux glibc 2.35+ x86-64
SHA-256 checksum
How to use checksums
abef3bef292a7f8b3a6766abafa73dacf41ad460099c091773f8ee9f1366e4d2
BLAKE2b-256 checksum
How to use checksums
8580f7a53c4723755907332dfcb1133dc5f8ef1f86011d60be87fc4eb7e3390e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / rainbow_rb_zenoh-0.10.4-cp312-cp312-manylinux_2_35_aarch64.whl

Download URL rainbow_rb_zenoh-0.10.4-cp312-cp312-manylinux_2_35_aarch64.whl
Size 5.7 MB
Tags CPython 3.12 Linux glibc 2.35+ ARM64
SHA-256 checksum
How to use checksums
dcf4b0431589eb4f4a694d143a873ebd1dde40dd7a20047e63e6f6fa69ff1548
BLAKE2b-256 checksum
How to use checksums
0eb8edda6f1b34d470856dcfdbc35263605c7fced54d565930dad0036886b08c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / rainbow_rb_zenoh-0.10.4-cp311-cp311-win_amd64.whl

Download URL rainbow_rb_zenoh-0.10.4-cp311-cp311-win_amd64.whl
Size 6.0 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
1957a12053b40b144d5b1234ffbd16d8ee7bc369f32daec50374c2bae7f10142
BLAKE2b-256 checksum
How to use checksums
aef8f825551576888c7996650671a8f5d782f4be3ec3b25d6147bdd14e1c5daf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / rainbow_rb_zenoh-0.10.4-cp311-cp311-manylinux_2_35_x86_64.whl

Download URL rainbow_rb_zenoh-0.10.4-cp311-cp311-manylinux_2_35_x86_64.whl
Size 6.0 MB
Tags CPython 3.11 Linux glibc 2.35+ x86-64
SHA-256 checksum
How to use checksums
ebf95f830836d16e7cccc2fa40b55c0d6869827a42e11ee1524d6be42d759249
BLAKE2b-256 checksum
How to use checksums
c729a6bb9de4928ee59b045131549563ddd5c466b4d939a8d71c83bb13ae9848
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / rainbow_rb_zenoh-0.10.4-cp311-cp311-manylinux_2_35_aarch64.whl

Download URL rainbow_rb_zenoh-0.10.4-cp311-cp311-manylinux_2_35_aarch64.whl
Size 5.7 MB
Tags CPython 3.11 Linux glibc 2.35+ ARM64
SHA-256 checksum
How to use checksums
87b8f52341971c91ed0adda4b555a9e3473c03aaada800355a1324f69d79275a
BLAKE2b-256 checksum
How to use checksums
7dad4a8f6225e3f6abcfbc23153a273090cad7c08062ed33c7bbad6118bb8f02
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Security for rainbow-rb-zenoh 0.10.4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.10.4 This release

9 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page