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
@@ -1,27 +1,41 @@
1
1
  import abc
2
- import asyncio
2
+ import sys
3
3
  from dataclasses import dataclass
4
- from typing import Any, Dict, Final, List, Mapping, Optional, Tuple
4
+ from typing import Any, Dict, Final, Mapping, Optional, Tuple
5
5
 
6
- from grpclib import GRPCError
7
6
  from typing_extensions import Self
8
7
 
9
- from viam.errors import MethodNotImplementedError, NotSupportedError
10
- from viam.proto.component.movementsensor import GetPropertiesResponse
11
- from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, Subtype
8
+ from viam.components.component_base import ComponentBase
9
+ from viam.proto.component.movementsensor import GetAccuracyResponse, GetPropertiesResponse
10
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
11
+ from viam.utils import SensorReading
12
12
 
13
- from ..sensor import Sensor
14
13
  from . import GeoPoint, Orientation, Vector3
15
14
 
15
+ if sys.version_info >= (3, 10):
16
+ from typing import TypeAlias
17
+ else:
18
+ from typing_extensions import TypeAlias
16
19
 
17
- class MovementSensor(Sensor):
20
+
21
+ class MovementSensor(ComponentBase):
18
22
  """MovementSensor reports information about the robot's direction, position and speed.
19
23
 
20
24
  This acts as an abstract base class for any sensors that can provide data regarding the robot's direction, position, and speed.
21
25
  This cannot be used on its own. If the ``__init__()`` function is overridden, it must call the ``super().__init__()`` function.
26
+
27
+ ::
28
+
29
+ from viam.components.movement_sensor import MovementSensor
30
+
31
+ For more information, see `Movement Sensor component <https://docs.viam.com/dev/reference/apis/components/movement-sensor/>`_.
22
32
  """
23
33
 
24
- SUBTYPE: Final = Subtype(RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "movement_sensor")
34
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
35
+ RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "movement_sensor"
36
+ )
37
+
38
+ Accuracy: "TypeAlias" = GetAccuracyResponse
25
39
 
26
40
  @dataclass
27
41
  class Properties:
@@ -35,12 +49,12 @@ class MovementSensor(Sensor):
35
49
  @property
36
50
  def proto(self) -> GetPropertiesResponse:
37
51
  return GetPropertiesResponse(
38
- linear_acceleration_supported=self.linear_velocity_supported,
52
+ linear_acceleration_supported=self.linear_acceleration_supported,
39
53
  angular_velocity_supported=self.angular_velocity_supported,
40
54
  orientation_supported=self.orientation_supported,
41
55
  position_supported=self.position_supported,
42
56
  compass_heading_supported=self.compass_heading_supported,
43
- linear_velocity_supported=self.linear_acceleration_supported,
57
+ linear_velocity_supported=self.linear_velocity_supported,
44
58
  )
45
59
 
46
60
  @classmethod
@@ -51,7 +65,7 @@ class MovementSensor(Sensor):
51
65
  orientation_supported=proto.orientation_supported,
52
66
  position_supported=proto.position_supported,
53
67
  compass_heading_supported=proto.compass_heading_supported,
54
- linear_velocity_supported=proto.linear_acceleration_supported,
68
+ linear_velocity_supported=proto.linear_velocity_supported,
55
69
  )
56
70
 
57
71
  @abc.abstractmethod
@@ -60,8 +74,19 @@ class MovementSensor(Sensor):
60
74
  ) -> Tuple[GeoPoint, float]:
61
75
  """Get the current GeoPoint (latitude, longitude) and altitude (m)
62
76
 
77
+ ::
78
+
79
+ my_movement_sensor = MovementSensor.from_robot(
80
+ robot=robot,
81
+ name="my_movement_sensor")
82
+
83
+ # Get the current position of the movement sensor.
84
+ position = await my_movement_sensor.get_position()
85
+
63
86
  Returns:
64
87
  Tuple[GeoPoint, float]: The current lat/long, along with the altitude in m
88
+
89
+ For more information, see `Movement Sensor component <https://docs.viam.com/dev/reference/apis/components/movement-sensor/#getposition>`_.
65
90
  """
66
91
  ...
67
92
 
