viam-sdk 0.3.0__py3-none-linux_armv6l.whl → 0.66.0__py3-none-linux_armv6l.whl

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.

Potentially problematic release.


This version of viam-sdk might be problematic. Click here for more details.

Files changed (452) hide show
  1. viam/__init__.py +29 -2
  2. viam/app/_logs.py +34 -0
  3. viam/app/app_client.py +2696 -0
  4. viam/app/billing_client.py +185 -0
  5. viam/app/data_client.py +2231 -0
  6. viam/app/ml_training_client.py +249 -0
  7. viam/app/provisioning_client.py +93 -0
  8. viam/app/viam_client.py +275 -0
  9. viam/components/arm/__init__.py +3 -26
  10. viam/components/arm/arm.py +123 -8
  11. viam/components/arm/client.py +37 -24
  12. viam/components/arm/service.py +35 -32
  13. viam/components/audio_in/__init__.py +24 -0
  14. viam/components/audio_in/audio_in.py +74 -0
  15. viam/components/audio_in/client.py +76 -0
  16. viam/components/audio_in/service.py +83 -0
  17. viam/components/audio_out/__init__.py +21 -0
  18. viam/components/audio_out/audio_out.py +72 -0
  19. viam/components/audio_out/client.py +67 -0
  20. viam/components/audio_out/service.py +63 -0
  21. viam/components/base/__init__.py +6 -11
  22. viam/components/base/base.py +134 -8
  23. viam/components/base/client.py +51 -23
  24. viam/components/base/service.py +33 -30
  25. viam/components/board/__init__.py +3 -12
  26. viam/components/board/board.py +247 -91
  27. viam/components/board/client.py +149 -83
  28. viam/components/board/service.py +63 -33
  29. viam/components/button/__init__.py +10 -0
  30. viam/components/button/button.py +41 -0
  31. viam/components/button/client.py +52 -0
  32. viam/components/button/service.py +46 -0
  33. viam/components/camera/__init__.py +3 -3
  34. viam/components/camera/camera.py +62 -27
  35. viam/components/camera/client.py +59 -27
  36. viam/components/camera/service.py +42 -65
  37. viam/components/component_base.py +28 -5
  38. viam/components/encoder/__init__.py +1 -1
  39. viam/components/encoder/client.py +25 -14
  40. viam/components/encoder/encoder.py +48 -10
  41. viam/components/encoder/service.py +14 -18
  42. viam/components/gantry/__init__.py +1 -13
  43. viam/components/gantry/client.py +80 -25
  44. viam/components/gantry/gantry.py +123 -9
  45. viam/components/gantry/service.py +51 -29
  46. viam/components/generic/__init__.py +1 -1
  47. viam/components/generic/client.py +21 -8
  48. viam/components/generic/generic.py +10 -2
  49. viam/components/generic/service.py +12 -7
  50. viam/components/gripper/__init__.py +3 -13
  51. viam/components/gripper/client.py +69 -21
  52. viam/components/gripper/gripper.py +123 -3
  53. viam/components/gripper/service.py +44 -22
  54. viam/components/input/__init__.py +1 -14
  55. viam/components/input/client.py +55 -23
  56. viam/components/input/input.py +106 -3
  57. viam/components/input/service.py +16 -21
  58. viam/components/motor/__init__.py +1 -21
  59. viam/components/motor/client.py +56 -33
  60. viam/components/motor/motor.py +127 -4
  61. viam/components/motor/service.py +33 -44
  62. viam/components/movement_sensor/__init__.py +1 -1
  63. viam/components/movement_sensor/client.py +102 -45
  64. viam/components/movement_sensor/movement_sensor.py +130 -61
  65. viam/components/movement_sensor/service.py +38 -41
  66. viam/components/pose_tracker/__init__.py +1 -1
  67. viam/components/pose_tracker/client.py +18 -7
  68. viam/components/pose_tracker/pose_tracker.py +4 -2
  69. viam/components/pose_tracker/service.py +12 -10
  70. viam/components/power_sensor/__init__.py +17 -0
  71. viam/components/power_sensor/client.py +86 -0
  72. viam/components/power_sensor/power_sensor.py +104 -0
  73. viam/components/power_sensor/service.py +72 -0
  74. viam/components/sensor/__init__.py +2 -1
  75. viam/components/sensor/client.py +26 -10
  76. viam/components/sensor/sensor.py +22 -4
  77. viam/components/sensor/service.py +20 -11
  78. viam/components/servo/__init__.py +1 -13
  79. viam/components/servo/client.py +47 -21
  80. viam/components/servo/service.py +15 -22
  81. viam/components/servo/servo.py +61 -2
  82. viam/components/switch/__init__.py +10 -0
  83. viam/components/switch/client.py +83 -0
  84. viam/components/switch/service.py +72 -0
  85. viam/components/switch/switch.py +98 -0
  86. viam/errors.py +10 -0
  87. viam/gen/app/agent/v1/agent_grpc.py +29 -0
  88. viam/gen/app/agent/v1/agent_pb2.py +47 -0
  89. viam/gen/app/agent/v1/agent_pb2.pyi +280 -0
  90. viam/gen/app/cloudslam/v1/__init__.py +0 -0
  91. viam/gen/app/cloudslam/v1/cloud_slam_grpc.py +70 -0
  92. viam/gen/app/cloudslam/v1/cloud_slam_pb2.py +54 -0
  93. viam/gen/app/cloudslam/v1/cloud_slam_pb2.pyi +384 -0
  94. viam/gen/app/data/v1/data_grpc.py +197 -8
  95. viam/gen/app/data/v1/data_pb2.py +238 -99
  96. viam/gen/app/data/v1/data_pb2.pyi +1222 -259
  97. viam/gen/app/datapipelines/__init__.py +0 -0
  98. viam/gen/app/datapipelines/v1/__init__.py +0 -0
  99. viam/gen/app/datapipelines/v1/data_pipelines_grpc.py +84 -0
  100. viam/gen/app/datapipelines/v1/data_pipelines_pb2.py +57 -0
  101. viam/gen/app/datapipelines/v1/data_pipelines_pb2.pyi +387 -0
  102. viam/gen/app/dataset/__init__.py +0 -0
  103. viam/gen/app/dataset/v1/__init__.py +0 -0
  104. viam/gen/app/dataset/v1/dataset_grpc.py +68 -0
  105. viam/gen/app/dataset/v1/dataset_pb2.py +44 -0
  106. viam/gen/app/dataset/v1/dataset_pb2.pyi +214 -0
  107. viam/gen/app/datasync/v1/data_sync_grpc.py +21 -4
  108. viam/gen/app/datasync/v1/data_sync_pb2.py +62 -128
  109. viam/gen/app/datasync/v1/data_sync_pb2.pyi +156 -199
  110. viam/gen/app/mlinference/__init__.py +0 -0
  111. viam/gen/app/mlinference/v1/__init__.py +0 -0
  112. viam/gen/app/mlinference/v1/ml_inference_grpc.py +28 -0
  113. viam/gen/app/mlinference/v1/ml_inference_pb2.py +23 -0
  114. viam/gen/app/mlinference/v1/ml_inference_pb2.pyi +63 -0
  115. viam/gen/app/mltraining/v1/ml_training_grpc.py +51 -3
  116. viam/gen/app/mltraining/v1/ml_training_pb2.py +135 -58
  117. viam/gen/app/mltraining/v1/ml_training_pb2.pyi +328 -39
  118. viam/gen/app/packages/v1/packages_grpc.py +15 -1
  119. viam/gen/app/packages/v1/packages_pb2.py +44 -64
  120. viam/gen/app/packages/v1/packages_pb2.pyi +75 -85
  121. viam/gen/app/v1/app_grpc.py +644 -3
  122. viam/gen/app/v1/app_pb2.py +695 -295
  123. viam/gen/app/v1/app_pb2.pyi +4488 -635
  124. viam/gen/app/v1/billing_grpc.py +53 -11
  125. viam/gen/app/v1/billing_pb2.py +94 -39
  126. viam/gen/app/v1/billing_pb2.pyi +391 -191
  127. viam/gen/app/v1/end_user_grpc.py +59 -0
  128. viam/gen/app/v1/end_user_pb2.py +55 -0
  129. viam/gen/app/v1/end_user_pb2.pyi +181 -0
  130. viam/gen/app/v1/robot_grpc.py +16 -1
  131. viam/gen/app/v1/robot_pb2.py +122 -94
  132. viam/gen/app/v1/robot_pb2.pyi +463 -123
  133. viam/gen/common/v1/common_pb2.py +87 -58
  134. viam/gen/common/v1/common_pb2.pyi +456 -149
  135. viam/gen/component/arm/v1/arm_grpc.py +58 -2
  136. viam/gen/component/arm/v1/arm_pb2.py +68 -51
  137. viam/gen/component/arm/v1/arm_pb2.pyi +108 -42
  138. viam/gen/component/audioin/__init__.py +0 -0
  139. viam/gen/component/audioin/v1/__init__.py +0 -0
  140. viam/gen/component/audioin/v1/audioin_grpc.py +54 -0
  141. viam/gen/component/audioin/v1/audioin_pb2.py +34 -0
  142. viam/gen/component/audioin/v1/audioin_pb2.pyi +94 -0
  143. viam/gen/component/audioinput/v1/audioinput_grpc.py +25 -2
  144. viam/gen/component/audioinput/v1/audioinput_pb2.py +36 -31
  145. viam/gen/component/audioinput/v1/audioinput_pb2.pyi +22 -22
  146. viam/gen/component/audioout/__init__.py +0 -0
  147. viam/gen/component/audioout/v1/__init__.py +0 -0
  148. viam/gen/component/audioout/v1/audioout_grpc.py +54 -0
  149. viam/gen/component/audioout/v1/audioout_pb2.py +32 -0
  150. viam/gen/component/audioout/v1/audioout_pb2.pyi +47 -0
  151. viam/gen/component/base/v1/base_grpc.py +42 -2
  152. viam/gen/component/base/v1/base_pb2.py +58 -47
  153. viam/gen/component/base/v1/base_pb2.pyi +65 -30
  154. viam/gen/component/board/v1/board_grpc.py +59 -7
  155. viam/gen/component/board/v1/board_pb2.py +94 -73
  156. viam/gen/component/board/v1/board_pb2.pyi +165 -68
  157. viam/gen/component/button/__init__.py +0 -0
  158. viam/gen/component/button/v1/__init__.py +0 -0
  159. viam/gen/component/button/v1/button_grpc.py +38 -0
  160. viam/gen/component/button/v1/button_pb2.py +28 -0
  161. viam/gen/component/button/v1/button_pb2.pyi +39 -0
  162. viam/gen/component/camera/v1/camera_grpc.py +38 -2
  163. viam/gen/component/camera/v1/camera_pb2.py +60 -43
  164. viam/gen/component/camera/v1/camera_pb2.pyi +191 -37
  165. viam/gen/component/encoder/v1/encoder_grpc.py +25 -2
  166. viam/gen/component/encoder/v1/encoder_pb2.py +36 -31
  167. viam/gen/component/encoder/v1/encoder_pb2.pyi +15 -15
  168. viam/gen/component/gantry/v1/gantry_grpc.py +47 -2
  169. viam/gen/component/gantry/v1/gantry_pb2.py +56 -43
  170. viam/gen/component/gantry/v1/gantry_pb2.pyi +67 -31
  171. viam/gen/component/generic/v1/generic_grpc.py +16 -2
  172. viam/gen/component/generic/v1/generic_pb2.py +16 -11
  173. viam/gen/component/gripper/v1/gripper_grpc.py +44 -2
  174. viam/gen/component/gripper/v1/gripper_pb2.py +48 -35
  175. viam/gen/component/gripper/v1/gripper_pb2.pyi +62 -24
  176. viam/gen/component/inputcontroller/v1/input_controller_grpc.py +28 -2
  177. viam/gen/component/inputcontroller/v1/input_controller_pb2.py +46 -41
  178. viam/gen/component/inputcontroller/v1/input_controller_pb2.pyi +32 -36
  179. viam/gen/component/motor/v1/motor_grpc.py +51 -2
  180. viam/gen/component/motor/v1/motor_pb2.py +78 -67
  181. viam/gen/component/motor/v1/motor_pb2.pyi +75 -46
  182. viam/gen/component/movementsensor/v1/movementsensor_grpc.py +48 -2
  183. viam/gen/component/movementsensor/v1/movementsensor_pb2.py +70 -63
  184. viam/gen/component/movementsensor/v1/movementsensor_pb2.pyi +84 -57
  185. viam/gen/component/posetracker/v1/pose_tracker_grpc.py +19 -2
  186. viam/gen/component/posetracker/v1/pose_tracker_pb2.py +26 -21
  187. viam/gen/component/posetracker/v1/pose_tracker_pb2.pyi +9 -13
  188. viam/gen/component/powersensor/__init__.py +0 -0
  189. viam/gen/component/powersensor/v1/__init__.py +0 -0
  190. viam/gen/component/powersensor/v1/powersensor_grpc.py +62 -0
  191. viam/gen/component/powersensor/v1/powersensor_pb2.py +42 -0
  192. viam/gen/component/powersensor/v1/powersensor_pb2.pyi +124 -0
  193. viam/gen/component/sensor/v1/sensor_grpc.py +21 -5
  194. viam/gen/component/sensor/v1/sensor_pb2.py +18 -22
  195. viam/gen/component/sensor/v1/sensor_pb2.pyi +1 -69
  196. viam/gen/component/servo/v1/servo_grpc.py +28 -2
  197. viam/gen/component/servo/v1/servo_pb2.py +42 -37
  198. viam/gen/component/servo/v1/servo_pb2.pyi +22 -26
  199. viam/gen/component/switch/__init__.py +0 -0
  200. viam/gen/component/switch/v1/__init__.py +0 -0
  201. viam/gen/component/switch/v1/switch_grpc.py +54 -0
  202. viam/gen/component/switch/v1/switch_pb2.py +40 -0
  203. viam/gen/component/switch/v1/switch_pb2.pyi +116 -0
  204. viam/gen/component/testecho/v1/testecho_grpc.py +15 -0
  205. viam/gen/component/testecho/v1/testecho_pb2.py +29 -26
  206. viam/gen/component/testecho/v1/testecho_pb2.pyi +16 -20
  207. viam/gen/module/v1/module_grpc.py +18 -0
  208. viam/gen/module/v1/module_pb2.py +36 -33
  209. viam/gen/module/v1/module_pb2.pyi +39 -34
  210. viam/gen/opentelemetry/__init__.py +0 -0
  211. viam/gen/opentelemetry/proto/__init__.py +0 -0
  212. viam/gen/opentelemetry/proto/common/__init__.py +0 -0
  213. viam/gen/opentelemetry/proto/common/v1/__init__.py +0 -0
  214. viam/gen/opentelemetry/proto/common/v1/common_grpc.py +0 -0
  215. viam/gen/opentelemetry/proto/common/v1/common_pb2.py +27 -0
  216. viam/gen/opentelemetry/proto/common/v1/common_pb2.pyi +208 -0
  217. viam/gen/opentelemetry/proto/resource/__init__.py +0 -0
  218. viam/gen/opentelemetry/proto/resource/v1/__init__.py +0 -0
  219. viam/gen/opentelemetry/proto/resource/v1/resource_grpc.py +0 -0
  220. viam/gen/opentelemetry/proto/resource/v1/resource_pb2.py +18 -0
  221. viam/gen/opentelemetry/proto/resource/v1/resource_pb2.pyi +59 -0
  222. viam/gen/opentelemetry/proto/trace/__init__.py +0 -0
  223. viam/gen/opentelemetry/proto/trace/v1/__init__.py +0 -0
  224. viam/gen/opentelemetry/proto/trace/v1/trace_grpc.py +0 -0
  225. viam/gen/opentelemetry/proto/trace/v1/trace_pb2.py +37 -0
  226. viam/gen/opentelemetry/proto/trace/v1/trace_pb2.pyi +402 -0
  227. viam/gen/proto/rpc/examples/echo/v1/echo_grpc.py +12 -0
  228. viam/gen/proto/rpc/examples/echo/v1/echo_pb2.py +25 -22
  229. viam/gen/proto/rpc/examples/echo/v1/echo_pb2.pyi +13 -17
  230. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_grpc.py +12 -0
  231. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.py +23 -20
  232. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.pyi +13 -17
  233. viam/gen/proto/rpc/v1/auth_grpc.py +11 -0
  234. viam/gen/proto/rpc/v1/auth_pb2.py +27 -24
  235. viam/gen/proto/rpc/v1/auth_pb2.pyi +12 -16
  236. viam/gen/proto/rpc/webrtc/v1/grpc_pb2.py +35 -32
  237. viam/gen/proto/rpc/webrtc/v1/grpc_pb2.pyi +37 -41
  238. viam/gen/proto/rpc/webrtc/v1/signaling_grpc.py +15 -0
  239. viam/gen/proto/rpc/webrtc/v1/signaling_pb2.py +62 -57
  240. viam/gen/proto/rpc/webrtc/v1/signaling_pb2.pyi +78 -69
  241. viam/gen/provisioning/__init__.py +0 -0
  242. viam/gen/provisioning/v1/__init__.py +0 -0
  243. viam/gen/provisioning/v1/provisioning_grpc.py +59 -0
  244. viam/gen/provisioning/v1/provisioning_pb2.py +45 -0
  245. viam/gen/provisioning/v1/provisioning_pb2.pyi +229 -0
  246. viam/gen/robot/v1/robot_grpc.py +144 -15
  247. viam/gen/robot/v1/robot_pb2.py +193 -119
  248. viam/gen/robot/v1/robot_pb2.pyi +565 -137
  249. viam/gen/service/datamanager/v1/data_manager_grpc.py +20 -2
  250. viam/gen/service/datamanager/v1/data_manager_pb2.py +27 -17
  251. viam/gen/service/datamanager/v1/data_manager_pb2.pyi +52 -10
  252. viam/gen/service/discovery/__init__.py +0 -0
  253. viam/gen/service/discovery/v1/__init__.py +0 -0
  254. viam/gen/service/discovery/v1/discovery_grpc.py +39 -0
  255. viam/gen/service/discovery/v1/discovery_pb2.py +29 -0
  256. viam/gen/service/discovery/v1/discovery_pb2.pyi +51 -0
  257. viam/gen/service/generic/__init__.py +0 -0
  258. viam/gen/service/generic/v1/__init__.py +0 -0
  259. viam/gen/service/generic/v1/generic_grpc.py +29 -0
  260. viam/gen/service/generic/v1/generic_pb2.py +21 -0
  261. viam/gen/service/generic/v1/generic_pb2.pyi +6 -0
  262. viam/gen/service/mlmodel/v1/mlmodel_grpc.py +9 -0
  263. viam/gen/service/mlmodel/v1/mlmodel_pb2.py +76 -29
  264. viam/gen/service/mlmodel/v1/mlmodel_pb2.pyi +307 -28
  265. viam/gen/service/motion/v1/motion_grpc.py +42 -4
  266. viam/gen/service/motion/v1/motion_pb2.py +119 -51
  267. viam/gen/service/motion/v1/motion_pb2.pyi +595 -120
  268. viam/gen/service/navigation/v1/navigation_grpc.py +49 -1
  269. viam/gen/service/navigation/v1/navigation_pb2.py +76 -51
  270. viam/gen/service/navigation/v1/navigation_pb2.pyi +188 -33
  271. viam/gen/service/sensors/v1/sensors_grpc.py +12 -0
  272. viam/gen/service/sensors/v1/sensors_pb2.py +60 -29
  273. viam/gen/service/sensors/v1/sensors_pb2.pyi +18 -21
  274. viam/gen/service/shell/v1/shell_grpc.py +27 -1
  275. viam/gen/service/shell/v1/shell_pb2.py +37 -15
  276. viam/gen/service/shell/v1/shell_pb2.pyi +260 -7
  277. viam/gen/service/slam/v1/slam_grpc.py +24 -2
  278. viam/gen/service/slam/v1/slam_pb2.py +44 -30
  279. viam/gen/service/slam/v1/slam_pb2.pyi +128 -27
  280. viam/gen/service/video/__init__.py +0 -0
  281. viam/gen/service/video/v1/__init__.py +0 -0
  282. viam/gen/service/video/v1/video_grpc.py +39 -0
  283. viam/gen/service/video/v1/video_pb2.py +29 -0
  284. viam/gen/service/video/v1/video_pb2.pyi +72 -0
  285. viam/gen/service/vision/v1/vision_grpc.py +39 -1
  286. viam/gen/service/vision/v1/vision_pb2.py +61 -45
  287. viam/gen/service/vision/v1/vision_pb2.pyi +180 -41
  288. viam/gen/service/worldstatestore/__init__.py +0 -0
  289. viam/gen/service/worldstatestore/v1/__init__.py +0 -0
  290. viam/gen/service/worldstatestore/v1/world_state_store_grpc.py +55 -0
  291. viam/gen/service/worldstatestore/v1/world_state_store_pb2.py +39 -0
  292. viam/gen/service/worldstatestore/v1/world_state_store_pb2.pyi +171 -0
  293. viam/gen/stream/__init__.py +0 -0
  294. viam/gen/stream/v1/__init__.py +0 -0
  295. viam/gen/stream/v1/stream_grpc.py +59 -0
  296. viam/gen/stream/v1/stream_pb2.py +39 -0
  297. viam/gen/stream/v1/stream_pb2.pyi +161 -0
  298. viam/gen/tagger/v1/tagger_pb2.py +9 -8
  299. viam/logging.py +160 -17
  300. viam/media/__init__.py +0 -9
  301. viam/media/audio.py +22 -10
  302. viam/media/utils/__init__.py +0 -0
  303. viam/media/utils/pil/__init__.py +55 -0
  304. viam/media/{viam_rgba_plugin.py → utils/pil/viam_rgba_plugin.py} +10 -16
  305. viam/media/viam_rgba.py +10 -0
  306. viam/media/video.py +197 -73
  307. viam/module/module.py +191 -44
  308. viam/module/resource_data_consumer.py +41 -0
  309. viam/module/service.py +9 -1
  310. viam/module/types.py +4 -5
  311. viam/operations.py +4 -3
  312. viam/proto/app/__init__.py +361 -5
  313. viam/proto/app/agent/__init__.py +28 -0
  314. viam/proto/app/billing.py +51 -27
  315. viam/proto/app/cloudslam/__init__.py +48 -0
  316. viam/proto/app/data/__init__.py +103 -17
  317. viam/proto/app/datapipelines/__init__.py +56 -0
  318. viam/proto/app/dataset/__init__.py +40 -0
  319. viam/proto/app/datasync/__init__.py +11 -5
  320. viam/proto/app/end_user.py +34 -0
  321. viam/proto/app/mlinference/__init__.py +15 -0
  322. viam/proto/app/mltraining/__init__.py +25 -1
  323. viam/proto/app/packages/__init__.py +3 -3
  324. viam/proto/app/robot.py +19 -1
  325. viam/proto/common/__init__.py +35 -8
  326. viam/proto/component/arm/__init__.py +9 -1
  327. viam/proto/component/audioin/__init__.py +16 -0
  328. viam/proto/component/audioinput/__init__.py +3 -1
  329. viam/proto/component/audioout/__init__.py +15 -0
  330. viam/proto/component/base/__init__.py +7 -1
  331. viam/proto/component/board/__init__.py +13 -5
  332. viam/proto/component/button/__init__.py +15 -0
  333. viam/proto/component/camera/__init__.py +9 -1
  334. viam/proto/component/encoder/__init__.py +3 -1
  335. viam/proto/component/gantry/__init__.py +7 -1
  336. viam/proto/component/generic/__init__.py +3 -1
  337. viam/proto/component/gripper/__init__.py +7 -1
  338. viam/proto/component/inputcontroller/__init__.py +7 -1
  339. viam/proto/component/motor/__init__.py +7 -1
  340. viam/proto/component/movementsensor/__init__.py +7 -1
  341. viam/proto/component/posetracker/__init__.py +7 -1
  342. viam/proto/component/powersensor/__init__.py +30 -0
  343. viam/proto/component/sensor/__init__.py +3 -4
  344. viam/proto/component/servo/__init__.py +3 -1
  345. viam/proto/component/switch/__init__.py +26 -0
  346. viam/proto/component/testecho/__init__.py +3 -1
  347. viam/proto/module/__init__.py +3 -1
  348. viam/proto/opentelemetry/__init__.py +0 -0
  349. viam/proto/opentelemetry/proto/__init__.py +0 -0
  350. viam/proto/opentelemetry/proto/common/__init__.py +15 -0
  351. viam/proto/opentelemetry/proto/resource/__init__.py +10 -0
  352. viam/proto/opentelemetry/proto/trace/__init__.py +15 -0
  353. viam/proto/provisioning/__init__.py +42 -0
  354. viam/proto/robot/__init__.py +57 -9
  355. viam/proto/rpc/auth.py +11 -1
  356. viam/proto/rpc/examples/echo/__init__.py +3 -1
  357. viam/proto/rpc/examples/echoresource/__init__.py +7 -1
  358. viam/proto/rpc/webrtc/grpc.py +3 -1
  359. viam/proto/rpc/webrtc/signaling.py +5 -1
  360. viam/proto/service/datamanager/__init__.py +15 -2
  361. viam/proto/service/discovery/__init__.py +15 -0
  362. viam/proto/service/generic/__init__.py +12 -0
  363. viam/proto/service/mlmodel/__init__.py +27 -1
  364. viam/proto/service/motion/__init__.py +35 -5
  365. viam/proto/service/navigation/__init__.py +19 -1
  366. viam/proto/service/sensors/__init__.py +3 -1
  367. viam/proto/service/shell/__init__.py +25 -2
  368. viam/proto/service/slam/__init__.py +13 -1
  369. viam/proto/service/video/__init__.py +15 -0
  370. viam/proto/service/vision/__init__.py +11 -1
  371. viam/proto/service/worldstatestore/__init__.py +32 -0
  372. viam/proto/stream/__init__.py +36 -0
  373. viam/py.typed +0 -0
  374. viam/resource/base.py +45 -8
  375. viam/resource/easy_resource.py +149 -0
  376. viam/resource/manager.py +35 -14
  377. viam/resource/registry.py +40 -52
  378. viam/resource/rpc_client_base.py +33 -1
  379. viam/resource/rpc_service_base.py +15 -8
  380. viam/resource/types.py +39 -26
  381. viam/robot/client.py +458 -91
  382. viam/robot/service.py +13 -107
  383. viam/rpc/dial.py +133 -15
  384. viam/rpc/libviam_rust_utils.so +0 -0
  385. viam/rpc/server.py +59 -15
  386. viam/rpc/types.py +2 -4
  387. viam/services/discovery/__init__.py +12 -0
  388. viam/services/discovery/client.py +55 -0
  389. viam/services/discovery/discovery.py +52 -0
  390. viam/services/discovery/service.py +43 -0
  391. viam/services/generic/__init__.py +18 -0
  392. viam/services/generic/client.py +58 -0
  393. viam/services/generic/generic.py +58 -0
  394. viam/services/generic/service.py +29 -0
  395. viam/services/mlmodel/__init__.py +15 -1
  396. viam/services/mlmodel/client.py +20 -15
  397. viam/services/mlmodel/mlmodel.py +44 -7
  398. viam/services/mlmodel/service.py +9 -13
  399. viam/services/mlmodel/utils.py +101 -0
  400. viam/services/motion/__init__.py +15 -3
  401. viam/services/motion/client.py +109 -150
  402. viam/services/motion/motion.py +380 -0
  403. viam/services/motion/service.py +132 -0
  404. viam/services/navigation/__init__.py +11 -0
  405. viam/services/navigation/client.py +99 -0
  406. viam/services/navigation/navigation.py +250 -0
  407. viam/services/navigation/service.py +137 -0
  408. viam/services/service_base.py +43 -4
  409. viam/services/service_client_base.py +4 -4
  410. viam/services/slam/__init__.py +4 -1
  411. viam/services/slam/client.py +21 -11
  412. viam/services/slam/service.py +16 -19
  413. viam/services/slam/slam.py +66 -5
  414. viam/services/vision/__init__.py +8 -0
  415. viam/services/vision/client.py +115 -111
  416. viam/services/vision/service.py +143 -0
  417. viam/services/vision/vision.py +317 -0
  418. viam/services/worldstatestore/__init__.py +18 -0
  419. viam/services/worldstatestore/client.py +94 -0
  420. viam/services/worldstatestore/service.py +55 -0
  421. viam/services/worldstatestore/worldstatestore.py +90 -0
  422. viam/sessions_client.py +254 -0
  423. viam/streams.py +44 -0
  424. viam/utils.py +143 -15
  425. viam/version_metadata.py +4 -0
  426. viam_sdk-0.66.0.dist-info/METADATA +157 -0
  427. viam_sdk-0.66.0.dist-info/RECORD +531 -0
  428. {viam_sdk-0.3.0.dist-info → viam_sdk-0.66.0.dist-info}/WHEEL +1 -1
  429. viam/components/audio_input/__init__.py +0 -18
  430. viam/components/audio_input/audio_input.py +0 -79
  431. viam/components/audio_input/client.py +0 -60
  432. viam/components/audio_input/service.py +0 -118
  433. viam/components/types.py +0 -5
  434. viam/gen/app/model/v1/model_grpc.py +0 -39
  435. viam/gen/app/model/v1/model_pb2.py +0 -71
  436. viam/gen/app/model/v1/model_pb2.pyi +0 -285
  437. viam/gen/proto/rpc/examples/fileupload/v1/fileupload_grpc.py +0 -21
  438. viam/gen/proto/rpc/examples/fileupload/v1/fileupload_pb2.py +0 -18
  439. viam/gen/proto/rpc/examples/fileupload/v1/fileupload_pb2.pyi +0 -49
  440. viam/media/media.py +0 -53
  441. viam/proto/app/model/__init__.py +0 -40
  442. viam/proto/rpc/examples/fileupload/__init__.py +0 -13
  443. viam/services/sensors/__init__.py +0 -5
  444. viam/services/sensors/client.py +0 -63
  445. viam_sdk-0.3.0.dist-info/LICENSE +0 -202
  446. viam_sdk-0.3.0.dist-info/METADATA +0 -122
  447. viam_sdk-0.3.0.dist-info/RECORD +0 -372
  448. /viam/{gen/app/model → app}/__init__.py +0 -0
  449. /viam/gen/app/{model/v1 → agent}/__init__.py +0 -0
  450. /viam/gen/{proto/rpc/examples/fileupload → app/agent/v1}/__init__.py +0 -0
  451. /viam/gen/{proto/rpc/examples/fileupload/v1 → app/cloudslam}/__init__.py +0 -0
  452. /LICENSE → /viam_sdk-0.66.0.dist-info/licenses/LICENSE +0 -0
