rainbow-rb-sdk 0.0.9.dev27__tar.gz → 0.0.9.dev29__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.dev27 → rainbow_rb_sdk-0.0.9.dev29}/PKG-INFO +6 -6
  2. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/pyproject.toml +6 -6
  3. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/base.py +27 -22
  4. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow_rb_sdk.egg-info/PKG-INFO +6 -6
  5. rainbow_rb_sdk-0.0.9.dev29/src/rainbow_rb_sdk.egg-info/requires.txt +6 -0
  6. rainbow_rb_sdk-0.0.9.dev27/src/rainbow_rb_sdk.egg-info/requires.txt +0 -6
  7. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/README.md +0 -0
  8. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/setup.cfg +0 -0
  9. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/__init__.py +0 -0
  10. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/amr.py +0 -0
  11. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/amr_sdk/__init__.py +0 -0
  12. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/amr_sdk/amr_accessory.py +0 -0
  13. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/amr_sdk/amr_capability.py +0 -0
  14. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/amr_sdk/amr_control.py +0 -0
  15. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/amr_sdk/amr_file.py +0 -0
  16. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/amr_sdk/amr_localization.py +0 -0
  17. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/amr_sdk/amr_map.py +0 -0
  18. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/amr_sdk/amr_move.py +0 -0
  19. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/amr_sdk/amr_program.py +0 -0
  20. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/amr_sdk/amr_setting.py +0 -0
  21. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/amr_sdk/amr_status.py +0 -0
  22. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/amr_sdk/schema/__init__.py +0 -0
  23. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/base_sdk/__init__.py +0 -0
  24. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/base_sdk/base_schema.py +0 -0
  25. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/manipulate.py +0 -0
  26. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/manipulate_sdk/__init__.py +0 -0
  27. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_config.py +0 -0
  28. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_get_data.py +0 -0
  29. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_io.py +0 -0
  30. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_maintenance.py +0 -0
  31. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_move.py +0 -0
  32. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_point.py +0 -0
  33. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_program.py +0 -0
  34. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_service.py +0 -0
  35. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_state.py +0 -0
  36. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/manipulate_sdk/schema/__init__.py +0 -0
  37. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_config_schema.py +0 -0
  38. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_io_schema.py +0 -0
  39. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_move_schema.py +0 -0
  40. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_program_schema.py +0 -0
  41. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/program_sdk/__init__.py +0 -0
  42. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/program_sdk/client_modules.pyi +0 -0
  43. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/program_sdk/program.py +0 -0
  44. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/program_sdk/program_interface.py +0 -0
  45. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/program_sdk/test_binding.py +0 -0
  46. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/rby1.py +0 -0
  47. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/rby1_sdk/__init__.py +0 -0
  48. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/rby1_sdk/base.py +0 -0
  49. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/rby1_sdk/client.py +0 -0
  50. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/rby1_sdk/config.py +0 -0
  51. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/rby1_sdk/control.py +0 -0
  52. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/rby1_sdk/exceptions.py +0 -0
  53. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/rby1_sdk/state.py +0 -0
  54. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/schema/__init__.py +0 -0
  55. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/schema/amr_schema.py +0 -0
  56. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/schema/base_schema.py +0 -0
  57. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/schema/manipulate_schema.py +0 -0
  58. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/schema/program_schema.py +0 -0
  59. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow_rb_sdk.egg-info/SOURCES.txt +0 -0
  60. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow_rb_sdk.egg-info/dependency_links.txt +0 -0
  61. {rainbow_rb_sdk-0.0.9.dev27 → rainbow_rb_sdk-0.0.9.dev29}/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.dev27
3
+ Version: 0.0.9.dev29
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.11
7
7
  Description-Content-Type: text/markdown