@@ -69,8 +94,18 @@ class MovementSensor(Sensor):
69
94
  async def get_linear_velocity(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> Vector3:
70
95
  """Get the current linear velocity as a ``Vector3`` with x, y, and z axes represented in m/sec
71
96
 
97
+ ::
98
+
99
+ my_movement_sensor = MovementSensor.from_robot(
100
+ robot=robot, name="my_movement_sensor")
101
+
102
+ # Get the current linear velocity of the movement sensor.
103
+ lin_vel = await my_movement_sensor.get_linear_velocity()
104
+
72
105
  Returns:
73
106
  Vector3: The linear velocity in m/sec
107
+
108
+ For more information, see `Movement Sensor component <https://docs.viam.com/dev/reference/apis/components/movement-sensor/#getlinearvelocity>`_.
74
109
  """
75
110
  ...
76
111
 
@@ -78,8 +113,21 @@ class MovementSensor(Sensor):
78
113
  async def get_angular_velocity(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> Vector3:
79
114
  """Get the current angular velocity as a ``Vector3`` with x, y, and z axes represented in degrees/sec
80
115
 
116
+ ::
117
+
118
+ my_movement_sensor = MovementSensor.from_robot(
119
+ robot=robot, name="my_movement_sensor")
120
+
121
+ # Get the current angular velocity of the movement sensor.
122
+ ang_vel = await my_movement_sensor.get_angular_velocity()
123
+
124
+ # Get the y component of angular velocity.
125
+ y_ang_vel = ang_vel.y
126
+
81
127
  Returns:
82
128
  Vector3: The angular velocity in degrees/sec
129
+
130
+ For more information, see `Movement Sensor component <https://docs.viam.com/dev/reference/apis/components/movement-sensor/#getangularvelocity>`_.
83
131
  """
84
132
  ...
85
133
 
@@ -89,8 +137,21 @@ class MovementSensor(Sensor):
89
137
  ) -> Vector3:
90
138
  """Get the current linear acceleration as a ``Vector3`` with x, y, and z axes represented in m/sec^2
91
139
 
140
+ ::
141
+
142
+ my_movement_sensor = MovementSensor.from_robot(
143
+ robot=robot, name="my_movement_sensor")
144
+
145
+ # Get the current linear acceleration of the movement sensor.
146
+ lin_accel = await my_movement_sensor.get_linear_acceleration()
147
+
148
+ # Get the x component of linear acceleration.
149
+ x_lin_accel = lin_accel.x
150
+
92
151
  Returns:
93
152
  Vector3: The linear acceleration in m/sec^2
153
+
154
+ For more information, see `Movement Sensor component <https://docs.viam.com/dev/reference/apis/components/movement-sensor/#getlinearacceleration>`_.
94
155
  """
95
156
  ...
96
157
 
@@ -98,8 +159,18 @@ class MovementSensor(Sensor):
98
159
  async def get_compass_heading(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> float:
99
160
  """Get the current compass heading in degrees
100
161
 
162
+ ::
163
+
164
+ my_movement_sensor = MovementSensor.from_robot(
165
+ robot=robot, name="my_movement_sensor")
166
+
167
+ # Get the current compass heading of the movement sensor.
168
+ heading = await my_movement_sensor.get_compass_heading()
169
+
101
170
  Returns:
102
171
  float: The compass heading in degrees
172
+
173
+ For more information, see `Movement Sensor component <https://docs.viam.com/dev/reference/apis/components/movement-sensor/#getcompassheading>`_.
103
174
  """
104
175
  ...
105
176
 
@@ -107,8 +178,18 @@ class MovementSensor(Sensor):
107
178
  async def get_orientation(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> Orientation:
108
179
  """Get the current orientation
109
180
 
181
+ ::
182
+
183
+ my_movement_sensor = MovementSensor.from_robot(
184
+ robot=robot, name="my_movement_sensor")
185
+
186
+ # Get the current orientation vector of the movement sensor.
187
+ orientation = await my_movement_sensor.get_orientation()
188
+
110
189
  Returns:
111
190
  Orientation: The orientation
191
+
192
+ For more information, see `Movement Sensor component <https://docs.viam.com/dev/reference/apis/components/movement-sensor/#getorientation>`_.
112
193
  """
113
194
  ...
114
195
 
@@ -116,69 +197,57 @@ class MovementSensor(Sensor):
116
197
  async def get_properties(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> Properties:
117
198
  """Get the supported properties of this sensor
118
199
 
200
+ ::
201
+
202
+ my_movement_sensor = MovementSensor.from_robot(
203
+ robot=robot, name="my_movement_sensor")
204
+
205
+ # Get the supported properties of the movement sensor.
206
+ properties = await my_movement_sensor.get_properties()
207
+
119
208
  Returns:
120
209
  MovementSensor.Properties: The properties
210
+
211
+ For more information, see `Movement Sensor component <https://docs.viam.com/dev/reference/apis/components/movement-sensor/#getproperties>`_.
121
212
  """
122
213
  ...
123
214
 
124
215
  @abc.abstractmethod
125
- async def get_accuracy(
126
- self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs
127
- ) -> Mapping[str, float]:
216
+ async def get_accuracy(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> Accuracy:
128
217
  """Get the accuracy of the various sensors
129
218
 
219
+ ::
220
+
221
+ my_movement_sensor = MovementSensor.from_robot(
222
+ robot=robot, name="my_movement_sensor")
223
+
224
+ # Get the accuracy of the movement sensor.
225
+ accuracy = await my_movement_sensor.get_accuracy()
226
+
130
227
  Returns:
131
- Dict[str, float]: The accuracy
228
+ MovementSensor.Accuracy: The accuracies of the movement sensor
229
+
230
+ For more information, see `Movement Sensor component <https://docs.viam.com/dev/reference/apis/components/movement-sensor/#getaccuracy>`_.
132
231
  """
133
232
  ...
134
233
 
135
- async def get_readings(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> Mapping[str, Any]:
234
+ async def get_readings(
235
+ self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs
236
+ ) -> Mapping[str, SensorReading]:
136
237
  """Obtain the measurements/data specific to this sensor.
137
238
  If a sensor is not configured to have a measurement or fails to read a piece of data, it will not appear in the readings dictionary.
138
239
 
240
+ ::
241
+
242
+ my_movement_sensor = MovementSensor.from_robot(
243
+ robot=robot, name="my_movement_sensor")
244
+
245
+ # Get the latest readings from the movement sensor.
246
+ readings = await my_movement_sensor.get_readings()
247
+
139
248
  Returns:
140
- Mapping[str, Any]: The readings for the MovementSensor:
141
- {
142
- position: GeoPoint,
143
- altitude: float,
144
- linear_velocity: Vector3,
145
- angular_velocity: Vector3,
146
- linear_acceleration: Vector3,
147
- compass: float,
148
- orientation: Orientation,
149
- }
249
+ Mapping[str, Any]: The readings for the MovementSensor. Can be of any type.
250
+
251
+ For more information, see `Movement Sensor component <https://docs.viam.com/dev/reference/apis/components/movement-sensor/#getreadings>`_.
150
252
  """
151
- (pos, lv, av, la, comp, orient) = await asyncio.gather(
152
- self.get_position(extra=extra, timeout=timeout),
153
- self.get_linear_velocity(extra=extra, timeout=timeout),
154
- self.get_angular_velocity(extra=extra, timeout=timeout),
155
- self.get_linear_acceleration(extra=extra, timeout=timeout),
156
- self.get_compass_heading(extra=extra, timeout=timeout),
157
- self.get_orientation(extra=extra, timeout=timeout),
158
- return_exceptions=True,
159
- )
160
-
161
- readings = {}
162
-
163
- # Add returned value to the readings dictionary if value is of expected type; omit if unimplemented.
164
- def add_reading(name: str, reading, returntype: List) -> None:
165
- possible_error_types = (NotImplementedError, MethodNotImplementedError, NotSupportedError)
166
- if type(reading) in returntype:
167
- if name == "position":
168
- readings["position"] = reading[0]
169
- readings["altitude"] = reading[1]
170
- else:
171
- readings[name] = reading
172
- return
173
- elif isinstance(reading, possible_error_types) or (isinstance(reading, GRPCError) and "Unimplemented" in str(reading.message)):
174
- return
175
- raise reading
176
-
177
- add_reading("position", pos, [tuple])
178
- add_reading("linear_velocity", lv, [Vector3])
179
- add_reading("angular_velocity", av, [Vector3])
180
- add_reading("linear_acceleration", la, [Vector3])
181
- add_reading("compass", comp, [float, int])
182
- add_reading("orientation", orient, [Orientation])
183
-
184
- return readings
253
+ ...
@@ -1,8 +1,14 @@
1
1
  from grpclib.server import Stream
2
2
 
3
3
  from viam.components.movement_sensor.movement_sensor import MovementSensor
4
- from viam.errors import ResourceNotFoundError
5
- from viam.proto.common import DoCommandRequest, DoCommandResponse
4
+ from viam.proto.common import (
5
+ DoCommandRequest,
6
+ DoCommandResponse,
7
+ GetGeometriesRequest,
8
+ GetGeometriesResponse,
9
+ GetReadingsRequest,
10
+ GetReadingsResponse,
11
+ )
6
12
  from viam.proto.component.movementsensor import (
7
13
  GetAccuracyRequest,
8
14
  GetAccuracyResponse,
@@ -23,7 +29,7 @@ from viam.proto.component.movementsensor import (
23
29
  MovementSensorServiceBase,
24
30
  )
25
31
  from viam.resource.rpc_service_base import ResourceRPCServiceBase
26
- from viam.utils import dict_to_struct, struct_to_dict
32
+ from viam.utils import dict_to_struct, sensor_readings_native_to_value, struct_to_dict
27
33
 
28
34
 
29
35
  class MovementSensorRPCService(MovementSensorServiceBase, ResourceRPCServiceBase[MovementSensor]):
@@ -37,10 +43,7 @@ class MovementSensorRPCService(MovementSensorServiceBase, ResourceRPCServiceBase
37
43
  request = await stream.recv_message()
38
44
  assert request is not None
39
45
  name = request.name
40
- try:
41
- sensor = self.get_resource(name)
42
- except ResourceNotFoundError as e:
43
- raise e.grpc_error
46
+ sensor = self.get_resource(name)
44
47
  timeout = stream.deadline.time_remaining() if stream.deadline else None
45
48
  velocity = await sensor.get_linear_velocity(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
46
49
  response = GetLinearVelocityResponse(linear_velocity=velocity)
@@ -50,10 +53,7 @@ class MovementSensorRPCService(MovementSensorServiceBase, ResourceRPCServiceBase
50
53
  request = await stream.recv_message()
51
54
  assert request is not None
52
55
  name = request.name
53
- try:
54
- sensor = self.get_resource(name)
55
- except ResourceNotFoundError as e:
56
- raise e.grpc_error
56
+ sensor = self.get_resource(name)
57
57
  timeout = stream.deadline.time_remaining() if stream.deadline else None
58
58
  velocity = await sensor.get_angular_velocity(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
59
59
  response = GetAngularVelocityResponse(angular_velocity=velocity)
@@ -63,10 +63,7 @@ class MovementSensorRPCService(MovementSensorServiceBase, ResourceRPCServiceBase
63
63
  request = await stream.recv_message()
64
64
  assert request is not None
65
65
  name = request.name
66
- try:
67
- sensor = self.get_resource(name)
68
- except ResourceNotFoundError as e:
69
- raise e.grpc_error
66
+ sensor = self.get_resource(name)
70
67
  timeout = stream.deadline.time_remaining() if stream.deadline else None
71
68
  acceleration = await sensor.get_linear_acceleration(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
72
69
  response = GetLinearAccelerationResponse(linear_acceleration=acceleration)
@@ -76,10 +73,7 @@ class MovementSensorRPCService(MovementSensorServiceBase, ResourceRPCServiceBase
76
73
  request = await stream.recv_message()
77
74
  assert request is not None
78
75
  name = request.name
79
- try:
80
- sensor = self.get_resource(name)
81
- except ResourceNotFoundError as e:
82
- raise e.grpc_error
76
+ sensor = self.get_resource(name)
83
77
  timeout = stream.deadline.time_remaining() if stream.deadline else None
84
78
  heading = await sensor.get_compass_heading(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
85
79
  response = GetCompassHeadingResponse(value=heading)
@@ -89,10 +83,7 @@ class MovementSensorRPCService(MovementSensorServiceBase, ResourceRPCServiceBase
89
83
  request = await stream.recv_message()
90
84
  assert request is not None
91
85
  name = request.name
92
- try:
93
- sensor = self.get_resource(name)
94
- except ResourceNotFoundError as e:
95
- raise e.grpc_error
86
+ sensor = self.get_resource(name)
96
87
  timeout = stream.deadline.time_remaining() if stream.deadline else None
97
88
  orientation = await sensor.get_orientation(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
98
89
  response = GetOrientationResponse(orientation=orientation)
@@ -102,10 +93,7 @@ class MovementSensorRPCService(MovementSensorServiceBase, ResourceRPCServiceBase
102
93
  request = await stream.recv_message()
103
94
  assert request is not None
104
95
  name = request.name
105
- try:
106
- sensor = self.get_resource(name)
107
- except ResourceNotFoundError as e:
108
- raise e.grpc_error
96
+ sensor = self.get_resource(name)
109
97
  timeout = stream.deadline.time_remaining() if stream.deadline else None
110
98
  point, alt = await sensor.get_position(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
111
99
  response = GetPositionResponse(coordinate=point, altitude_m=alt)
@@ -115,10 +103,7 @@ class MovementSensorRPCService(MovementSensorServiceBase, ResourceRPCServiceBase
115
103
  request = await stream.recv_message()
116
104
  assert request is not None
117
105
  name = request.name
118
- try:
119
- sensor = self.get_resource(name)
120
- except ResourceNotFoundError as e:
121
- raise e.grpc_error
106
+ sensor = self.get_resource(name)
122
107
  timeout = stream.deadline.time_remaining() if stream.deadline else None
123
108
  response = await sensor.get_properties(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
124
109
  await stream.send_message(response.proto)
@@ -127,23 +112,35 @@ class MovementSensorRPCService(MovementSensorServiceBase, ResourceRPCServiceBase
127
112
  request = await stream.recv_message()
128
113
  assert request is not None
129
114
  name = request.name
130
- try:
131
- sensor = self.get_resource(name)
132
- except ResourceNotFoundError as e:
133
- raise e.grpc_error
115
+ sensor = self.get_resource(name)
134
116
  timeout = stream.deadline.time_remaining() if stream.deadline else None
135
117
  accuracy = await sensor.get_accuracy(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
136
- response = GetAccuracyResponse(accuracy=accuracy)
137
- await stream.send_message(response)
118
+ await stream.send_message(accuracy)
138
119
 
139
120
  async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
140
121
  request = await stream.recv_message()
141
122
  assert request is not None
142
- try:
143
- sensor = self.get_resource(request.name)
144
- except ResourceNotFoundError as e:
145
- raise e.grpc_error
123
+ sensor = self.get_resource(request.name)
146
124
  timeout = stream.deadline.time_remaining() if stream.deadline else None
147
125
  result = await sensor.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
148
126
  response = DoCommandResponse(result=dict_to_struct(result))
149
127
  await stream.send_message(response)
128
+
129
+ async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
130
+ request = await stream.recv_message()
131
+ assert request is not None
132
+ sensor = self.get_resource(request.name)
133
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
134
+ geometries = await sensor.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
135
+ response = GetGeometriesResponse(geometries=geometries)
136
+ await stream.send_message(response)
137
+
138
+ async def GetReadings(self, stream: Stream[GetReadingsRequest, GetReadingsResponse]) -> None:
139
+ request = await stream.recv_message()
140
+ assert request is not None
141
+ name = request.name
142
+ sensor = self.get_resource(name)
143
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
144
+ readings = await sensor.get_readings(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
145
+ response = GetReadingsResponse(readings=sensor_readings_native_to_value(readings))
146
+ await stream.send_message(response)
@@ -8,7 +8,7 @@ __all__ = [
8
8
  "PoseTracker",
9
9
  ]
10
10
 
11
- Registry.register_subtype(
11
+ Registry.register_api(
12
12
  ResourceRegistration(
13
13
  PoseTracker,
14
14
  PoseTrackerRPCService,
@@ -2,10 +2,10 @@ from typing import Any, Dict, List, Mapping, Optional
2
2
 
3
3
  from grpclib.client import Channel
4
4
 
5
- from viam.proto.common import DoCommandRequest, DoCommandResponse, PoseInFrame
5
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, PoseInFrame
6
6
  from viam.proto.component.posetracker import GetPosesRequest, GetPosesResponse, PoseTrackerServiceStub
7
7
  from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
8
- from viam.utils import ValueTypes, dict_to_struct, struct_to_dict
8
+ from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
9
9
 
10
10
  from .pose_tracker import PoseTracker
11
11
 
@@ -26,14 +26,25 @@ class PoseTrackerClient(PoseTracker, ReconfigurableResourceRPCClientBase):
26
26
  *,
27
27
  extra: Optional[Mapping[str, Any]] = None,
28
28
  timeout: Optional[float] = None,
29
+ **kwargs,
29
30
  ) -> Dict[str, PoseInFrame]:
30
- if extra is None:
31
- extra = {}
31
+ md = kwargs.get("metadata", self.Metadata()).proto
32
32
  request = GetPosesRequest(name=self.name, body_names=body_names, extra=dict_to_struct(extra))
33
- response: GetPosesResponse = await self.client.GetPoses(request, timeout=timeout)
33
+ response: GetPosesResponse = await self.client.GetPoses(request, timeout=timeout, metadata=md)
34
34
  return {key: response.body_poses[key] for key in response.body_poses.keys()}
35
35
 
36
- async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None) -> Mapping[str, ValueTypes]:
36
+ async def do_command(
37
+ self,
38
+ command: Mapping[str, ValueTypes],
39
+ *,
40
+ timeout: Optional[float] = None,
41
+ **kwargs,
42
+ ) -> Mapping[str, ValueTypes]:
43
+ md = kwargs.get("metadata", self.Metadata()).proto
37
44
  request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
38
- response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
45
+ response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
39
46
  return struct_to_dict(response.result)
47
+
48
+ async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
49
+ md = kwargs.get("metadata", self.Metadata())
50
+ return await get_geometries(self.client, self.name, extra, timeout, md)
@@ -2,7 +2,7 @@ import abc
2
2
  from typing import Any, Dict, Final, List, Mapping, Optional
3
3
 
4
4
  from viam.proto.common import PoseInFrame
5
- from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, Subtype
5
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
6
6
 
7
7
  from ..component_base import ComponentBase
8
8
 
@@ -16,7 +16,9 @@ class PoseTracker(ComponentBase):
16
16
  overridden, it must call the ``super().__init__()`` function.
17
17
  """
18
18
 
19
- SUBTYPE: Final = Subtype(RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "pose_tracker")
19
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
20
+ RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "pose_tracker"
21
+ )
20
22
 
21
23
  @abc.abstractmethod
22
24
  async def get_poses(
@@ -1,7 +1,6 @@
1
1
  from grpclib.server import Stream
2
2
 
3
- from viam.errors import ResourceNotFoundError
4
- from viam.proto.common import DoCommandRequest, DoCommandResponse
3
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse
5
4
  from viam.proto.component.posetracker import GetPosesRequest, GetPosesResponse, PoseTrackerServiceBase
6
5
  from viam.resource.rpc_service_base import ResourceRPCServiceBase
7
6
  from viam.utils import dict_to_struct, struct_to_dict
@@ -20,10 +19,7 @@ class PoseTrackerRPCService(PoseTrackerServiceBase, ResourceRPCServiceBase[PoseT
20
19
  request = await stream.recv_message()
21
20
  assert request is not None
22
21
  name = request.name
23
- try:
24
- pose_tracker = self.get_resource(name)
25
- except ResourceNotFoundError as e:
26
- raise e.grpc_error
22
+ pose_tracker = self.get_resource(name)
27
23
  timeout = stream.deadline.time_remaining() if stream.deadline else None
28
24
  poses = await pose_tracker.get_poses(
29
25
  list(request.body_names), extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata
@@ -33,11 +29,17 @@ class PoseTrackerRPCService(PoseTrackerServiceBase, ResourceRPCServiceBase[PoseT
33
29
  async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
34
30
  request = await stream.recv_message()
35
31
  assert request is not None
36
- try:
37
- pose_tracker = self.get_resource(request.name)
38
- except ResourceNotFoundError as e:
39
- raise e.grpc_error
32
+ pose_tracker = self.get_resource(request.name)
40
33
  timeout = stream.deadline.time_remaining() if stream.deadline else None
41
34
  result = await pose_tracker.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
42
35
  response = DoCommandResponse(result=dict_to_struct(result))
43
36
  await stream.send_message(response)
37
+
38
+ async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
39
+ request = await stream.recv_message()
40
+ assert request is not None
41
+ pose_tracker = self.get_resource(request.name)
42
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
43
+ geometries = await pose_tracker.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
44
+ response = GetGeometriesResponse(geometries=geometries)
45
+ await stream.send_message(response)
@@ -0,0 +1,17 @@
1
+ from viam.resource.registry import Registry, ResourceRegistration
2
+
3
+ from .client import PowerSensorClient
4
+ from .power_sensor import PowerSensor
5
+ from .service import PowerSensorRPCService
6
+
7
+ __all__ = [
8
+ "PowerSensor",
9
+ ]
10
+
11
+ Registry.register_api(
12
+ ResourceRegistration(
13
+ PowerSensor,
14
+ PowerSensorRPCService,
15
+ lambda name, channel: PowerSensorClient(name, channel),
16
+ )
17
+ )
@@ -0,0 +1,86 @@
1
+ from typing import Any, Dict, Mapping, Optional, Tuple
2
+
3
+ from grpclib.client import Channel
4
+
5
+ from viam.components.power_sensor.power_sensor import PowerSensor
6
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, GetReadingsRequest, GetReadingsResponse
7
+ from viam.proto.component.powersensor import (
8
+ GetCurrentRequest,
9
+ GetCurrentResponse,
10
+ GetPowerRequest,
11
+ GetPowerResponse,
12
+ GetVoltageRequest,
13
+ GetVoltageResponse,
14
+ PowerSensorServiceStub,
15
+ )
16
+ from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
17
+ from viam.utils import SensorReading, ValueTypes, dict_to_struct, sensor_readings_value_to_native, struct_to_dict
18
+
19
+
20
+ class PowerSensorClient(PowerSensor, ReconfigurableResourceRPCClientBase):
21
+ """gRPC client for the PowerSensor component."""
22
+
23
+ def __init__(self, name: str, channel: Channel):
24
+ self.channel = channel
25
+ self.client = PowerSensorServiceStub(channel)
26
+ super().__init__(name)
27
+
28
+ async def get_voltage(
29
+ self,
30
+ *,
31
+ extra: Optional[Dict[str, Any]] = None,
32
+ timeout: Optional[float] = None,
33
+ **kwargs,
34
+ ) -> Tuple[float, bool]:
35
+ md = kwargs.get("metadata", self.Metadata()).proto
36
+ request = GetVoltageRequest(name=self.name, extra=dict_to_struct(extra))
37
+ response: GetVoltageResponse = await self.client.GetVoltage(request, timeout=timeout, metadata=md)
38
+ return response.volts, response.is_ac
39
+
40
+ async def get_current(
41
+ self,
42
+ *,
43
+ extra: Optional[Dict[str, Any]] = None,
44
+ timeout: Optional[float] = None,
45
+ **kwargs,
46
+ ) -> Tuple[float, bool]:
47
+ md = kwargs.get("metadata", self.Metadata()).proto
48
+ request = GetCurrentRequest(name=self.name, extra=dict_to_struct(extra))
49
+ response: GetCurrentResponse = await self.client.GetCurrent(request, timeout=timeout, metadata=md)
50
+ return response.amperes, response.is_ac
51
+
52
+ async def get_power(
53
+ self,
54
+ *,
55
+ extra: Optional[Dict[str, Any]] = None,
56
+ timeout: Optional[float] = None,
57
+ **kwargs,
58
+ ) -> float:
59
+ md = kwargs.get("metadata", self.Metadata()).proto
60
+ request = GetPowerRequest(name=self.name, extra=dict_to_struct(extra))
61
+ response: GetPowerResponse = await self.client.GetPower(request, timeout=timeout, metadata=md)
62
+ return response.watts
63
+
64
+ async def get_readings(
65
+ self,
66
+ *,
67
+ extra: Optional[Dict[str, Any]] = None,
68
+ timeout: Optional[float] = None,
69
+ **kwargs,
70
+ ) -> Mapping[str, SensorReading]:
71
+ md = kwargs.get("metadata", self.Metadata()).proto
72
+ request = GetReadingsRequest(name=self.name, extra=dict_to_struct(extra))
73
+ response: GetReadingsResponse = await self.client.GetReadings(request, timeout=timeout, metadata=md)
74
+ return sensor_readings_value_to_native(response.readings)
75
+
76
+ async def do_command(
77
+ self,
78
+ command: Mapping[str, ValueTypes],
79
+ *,
80
+ timeout: Optional[float] = None,
81
+ **kwargs,
82
+ ) -> Mapping[str, ValueTypes]:
83
+ md = kwargs.get("metadata", self.Metadata()).proto
84
+ request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
85
+ response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
86
+ return struct_to_dict(response.result)