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
@@ -9,7 +9,7 @@ __all__ = [
9
9
  "Generic",
10
10
  ]
11
11
 
12
- Registry.register_subtype(
12
+ Registry.register_api(
13
13
  ResourceRegistration(
14
14
  Generic,
15
15
  GenericRPCService,
@@ -1,12 +1,12 @@
1
- from typing import Any, Mapping, Optional
1
+ from typing import Any, Dict, List, Mapping, Optional
2
2
 
3
3
  from grpclib import GRPCError, Status
4
4
  from grpclib.client import Channel
5
5
 
6
- from viam.proto.common import DoCommandRequest, DoCommandResponse
6
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry
7
7
  from viam.proto.component.generic import GenericServiceStub
8
- from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
9
- from viam.utils import ValueTypes, dict_to_struct, struct_to_dict
8
+ from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase, ResourceRPCClientBase
9
+ from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
10
10
 
11
11
  from .generic import Generic
12
12
 
@@ -17,13 +17,21 @@ class GenericClient(Generic, ReconfigurableResourceRPCClientBase):
17
17
  """
18
18
 
19
19
  def __init__(self, name: str, channel: Channel):
20
+ self.channel = channel
20
21
  self.client = GenericServiceStub(channel)
21
22
  super().__init__(name)
22
23
 
23
- async def do_command(self, command: Mapping[str, Any], *, timeout: Optional[float] = None) -> Mapping[str, Any]:
24
+ async def do_command(
25
+ self,
26
+ command: Mapping[str, Any],
27
+ *,
28
+ timeout: Optional[float] = None,
29
+ **kwargs,
30
+ ) -> Mapping[str, Any]:
31
+ md = kwargs.get("metadata", self.Metadata()).proto
24
32
  request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
25
33
  try:
26
- response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
34
+ response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
27
35
  except GRPCError as e:
28
36
  if e.status == Status.UNIMPLEMENTED:
29
37
  raise NotImplementedError()
@@ -31,9 +39,13 @@ class GenericClient(Generic, ReconfigurableResourceRPCClientBase):
31
39
 
32
40
  return struct_to_dict(response.result)
33
41
 
42
+ async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
43
+ md = kwargs.get("metadata", self.Metadata())
44
+ return await get_geometries(self.client, self.name, extra, timeout, md)
45
+
34
46
 
35
47
  async def do_command(
36
- channel: Channel, name: str, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None
48
+ channel: Channel, name: str, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None, **kwargs
37
49
  ) -> Mapping[str, ValueTypes]:
38
50
  """Convenience method to allow component clients to execute ``do_command`` functions
39
51
 
@@ -45,5 +57,6 @@ async def do_command(
45
57
  Returns:
46
58
  Dict[str, Any]: The result of the executed command
47
59
  """
60
+ md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
48
61
  client = GenericClient(name, channel)
49
- return await client.do_command(command, timeout=timeout)
62
+ return await client.do_command(command, timeout=timeout, metadata=md)
@@ -1,6 +1,6 @@
1
1
  from typing import Final
2
2
 
3
- from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, Subtype
3
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
4
4
 
5
5
  from ..component_base import ComponentBase
6
6
 
@@ -15,6 +15,10 @@ class Generic(ComponentBase):
15
15
  To create a Generic component (an arbitrary component that can process commands), this ``Generic`` component should be subclassed
16
16
  and the ``do_command`` function implemented.
17
17
 
18
+ ::
19
+
20
+ from viam.components.generic import Generic
21
+
18
22
  Example::
19
23
 
20
24
  class ComplexComponent(Generic):
@@ -63,6 +67,10 @@ class Generic(ComponentBase):
63
67
  component.power # 1
64
68
  await asyncio.sleep(10)
65
69
  component.power # 0
70
+
71
+ For more information, see `Gantry component <https://docs.viam.com/dev/reference/apis/components/generic/>`_.
66
72
  """
67
73
 
68
- SUBTYPE: Final = Subtype(RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "generic")
74
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
75
+ RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "generic"
76
+ )
@@ -2,8 +2,7 @@ from grpclib import GRPCError, Status
2
2
  from grpclib.server import Stream
3
3
 
4
4
  from viam.components.component_base import ComponentBase
5
- from viam.errors import ResourceNotFoundError
6
- from viam.proto.common import DoCommandRequest, DoCommandResponse
5
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse
7
6
  from viam.proto.component.generic import GenericServiceBase
8
7
  from viam.resource.rpc_service_base import ResourceRPCServiceBase
9
8
  from viam.utils import dict_to_struct, struct_to_dict
@@ -11,7 +10,7 @@ from viam.utils import dict_to_struct, struct_to_dict
11
10
  # from .generic import Generic
12
11
 
13
12
 
14
- class GenericRPCService(GenericServiceBase, ResourceRPCServiceBase[ComponentBase]):
13
+ class GenericRPCService(GenericServiceBase, ResourceRPCServiceBase):
15
14
  """
16
15
  gRPC Service for a Generic component
17
16
  """
@@ -22,10 +21,7 @@ class GenericRPCService(GenericServiceBase, ResourceRPCServiceBase[ComponentBase
22
21
  request = await stream.recv_message()
23
22
  assert request is not None
24
23
  name = request.name
25
- try:
26
- component = self.get_resource(name)
27
- except ResourceNotFoundError as e:
28
- raise e.grpc_error
24
+ component = self.get_resource(name)
29
25
  try:
30
26
  timeout = stream.deadline.time_remaining() if stream.deadline else None
31
27
  result = await component.do_command(struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
@@ -33,3 +29,12 @@ class GenericRPCService(GenericServiceBase, ResourceRPCServiceBase[ComponentBase
33
29
  raise GRPCError(Status.UNIMPLEMENTED, f"``DO`` command is unimplemented for component named: {name}")
34
30
  response = DoCommandResponse(result=dict_to_struct(result))
35
31
  await stream.send_message(response)
32
+
33
+ async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
34
+ request = await stream.recv_message()
35
+ assert request is not None
36
+ component = self.get_resource(request.name)
37
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
38
+ geometries = await component.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
39
+ response = GetGeometriesResponse(geometries=geometries)
40
+ await stream.send_message(response)
@@ -1,8 +1,5 @@
1
- from viam.components.gantry.gantry import Gantry
2
- from viam.proto.common import ActuatorStatus
3
- from viam.proto.robot import Status
1
+ from viam.proto.common import KinematicsFileFormat
4
2
  from viam.resource.registry import Registry, ResourceRegistration
5
- from viam.utils import message_to_struct
6
3
 
7
4
  from .client import GripperClient
8
5
  from .gripper import Gripper
@@ -10,14 +7,7 @@ from .service import GripperRPCService
10
7
 
11
8
  __all__ = [
12
9
  "Gripper",
10
+ "KinematicsFileFormat",
13
11
  ]
14
12
 
15
-
16
- async def create_status(component: Gripper) -> Status:
17
- s = ActuatorStatus(is_moving=await component.is_moving())
18
- return Status(name=Gripper.get_resource_name(component.name), status=message_to_struct(s))
19
-
20
-
21
- Registry.register_subtype(
22
- ResourceRegistration(Gripper, GripperRPCService, lambda name, channel: GripperClient(name, channel), create_status)
23
- )
13
+ Registry.register_api(ResourceRegistration(Gripper, GripperRPCService, lambda name, channel: GripperClient(name, channel)))
@@ -1,20 +1,23 @@
1
- from typing import Any, Dict, Mapping, Optional
1
+ from typing import Any, Dict, List, Mapping, Optional, Tuple
2
2
 
3
3
  from grpclib.client import Channel
4
4
 
5
- from viam.proto.common import DoCommandRequest, DoCommandResponse
5
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetKinematicsRequest, GetKinematicsResponse
6
6
  from viam.proto.component.gripper import (
7
7
  GrabRequest,
8
8
  GrabResponse,
9
9
  GripperServiceStub,
10
+ IsHoldingSomethingRequest,
11
+ IsHoldingSomethingResponse,
10
12
  IsMovingRequest,
11
13
  IsMovingResponse,
12
14
  OpenRequest,
13
15
  StopRequest,
14
16
  )
15
17
  from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
16
- from viam.utils import ValueTypes, dict_to_struct, struct_to_dict
18
+ from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
17
19
 
20
+ from . import KinematicsFileFormat
18
21
  from .gripper import Gripper
19
22
 
20
23
 
@@ -28,33 +31,78 @@ class GripperClient(Gripper, ReconfigurableResourceRPCClientBase):
28
31
  self.client = GripperServiceStub(channel)
29
32
  super().__init__(name)
30
33
 
31
- async def open(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None):
32
- if extra is None:
33
- extra = {}
34
+ async def open(
35
+ self,
36
+ *,
37
+ extra: Optional[Dict[str, Any]] = None,
38
+ timeout: Optional[float] = None,
39
+ **kwargs,
40
+ ):
41
+ md = kwargs.get("metadata", self.Metadata()).proto
34
42
  request = OpenRequest(name=self.name, extra=dict_to_struct(extra))
35
- await self.client.Open(request, timeout=timeout)
43
+ await self.client.Open(request, timeout=timeout, metadata=md)
36
44
 
37
- async def grab(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> bool:
38
- if extra is None:
39
- extra = {}
45
+ async def grab(
46
+ self,
47
+ *,
48
+ extra: Optional[Dict[str, Any]] = None,
49
+ timeout: Optional[float] = None,
50
+ **kwargs,
51
+ ) -> bool:
52
+ md = kwargs.get("metadata", self.Metadata()).proto
40
53
  request = GrabRequest(name=self.name, extra=dict_to_struct(extra))
41
- response: GrabResponse = await self.client.Grab(request, timeout=timeout)
54
+ response: GrabResponse = await self.client.Grab(request, timeout=timeout, metadata=md)
42
55
  return response.success
43
56
 
44
- async def stop(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None):
45
- if extra is None:
46
- extra = {}
57
+ async def stop(
58
+ self,
59
+ *,
60
+ extra: Optional[Dict[str, Any]] = None,
61
+ timeout: Optional[float] = None,
62
+ **kwargs,
63
+ ):
64
+ md = kwargs.get("metadata", self.Metadata()).proto
47
65
  request = StopRequest(name=self.name, extra=dict_to_struct(extra))
48
- await self.client.Stop(request, timeout=timeout)
66
+ await self.client.Stop(request, timeout=timeout, metadata=md)
49
67
 
50
- async def is_moving(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> bool:
51
- if extra is None:
52
- extra = {}
68
+ async def is_holding_something(
69
+ self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs
70
+ ) -> Gripper.HoldingStatus:
71
+ md = kwargs.get("metadata", self.Metadata()).proto
72
+ request = IsHoldingSomethingRequest(name=self.name, extra=dict_to_struct(extra))
73
+ response: IsHoldingSomethingResponse = await self.client.IsHoldingSomething(request, timeout=timeout, metadata=md)
74
+ return Gripper.HoldingStatus(response.is_holding_something, meta=struct_to_dict(response.meta))
75
+
76
+ async def is_moving(self, *, timeout: Optional[float] = None, **kwargs) -> bool:
77
+ md = kwargs.get("metadata", self.Metadata()).proto
53
78
  request = IsMovingRequest(name=self.name)
54
- response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout)
79
+ response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout, metadata=md)
55
80
  return response.is_moving
56
81
 
57
- async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None) -> Mapping[str, ValueTypes]:
82
+ async def do_command(
83
+ self,
84
+ command: Mapping[str, ValueTypes],
85
+ *,
86
+ timeout: Optional[float] = None,
87
+ **kwargs,
88
+ ) -> Mapping[str, ValueTypes]:
89
+ md = kwargs.get("metadata", self.Metadata()).proto
58
90
  request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
59
- response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
91
+ response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
60
92
  return struct_to_dict(response.result)
93
+
94
+ async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
95
+ md = kwargs.get("metadata", self.Metadata())
96
+ return await get_geometries(self.client, self.name, extra, timeout, md)
97
+
98
+ async def get_kinematics(
99
+ self,
100
+ *,
101
+ extra: Optional[Dict[str, Any]] = None,
102
+ timeout: Optional[float] = None,
103
+ **kwargs,
104
+ ) -> Tuple[KinematicsFileFormat.ValueType, bytes]:
105
+ md = kwargs.get("metadata", self.Metadata()).proto
106
+ request = GetKinematicsRequest(name=self.name, extra=dict_to_struct(extra))
107
+ response: GetKinematicsResponse = await self.client.GetKinematics(request, timeout=timeout, metadata=md)
108
+ return (response.format, response.kinematics_data)
@@ -1,8 +1,11 @@
1
1
  import abc
2
- from typing import Any, Dict, Final, Optional
2
+ from dataclasses import dataclass
3
+ from typing import Any, Dict, Final, Optional, Tuple
3
4
 
4
5
  from viam.components.component_base import ComponentBase
5
- from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, Subtype
6
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
7
+
8
+ from . import KinematicsFileFormat
6
9
 
7
10
 
8
11
  class Gripper(ComponentBase):
@@ -12,9 +15,28 @@ class Gripper(ComponentBase):
12
15
  This acts as an abstract base class for any drivers representing specific
13
16
  gripper implementations. This cannot be used on its own. If the ``__init__()`` function is
14
17
  overridden, it must call the ``super().__init__()`` function.
18
+
19
+ ::
20
+
21
+ from viam.components.gripper import Gripper
22
+
23
+ For more information, see `Gripper component <https://docs.viam.com/dev/reference/apis/components/gripper/>`_.
15
24
  """
16
25
 
17
- SUBTYPE: Final = Subtype(RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "gripper")
26
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
27
+ RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "gripper"
28
+ )
29
+
30
+ @dataclass
31
+ class HoldingStatus:
32
+ """
33
+ HoldingStatus represents whether the gripper is currently holding onto an object. The
34
+ additional ``meta`` attribute contains other optional contextual information (i.e. confidence
35
+ interval, pressure, etc.)
36
+ """
37
+
38
+ is_holding_something: bool
39
+ meta: Optional[Dict[str, Any]] = None
18
40
 
19
41
  @abc.abstractmethod
20
42
  async def open(
@@ -26,6 +48,15 @@ class Gripper(ComponentBase):
26
48
  ):
27
49
  """
28
50
  Open the gripper.
51
+
52
+ ::
53
+
54
+ my_gripper = Gripper.from_robot(robot=machine, name="my_gripper")
55
+
56
+ # Open the gripper.
57
+ await my_gripper.open()
58
+
59
+ For more information, see `Gripper component <https://docs.viam.com/dev/reference/apis/components/gripper/#open>`_.
29
60
  """
30
61
  ...
31
62
 
@@ -40,11 +71,47 @@ class Gripper(ComponentBase):
40
71
  """
41
72
  Instruct the gripper to grab.
42
73
 
74
+ ::
75
+
76
+ my_gripper = Gripper.from_robot(robot=machine, name="my_gripper")
77
+
78
+ # Grab with the gripper.
79
+ grabbed = await my_gripper.grab()
80
+
43
81
  Returns:
44
82
  bool: Indicates if the gripper grabbed something.
83
+
84
+ For more information, see `Gripper component <https://docs.viam.com/dev/reference/apis/components/gripper/#grab>`_.
45
85
  """
46
86
  ...
47
87
 
88
+ @abc.abstractmethod
89
+ async def is_holding_something(
90
+ self,
91
+ *,
92
+ extra: Optional[Dict[str, Any]] = None,
93
+ timeout: Optional[float] = None,
94
+ **kwargs,
95
+ ) -> HoldingStatus:
96
+ """
97
+ Get information about whether the gripper is currently holding onto an object.
98
+
99
+ ::
100
+
101
+ my_gripper = Gripper.from_robot(robot=machine, name="my_gripper")
102
+
103
+ # Grab with the gripper.
104
+ holding_status = await my_gripper.is_holding_something()
105
+ # get the boolean result
106
+ is_holding_something = holding_status.is_holding_something
107
+
108
+ Returns:
109
+ HoldingStatus: see documentation on `HoldingStatus` for more information
110
+
111
+ For more information, see `Gripper component <https://docs.viam.com/dev/reference/apis/components/gripper/#grab>`_.
112
+
113
+ """
114
+
48
115
  @abc.abstractmethod
49
116
  async def stop(
50
117
  self,
@@ -55,6 +122,15 @@ class Gripper(ComponentBase):
55
122
  ):
56
123
  """
57
124
  Stop the gripper. It is assumed the gripper stops immediately.
125
+
126
+ ::
127
+
128
+ my_gripper = Gripper.from_robot(robot=machine, name="my_gripper")
129
+
130
+ # Stop the gripper.
131
+ await my_gripper.stop()
132
+
133
+ For more information, see `Gripper component <https://docs.viam.com/dev/reference/apis/components/gripper/#stop>`_.
58
134
  """
59
135
  ...
60
136
 
@@ -63,7 +139,51 @@ class Gripper(ComponentBase):
63
139
  """
64
140
  Get if the gripper is currently moving.
65
141
 
142
+ ::
143
+
144
+ my_gripper = Gripper.from_robot(robot=machine, name="my_gripper")
145
+
146
+ # Check whether the gripper is currently moving.
147
+ moving = await my_gripper.is_moving()
148
+ print('Moving:', moving)
149
+
66
150
  Returns:
67
151
  bool: Whether the gripper is moving.
152
+
153
+ For more information, see `Gripper component <https://docs.viam.com/dev/reference/apis/components/gripper/#is_moving>`_.
154
+ """
155
+ ...
156
+
157
+ @abc.abstractmethod
158
+ async def get_kinematics(
159
+ self,
160
+ *,
161
+ extra: Optional[Dict[str, Any]] = None,
162
+ timeout: Optional[float] = None,
163
+ **kwargs,
164
+ ) -> Tuple[KinematicsFileFormat.ValueType, bytes]:
165
+ """
166
+ Get the kinematics information associated with the gripper.
167
+
168
+ ::
169
+
170
+ my_gripper = Gripper.from_robot(robot=machine, name="my_gripper")
171
+
172
+ # Get the kinematics information associated with the gripper.
173
+ kinematics = await my_gripper.get_kinematics()
174
+
175
+ # Get the format of the kinematics file.
176
+ k_file = kinematics[0]
177
+
178
+ # Get the byte contents of the file.
179
+ k_bytes = kinematics[1]
180
+
181
+ Returns:
182
+ Tuple[KinematicsFileFormat.ValueType, bytes]: A tuple containing two values; the first [0] value represents the format of the
183
+ file, either in URDF format (``KinematicsFileFormat.KINEMATICS_FILE_FORMAT_URDF``) or
184
+ Viam's kinematic parameter format (spatial vector algebra) (``KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA``),
185
+ and the second [1] value represents the byte contents of the file.
186
+
187
+ For more information, see `Gripper component <https://docs.viam.com/dev/reference/apis/components/gripper/#getkinematics>`_.
68
188
  """
69
189
  ...
@@ -1,11 +1,19 @@
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 (
4
+ DoCommandRequest,
5
+ DoCommandResponse,
6
+ GetGeometriesRequest,
7
+ GetGeometriesResponse,
8
+ GetKinematicsRequest,
9
+ GetKinematicsResponse,
10
+ )
5
11
  from viam.proto.component.gripper import (
6
12
  GrabRequest,
7
13
  GrabResponse,
8
14
  GripperServiceBase,
15
+ IsHoldingSomethingRequest,
16
+ IsHoldingSomethingResponse,
9
17
  IsMovingRequest,
10
18
  IsMovingResponse,
11
19
  OpenRequest,
@@ -30,10 +38,7 @@ class GripperRPCService(GripperServiceBase, ResourceRPCServiceBase[Gripper]):
30
38
  request = await stream.recv_message()
31
39
  assert request is not None
32
40
  name = request.name
33
- try:
34
- gripper = self.get_resource(name)
35
- except ResourceNotFoundError as e:
36
- raise e.grpc_error
41
+ gripper = self.get_resource(name)
37
42
  timeout = stream.deadline.time_remaining() if stream.deadline else None
38
43
  await gripper.open(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
39
44
  response = OpenResponse()
@@ -43,10 +48,7 @@ class GripperRPCService(GripperServiceBase, ResourceRPCServiceBase[Gripper]):
43
48
  request = await stream.recv_message()
44
49
  assert request is not None
45
50
  name = request.name
46
- try:
47
- gripper = self.get_resource(name)
48
- except ResourceNotFoundError as e:
49
- raise e.grpc_error
51
+ gripper = self.get_resource(name)
50
52
  timeout = stream.deadline.time_remaining() if stream.deadline else None
51
53
  grabbed = await gripper.grab(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
52
54
  response = GrabResponse(success=grabbed)
@@ -55,10 +57,7 @@ class GripperRPCService(GripperServiceBase, ResourceRPCServiceBase[Gripper]):
55
57
  async def Stop(self, stream: Stream[StopRequest, StopResponse]) -> None:
56
58
  request = await stream.recv_message()
57
59
  assert request is not None
58
- try:
59
- gripper = self.get_resource(request.name)
60
- except ResourceNotFoundError as e:
61
- raise e.grpc_error
60
+ gripper = self.get_resource(request.name)
62
61
  timeout = stream.deadline.time_remaining() if stream.deadline else None
63
62
  await gripper.stop(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
64
63
  await stream.send_message(StopResponse())
@@ -67,22 +66,45 @@ class GripperRPCService(GripperServiceBase, ResourceRPCServiceBase[Gripper]):
67
66
  request = await stream.recv_message()
68
67
  assert request is not None
69
68
  name = request.name
70
- try:
71
- gripper = self.get_resource(name)
72
- except ResourceNotFoundError as e:
73
- raise e.grpc_error
69
+ gripper = self.get_resource(name)
74
70
  is_moving = await gripper.is_moving()
75
71
  response = IsMovingResponse(is_moving=is_moving)
76
72
  await stream.send_message(response)
77
73
 
74
+ async def IsHoldingSomething(self, stream: Stream[IsHoldingSomethingRequest, IsHoldingSomethingResponse]) -> None:
75
+ request = await stream.recv_message()
76
+ assert request is not None
77
+ name = request.name
78
+ gripper = self.get_resource(name)
79
+ holding_status = await gripper.is_holding_something()
80
+ response = IsHoldingSomethingResponse(
81
+ is_holding_something=holding_status.is_holding_something, meta=dict_to_struct(holding_status.meta)
82
+ )
83
+ await stream.send_message(response)
84
+
78
85
  async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
79
86
  request = await stream.recv_message()
80
87
  assert request is not None
81
- try:
82
- gripper = self.get_resource(request.name)
83
- except ResourceNotFoundError as e:
84
- raise e.grpc_error
88
+ gripper = self.get_resource(request.name)
85
89
  timeout = stream.deadline.time_remaining() if stream.deadline else None
86
90
  result = await gripper.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
87
91
  response = DoCommandResponse(result=dict_to_struct(result))
88
92
  await stream.send_message(response)
93
+
94
+ async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
95
+ request = await stream.recv_message()
96
+ assert request is not None
97
+ gripper = self.get_resource(request.name)
98
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
99
+ geometries = await gripper.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
100
+ response = GetGeometriesResponse(geometries=geometries)
101
+ await stream.send_message(response)
102
+
103
+ async def GetKinematics(self, stream: Stream[GetKinematicsRequest, GetKinematicsResponse]) -> None:
104
+ request = await stream.recv_message()
105
+ assert request is not None
106
+ gripper = self.get_resource(request.name)
107
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
108
+ format, kinematics_data = await gripper.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout)
109
+ response = GetKinematicsResponse(format=format, kinematics_data=kinematics_data)
110
+ await stream.send_message(response)
@@ -1,7 +1,4 @@
1
- from viam.proto.component.inputcontroller import Status as InputStatus
2
- from viam.proto.robot import Status
3
1
  from viam.resource.registry import Registry, ResourceRegistration
4
- from viam.utils import message_to_struct
5
2
 
6
3
  from .client import ControllerClient
7
4
  from .input import Control, ControlFunction, Controller, Event, EventType
@@ -15,14 +12,4 @@ __all__ = [
15
12
  "EventType",
16
13
  ]
17
14
 
18
-
19
- async def create_status(component: Controller) -> Status:
20
- return Status(
21
- name=Controller.get_resource_name(component.name),
22
- status=message_to_struct(InputStatus(events=[event.proto for event in (await component.get_events()).values()])),
23
- )
24
-
25
-
26
- Registry.register_subtype(
27
- ResourceRegistration(Controller, InputControllerRPCService, lambda name, channel: ControllerClient(name, channel), create_status)
28
- )
15
+ Registry.register_api(ResourceRegistration(Controller, InputControllerRPCService, lambda name, channel: ControllerClient(name, channel)))