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.5

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.5
File Actions
rainbow_rb_zenoh-0.10.5-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for rainbow_rb_zenoh-0.10.5-cp313-cp313-win_amd64.whl
rainbow_rb_zenoh-0.10.5-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.5-cp313-cp313-manylinux_2_35_x86_64.whl
rainbow_rb_zenoh-0.10.5-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.5-cp313-cp313-manylinux_2_35_aarch64.whl
rainbow_rb_zenoh-0.10.5-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for rainbow_rb_zenoh-0.10.5-cp312-cp312-win_amd64.whl
rainbow_rb_zenoh-0.10.5-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.5-cp312-cp312-manylinux_2_35_x86_64.whl
rainbow_rb_zenoh-0.10.5-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.5-cp312-cp312-manylinux_2_35_aarch64.whl
rainbow_rb_zenoh-0.10.5-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for rainbow_rb_zenoh-0.10.5-cp311-cp311-win_amd64.whl
rainbow_rb_zenoh-0.10.5-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.5-cp311-cp311-manylinux_2_35_x86_64.whl
rainbow_rb_zenoh-0.10.5-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.5-cp311-cp311-manylinux_2_35_aarch64.whl

Total release size: 53.2 MB

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

Download URL rainbow_rb_zenoh-0.10.5-cp313-cp313-win_amd64.whl
Size 6.0 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
a47cf27110e193fe6b324ed4077b8b99dc902770b006f1ec43256feaeb19f563
BLAKE2b-256 checksum
How to use checksums
1a76d818f5ad8fab9b45c80e5486746f31db85f3d315a9dbbbe5c6f50c265d29
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.5-cp313-cp313-manylinux_2_35_x86_64.whl

Download URL rainbow_rb_zenoh-0.10.5-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
c5f03bb7f511791387ffcd120c12ce8e027d3cd02812e0cc318b648a4eb3b122
BLAKE2b-256 checksum
How to use checksums
421d93c81442483e304e6602bed77a540566758bc0a4db3b8b5bd949d6543ec8
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.5-cp313-cp313-manylinux_2_35_aarch64.whl

Download URL rainbow_rb_zenoh-0.10.5-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
03cae78fbf70968c6541aca59b81cbe86d671a95d6fb31bf1408c48cdedeb934
BLAKE2b-256 checksum
How to use checksums
06b768bd9b3909e0d58956767cc78d19d6fd680cafcdb19345a77dc48ac8e430
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.5-cp312-cp312-win_amd64.whl

Download URL rainbow_rb_zenoh-0.10.5-cp312-cp312-win_amd64.whl
Size 6.0 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
f704037042d11dd5277eea6782240fbbe8e866829d00dd73f411ca7876b4cb8d
BLAKE2b-256 checksum
How to use checksums
2c7c244c8c387f6f2061fcf62a560593abedea1fdc5744dedd14cca820d71fd7
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.5-cp312-cp312-manylinux_2_35_x86_64.whl

Download URL rainbow_rb_zenoh-0.10.5-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
6b3a54585dbcb495cbec3a37fbf22ddb2da304628fe1263fce9c46810178a734
BLAKE2b-256 checksum
How to use checksums
759a13955ffde8d2c0f6b9595ef4e5a8b1bc95c03f213de03d103f4dbe5a01a8
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.5-cp312-cp312-manylinux_2_35_aarch64.whl

Download URL rainbow_rb_zenoh-0.10.5-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
17c42310220c1b5f4043d1ea0555415993da107f5158359baf14c61e60a28f32
BLAKE2b-256 checksum
How to use checksums
4a70f57de816616fe1ae069fda3fbc01ebc93e3a771cf38efc7756087ac7bb08
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.5-cp311-cp311-win_amd64.whl

Download URL rainbow_rb_zenoh-0.10.5-cp311-cp311-win_amd64.whl
Size 6.0 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
64ff2dea7727bf337bacf8cf385f9b31368acb248e691914291bc5b742791fdb
BLAKE2b-256 checksum
How to use checksums
652aa535f3c319fe01f6ed80c9ec360c076fd6319bfa1010910d785196bf617a
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.5-cp311-cp311-manylinux_2_35_x86_64.whl

Download URL rainbow_rb_zenoh-0.10.5-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
197848d2dae1c74aa88d8cc23965921e54ce6e9d8e19081eb5f6785f329017c5
BLAKE2b-256 checksum
How to use checksums
0bf3fdb1640d5ea7e167db9215030bffdc9ca831bedc92b9745f1e644cb4e6bc
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.5-cp311-cp311-manylinux_2_35_aarch64.whl

Download URL rainbow_rb_zenoh-0.10.5-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
079e43a1136ef62611ca8dfeda7fe13fc3356164e6593d11769257c87aaf476c
BLAKE2b-256 checksum
How to use checksums
ca452976301d9c70c0d1cbf4a0ae393f7c8870ab50bfd10f1195c5e53f40b14d
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.5

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.5 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