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

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

Total release size: 53.2 MB

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

Download URL rainbow_rb_zenoh-0.10.6-cp313-cp313-win_amd64.whl
Size 6.0 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
8821aa9becb980b78efebfb5614c6072c7237ea9f97f7a13861112d1d9966698
BLAKE2b-256 checksum
How to use checksums
5fb96446986453c92965b37bf91a539d93068dd2d7d7943df4ceeb2f156b1bbd
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.6-cp313-cp313-manylinux_2_35_x86_64.whl

Download URL rainbow_rb_zenoh-0.10.6-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
752d620debe5eff2e4a0553c5667b1321e660bc8cef31cfe80d6c110f88dcdcd
BLAKE2b-256 checksum
How to use checksums
91d7916e174f4fd05eca6beefd7d64ae7cfe65a8238a712d9adb4c8615a5410b
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.6-cp313-cp313-manylinux_2_35_aarch64.whl

Download URL rainbow_rb_zenoh-0.10.6-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
75280f7b0dd107f31a2f8b2a4db495d5b656c118192b043905385cb09bb58fd1
BLAKE2b-256 checksum
How to use checksums
a9c9360893a1638d0a998c7533601173b11ad9fb33728394138bcf2e167c0308
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.6-cp312-cp312-win_amd64.whl

Download URL rainbow_rb_zenoh-0.10.6-cp312-cp312-win_amd64.whl
Size 6.0 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
f37a8b11c9eb5fcd01c617ababe591f50d40804e9909ea3a88b52fb59467a826
BLAKE2b-256 checksum
How to use checksums
2033f0109dbb03b09119a43ee0a7093906f4e7ab49de79137bfc82ad3ee80923
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.6-cp312-cp312-manylinux_2_35_x86_64.whl

Download URL rainbow_rb_zenoh-0.10.6-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
ff5975268c8b81412ff78e8709b86caa33b71908f25bf144e167e06e473b6356
BLAKE2b-256 checksum
How to use checksums
abb66b9cf5a6fc0af5430c50be038c33905619e13e4799c502bd1c4cd144016a
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.6-cp312-cp312-manylinux_2_35_aarch64.whl

Download URL rainbow_rb_zenoh-0.10.6-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
bdc760ee11623720339c6def532ccffdc5a2c0d74f44dd86e69d3066a5ad1129
BLAKE2b-256 checksum
How to use checksums
b8681f22a310bf2b827c85b8dd7a7012e907da0f1627454b10c8d321f4e25641
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.6-cp311-cp311-win_amd64.whl

Download URL rainbow_rb_zenoh-0.10.6-cp311-cp311-win_amd64.whl
Size 6.0 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
9cf5c0a068598cadb9ac8b0b30b0a547351d7de9ab22235906713d7fca6a8dd1
BLAKE2b-256 checksum
How to use checksums
28ab45d81c30578563ad5173cabac0268f52bb2119ddab15f7d3f632740ee1a0
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.6-cp311-cp311-manylinux_2_35_x86_64.whl

Download URL rainbow_rb_zenoh-0.10.6-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
161e05926061507957c25dc324252042c7810ef51e13e69896782ce7e567141c
BLAKE2b-256 checksum
How to use checksums
2ea88bed2396b6b4fa0cde4823a8e85d4c32d67963c4f6e82ce8a92bfdb8db8d
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.6-cp311-cp311-manylinux_2_35_aarch64.whl

Download URL rainbow_rb_zenoh-0.10.6-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
92affdf0324ae816526cfe2cc639139fe794af7a64806f64bd53318ebc249a91
BLAKE2b-256 checksum
How to use checksums
195e48b302f0112e28ac8c011a07fa4efde50914b4c80085bf19289382a6be96
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.6

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