rainbow-rb-sdk 0.0.9.dev28__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.dev28 → rainbow_rb_sdk-0.0.9.dev29}/PKG-INFO +6 -6
  2. {rainbow_rb_sdk-0.0.9.dev28 → rainbow_rb_sdk-0.0.9.dev29}/pyproject.toml +6 -6
  3. {rainbow_rb_sdk-0.0.9.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/base.py +24 -20
  4. {rainbow_rb_sdk-0.0.9.dev28 → 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.dev28/src/rainbow_rb_sdk.egg-info/requires.txt +0 -6
  7. {rainbow_rb_sdk-0.0.9.dev28 → rainbow_rb_sdk-0.0.9.dev29}/README.md +0 -0
  8. {rainbow_rb_sdk-0.0.9.dev28 → rainbow_rb_sdk-0.0.9.dev29}/setup.cfg +0 -0
  9. {rainbow_rb_sdk-0.0.9.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/__init__.py +0 -0
  10. {rainbow_rb_sdk-0.0.9.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/amr.py +0 -0
  11. {rainbow_rb_sdk-0.0.9.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/amr_sdk/__init__.py +0 -0
  12. {rainbow_rb_sdk-0.0.9.dev28 → 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.dev28 → 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.dev28 → 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.dev28 → 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.dev28 → 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.dev28 → 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.dev28 → 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.dev28 → 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.dev28 → 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.dev28 → 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.dev28 → 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.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/base_sdk/__init__.py +0 -0
  24. {rainbow_rb_sdk-0.0.9.dev28 → 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.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/manipulate.py +0 -0
  26. {rainbow_rb_sdk-0.0.9.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/manipulate_sdk/__init__.py +0 -0
  27. {rainbow_rb_sdk-0.0.9.dev28 → 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.dev28 → 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.dev28 → 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.dev28 → 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.dev28 → 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.dev28 → 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.dev28 → 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.dev28 → 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.dev28 → 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.dev28 → 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.dev28 → 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.dev28 → 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.dev28 → 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.dev28 → 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.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/program_sdk/__init__.py +0 -0
  42. {rainbow_rb_sdk-0.0.9.dev28 → 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.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/program_sdk/program.py +0 -0
  44. {rainbow_rb_sdk-0.0.9.dev28 → 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.dev28 → 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.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/rby1.py +0 -0
  47. {rainbow_rb_sdk-0.0.9.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/rby1_sdk/__init__.py +0 -0
  48. {rainbow_rb_sdk-0.0.9.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/rby1_sdk/base.py +0 -0
  49. {rainbow_rb_sdk-0.0.9.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/rby1_sdk/client.py +0 -0
  50. {rainbow_rb_sdk-0.0.9.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/rby1_sdk/config.py +0 -0
  51. {rainbow_rb_sdk-0.0.9.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/rby1_sdk/control.py +0 -0
  52. {rainbow_rb_sdk-0.0.9.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/rby1_sdk/exceptions.py +0 -0
  53. {rainbow_rb_sdk-0.0.9.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/rby1_sdk/state.py +0 -0
  54. {rainbow_rb_sdk-0.0.9.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/schema/__init__.py +0 -0
  55. {rainbow_rb_sdk-0.0.9.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/schema/amr_schema.py +0 -0
  56. {rainbow_rb_sdk-0.0.9.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/schema/base_schema.py +0 -0
  57. {rainbow_rb_sdk-0.0.9.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/schema/manipulate_schema.py +0 -0
  58. {rainbow_rb_sdk-0.0.9.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow/rb_sdk/schema/program_schema.py +0 -0
  59. {rainbow_rb_sdk-0.0.9.dev28 → rainbow_rb_sdk-0.0.9.dev29}/src/rainbow_rb_sdk.egg-info/SOURCES.txt +0 -0
  60. {rainbow_rb_sdk-0.0.9.dev28 → 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.dev28 → 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.dev28
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.dev28
9
- Requires-Dist: rainbow-rb-zenoh==0.0.9.dev28
10
- Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev28
11
- Requires-Dist: rainbow-rb-schemas==0.0.9.dev28
12
- Requires-Dist: rainbow-rb-log==0.0.9.dev28
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.dev28"
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.dev28",
17
- "rainbow-rb-zenoh==0.0.9.dev28",
18
- "rainbow-rb-flat-buffers==0.0.9.dev28",
19
- "rainbow-rb-schemas==0.0.9.dev28",
20
- "rainbow-rb-log==0.0.9.dev28",
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
 
@@ -680,9 +681,16 @@ class RBBaseSDK:
680
681
  self._peer_token = token
681
682
 
682
683
  interval = heartbeat if heartbeat 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)
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,8 +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
- self._heartbeat_task = None # 자기 자신이므로 cancel/await 스킵
779
- await self.disconnect()
782
+ self._heartbeat_task = None # 자기 자신이므로 join 스킵
783
+ self._run_coro_blocking(self.disconnect(), timeout=5)
780
784
  return
781
785
  except Exception as e:
782
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.dev28
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.dev28
9
- Requires-Dist: rainbow-rb-zenoh==0.0.9.dev28
10
- Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev28
11
- Requires-Dist: rainbow-rb-schemas==0.0.9.dev28
12
- Requires-Dist: rainbow-rb-log==0.0.9.dev28
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.dev28
2
- rainbow-rb-zenoh==0.0.9.dev28
3
- rainbow-rb-flat-buffers==0.0.9.dev28
4
- rainbow-rb-schemas==0.0.9.dev28
5
- rainbow-rb-log==0.0.9.dev28
6
- rby1-sdk>=0.9.1