@@ -0,0 +1,317 @@
1
+ import abc
2
+ import sys
3
+ from typing import Final, List, Mapping, Optional
4
+
5
+ from viam.media.video import ViamImage
6
+ from viam.proto.common import PointCloudObject
7
+ from viam.proto.service.vision import Classification, Detection, GetPropertiesResponse
8
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_SERVICE
9
+ from viam.utils import ValueTypes
10
+
11
+ from ..service_base import ServiceBase
12
+
13
+ if sys.version_info >= (3, 10):
14
+ from typing import TypeAlias
15
+ else:
16
+ from typing_extensions import TypeAlias
17
+
18
+
19
+ class CaptureAllResult:
20
+ """
21
+ CaptureAllResult represents the collection of things that you have requested from the
22
+ CaptureAllFromCamera method. This is used most often for visualization purposes, since normally,
23
+ returning the image on every call to a classifier/detector/etc would be costly and unnecessary.
24
+ The default result for each field is None rather than the empty list to distinguish between
25
+ "there was no request for the classifier/detector to return a result" vs.
26
+ "the classifier/detector was requested, but there were no results".
27
+ """
28
+
29
+ def __init__(
30
+ self,
31
+ image: Optional[ViamImage] = None,
32
+ classifications: Optional[List[Classification]] = None,
33
+ detections: Optional[List[Detection]] = None,
34
+ objects: Optional[List[PointCloudObject]] = None,
35
+ extra: Optional[Mapping[str, ValueTypes]] = None,
36
+ ):
37
+ """
38
+ Args:
39
+ image (ViamImage|None): The image from the GetImages request of the camera, if it was requested.
40
+ classifications (List[Classification]|None): The classifications from GetClassifications, if it was requested.
41
+ detections (List[Detection]|None): The detections from GetDetections, if it was requested.
42
+ objects (List[PointCloudObject]|None): the object point clouds from GetObjectPointClouds, if it was requested.
43
+ extra (dict): A catch all structure, usually for metadata, that a module writer might want to return. Default empty.
44
+
45
+ Returns:
46
+ None
47
+ """
48
+ self.image = image
49
+ self.classifications = classifications
50
+ self.detections = detections
51
+ self.objects = objects
52
+ self.extra = extra
53
+
54
+
55
+ class Vision(ServiceBase):
56
+ """
57
+ Vision represents a Vision service.
58
+
59
+ This acts as an abstract base class for any drivers representing specific
60
+ vision implementations. This cannot be used on its own. If the ``__init__()`` function is
61
+ overridden, it must call the ``super().__init__()`` function.
62
+
63
+ For more information, see `Computer Vision service <https://docs.viam.com/dev/reference/apis/services/vision/>`_.
64
+ """
65
+
66
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
67
+ RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_SERVICE, "vision"
68
+ )
69
+
70
+ Properties: "TypeAlias" = GetPropertiesResponse
71
+ """
72
+ Properties is a class that states what features are supported on the associated vision service.
73
+ Currently, these are the following properties:
74
+ - classifications_supported (bool): GetClassifications and GetClassificationsFromCamera are implemented.
75
+ - detections_supported (bool): GetDetections and GetDetectionsFromCamera are implemented.
76
+ - object_point_clouds_supported (bool): GetObjectPointClouds is implemented.
77
+ """
78
+
79
+ @abc.abstractmethod
80
+ async def capture_all_from_camera(
81
+ self,
82
+ camera_name: str,
83
+ return_image: bool = False,
84
+ return_classifications: bool = False,
85
+ return_detections: bool = False,
86
+ return_object_point_clouds: bool = False,
87
+ *,
88
+ extra: Optional[Mapping[str, ValueTypes]] = None,
89
+ timeout: Optional[float] = None,
90
+ ) -> CaptureAllResult:
91
+ """Get the next image, detections, classifications, and objects all together,
92
+ given a camera name. Used for visualization.
93
+
94
+ ::
95
+
96
+ my_detector = VisionClient.from_robot(machine, "my_detector")
97
+
98
+ # Get the captured data for a camera
99
+ result = await my_detector.capture_all_from_camera(
100
+ "my_camera",
101
+ return_image=True,
102
+ return_detections=True,
103
+ )
104
+ image = result.image
105
+ detections = result.detections
106
+
107
+ Args:
108
+ camera_name (str): The name of the camera to use for detection
109
+ return_image (bool): Ask the vision service to return the camera's latest image
110
+ return_classifications (bool): Ask the vision service to return its latest classifications
111
+ return_detections (bool): Ask the vision service to return its latest detections
112
+ return_object_point_clouds (bool): Ask the vision service to return its latest 3D segmentations
113
+
114
+ Returns:
115
+ vision.CaptureAllResult: A class that stores all potential returns from the vision service.
116
+ It can return the image from the camera along with its associated detections, classifications,
117
+ and objects, as well as any extra info the model may provide.
118
+
119
+ For more information, see `Computer Vision service <https://docs.viam.com/dev/reference/apis/services/vision/#captureallfromcamera>`_.
120
+ """
121
+ ...
122
+
123
+ @abc.abstractmethod
124
+ async def get_detections_from_camera(
125
+ self,
126
+ camera_name: str,
127
+ *,
128
+ extra: Optional[Mapping[str, ValueTypes]] = None,
129
+ timeout: Optional[float] = None,
130
+ ) -> List[Detection]:
131
+ """Get a list of detections in the next image given a camera and a detector
132
+
133
+ ::
134
+
135
+ my_detector = VisionClient.from_robot(robot=machine, "my_detector")
136
+
137
+ # Get detections for the next image from the specified camera
138
+ detections = await my_detector.get_detections_from_camera("my_camera")
139
+
140
+ Args:
141
+ camera_name (str): The name of the camera to use for detection
142
+
143
+ Raises:
144
+ ViamError: Raised if given an image without a specified width and height
145
+
146
+ Returns:
147
+ List[viam.proto.service.vision.Detection]: A list of 2D bounding boxes, their labels, and the
148
+ confidence score of the labels, around the found objects in the next 2D image
149
+ from the given camera, with the given detector applied to it.
150
+
151
+ For more information, see `Computer Vision service <https://docs.viam.com/dev/reference/apis/services/vision/#getdetectionsfromcamera>`_.
152
+ """
153
+ ...
154
+
155
+ @abc.abstractmethod
156
+ async def get_detections(
157
+ self,
158
+ image: ViamImage,
159
+ *,
160
+ extra: Optional[Mapping[str, ValueTypes]] = None,
161
+ timeout: Optional[float] = None,
162
+ ) -> List[Detection]:
163
+ """Get a list of detections in the given image using the specified detector
164
+
165
+ ::
166
+
167
+ my_camera = Camera.from_robot(robot=machine, "my_camera")
168
+ my_detector = VisionClient.from_robot(robot=machine, "my_detector")
169
+
170
+ # Get an image from the camera
171
+ images, _ = await my_camera.get_images()
172
+ img = images[0]
173
+
174
+ # Get detections for that image
175
+ detections = await my_detector.get_detections(img)
176
+
177
+ Args:
178
+ image (ViamImage): The image to get detections for
179
+
180
+ Raises:
181
+ ViamError: Raised if given an image without a specified width and height
182
+
183
+ Returns:
184
+ List[viam.proto.service.vision.Detection]: A list of 2D bounding boxes, their labels, and the
185
+ confidence score of the labels, around the found objects in the next 2D image
186
+ from the given camera, with the given detector applied to it.
187
+
188
+ For more information, see `Computer Vision service <https://docs.viam.com/dev/reference/apis/services/vision/#getdetections>`_.
189
+ """
190
+ ...
191
+
192
+ @abc.abstractmethod
193
+ async def get_classifications_from_camera(
194
+ self,
195
+ camera_name: str,
196
+ count: int,
197
+ *,
198
+ extra: Optional[Mapping[str, ValueTypes]] = None,
199
+ timeout: Optional[float] = None,
200
+ ) -> List[Classification]:
201
+ """Get a list of classifications in the next image given a camera and a classifier
202
+
203
+ ::
204
+
205
+ my_classifier = VisionClient.from_robot(robot=machine, "my_classifier")
206
+
207
+ # Get the 2 classifications with the highest confidence scores for the next image from the camera
208
+ classifications = await my_classifier.get_classifications_from_camera(
209
+ "my_camera", 2)
210
+
211
+ Args:
212
+ camera_name (str): The name of the camera to use for detection
213
+ count (int): The number of classifications desired
214
+
215
+ returns:
216
+ List[viam.proto.service.vision.Classification]: The list of Classifications
217
+
218
+ For more information, see `Computer Vision service <https://docs.viam.com/dev/reference/apis/services/vision/#getclassificationsfromcamera>`_.
219
+ """
220
+ ...
221
+
222
+ @abc.abstractmethod
223
+ async def get_classifications(
224
+ self,
225
+ image: ViamImage,
226
+ count: int,
227
+ *,
228
+ extra: Optional[Mapping[str, ValueTypes]] = None,
229
+ timeout: Optional[float] = None,
230
+ ) -> List[Classification]:
231
+ """Get a list of classifications in the given image using the specified classifier
232
+
233
+ ::
234
+
235
+ my_camera = Camera.from_robot(robot=machine, "my_camera")
236
+ my_classifier = VisionClient.from_robot(robot=machine, "my_classifier")
237
+
238
+ # Get an image from the camera
239
+ images, _ = await my_camera.get_images()
240
+ img = images[0]
241
+
242
+ # Get the 2 classifications with the highest confidence scores for the image
243
+ classifications = await my_classifier.get_classifications(img, 2)
244
+
245
+ Args:
246
+ image (ViamImage): The image to get detections for
247
+ count (int): The number of classifications desired
248
+
249
+ Returns:
250
+ List[viam.proto.service.vision.Classification]: The list of Classifications
251
+
252
+ For more information, see `Computer Vision service <https://docs.viam.com/dev/reference/apis/services/vision/#getclassifications>`_.
253
+ """
254
+ ...
255
+
256
+ @abc.abstractmethod
257
+ async def get_object_point_clouds(
258
+ self,
259
+ camera_name: str,
260
+ *,
261
+ extra: Optional[Mapping[str, ValueTypes]] = None,
262
+ timeout: Optional[float] = None,
263
+ ) -> List[PointCloudObject]:
264
+ """
265
+ Returns a list of the 3D point cloud objects and associated metadata in the latest
266
+ picture obtained from the specified 3D camera (using the specified segmenter).
267
+
268
+ To deserialize the returned information into a numpy array, use the Open3D library.
269
+
270
+ ::
271
+
272
+ import numpy as np
273
+ import open3d as o3d
274
+
275
+ my_segmenter = VisionClient.from_robot(robot=machine, "my_segmenter")
276
+ # Get the objects from the camera output
277
+ objects = await my_segmenter.get_object_point_clouds("my_camera")
278
+ # write the first object point cloud into a temporary file
279
+ with open("/tmp/pointcloud_data.pcd", "wb") as f:
280
+ f.write(objects[0].point_cloud)
281
+ pcd = o3d.io.read_point_cloud("/tmp/pointcloud_data.pcd")
282
+ points = np.asarray(pcd.points)
283
+
284
+ Args:
285
+ camera_name (str): The name of the camera
286
+
287
+ Returns:
288
+ List[viam.proto.common.PointCloudObject]: The pointcloud objects with metadata
289
+
290
+ For more information, see `Computer Vision service <https://docs.viam.com/dev/reference/apis/services/vision/#getobjectpointclouds>`_.
291
+ """
292
+ ...
293
+
294
+ @abc.abstractmethod
295
+ async def get_properties(
296
+ self,
297
+ *,
298
+ extra: Optional[Mapping[str, ValueTypes]] = None,
299
+ timeout: Optional[float] = None,
300
+ ) -> Properties:
301
+ """
302
+ Get info about what vision methods the vision service provides. Currently returns boolean values that
303
+ state whether the service implements the classification, detection, and/or 3D object segmentation methods.
304
+
305
+ ::
306
+
307
+ my_detector = VisionClient.from_robot(robot=machine, "my_detector")
308
+ properties = await my_detector.get_properties()
309
+ detections_supported = properties.detections_supported
310
+ classifications_supported = properties.classifications_supported
311
+
312
+ Returns:
313
+ Properties: The properties of the vision service
314
+
315
+ For more information, see `Computer Vision service <https://docs.viam.com/dev/reference/apis/services/vision/#getproperties>`_.
316
+ """
317
+ ...
@@ -0,0 +1,18 @@
1
+ from viam.proto.service.worldstatestore import StreamTransformChangesResponse, TransformChangeType
2
+ from viam.resource.registry import Registry, ResourceRegistration
3
+
4
+ from .client import WorldStateStoreClient
5
+ from .service import WorldStateStoreService
6
+ from .worldstatestore import WorldStateStore
7
+
8
+ __all__ = [
9
+ "WorldStateStore",
10
+ "WorldStateStoreClient",
11
+ "WorldStateStoreService",
12
+ "StreamTransformChangesResponse",
13
+ "TransformChangeType",
14
+ ]
15
+
16
+ Registry.register_api(
17
+ ResourceRegistration(WorldStateStore, WorldStateStoreService, lambda name, channel: WorldStateStoreClient(name, channel))
18
+ )
@@ -0,0 +1,94 @@
1
+ from typing import Any, AsyncGenerator, List, Mapping, Optional
2
+
3
+ from grpclib.client import Channel
4
+
5
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, Transform
6
+ from viam.proto.service.worldstatestore import (
7
+ GetTransformRequest,
8
+ GetTransformResponse,
9
+ ListUUIDsRequest,
10
+ ListUUIDsResponse,
11
+ StreamTransformChangesRequest,
12
+ StreamTransformChangesResponse,
13
+ WorldStateStoreServiceStub,
14
+ )
15
+ from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
16
+ from viam.utils import ValueTypes, dict_to_struct, struct_to_dict
17
+
18
+ from .worldstatestore import WorldStateStore
19
+
20
+
21
+ class WorldStateStoreClient(WorldStateStore, ReconfigurableResourceRPCClientBase):
22
+ """
23
+ gRPC client for the WorldStateStore service.
24
+ """
25
+
26
+ client: WorldStateStoreServiceStub
27
+
28
+ def __init__(self, name: str, channel: Channel):
29
+ self.channel = channel
30
+ self.client = WorldStateStoreServiceStub(channel)
31
+ super().__init__(name)
32
+
33
+ async def list_uuids(
34
+ self,
35
+ *,
36
+ extra: Optional[Mapping[str, Any]] = None,
37
+ timeout: Optional[float] = None,
38
+ **kwargs,
39
+ ) -> List[bytes]:
40
+ md = kwargs.get("metadata", self.Metadata()).proto
41
+ request = ListUUIDsRequest(
42
+ name=self.name,
43
+ extra=dict_to_struct(extra),
44
+ )
45
+ response: ListUUIDsResponse = await self.client.ListUUIDs(request, timeout=timeout, metadata=md)
46
+ return list(response.uuids)
47
+
48
+ async def get_transform(
49
+ self,
50
+ uuid: bytes,
51
+ *,
52
+ extra: Optional[Mapping[str, Any]] = None,
53
+ timeout: Optional[float] = None,
54
+ **kwargs,
55
+ ) -> "Transform":
56
+ md = kwargs.get("metadata", self.Metadata()).proto
57
+ request = GetTransformRequest(
58
+ name=self.name,
59
+ uuid=uuid,
60
+ extra=dict_to_struct(extra),
61
+ )
62
+ response: GetTransformResponse = await self.client.GetTransform(request, timeout=timeout, metadata=md)
63
+ return response.transform
64
+
65
+ async def stream_transform_changes(
66
+ self,
67
+ *,
68
+ extra: Optional[Mapping[str, Any]] = None,
69
+ timeout: Optional[float] = None,
70
+ **kwargs,
71
+ ) -> AsyncGenerator[StreamTransformChangesResponse, None]:
72
+ md = kwargs.get("metadata", self.Metadata()).proto
73
+ request = StreamTransformChangesRequest(
74
+ name=self.name,
75
+ extra=dict_to_struct(extra),
76
+ )
77
+ responses = await self.client.StreamTransformChanges(request, timeout=timeout, metadata=md)
78
+ for response in responses:
79
+ yield response
80
+
81
+ async def do_command(
82
+ self,
83
+ command: Mapping[str, ValueTypes],
84
+ *,
85
+ timeout: Optional[float] = None,
86
+ **kwargs,
87
+ ) -> Mapping[str, ValueTypes]:
88
+ md = kwargs.get("metadata", self.Metadata()).proto
89
+ request = DoCommandRequest(
90
+ name=self.name,
91
+ command=dict_to_struct(command),
92
+ )
93
+ response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
94
+ return struct_to_dict(response.result)
@@ -0,0 +1,55 @@
1
+ from grpclib.server import Stream
2
+
3
+ from viam.proto.common import DoCommandRequest, DoCommandResponse
4
+ from viam.proto.service.worldstatestore import (
5
+ GetTransformRequest,
6
+ GetTransformResponse,
7
+ ListUUIDsRequest,
8
+ ListUUIDsResponse,
9
+ StreamTransformChangesRequest,
10
+ StreamTransformChangesResponse,
11
+ UnimplementedWorldStateStoreServiceBase,
12
+ )
13
+ from viam.resource.rpc_service_base import ResourceRPCServiceBase
14
+ from viam.utils import dict_to_struct, struct_to_dict
15
+
16
+ from .worldstatestore import WorldStateStore
17
+
18
+
19
+ class WorldStateStoreService(UnimplementedWorldStateStoreServiceBase, ResourceRPCServiceBase[WorldStateStore]):
20
+ RESOURCE_TYPE = WorldStateStore
21
+
22
+ async def ListUUIDs(self, stream: Stream[ListUUIDsRequest, ListUUIDsResponse]) -> None:
23
+ request = await stream.recv_message()
24
+ assert request is not None
25
+ service = self.get_resource(request.name)
26
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
27
+ uuids = await service.list_uuids(extra=struct_to_dict(request.extra), timeout=timeout)
28
+ await stream.send_message(ListUUIDsResponse(uuids=uuids))
29
+
30
+ async def GetTransform(self, stream: Stream[GetTransformRequest, GetTransformResponse]) -> None:
31
+ request = await stream.recv_message()
32
+ assert request is not None
33
+ service = self.get_resource(request.name)
34
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
35
+ transform = await service.get_transform(uuid=request.uuid, extra=struct_to_dict(request.extra), timeout=timeout)
36
+ await stream.send_message(GetTransformResponse(transform=transform))
37
+
38
+ async def StreamTransformChanges(
39
+ self,
40
+ stream: Stream[StreamTransformChangesRequest, StreamTransformChangesResponse],
41
+ ) -> None:
42
+ request = await stream.recv_message()
43
+ assert request is not None
44
+ service = self.get_resource(request.name)
45
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
46
+ async for change in service.stream_transform_changes(extra=struct_to_dict(request.extra), timeout=timeout):
47
+ await stream.send_message(change)
48
+
49
+ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
50
+ request = await stream.recv_message()
51
+ assert request is not None
52
+ worldstatestore = self.get_resource(request.name)
53
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
54
+ result = await worldstatestore.do_command(struct_to_dict(request.command), timeout=timeout)
55
+ await stream.send_message(DoCommandResponse(result=dict_to_struct(result)))
@@ -0,0 +1,90 @@
1
+ import abc
2
+ from typing import Any, AsyncGenerator, Final, List, Mapping, Optional
3
+
4
+ from viam.proto.common import Transform
5
+ from viam.proto.service.worldstatestore import (
6
+ StreamTransformChangesResponse,
7
+ )
8
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_SERVICE
9
+
10
+ from ..service_base import ServiceBase
11
+
12
+
13
+ class WorldStateStore(ServiceBase):
14
+ """WorldStateStore is a Viam service that manages world state transforms.
15
+
16
+ The WorldStateStore service provides functionality to store, retrieve, and stream
17
+ changes to world state transforms, which represent the pose of objects in different
18
+ reference frames. This functionality can be used to create custom visualizations of the world state.
19
+
20
+ For more information, see `WorldStateStore service <https://docs.viam.com/dev/reference/apis/services/world-state-store/>`_.
21
+ """
22
+
23
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
24
+ RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_SERVICE, "world_state_store"
25
+ )
26
+
27
+ @abc.abstractmethod
28
+ async def list_uuids(
29
+ self,
30
+ *,
31
+ extra: Optional[Mapping[str, Any]] = None,
32
+ timeout: Optional[float] = None,
33
+ ) -> List[bytes]:
34
+ """List all world state transform UUIDs.
35
+
36
+ ::
37
+
38
+ worldstatestore = WorldStateStoreClient.from_robot(robot=machine, name="builtin")
39
+
40
+ uuids = await worldstatestore.list_uuids()
41
+
42
+ Returns:
43
+ List[bytes]: A list of transform UUIDs
44
+ """
45
+ ...
46
+
47
+ @abc.abstractmethod
48
+ async def get_transform(
49
+ self,
50
+ uuid: bytes,
51
+ *,
52
+ extra: Optional[Mapping[str, Any]] = None,
53
+ timeout: Optional[float] = None,
54
+ ) -> Transform:
55
+ """Get a world state transform by UUID.
56
+
57
+ ::
58
+
59
+ worldstatestore = WorldStateStoreClient.from_robot(robot=machine, name="builtin")
60
+
61
+ transform = await worldstatestore.get_transform(uuid=b"some-uuid")
62
+
63
+ Args:
64
+ uuid (bytes): The UUID of the transform to retrieve
65
+
66
+ Returns:
67
+ Transform: The requested transform
68
+ """
69
+ ...
70
+
71
+ @abc.abstractmethod
72
+ async def stream_transform_changes(
73
+ self,
74
+ *,
75
+ extra: Optional[Mapping[str, Any]] = None,
76
+ timeout: Optional[float] = None,
77
+ ) -> AsyncGenerator[StreamTransformChangesResponse, None]:
78
+ """Stream changes to world state transforms.
79
+
80
+ ::
81
+
82
+ worldstatestore = WorldStateStoreClient.from_robot(robot=machine, name="builtin")
83
+
84
+ async for change in worldstatestore.stream_transform_changes():
85
+ print(f"Transform {change.transform.uuid} {change.change_type}")
86
+
87
+ Returns:
88
+ AsyncGenerator[StreamTransformChangesResponse, None]: A stream of transform changes
89
+ """
90
+ ...