8
- Requires-Dist: rainbow-rb-utils==0.0.9.dev27
9
- Requires-Dist: rainbow-rb-zenoh==0.0.9.dev27
10
- Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev27
11
- Requires-Dist: rainbow-rb-schemas==0.0.9.dev27
12
- Requires-Dist: rainbow-rb-log==0.0.9.dev27
8
+ Requires-Dist: rainbow-rb-utils==0.0.9.dev29
9
+ Requires-Dist: rainbow-rb-zenoh==0.0.9.dev29
10
+ Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev29
11
+ Requires-Dist: rainbow-rb-schemas==0.0.9.dev29
12
+ Requires-Dist: rainbow-rb-log==0.0.9.dev29
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.dev27"
7
+ version = "0.0.9.dev29"
8
8
  requires-python = ">=3.11"
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.dev27",
17
- "rainbow-rb-zenoh==0.0.9.dev27",
18
- "rainbow-rb-flat-buffers==0.0.9.dev27",
19
- "rainbow-rb-schemas==0.0.9.dev27",
20
- "rainbow-rb-log==0.0.9.dev27",
16
+ "rainbow-rb-utils==0.0.9.dev29",
17
+ "rainbow-rb-zenoh==0.0.9.dev29",
18
+ "rainbow-rb-flat-buffers==0.0.9.dev29",
19
+ "rainbow-rb-schemas==0.0.9.dev29",
20
+ "rainbow-rb-log==0.0.9.dev29",
21
21
  "rby1-sdk>=0.9.1",
22
22
  ]
23
23
 
@@ -307,7 +307,8 @@ class RBBaseSDK:
307
307
  self._peer_id: str | None = None
308
308
  self._peer_common_url: str | None = None
309
309
  self._peer_token: str | None = None
310
- self._heartbeat_task: asyncio.Task | None = None
310
+ self._heartbeat_task: threading.Thread | None = None
311
+ self._heartbeat_stop: threading.Event = threading.Event()
311
312
 
312
313
  self._initialized = True
313
314
 
@@ -622,7 +623,7 @@ class RBBaseSDK:
622
623
  host: str,
623
624
  zenoh_port: int | None = None,
624
625
  ttl: int = 30,
625
- heartbeat_interval: float | None = None,
626
+ heartbeat: float | None = None,
626
627
  mesh_timeout: float | None = None,
627
628
  mesh_probe_timeout: float = 1.0,
628
629
  mesh_probe_interval: float = 0.5,
@@ -640,7 +641,7 @@ class RBBaseSDK:
640
641
  host: common 서비스가 실행 중인 PC의 IP (예: ``"192.168.1.100"``).
641
642
  zenoh_port: 이 머신의 Zenoh listen 포트. ``None`` 이면 OS가 자동 배정.
642
643
  ttl: common 측 브리지 세션 TTL(초). heartbeat를 보내지 않으면 이 시간 후 자동 해제.
643
- heartbeat_interval: heartbeat 전송 주기(초). None 이면 ``ttl / 2`` 사용.
644
+ heartbeat: heartbeat 전송 주기(초). None 이면 ``ttl / 2`` 사용.
644
645
  mesh_timeout: mesh 형성 대기 최대 시간(초). None 이면 응답이 올 때까지 계속 대기.
645
646
  timeout이 지나도 peer/heartbeat는 유지하고 connect()는 반환한다.
646
647
  mesh_probe_timeout: probe query 1회 timeout(초).
@@ -679,10 +680,17 @@ class RBBaseSDK:
679
680
  self._peer_common_url = url
680
681
  self._peer_token = token
681
682
 
