rainbow-rb-sdk 0.0.9.dev6__tar.gz → 0.0.9.dev8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/PKG-INFO +6 -6
  2. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/pyproject.toml +6 -6
  3. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/base.py +94 -31
  4. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow_rb_sdk.egg-info/PKG-INFO +6 -6
  5. rainbow_rb_sdk-0.0.9.dev8/src/rainbow_rb_sdk.egg-info/requires.txt +6 -0
  6. rainbow_rb_sdk-0.0.9.dev6/src/rainbow_rb_sdk.egg-info/requires.txt +0 -6
  7. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/README.md +0 -0
  8. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/setup.cfg +0 -0
  9. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/__init__.py +0 -0
  10. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr.py +0 -0
  11. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/__init__.py +0 -0
  12. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_accessory.py +0 -0
  13. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_capability.py +0 -0
  14. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_control.py +0 -0
  15. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_file.py +0 -0
  16. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_localization.py +0 -0
  17. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_map.py +0 -0
  18. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_move.py +0 -0
  19. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_program.py +0 -0
  20. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_setting.py +0 -0
  21. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_status.py +0 -0
  22. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/schema/__init__.py +0 -0
  23. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/base_sdk/__init__.py +0 -0
  24. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/base_sdk/base_schema.py +0 -0
  25. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate.py +0 -0
  26. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/__init__.py +0 -0
  27. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_config.py +0 -0
  28. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_get_data.py +0 -0
  29. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_io.py +0 -0
  30. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_maintenance.py +0 -0
  31. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_move.py +0 -0
  32. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_point.py +0 -0
  33. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_program.py +0 -0
  34. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_service.py +0 -0
  35. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_state.py +0 -0
  36. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/schema/__init__.py +0 -0
  37. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_config_schema.py +0 -0
  38. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_io_schema.py +0 -0
  39. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_move_schema.py +0 -0
  40. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_program_schema.py +0 -0
  41. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/program_sdk/__init__.py +0 -0
  42. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/program_sdk/client_modules.pyi +0 -0
  43. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/program_sdk/program.py +0 -0
  44. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/program_sdk/program_interface.py +0 -0
  45. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/program_sdk/test_binding.py +0 -0
  46. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1.py +0 -0
  47. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1_sdk/__init__.py +0 -0
  48. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1_sdk/base.py +0 -0
  49. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1_sdk/client.py +0 -0
  50. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1_sdk/config.py +0 -0
  51. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1_sdk/control.py +0 -0
  52. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1_sdk/exceptions.py +0 -0
  53. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1_sdk/state.py +0 -0
  54. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/schema/__init__.py +0 -0
  55. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/schema/amr_schema.py +0 -0
  56. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/schema/base_schema.py +0 -0
  57. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/schema/manipulate_schema.py +0 -0
  58. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/schema/program_schema.py +0 -0
  59. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow_rb_sdk.egg-info/SOURCES.txt +0 -0
  60. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow_rb_sdk.egg-info/dependency_links.txt +0 -0
  61. {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow_rb_sdk.egg-info/top_level.txt +0 -0
@@ -1,15 +1,15 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rainbow-rb-sdk
3
- Version: 0.0.9.dev6
3
+ Version: 0.0.9.dev8
4
4
  Summary: Rainbow Robotics 통합 Python SDK — AMR, 매니퓰레이터, RB-Y1 휴머노이드와 Rainbow Robot Service(common) 연동
5
5
  Author-email: Derek <dfd1123@rainbow-robotics.com>
6
6
  Requires-Python: <3.13,>=3.12
7
7
  Description-Content-Type: text/markdown
8
- Requires-Dist: rainbow-rb-utils==0.0.9.dev6
9
- Requires-Dist: rainbow-rb-zenoh==0.0.9.dev6
10
- Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev6
11
- Requires-Dist: rainbow-rb-schemas==0.0.9.dev6
12
- Requires-Dist: rainbow-rb-log==0.0.9.dev6
8
+ Requires-Dist: rainbow-rb-utils==0.0.9.dev8
9
+ Requires-Dist: rainbow-rb-zenoh==0.0.9.dev8
10
+ Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev8
11
+ Requires-Dist: rainbow-rb-schemas==0.0.9.dev8
12
+ Requires-Dist: rainbow-rb-log==0.0.9.dev8
13
13
  Requires-Dist: rby1-sdk>=0.9.1
14
14
 
15
15
  # rb_sdk
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "rainbow-rb-sdk"
7
- version = "0.0.9.dev6"
7
+ version = "0.0.9.dev8"
8
8
  requires-python = ">=3.12,<3.13"
9
9
  description = "Rainbow Robotics 통합 Python SDK — AMR, 매니퓰레이터, RB-Y1 휴머노이드와 Rainbow Robot Service(common) 연동"
10
10
  authors = [
@@ -13,11 +13,11 @@ authors = [
13
13
  readme = "README.md"
14
14
 
15
15
  dependencies = [
16
- "rainbow-rb-utils==0.0.9.dev6",
17
- "rainbow-rb-zenoh==0.0.9.dev6",
18
- "rainbow-rb-flat-buffers==0.0.9.dev6",
19
- "rainbow-rb-schemas==0.0.9.dev6",
20
- "rainbow-rb-log==0.0.9.dev6",
16
+ "rainbow-rb-utils==0.0.9.dev8",
17
+ "rainbow-rb-zenoh==0.0.9.dev8",
18
+ "rainbow-rb-flat-buffers==0.0.9.dev8",
19
+ "rainbow-rb-schemas==0.0.9.dev8",
20
+ "rainbow-rb-log==0.0.9.dev8",
21
21
  "rby1-sdk>=0.9.1",
22
22
  ]
23
23
 
@@ -11,7 +11,7 @@ import threading
11
11
  import urllib.error
12
12
  import urllib.request
13
13
  from collections.abc import Callable
14
- from typing import TYPE_CHECKING, Any, ClassVar, Literal, TypeVar, overload
14
+ from typing import TYPE_CHECKING, ClassVar, Literal, TypeVar, overload
15
15
 
16
16
  from rainbow.rb_flat_buffers.program.RB_Program_Log import RB_Program_LogT
17
17
  from rainbow.rb_flat_buffers.program.RB_Program_Log_Type import RB_Program_Log_Type
@@ -27,8 +27,6 @@ from rainbow.rb_zenoh.client import (
27
27
  )
28
28
  from rainbow.rb_zenoh.exception import ZenohNoReply, ZenohTransportError
29
29
  from rainbow.rb_zenoh.schema import SubscribeOptions
30
- from zenoh import Config
31
- from zenoh import open as zenoh_open
32
30
 
33
31
  if TYPE_CHECKING:
34
32
  pass
@@ -263,7 +261,6 @@ class RBBaseSDK:
263
261
  self._peer_id: str | None = None
264
262
  self._peer_common_url: str | None = None
265
263
  self._peer_token: str | None = None
266
- self._peer_session: Any = None # 전용 raw Zenoh 세션 (free port)
267
264
  self._heartbeat_task: asyncio.Task | None = None
268
265
 
269
266
  self._initialized = True
@@ -422,6 +419,71 @@ class RBBaseSDK:
422
419
  s.bind(("", 0))
423
420
  return s.getsockname()[1]
424
421
 
422
+ @staticmethod
423
+ def _split_endpoint_env(value: str | None) -> list[str]:
424
+ if not value:
425
+ return []
426
+ normalized = value.replace("\n", ",")
427
+ return [endpoint.strip() for endpoint in normalized.split(",") if endpoint.strip()]
428
+
429
+ @staticmethod
430
+ def _merge_endpoint_env(name: str, endpoint: str) -> None:
431
+ endpoints = RBBaseSDK._split_endpoint_env(os.getenv(name))
432
+ if endpoint not in endpoints:
433
+ endpoints.append(endpoint)
434
+ os.environ[name] = ",".join(endpoints)
435
+
436
+ def _reconnect_shared_zenoh_for_remote_peer(
437
+ self,
438
+ *,
439
+ listen_port: int,
440
+ ) -> None:
441
+ """Make the SDK's real query session reachable from remote common.
442
+
443
+ ``connect()`` used to open a separate raw Zenoh session for peer tracking,
444
+ but SDK calls such as ``move_j`` use the process-wide ``ZenohClient``.
445
+ The shared client must therefore own the externally reachable listen
446
+ endpoint that common connects to.
447
+ """
448
+ self._merge_endpoint_env("ZENOH_PEER_LISTEN_ENDPOINTS", f"tcp/0.0.0.0:{listen_port}")
449
+
450
+ zenoh_client = self._refresh_zenoh_client_for_pid(self._pid)
451
+ with contextlib.suppress(Exception):
452
+ zenoh_client.close()
453
+ zenoh_client.connect()
454
+
455
+ def _probe_zenoh_mesh(self, keyexpr: str, *, timeout: float) -> bool:
456
+ try:
457
+ for _ in self.zenoh_client.query(keyexpr, timeout=timeout):
458
+ return True
459
+ except (ZenohNoReply, ZenohTransportError):
460
+ return False
461
+ return False
462
+
463
+ async def _wait_for_zenoh_mesh(
464
+ self,
465
+ *,
466
+ keyexpr: str,
467
+ timeout: float,
468
+ probe_timeout: float,
469
+ interval: float,
470
+ ) -> None:
471
+ loop = asyncio.get_running_loop()
472
+ deadline = loop.time() + timeout
473
+
474
+ while True:
475
+ if await asyncio.to_thread(self._probe_zenoh_mesh, keyexpr, timeout=probe_timeout):
476
+ print(f"[SDK] zenoh mesh ready: {keyexpr}", flush=True)
477
+ return
478
+
479
+ remaining = deadline - loop.time()
480
+ if remaining <= 0:
481
+ raise RuntimeError(
482
+ f"zenoh mesh not ready: no reply from {keyexpr!r} within {timeout:.1f}s"
483
+ )
484
+
485
+ await asyncio.sleep(min(interval, remaining))
486
+
425
487
  @staticmethod
426
488
  def _http_json(
427
489
  method: str,
@@ -463,13 +525,17 @@ class RBBaseSDK:
463
525
  zenoh_port: int | None = None,
464
526
  ttl: int = 30,
465
527
  heartbeat_interval: float | None = None,
528
+ mesh_probe_keyexpr: str | None = "robot-state",
529
+ mesh_timeout: float = 10.0,
530
+ mesh_probe_timeout: float = 1.0,
531
+ mesh_probe_interval: float = 0.5,
466
532
  ) -> str | None:
467
533
  """common 서비스에 외부 Zenoh peer로 등록하고 자동 heartbeat를 시작한다.
468
534
 
469
535
  common과 같은 PC에서 실행 중이라면 이미 Zenoh 메시가 형성되어 있으므로
470
536
  아무것도 하지 않고 ``None`` 을 반환한다.
471
537
 
472
- 내부적으로 전용 Zenoh 세션을 열어 common과 직접 연결한다.
538
+ 내부적으로 SDK 호출이 사용하는 공유 Zenoh 세션을 외부 listen 포트로 재연결한다.
473
539
  ``zenoh_port`` 를 생략하면 OS가 빈 포트를 자동으로 배정하므로 충돌이 없다.
474
540
 
475
541
  Args:
@@ -478,6 +544,10 @@ class RBBaseSDK:
478
544
  zenoh_port: 이 머신의 Zenoh listen 포트. ``None`` 이면 OS가 자동 배정.
479
545
  ttl: common 측 브리지 세션 TTL(초). heartbeat를 보내지 않으면 이 시간 후 자동 해제.
480
546
  heartbeat_interval: heartbeat 전송 주기(초). None 이면 ``ttl / 2`` 사용.
547
+ mesh_probe_keyexpr: mesh 형성 확인용 Zenoh query keyexpr. None 이면 확인을 건너뜀.
548
+ mesh_timeout: mesh 형성 대기 최대 시간(초).
549
+ mesh_probe_timeout: probe query 1회 timeout(초).
550
+ mesh_probe_interval: probe 재시도 간격(초).
481
551
 
482
552
  Returns:
483
553
  common이 발급한 peer_id, 또는 같은 PC라서 불필요한 경우 ``None``.
@@ -495,25 +565,7 @@ class RBBaseSDK:
495
565
  my_ip = self._detect_local_ip(host)
496
566
  free_port = zenoh_port if zenoh_port is not None else self._find_free_port()
497
567
  print(f"[SDK] local IP={my_ip}, zenoh port={free_port}", flush=True)
498
-
499
- # 전용 Zenoh 세션: common Zenoh(7447)에 직접 connect + free_port로 listen(gossip용)
500
- conf = Config()
501
- conf.insert_json5("mode", '"peer"')
502
- conf.insert_json5("connect/endpoints", f'["tcp/{host}:7447"]')
503
- conf.insert_json5("listen/endpoints", f'{{"peer": ["tcp/0.0.0.0:{free_port}"]}}')
504
- conf.insert_json5("scouting/multicast/enabled", "false")
505
- conf.insert_json5("scouting/gossip/enabled", "true")
506
- conf.insert_json5("scouting/gossip/multihop", "false")
507
- conf.insert_json5("scouting/gossip/autoconnect", '{"peer": ["peer"]}')
508
- conf.insert_json5(
509
- "scouting/gossip/autoconnect_strategy",
510
- '{"peer": {"to_peer": "greater-zid", "to_router": "always"}}',
511
- )
512
- conf.insert_json5("listen/exit_on_failure", "false")
513
- conf.insert_json5("connect/timeout_ms", '{"peer": 1000}')
514
- conf.insert_json5("transport/shared_memory/enabled", "false")
515
-
516
- self._peer_session = await asyncio.to_thread(zenoh_open, conf)
568
+ self._reconnect_shared_zenoh_for_remote_peer(listen_port=free_port)
517
569
 
518
570
  headers = {"Authorization": f"Bearer {token}"}
519
571
  payload = {"ip": my_ip, "port": free_port, "ttl": ttl}
@@ -527,6 +579,24 @@ class RBBaseSDK:
527
579
  self._peer_common_url = url
528
580
  self._peer_token = token
529
581
 
582
+ try:
583
+ if mesh_probe_keyexpr is not None:
584
+ await self._wait_for_zenoh_mesh(
585
+ keyexpr=mesh_probe_keyexpr,
586
+ timeout=mesh_timeout,
587
+ probe_timeout=mesh_probe_timeout,
588
+ interval=mesh_probe_interval,
589
+ )
590
+ except Exception:
591
+ self._peer_id = None
592
+ self._peer_common_url = None
593
+ self._peer_token = None
594
+ with contextlib.suppress(Exception):
595
+ await asyncio.to_thread(
596
+ self._http_json, "DELETE", f"{url}/zenoh/peer/{peer_id}", None, headers, 5.0
597
+ )
598
+ raise
599
+
530
600
  interval = heartbeat_interval if heartbeat_interval is not None else max(1.0, ttl / 2)
531
601
  self._heartbeat_task = asyncio.create_task(
532
602
  self._heartbeat_loop(peer_id, ttl=ttl, interval=interval)
@@ -562,13 +632,6 @@ class RBBaseSDK:
562
632
  self._http_json, "DELETE", f"{url}/zenoh/peer/{peer_id}", None, headers, 5.0
563
633
  )
564
634
 
565
- # 전용 Zenoh 세션 종료
566
- peer_session = self._peer_session
567
- self._peer_session = None
568
- if peer_session is not None:
569
- with contextlib.suppress(Exception):
570
- await asyncio.to_thread(peer_session.close)
571
-
572
635
  print(f"[SDK] disconnected zenoh peer {peer_id}", flush=True)
573
636
  return True
574
637
 
@@ -1,15 +1,15 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rainbow-rb-sdk
3
- Version: 0.0.9.dev6
3
+ Version: 0.0.9.dev8
4
4
  Summary: Rainbow Robotics 통합 Python SDK — AMR, 매니퓰레이터, RB-Y1 휴머노이드와 Rainbow Robot Service(common) 연동
5
5
  Author-email: Derek <dfd1123@rainbow-robotics.com>
6
6
  Requires-Python: <3.13,>=3.12
7
7
  Description-Content-Type: text/markdown
8
- Requires-Dist: rainbow-rb-utils==0.0.9.dev6
9
- Requires-Dist: rainbow-rb-zenoh==0.0.9.dev6
10
- Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev6
11
- Requires-Dist: rainbow-rb-schemas==0.0.9.dev6
12
- Requires-Dist: rainbow-rb-log==0.0.9.dev6
8
+ Requires-Dist: rainbow-rb-utils==0.0.9.dev8
9
+ Requires-Dist: rainbow-rb-zenoh==0.0.9.dev8
10
+ Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev8
11
+ Requires-Dist: rainbow-rb-schemas==0.0.9.dev8
12
+ Requires-Dist: rainbow-rb-log==0.0.9.dev8
13
13
  Requires-Dist: rby1-sdk>=0.9.1
14
14
 
15
15
  # rb_sdk
@@ -0,0 +1,6 @@
1
+ rainbow-rb-utils==0.0.9.dev8
2
+ rainbow-rb-zenoh==0.0.9.dev8
3
+ rainbow-rb-flat-buffers==0.0.9.dev8
4
+ rainbow-rb-schemas==0.0.9.dev8
5
+ rainbow-rb-log==0.0.9.dev8
6
+ rby1-sdk>=0.9.1
@@ -1,6 +0,0 @@
1
- rainbow-rb-utils==0.0.9.dev6
2
- rainbow-rb-zenoh==0.0.9.dev6
3
- rainbow-rb-flat-buffers==0.0.9.dev6
4
- rainbow-rb-schemas==0.0.9.dev6
5
- rainbow-rb-log==0.0.9.dev6
6
- rby1-sdk>=0.9.1