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
_corenative extension is not built during package installation. Build the_core*.so/_core*.pydfor 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 APIZenohRouter: decorator-based routerSubscribeOptions: 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 stringmv: raw payload (memoryview)obj_payload: object parsed viaflatbuffer_obj_t=<FlatBuffer T class>(T | None)dict_payload: dict conversion result, regardless of whetherflatbuffer_obj_tis set (dict | None)attachment:sender,sender_idinformation
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_classis specified. - A FlatBuffer
...Tobject parsed internally viaInitFromPackedBuf(...). - If
flatbuffer_req_tis specified but the request has no payload, an error is raised.
- Injected only when
params: query parameters- The internal
q.parametersvalue is injected as adict[str, str]. - Used to pass filters/options separately from the payload (
req).
- The internal
Notes:
- Arguments are auto-injected only when the callback parameters are named exactly
reqandparams. - Parameters declared with other names such as
requestorquery_paramsare 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
ZenohNoReplyif 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=...)
- Request serialization:
- 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(...)
- e.g.
- Result:
- If specified: parsed object in
obj_payload - If not specified: rely mainly on
dict_payload/raw payload
- If specified: parsed object in
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_oneno-reply:ZenohNoReply- Transport reconnection errors:
ZenohTransportError ZenohClientis a per-process singleton, so avoid unnecessary frequentclose()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)
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.