682
- interval = heartbeat_interval if heartbeat_interval is not None else max(1.0, ttl / 2)
683
- self._heartbeat_task = asyncio.create_task(
684
- self._heartbeat_loop(peer_id, ttl=ttl, interval=interval)
683
+ interval = heartbeat if heartbeat is not None else max(1.0, ttl / 2)
684
+ self._heartbeat_stop = threading.Event()
685
+ hb_thread = threading.Thread(
686
+ target=self._heartbeat_loop,
687
+ args=(peer_id,),
688
+ kwargs={"ttl": ttl, "interval": interval},
689
+ daemon=True,
690
+ name=f"sdk-heartbeat-{peer_id[:8]}",
685
691
  )
692
+ hb_thread.start()
693
+ self._heartbeat_task = hb_thread
686
694
 
687
695
  try:
688
696
  await self._wait_for_zenoh_echo(
@@ -693,10 +701,7 @@ class RBBaseSDK:
693
701
  interval=mesh_probe_interval,
694
702
  )
695
703
  except BaseException:
696
- if self._heartbeat_task and not self._heartbeat_task.done():
697
- self._heartbeat_task.cancel()
698
- with contextlib.suppress(asyncio.CancelledError):
699
- await self._heartbeat_task
704
+ self._heartbeat_stop.set()
700
705
  self._heartbeat_task = None
701
706
  self._peer_id = None
702
707
  self._peer_common_url = None
@@ -720,11 +725,11 @@ class RBBaseSDK:
720
725
  if peer_id is None:
721
726
  return False
722
727
 
723
- # heartbeat 먼저 중단
724
- if self._heartbeat_task and not self._heartbeat_task.done():
725
- self._heartbeat_task.cancel()
726
- with contextlib.suppress(asyncio.CancelledError):
727
- await self._heartbeat_task
728
+ # heartbeat 스레드 중단
729
+ if hasattr(self, "_heartbeat_stop"):
730
+ self._heartbeat_stop.set()
731
+ if self._heartbeat_task and self._heartbeat_task.is_alive():
732
+ self._heartbeat_task.join(timeout=2.0)
728
733
  self._heartbeat_task = None
729
734
 
730
735
  url = self._peer_common_url
@@ -757,16 +762,15 @@ class RBBaseSDK:
757
762
 
758
763
  return True
759
764
 
760
- async def _heartbeat_loop(self, peer_id: str, *, ttl: int, interval: float) -> None:
761
- """common에 주기적으로 heartbeat를 전송해 브리지 세션의 TTL을 연장한다."""
762
- while True:
763
- await asyncio.sleep(interval)
765
+ def _heartbeat_loop(self, peer_id: str, *, ttl: int, interval: float) -> None:
766
+ """별도 스레드에서 heartbeat를 전송한다. asyncio 이벤트 루프와 무관하게 동작."""
767
+ stop: threading.Event = getattr(self, "_heartbeat_stop", threading.Event())
768
+ while not stop.wait(timeout=interval):
764
769
  if self._peer_common_url is None or self._peer_token is None:
765
770
  break
766
771
  headers = {"Authorization": f"Bearer {self._peer_token}"}
767
772
  try:
768
- resp_data = await asyncio.to_thread(
769
- self._http_json,
773
+ resp_data = self._http_json(
770
774
  "POST",
771
775
  f"{self._peer_common_url}/zenoh/peer/{peer_id}/heartbeat",
772
776
  {"ttl": ttl},
@@ -775,7 +779,8 @@ class RBBaseSDK:
775
779
  )
776
780
  if not resp_data.get("ok"):
777
781
  print(f"[SDK] heartbeat rejected for peer {peer_id}, closing session", flush=True)
778
- await self.disconnect()
782
+ self._heartbeat_task = None # 자기 자신이므로 join 스킵
783
+ self._run_coro_blocking(self.disconnect(), timeout=5)
779
784
  return
780
785
  except Exception as e:
781
786
  print(f"[SDK] heartbeat error for peer {peer_id}: {e}", flush=True)
@@ -1,15 +1,15 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rainbow-rb-sdk
3
- Version: 0.0.9.dev27
3
+ Version: 0.0.9.dev29
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.11
7
7
  Description-Content-Type: text/markdown
8
- Requires-Dist: rainbow-rb-utils==0.0.9.dev27
9
- Requires-Dist: rainbow-rb-zenoh==0.0.9.dev27
10
- Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev27
11
- Requires-Dist: rainbow-rb-schemas==0.0.9.dev27
12
- Requires-Dist: rainbow-rb-log==0.0.9.dev27
8
+ Requires-Dist: rainbow-rb-utils==0.0.9.dev29
9
+ Requires-Dist: rainbow-rb-zenoh==0.0.9.dev29
10
+ Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev29
11
+ Requires-Dist: rainbow-rb-schemas==0.0.9.dev29
12
+ Requires-Dist: rainbow-rb-log==0.0.9.dev29
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.dev29
2
+ rainbow-rb-zenoh==0.0.9.dev29
3
+ rainbow-rb-flat-buffers==0.0.9.dev29
4
+ rainbow-rb-schemas==0.0.9.dev29
5
+ rainbow-rb-log==0.0.9.dev29
6
+ rby1-sdk>=0.9.1
@@ -1,6 +0,0 @@
1
- rainbow-rb-utils==0.0.9.dev27
2
- rainbow-rb-zenoh==0.0.9.dev27
3
- rainbow-rb-flat-buffers==0.0.9.dev27
4
- rainbow-rb-schemas==0.0.9.dev27
5
- rainbow-rb-log==0.0.9.dev27
6
- rby1-sdk>=0.9.1