viam-sdk 0.45.2__py3-none-win_amd64.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 (476) hide show
  1. viam/__init__.py +71 -0
  2. viam/app/__init__.py +0 -0
  3. viam/app/_logs.py +34 -0
  4. viam/app/app_client.py +2525 -0
  5. viam/app/billing_client.py +143 -0
  6. viam/app/data_client.py +1715 -0
  7. viam/app/ml_training_client.py +251 -0
  8. viam/app/provisioning_client.py +95 -0
  9. viam/app/viam_client.py +260 -0
  10. viam/components/__init__.py +0 -0
  11. viam/components/arm/__init__.py +16 -0
  12. viam/components/arm/arm.py +223 -0
  13. viam/components/arm/client.py +124 -0
  14. viam/components/arm/service.py +123 -0
  15. viam/components/audio_input/__init__.py +18 -0
  16. viam/components/audio_input/audio_input.py +81 -0
  17. viam/components/audio_input/client.py +70 -0
  18. viam/components/audio_input/service.py +114 -0
  19. viam/components/base/__init__.py +13 -0
  20. viam/components/base/base.py +260 -0
  21. viam/components/base/client.py +153 -0
  22. viam/components/base/service.py +138 -0
  23. viam/components/board/__init__.py +9 -0
  24. viam/components/board/board.py +414 -0
  25. viam/components/board/client.py +241 -0
  26. viam/components/board/service.py +223 -0
  27. viam/components/button/__init__.py +10 -0
  28. viam/components/button/button.py +41 -0
  29. viam/components/button/client.py +52 -0
  30. viam/components/button/service.py +46 -0
  31. viam/components/camera/__init__.py +22 -0
  32. viam/components/camera/camera.py +138 -0
  33. viam/components/camera/client.py +98 -0
  34. viam/components/camera/service.py +105 -0
  35. viam/components/component_base.py +65 -0
  36. viam/components/encoder/__init__.py +18 -0
  37. viam/components/encoder/client.py +83 -0
  38. viam/components/encoder/encoder.py +118 -0
  39. viam/components/encoder/service.py +72 -0
  40. viam/components/gantry/__init__.py +11 -0
  41. viam/components/gantry/client.py +115 -0
  42. viam/components/gantry/gantry.py +156 -0
  43. viam/components/gantry/service.py +113 -0
  44. viam/components/generic/__init__.py +18 -0
  45. viam/components/generic/client.py +62 -0
  46. viam/components/generic/generic.py +76 -0
  47. viam/components/generic/service.py +40 -0
  48. viam/components/gripper/__init__.py +11 -0
  49. viam/components/gripper/client.py +85 -0
  50. viam/components/gripper/gripper.py +114 -0
  51. viam/components/gripper/service.py +81 -0
  52. viam/components/input/__init__.py +15 -0
  53. viam/components/input/client.py +194 -0
  54. viam/components/input/input.py +297 -0
  55. viam/components/input/service.py +175 -0
  56. viam/components/motor/__init__.py +11 -0
  57. viam/components/motor/client.py +168 -0
  58. viam/components/motor/motor.py +301 -0
  59. viam/components/motor/service.py +150 -0
  60. viam/components/movement_sensor/__init__.py +21 -0
  61. viam/components/movement_sensor/client.py +161 -0
  62. viam/components/movement_sensor/movement_sensor.py +253 -0
  63. viam/components/movement_sensor/service.py +146 -0
  64. viam/components/pose_tracker/__init__.py +17 -0
  65. viam/components/pose_tracker/client.py +50 -0
  66. viam/components/pose_tracker/pose_tracker.py +40 -0
  67. viam/components/pose_tracker/service.py +45 -0
  68. viam/components/power_sensor/__init__.py +17 -0
  69. viam/components/power_sensor/client.py +86 -0
  70. viam/components/power_sensor/power_sensor.py +104 -0
  71. viam/components/power_sensor/service.py +72 -0
  72. viam/components/sensor/__init__.py +18 -0
  73. viam/components/sensor/client.py +49 -0
  74. viam/components/sensor/sensor.py +48 -0
  75. viam/components/sensor/service.py +51 -0
  76. viam/components/servo/__init__.py +11 -0
  77. viam/components/servo/client.py +86 -0
  78. viam/components/servo/service.py +80 -0
  79. viam/components/servo/servo.py +114 -0
  80. viam/components/switch/__init__.py +10 -0
  81. viam/components/switch/client.py +83 -0
  82. viam/components/switch/service.py +72 -0
  83. viam/components/switch/switch.py +95 -0
  84. viam/errors.py +105 -0
  85. viam/gen/__init__.py +0 -0
  86. viam/gen/app/__init__.py +0 -0
  87. viam/gen/app/agent/__init__.py +0 -0
  88. viam/gen/app/agent/v1/__init__.py +0 -0
  89. viam/gen/app/agent/v1/agent_grpc.py +29 -0
  90. viam/gen/app/agent/v1/agent_pb2.py +47 -0
  91. viam/gen/app/agent/v1/agent_pb2.pyi +280 -0
  92. viam/gen/app/cloudslam/__init__.py +0 -0
  93. viam/gen/app/cloudslam/v1/__init__.py +0 -0
  94. viam/gen/app/cloudslam/v1/cloud_slam_grpc.py +70 -0
  95. viam/gen/app/cloudslam/v1/cloud_slam_pb2.py +54 -0
  96. viam/gen/app/cloudslam/v1/cloud_slam_pb2.pyi +384 -0
  97. viam/gen/app/data/__init__.py +0 -0
  98. viam/gen/app/data/v1/__init__.py +0 -0
  99. viam/gen/app/data/v1/data_grpc.py +206 -0
  100. viam/gen/app/data/v1/data_pb2.py +178 -0
  101. viam/gen/app/data/v1/data_pb2.pyi +1485 -0
  102. viam/gen/app/datapipelines/__init__.py +0 -0
  103. viam/gen/app/datapipelines/v1/__init__.py +0 -0
  104. viam/gen/app/datapipelines/v1/data_pipelines_grpc.py +84 -0
  105. viam/gen/app/datapipelines/v1/data_pipelines_pb2.py +56 -0
  106. viam/gen/app/datapipelines/v1/data_pipelines_pb2.pyi +370 -0
  107. viam/gen/app/dataset/__init__.py +0 -0
  108. viam/gen/app/dataset/v1/__init__.py +0 -0
  109. viam/gen/app/dataset/v1/dataset_grpc.py +60 -0
  110. viam/gen/app/dataset/v1/dataset_pb2.py +40 -0
  111. viam/gen/app/dataset/v1/dataset_pb2.pyi +179 -0
  112. viam/gen/app/datasync/__init__.py +0 -0
  113. viam/gen/app/datasync/v1/__init__.py +0 -0
  114. viam/gen/app/datasync/v1/data_sync_grpc.py +47 -0
  115. viam/gen/app/datasync/v1/data_sync_pb2.py +70 -0
  116. viam/gen/app/datasync/v1/data_sync_pb2.pyi +425 -0
  117. viam/gen/app/mlinference/__init__.py +0 -0
  118. viam/gen/app/mlinference/v1/__init__.py +0 -0
  119. viam/gen/app/mlinference/v1/ml_inference_grpc.py +28 -0
  120. viam/gen/app/mlinference/v1/ml_inference_pb2.py +23 -0
  121. viam/gen/app/mlinference/v1/ml_inference_pb2.pyi +63 -0
  122. viam/gen/app/mltraining/__init__.py +0 -0
  123. viam/gen/app/mltraining/v1/__init__.py +0 -0
  124. viam/gen/app/mltraining/v1/ml_training_grpc.py +78 -0
  125. viam/gen/app/mltraining/v1/ml_training_pb2.py +124 -0
  126. viam/gen/app/mltraining/v1/ml_training_pb2.pyi +415 -0
  127. viam/gen/app/packages/__init__.py +0 -0
  128. viam/gen/app/packages/v1/__init__.py +0 -0
  129. viam/gen/app/packages/v1/packages_grpc.py +54 -0
  130. viam/gen/app/packages/v1/packages_pb2.py +52 -0
  131. viam/gen/app/packages/v1/packages_pb2.pyi +311 -0
  132. viam/gen/app/v1/__init__.py +0 -0
  133. viam/gen/app/v1/app_grpc.py +863 -0
  134. viam/gen/app/v1/app_pb2.py +649 -0
  135. viam/gen/app/v1/app_pb2.pyi +5279 -0
  136. viam/gen/app/v1/billing_grpc.py +76 -0
  137. viam/gen/app/v1/billing_pb2.py +92 -0
  138. viam/gen/app/v1/billing_pb2.pyi +463 -0
  139. viam/gen/app/v1/end_user_grpc.py +59 -0
  140. viam/gen/app/v1/end_user_pb2.py +55 -0
  141. viam/gen/app/v1/end_user_pb2.pyi +181 -0
  142. viam/gen/app/v1/robot_grpc.py +55 -0
  143. viam/gen/app/v1/robot_pb2.py +127 -0
  144. viam/gen/app/v1/robot_pb2.pyi +1202 -0
  145. viam/gen/common/__init__.py +0 -0
  146. viam/gen/common/v1/__init__.py +0 -0
  147. viam/gen/common/v1/common_grpc.py +0 -0
  148. viam/gen/common/v1/common_pb2.py +78 -0
  149. viam/gen/common/v1/common_pb2.pyi +687 -0
  150. viam/gen/component/__init__.py +0 -0
  151. viam/gen/component/arm/__init__.py +0 -0
  152. viam/gen/component/arm/v1/__init__.py +0 -0
  153. viam/gen/component/arm/v1/arm_grpc.py +102 -0
  154. viam/gen/component/arm/v1/arm_pb2.py +74 -0
  155. viam/gen/component/arm/v1/arm_pb2.pyi +344 -0
  156. viam/gen/component/audioinput/__init__.py +0 -0
  157. viam/gen/component/audioinput/v1/__init__.py +0 -0
  158. viam/gen/component/audioinput/v1/audioinput_grpc.py +63 -0
  159. viam/gen/component/audioinput/v1/audioinput_pb2.py +45 -0
  160. viam/gen/component/audioinput/v1/audioinput_pb2.pyi +179 -0
  161. viam/gen/component/base/__init__.py +0 -0
  162. viam/gen/component/base/v1/__init__.py +0 -0
  163. viam/gen/component/base/v1/base_grpc.py +94 -0
  164. viam/gen/component/base/v1/base_pb2.py +66 -0
  165. viam/gen/component/base/v1/base_pb2.pyi +258 -0
  166. viam/gen/component/board/__init__.py +0 -0
  167. viam/gen/component/board/v1/__init__.py +0 -0
  168. viam/gen/component/board/v1/board_grpc.py +127 -0
  169. viam/gen/component/board/v1/board_pb2.py +103 -0
  170. viam/gen/component/board/v1/board_pb2.pyi +496 -0
  171. viam/gen/component/button/__init__.py +0 -0
  172. viam/gen/component/button/v1/__init__.py +0 -0
  173. viam/gen/component/button/v1/button_grpc.py +38 -0
  174. viam/gen/component/button/v1/button_pb2.py +28 -0
  175. viam/gen/component/button/v1/button_pb2.pyi +39 -0
  176. viam/gen/component/camera/__init__.py +0 -0
  177. viam/gen/component/camera/v1/__init__.py +0 -0
  178. viam/gen/component/camera/v1/camera_grpc.py +79 -0
  179. viam/gen/component/camera/v1/camera_pb2.py +67 -0
  180. viam/gen/component/camera/v1/camera_pb2.pyi +373 -0
  181. viam/gen/component/encoder/__init__.py +0 -0
  182. viam/gen/component/encoder/v1/__init__.py +0 -0
  183. viam/gen/component/encoder/v1/encoder_grpc.py +62 -0
  184. viam/gen/component/encoder/v1/encoder_pb2.py +44 -0
  185. viam/gen/component/encoder/v1/encoder_pb2.pyi +147 -0
  186. viam/gen/component/gantry/__init__.py +0 -0
  187. viam/gen/component/gantry/v1/__init__.py +0 -0
  188. viam/gen/component/gantry/v1/gantry_grpc.py +86 -0
  189. viam/gen/component/gantry/v1/gantry_pb2.py +62 -0
  190. viam/gen/component/gantry/v1/gantry_pb2.pyi +239 -0
  191. viam/gen/component/generic/__init__.py +0 -0
  192. viam/gen/component/generic/v1/__init__.py +0 -0
  193. viam/gen/component/generic/v1/generic_grpc.py +37 -0
  194. viam/gen/component/generic/v1/generic_pb2.py +23 -0
  195. viam/gen/component/generic/v1/generic_pb2.pyi +6 -0
  196. viam/gen/component/gripper/__init__.py +0 -0
  197. viam/gen/component/gripper/v1/__init__.py +0 -0
  198. viam/gen/component/gripper/v1/gripper_grpc.py +70 -0
  199. viam/gen/component/gripper/v1/gripper_pb2.py +48 -0
  200. viam/gen/component/gripper/v1/gripper_pb2.pyi +137 -0
  201. viam/gen/component/inputcontroller/__init__.py +0 -0
  202. viam/gen/component/inputcontroller/v1/__init__.py +0 -0
  203. viam/gen/component/inputcontroller/v1/input_controller_grpc.py +71 -0
  204. viam/gen/component/inputcontroller/v1/input_controller_pb2.py +55 -0
  205. viam/gen/component/inputcontroller/v1/input_controller_pb2.pyi +243 -0
  206. viam/gen/component/motor/__init__.py +0 -0
  207. viam/gen/component/motor/v1/__init__.py +0 -0
  208. viam/gen/component/motor/v1/motor_grpc.py +118 -0
  209. viam/gen/component/motor/v1/motor_pb2.py +86 -0
  210. viam/gen/component/motor/v1/motor_pb2.pyi +368 -0
  211. viam/gen/component/movementsensor/__init__.py +0 -0
  212. viam/gen/component/movementsensor/v1/__init__.py +0 -0
  213. viam/gen/component/movementsensor/v1/movementsensor_grpc.py +110 -0
  214. viam/gen/component/movementsensor/v1/movementsensor_pb2.py +78 -0
  215. viam/gen/component/movementsensor/v1/movementsensor_pb2.pyi +384 -0
  216. viam/gen/component/posetracker/__init__.py +0 -0
  217. viam/gen/component/posetracker/v1/__init__.py +0 -0
  218. viam/gen/component/posetracker/v1/pose_tracker_grpc.py +46 -0
  219. viam/gen/component/posetracker/v1/pose_tracker_pb2.py +34 -0
  220. viam/gen/component/posetracker/v1/pose_tracker_pb2.pyi +79 -0
  221. viam/gen/component/powersensor/__init__.py +0 -0
  222. viam/gen/component/powersensor/v1/__init__.py +0 -0
  223. viam/gen/component/powersensor/v1/powersensor_grpc.py +62 -0
  224. viam/gen/component/powersensor/v1/powersensor_pb2.py +42 -0
  225. viam/gen/component/powersensor/v1/powersensor_pb2.pyi +124 -0
  226. viam/gen/component/sensor/__init__.py +0 -0
  227. viam/gen/component/sensor/v1/__init__.py +0 -0
  228. viam/gen/component/sensor/v1/sensor_grpc.py +45 -0
  229. viam/gen/component/sensor/v1/sensor_pb2.py +25 -0
  230. viam/gen/component/sensor/v1/sensor_pb2.pyi +6 -0
  231. viam/gen/component/servo/__init__.py +0 -0
  232. viam/gen/component/servo/v1/__init__.py +0 -0
  233. viam/gen/component/servo/v1/servo_grpc.py +70 -0
  234. viam/gen/component/servo/v1/servo_pb2.py +50 -0
  235. viam/gen/component/servo/v1/servo_pb2.pyi +150 -0
  236. viam/gen/component/switch/__init__.py +0 -0
  237. viam/gen/component/switch/v1/__init__.py +0 -0
  238. viam/gen/component/switch/v1/switch_grpc.py +54 -0
  239. viam/gen/component/switch/v1/switch_pb2.py +40 -0
  240. viam/gen/component/switch/v1/switch_pb2.pyi +109 -0
  241. viam/gen/component/testecho/__init__.py +0 -0
  242. viam/gen/component/testecho/v1/__init__.py +0 -0
  243. viam/gen/component/testecho/v1/testecho_grpc.py +52 -0
  244. viam/gen/component/testecho/v1/testecho_pb2.py +36 -0
  245. viam/gen/component/testecho/v1/testecho_pb2.pyi +114 -0
  246. viam/gen/module/__init__.py +0 -0
  247. viam/gen/module/v1/__init__.py +0 -0
  248. viam/gen/module/v1/module_grpc.py +61 -0
  249. viam/gen/module/v1/module_pb2.py +43 -0
  250. viam/gen/module/v1/module_pb2.pyi +211 -0
  251. viam/gen/proto/__init__.py +0 -0
  252. viam/gen/proto/rpc/__init__.py +0 -0
  253. viam/gen/proto/rpc/examples/__init__.py +0 -0
  254. viam/gen/proto/rpc/examples/echo/__init__.py +0 -0
  255. viam/gen/proto/rpc/examples/echo/v1/__init__.py +0 -0
  256. viam/gen/proto/rpc/examples/echo/v1/echo_grpc.py +44 -0
  257. viam/gen/proto/rpc/examples/echo/v1/echo_pb2.py +32 -0
  258. viam/gen/proto/rpc/examples/echo/v1/echo_pb2.pyi +87 -0
  259. viam/gen/proto/rpc/examples/echoresource/__init__.py +0 -0
  260. viam/gen/proto/rpc/examples/echoresource/v1/__init__.py +0 -0
  261. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_grpc.py +43 -0
  262. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.py +29 -0
  263. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.pyi +93 -0
  264. viam/gen/proto/rpc/v1/__init__.py +0 -0
  265. viam/gen/proto/rpc/v1/auth_grpc.py +47 -0
  266. viam/gen/proto/rpc/v1/auth_pb2.py +34 -0
  267. viam/gen/proto/rpc/v1/auth_pb2.pyi +92 -0
  268. viam/gen/proto/rpc/webrtc/__init__.py +0 -0
  269. viam/gen/proto/rpc/webrtc/v1/__init__.py +0 -0
  270. viam/gen/proto/rpc/webrtc/v1/grpc_grpc.py +0 -0
  271. viam/gen/proto/rpc/webrtc/v1/grpc_pb2.py +43 -0
  272. viam/gen/proto/rpc/webrtc/v1/grpc_pb2.pyi +304 -0
  273. viam/gen/proto/rpc/webrtc/v1/signaling_grpc.py +54 -0
  274. viam/gen/proto/rpc/webrtc/v1/signaling_pb2.py +70 -0
  275. viam/gen/proto/rpc/webrtc/v1/signaling_pb2.pyi +496 -0
  276. viam/gen/provisioning/__init__.py +0 -0
  277. viam/gen/provisioning/v1/__init__.py +0 -0
  278. viam/gen/provisioning/v1/provisioning_grpc.py +51 -0
  279. viam/gen/provisioning/v1/provisioning_pb2.py +39 -0
  280. viam/gen/provisioning/v1/provisioning_pb2.pyi +188 -0
  281. viam/gen/robot/__init__.py +0 -0
  282. viam/gen/robot/v1/__init__.py +0 -0
  283. viam/gen/robot/v1/robot_grpc.py +208 -0
  284. viam/gen/robot/v1/robot_pb2.py +188 -0
  285. viam/gen/robot/v1/robot_pb2.pyi +1020 -0
  286. viam/gen/service/__init__.py +0 -0
  287. viam/gen/service/datamanager/__init__.py +0 -0
  288. viam/gen/service/datamanager/v1/__init__.py +0 -0
  289. viam/gen/service/datamanager/v1/data_manager_grpc.py +38 -0
  290. viam/gen/service/datamanager/v1/data_manager_pb2.py +28 -0
  291. viam/gen/service/datamanager/v1/data_manager_pb2.pyi +39 -0
  292. viam/gen/service/discovery/__init__.py +0 -0
  293. viam/gen/service/discovery/v1/__init__.py +0 -0
  294. viam/gen/service/discovery/v1/discovery_grpc.py +39 -0
  295. viam/gen/service/discovery/v1/discovery_pb2.py +29 -0
  296. viam/gen/service/discovery/v1/discovery_pb2.pyi +51 -0
  297. viam/gen/service/generic/__init__.py +0 -0
  298. viam/gen/service/generic/v1/__init__.py +0 -0
  299. viam/gen/service/generic/v1/generic_grpc.py +29 -0
  300. viam/gen/service/generic/v1/generic_pb2.py +21 -0
  301. viam/gen/service/generic/v1/generic_pb2.pyi +6 -0
  302. viam/gen/service/mlmodel/__init__.py +0 -0
  303. viam/gen/service/mlmodel/v1/__init__.py +0 -0
  304. viam/gen/service/mlmodel/v1/mlmodel_grpc.py +37 -0
  305. viam/gen/service/mlmodel/v1/mlmodel_pb2.py +83 -0
  306. viam/gen/service/mlmodel/v1/mlmodel_pb2.pyi +480 -0
  307. viam/gen/service/motion/__init__.py +0 -0
  308. viam/gen/service/motion/v1/__init__.py +0 -0
  309. viam/gen/service/motion/v1/motion_grpc.py +87 -0
  310. viam/gen/service/motion/v1/motion_pb2.py +97 -0
  311. viam/gen/service/motion/v1/motion_pb2.pyi +838 -0
  312. viam/gen/service/navigation/__init__.py +0 -0
  313. viam/gen/service/navigation/v1/__init__.py +0 -0
  314. viam/gen/service/navigation/v1/navigation_grpc.py +102 -0
  315. viam/gen/service/navigation/v1/navigation_pb2.py +84 -0
  316. viam/gen/service/navigation/v1/navigation_pb2.pyi +419 -0
  317. viam/gen/service/sensors/__init__.py +0 -0
  318. viam/gen/service/sensors/v1/__init__.py +0 -0
  319. viam/gen/service/sensors/v1/sensors_grpc.py +46 -0
  320. viam/gen/service/sensors/v1/sensors_pb2.py +68 -0
  321. viam/gen/service/sensors/v1/sensors_pb2.pyi +137 -0
  322. viam/gen/service/shell/__init__.py +0 -0
  323. viam/gen/service/shell/v1/__init__.py +0 -0
  324. viam/gen/service/shell/v1/shell_grpc.py +55 -0
  325. viam/gen/service/shell/v1/shell_pb2.py +45 -0
  326. viam/gen/service/shell/v1/shell_pb2.pyi +307 -0
  327. viam/gen/service/slam/__init__.py +0 -0
  328. viam/gen/service/slam/v1/__init__.py +0 -0
  329. viam/gen/service/slam/v1/slam_grpc.py +61 -0
  330. viam/gen/service/slam/v1/slam_pb2.py +51 -0
  331. viam/gen/service/slam/v1/slam_pb2.pyi +213 -0
  332. viam/gen/service/vision/__init__.py +0 -0
  333. viam/gen/service/vision/v1/__init__.py +0 -0
  334. viam/gen/service/vision/v1/vision_grpc.py +87 -0
  335. viam/gen/service/vision/v1/vision_pb2.py +69 -0
  336. viam/gen/service/vision/v1/vision_pb2.pyi +454 -0
  337. viam/gen/stream/__init__.py +0 -0
  338. viam/gen/stream/v1/__init__.py +0 -0
  339. viam/gen/stream/v1/stream_grpc.py +59 -0
  340. viam/gen/stream/v1/stream_pb2.py +39 -0
  341. viam/gen/stream/v1/stream_pb2.pyi +161 -0
  342. viam/gen/tagger/__init__.py +0 -0
  343. viam/gen/tagger/v1/__init__.py +0 -0
  344. viam/gen/tagger/v1/tagger_grpc.py +0 -0
  345. viam/gen/tagger/v1/tagger_pb2.py +16 -0
  346. viam/gen/tagger/v1/tagger_pb2.pyi +15 -0
  347. viam/logging.py +216 -0
  348. viam/media/__init__.py +0 -0
  349. viam/media/audio.py +16 -0
  350. viam/media/utils/__init__.py +0 -0
  351. viam/media/utils/pil/__init__.py +51 -0
  352. viam/media/utils/pil/viam_rgba_plugin.py +73 -0
  353. viam/media/viam_rgba.py +10 -0
  354. viam/media/video.py +217 -0
  355. viam/module/__init__.py +5 -0
  356. viam/module/module.py +281 -0
  357. viam/module/service.py +66 -0
  358. viam/module/types.py +23 -0
  359. viam/operations.py +124 -0
  360. viam/proto/__init__.py +0 -0
  361. viam/proto/app/__init__.py +554 -0
  362. viam/proto/app/agent/__init__.py +28 -0
  363. viam/proto/app/billing.py +58 -0
  364. viam/proto/app/cloudslam/__init__.py +48 -0
  365. viam/proto/app/data/__init__.py +138 -0
  366. viam/proto/app/datapipelines/__init__.py +56 -0
  367. viam/proto/app/dataset/__init__.py +36 -0
  368. viam/proto/app/datasync/__init__.py +44 -0
  369. viam/proto/app/end_user.py +34 -0
  370. viam/proto/app/mlinference/__init__.py +15 -0
  371. viam/proto/app/mltraining/__init__.py +52 -0
  372. viam/proto/app/packages/__init__.py +38 -0
  373. viam/proto/app/robot.py +84 -0
  374. viam/proto/common/__init__.py +66 -0
  375. viam/proto/component/__init__.py +0 -0
  376. viam/proto/component/arm/__init__.py +48 -0
  377. viam/proto/component/audioinput/__init__.py +30 -0
  378. viam/proto/component/base/__init__.py +42 -0
  379. viam/proto/component/board/__init__.py +62 -0
  380. viam/proto/component/button/__init__.py +15 -0
  381. viam/proto/component/camera/__init__.py +46 -0
  382. viam/proto/component/encoder/__init__.py +28 -0
  383. viam/proto/component/gantry/__init__.py +40 -0
  384. viam/proto/component/generic/__init__.py +12 -0
  385. viam/proto/component/gripper/__init__.py +30 -0
  386. viam/proto/component/inputcontroller/__init__.py +38 -0
  387. viam/proto/component/motor/__init__.py +56 -0
  388. viam/proto/component/movementsensor/__init__.py +50 -0
  389. viam/proto/component/posetracker/__init__.py +19 -0
  390. viam/proto/component/powersensor/__init__.py +30 -0
  391. viam/proto/component/sensor/__init__.py +12 -0
  392. viam/proto/component/servo/__init__.py +32 -0
  393. viam/proto/component/switch/__init__.py +26 -0
  394. viam/proto/component/testecho/__init__.py +30 -0
  395. viam/proto/module/__init__.py +38 -0
  396. viam/proto/provisioning/__init__.py +36 -0
  397. viam/proto/robot/__init__.py +130 -0
  398. viam/proto/rpc/__init__.py +0 -0
  399. viam/proto/rpc/auth.py +34 -0
  400. viam/proto/rpc/examples/__init__.py +0 -0
  401. viam/proto/rpc/examples/echo/__init__.py +26 -0
  402. viam/proto/rpc/examples/echoresource/__init__.py +30 -0
  403. viam/proto/rpc/webrtc/__init__.py +0 -0
  404. viam/proto/rpc/webrtc/grpc.py +36 -0
  405. viam/proto/rpc/webrtc/signaling.py +58 -0
  406. viam/proto/service/__init__.py +0 -0
  407. viam/proto/service/datamanager/__init__.py +19 -0
  408. viam/proto/service/discovery/__init__.py +15 -0
  409. viam/proto/service/generic/__init__.py +12 -0
  410. viam/proto/service/mlmodel/__init__.py +54 -0
  411. viam/proto/service/motion/__init__.py +68 -0
  412. viam/proto/service/navigation/__init__.py +58 -0
  413. viam/proto/service/sensors/__init__.py +18 -0
  414. viam/proto/service/shell/__init__.py +36 -0
  415. viam/proto/service/slam/__init__.py +36 -0
  416. viam/proto/service/vision/__init__.py +46 -0
  417. viam/proto/stream/__init__.py +36 -0
  418. viam/proto/tagger/__init__.py +6 -0
  419. viam/py.typed +0 -0
  420. viam/resource/__init__.py +0 -0
  421. viam/resource/base.py +123 -0
  422. viam/resource/easy_resource.py +153 -0
  423. viam/resource/manager.py +126 -0
  424. viam/resource/registry.py +199 -0
  425. viam/resource/rpc_client_base.py +65 -0
  426. viam/resource/rpc_service_base.py +48 -0
  427. viam/resource/types.py +213 -0
  428. viam/robot/__init__.py +0 -0
  429. viam/robot/client.py +909 -0
  430. viam/robot/service.py +69 -0
  431. viam/rpc/__init__.py +0 -0
  432. viam/rpc/dial.py +420 -0
  433. viam/rpc/libviam_rust_utils.dll +0 -0
  434. viam/rpc/server.py +201 -0
  435. viam/rpc/signaling.py +29 -0
  436. viam/rpc/types.py +22 -0
  437. viam/services/__init__.py +0 -0
  438. viam/services/discovery/__init__.py +12 -0
  439. viam/services/discovery/client.py +55 -0
  440. viam/services/discovery/discovery.py +52 -0
  441. viam/services/discovery/service.py +43 -0
  442. viam/services/generic/__init__.py +18 -0
  443. viam/services/generic/client.py +58 -0
  444. viam/services/generic/generic.py +58 -0
  445. viam/services/generic/service.py +29 -0
  446. viam/services/mlmodel/__init__.py +24 -0
  447. viam/services/mlmodel/client.py +37 -0
  448. viam/services/mlmodel/mlmodel.py +78 -0
  449. viam/services/mlmodel/service.py +38 -0
  450. viam/services/mlmodel/utils.py +101 -0
  451. viam/services/motion/__init__.py +17 -0
  452. viam/services/motion/client.py +215 -0
  453. viam/services/motion/motion.py +378 -0
  454. viam/services/motion/service.py +132 -0
  455. viam/services/navigation/__init__.py +11 -0
  456. viam/services/navigation/client.py +99 -0
  457. viam/services/navigation/navigation.py +250 -0
  458. viam/services/navigation/service.py +137 -0
  459. viam/services/service_base.py +78 -0
  460. viam/services/service_client_base.py +46 -0
  461. viam/services/slam/__init__.py +17 -0
  462. viam/services/slam/client.py +62 -0
  463. viam/services/slam/service.py +75 -0
  464. viam/services/slam/slam.py +111 -0
  465. viam/services/vision/__init__.py +15 -0
  466. viam/services/vision/client.py +206 -0
  467. viam/services/vision/service.py +146 -0
  468. viam/services/vision/vision.py +315 -0
  469. viam/sessions_client.py +245 -0
  470. viam/streams.py +44 -0
  471. viam/utils.py +365 -0
  472. viam/version_metadata.py +4 -0
  473. viam_sdk-0.45.2.dist-info/METADATA +157 -0
  474. viam_sdk-0.45.2.dist-info/RECORD +476 -0
  475. viam_sdk-0.45.2.dist-info/WHEEL +4 -0
  476. viam_sdk-0.45.2.dist-info/licenses/LICENSE +202 -0
@@ -0,0 +1,156 @@
1
+ import abc
2
+ from typing import Any, Dict, Final, List, Optional
3
+
4
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
5
+
6
+ from ..component_base import ComponentBase
7
+
8
+
9
+ class Gantry(ComponentBase):
10
+ """
11
+ Gantry represents a physical Gantry and can be used for controlling gantries of N axes.
12
+
13
+ This acts as an abstract base class for any drivers representing specific
14
+ gantry implementations. This cannot be used on its own. If the ``__init__()`` function is
15
+ overridden, it must call the ``super().__init__()`` function.
16
+
17
+ ::
18
+
19
+ from viam.components.gantry import Gantry
20
+
21
+ For more information, see `Gantry component <https://docs.viam.com/dev/reference/apis/components/gantry/>`_.
22
+ """
23
+
24
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
25
+ RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "gantry"
26
+ )
27
+
28
+ @abc.abstractmethod
29
+ async def get_position(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[float]:
30
+ """
31
+ Get the positions of the axes of the gantry in millimeters.
32
+
33
+ ::
34
+
35
+ my_gantry = Gantry.from_robot(robot=machine, name="my_gantry")
36
+
37
+ # Get the current positions of the axes of the gantry in millimeters.
38
+ positions = await my_gantry.get_position()
39
+
40
+ Returns:
41
+ List[float]: A list of the position of the axes of the gantry in millimeters.
42
+
43
+ For more information, see `Gantry component <https://docs.viam.com/dev/reference/apis/components/gantry/#getposition>`_.
44
+ """
45
+ ...
46
+
47
+ @abc.abstractmethod
48
+ async def move_to_position(
49
+ self,
50
+ positions: List[float],
51
+ speeds: List[float],
52
+ *,
53
+ extra: Optional[Dict[str, Any]] = None,
54
+ timeout: Optional[float] = None,
55
+ **kwargs,
56
+ ):
57
+ """
58
+ Move the axes of the gantry to the desired positions (mm) at the requested speeds (mm/sec).
59
+
60
+ ::
61
+
62
+ my_gantry = Gantry.from_robot(robot=machine, name="my_gantry")
63
+
64
+ # Create a list of positions for the axes of the gantry to move to. Assume in
65
+ # this example that the gantry is multi-axis, with 3 axes.
66
+ examplePositions = [1, 2, 3]
67
+
68
+ exampleSpeeds = [3, 9, 12]
69
+
70
+ # Move the axes of the gantry to the positions specified.
71
+ await my_gantry.move_to_position(
72
+ positions=examplePositions, speeds=exampleSpeeds)
73
+
74
+ Args:
75
+ positions (List[float]): A list of positions for the axes of the gantry to move to, in millimeters.
76
+ speeds (List[float]): A list of speeds in millimeters per second for the gantry to move at respective to each axis.
77
+
78
+ For more information, see `Gantry component <https://docs.viam.com/dev/reference/apis/components/gantry/#movetoposition>`_.
79
+ """
80
+ ...
81
+
82
+ @abc.abstractmethod
83
+ async def home(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> bool:
84
+ """
85
+ Run the homing sequence of the gantry to re-calibrate the axes with respect to the limit switches.
86
+
87
+ ::
88
+
89
+ my_gantry = Gantry.from_robot(robot=machine, name="my_gantry")
90
+
91
+ await my_gantry.home()
92
+
93
+ Returns:
94
+ bool: Whether the gantry has run the homing sequence successfully.
95
+
96
+ For more information, see `Gantry component <https://docs.viam.com/dev/reference/apis/components/gantry/#home>`_.
97
+ """
98
+
99
+ @abc.abstractmethod
100
+ async def get_lengths(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[float]:
101
+ """
102
+ Get the lengths of the axes of the gantry in millimeters.
103
+
104
+ ::
105
+
106
+ my_gantry = Gantry.from_robot(robot=machine, name="my_gantry")
107
+
108
+ # Get the lengths of the axes of the gantry in millimeters.
109
+ lengths_mm = await my_gantry.get_lengths()
110
+
111
+ Returns:
112
+ List[float]: A list of the lengths of the axes of the gantry in millimeters.
113
+
114
+ For more information, see `Gantry component <https://docs.viam.com/dev/reference/apis/components/gantry/#getlengths>`_.
115
+ """
116
+ ...
117
+
118
+ @abc.abstractmethod
119
+ async def stop(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs):
120
+ """
121
+ Stop all motion of the gantry. It is assumed that the gantry stops immediately.
122
+
123
+ ::
124
+
125
+ my_gantry = Gantry.from_robot(robot=machine, name="my_gantry")
126
+
127
+ # Stop all motion of the gantry. It is assumed that the gantry stops
128
+ # immediately.
129
+ await my_gantry.stop()
130
+
131
+ For more information, see `Gantry component <https://docs.viam.com/dev/reference/apis/components/gantry/#stop>`_.
132
+ """
133
+ ...
134
+
135
+ @abc.abstractmethod
136
+ async def is_moving(self) -> bool:
137
+ """
138
+ Get if the gantry is currently moving.
139
+
140
+ ::
141
+
142
+ my_gantry = Gantry.from_robot(robot=machine, name="my_gantry")
143
+
144
+ # Stop all motion of the gantry. It is assumed that the
145
+ # gantry stops immediately.
146
+ await my_gantry.stop()
147
+
148
+ # Print if the gantry is currently moving.
149
+ print(await my_gantry.is_moving())
150
+
151
+ Returns:
152
+ bool: Whether the gantry is moving.
153
+
154
+ For more information, see `Gantry component <https://docs.viam.com/dev/reference/apis/components/gantry/#ismoving>`_.
155
+ """
156
+ ...
@@ -0,0 +1,113 @@
1
+ from grpclib.server import Stream
2
+
3
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse
4
+ from viam.proto.component.gantry import (
5
+ GantryServiceBase,
6
+ GetLengthsRequest,
7
+ GetLengthsResponse,
8
+ GetPositionRequest,
9
+ GetPositionResponse,
10
+ HomeRequest,
11
+ HomeResponse,
12
+ IsMovingRequest,
13
+ IsMovingResponse,
14
+ MoveToPositionRequest,
15
+ MoveToPositionResponse,
16
+ StopRequest,
17
+ StopResponse,
18
+ )
19
+ from viam.resource.rpc_service_base import ResourceRPCServiceBase
20
+ from viam.utils import dict_to_struct, struct_to_dict
21
+
22
+ from .gantry import Gantry
23
+
24
+
25
+ class GantryRPCService(GantryServiceBase, ResourceRPCServiceBase[Gantry]):
26
+ """
27
+ gRPC Service for a Gantry
28
+ """
29
+
30
+ RESOURCE_TYPE = Gantry
31
+
32
+ async def GetPosition(self, stream: Stream[GetPositionRequest, GetPositionResponse]) -> None:
33
+ request = await stream.recv_message()
34
+ assert request is not None
35
+ name = request.name
36
+ gantry = self.get_resource(name)
37
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
38
+ position = await gantry.get_position(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
39
+ response = GetPositionResponse(positions_mm=position)
40
+ await stream.send_message(response)
41
+
42
+ async def MoveToPosition(self, stream: Stream[MoveToPositionRequest, MoveToPositionResponse]) -> None:
43
+ request = await stream.recv_message()
44
+ assert request is not None
45
+ name = request.name
46
+ gantry = self.get_resource(name)
47
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
48
+ await gantry.move_to_position(
49
+ list(request.positions_mm),
50
+ list(request.speeds_mm_per_sec),
51
+ extra=struct_to_dict(request.extra),
52
+ timeout=timeout,
53
+ metadata=stream.metadata,
54
+ )
55
+ response = MoveToPositionResponse()
56
+ await stream.send_message(response)
57
+
58
+ async def Home(self, stream: Stream[HomeRequest, HomeResponse]) -> None:
59
+ request = await stream.recv_message()
60
+ assert request is not None
61
+ name = request.name
62
+ gantry = self.get_resource(name)
63
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
64
+ homed = await gantry.home(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
65
+ response = HomeResponse(homed=homed)
66
+ await stream.send_message(response)
67
+
68
+ async def GetLengths(self, stream: Stream[GetLengthsRequest, GetLengthsResponse]) -> None:
69
+ request = await stream.recv_message()
70
+ assert request is not None
71
+ name = request.name
72
+ gantry = self.get_resource(name)
73
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
74
+ lengths = await gantry.get_lengths(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
75
+ response = GetLengthsResponse(lengths_mm=lengths)
76
+ await stream.send_message(response)
77
+
78
+ async def Stop(self, stream: Stream[StopRequest, StopResponse]) -> None:
79
+ request = await stream.recv_message()
80
+ assert request is not None
81
+ name = request.name
82
+ gantry = self.get_resource(name)
83
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
84
+ await gantry.stop(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
85
+ response = StopResponse()
86
+ await stream.send_message(response)
87
+
88
+ async def IsMoving(self, stream: Stream[IsMovingRequest, IsMovingResponse]) -> None:
89
+ request = await stream.recv_message()
90
+ assert request is not None
91
+ name = request.name
92
+ gantry = self.get_resource(name)
93
+ is_moving = await gantry.is_moving()
94
+ response = IsMovingResponse(is_moving=is_moving)
95
+ await stream.send_message(response)
96
+
97
+ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
98
+ request = await stream.recv_message()
99
+ assert request is not None
100
+ gantry = self.get_resource(request.name)
101
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
102
+ result = await gantry.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
103
+ response = DoCommandResponse(result=dict_to_struct(result))
104
+ await stream.send_message(response)
105
+
106
+ async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
107
+ request = await stream.recv_message()
108
+ assert request is not None
109
+ arm = self.get_resource(request.name)
110
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
111
+ geometries = await arm.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
112
+ response = GetGeometriesResponse(geometries=geometries)
113
+ await stream.send_message(response)
@@ -0,0 +1,18 @@
1
+ import viam.gen.component.generic.v1.generic_pb2 # Need this import for Generic service descriptors to resolve
2
+ from viam.resource.registry import Registry, ResourceRegistration
3
+
4
+ from .client import GenericClient
5
+ from .generic import Generic
6
+ from .service import GenericRPCService
7
+
8
+ __all__ = [
9
+ "Generic",
10
+ ]
11
+
12
+ Registry.register_api(
13
+ ResourceRegistration(
14
+ Generic,
15
+ GenericRPCService,
16
+ lambda name, channel: GenericClient(name, channel),
17
+ )
18
+ )
@@ -0,0 +1,62 @@
1
+ from typing import Any, Dict, List, Mapping, Optional
2
+
3
+ from grpclib import GRPCError, Status
4
+ from grpclib.client import Channel
5
+
6
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry
7
+ from viam.proto.component.generic import GenericServiceStub
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
+
11
+ from .generic import Generic
12
+
13
+
14
+ class GenericClient(Generic, ReconfigurableResourceRPCClientBase):
15
+ """
16
+ gRPC client for the Generic component.
17
+ """
18
+
19
+ def __init__(self, name: str, channel: Channel):
20
+ self.channel = channel
21
+ self.client = GenericServiceStub(channel)
22
+ super().__init__(name)
23
+
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
32
+ request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
33
+ try:
34
+ response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
35
+ except GRPCError as e:
36
+ if e.status == Status.UNIMPLEMENTED:
37
+ raise NotImplementedError()
38
+ raise e
39
+
40
+ return struct_to_dict(response.result)
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
+
46
+
47
+ async def do_command(
48
+ channel: Channel, name: str, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None, **kwargs
49
+ ) -> Mapping[str, ValueTypes]:
50
+ """Convenience method to allow component clients to execute ``do_command`` functions
51
+
52
+ Args:
53
+ channel (Channel): A gRPC channel
54
+ name (str): The name of the component
55
+ command (Dict[str, Any]): The command to execute
56
+
57
+ Returns:
58
+ Dict[str, Any]: The result of the executed command
59
+ """
60
+ md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
61
+ client = GenericClient(name, channel)
62
+ return await client.do_command(command, timeout=timeout, metadata=md)
@@ -0,0 +1,76 @@
1
+ from typing import Final
2
+
3
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
4
+
5
+ from ..component_base import ComponentBase
6
+
7
+
8
+ class Generic(ComponentBase):
9
+ """
10
+ Generic component, which represents any type of component that can executes arbitrary commands
11
+
12
+ This acts as an abstract base class for any drivers representing generic components.
13
+ This cannot be used on its own. If the ``__init__()`` function is overridden, it must call the ``super().__init__()`` function.
14
+
15
+ To create a Generic component (an arbitrary component that can process commands), this ``Generic`` component should be subclassed
16
+ and the ``do_command`` function implemented.
17
+
18
+ ::
19
+
20
+ from viam.components.generic import Generic
21
+
22
+ Example::
23
+
24
+ class ComplexComponent(Generic):
25
+
26
+ async def do_command(
27
+ self,
28
+ command: Mapping[str, ValueTypes],
29
+ *,
30
+ timeout: Optional[float] = None,
31
+ **kwargs
32
+ ) -> Mapping[str, ValueTypes]:
33
+ result = {key: False for key in command.keys()}
34
+ for (name, args) in command.items():
35
+ if name == 'on':
36
+ self.on(*args)
37
+ result[name] = True
38
+ if name == 'set_frequency':
39
+ self.set_frequency(*args)
40
+ result[name] = True
41
+ if name == 'get_frequency':
42
+ result[name] = self.frequency
43
+ if name == 'complex_command':
44
+ self.complex_command(*args)
45
+ result[name] = True
46
+ return result
47
+
48
+ def set_frequency(self, frequency: int):
49
+ self.frequency = frequency
50
+
51
+ def on(self, frequency: int, duration: int):
52
+ self.frequency = frequency
53
+ self.power = 1
54
+ task = threading.Timer(duration, self.off)
55
+ task.start()
56
+
57
+ def off(self):
58
+ self.power = 0
59
+
60
+ def complex_command(self, arg1, arg2, arg3):
61
+ ...
62
+
63
+ To execute commands, simply call the ``do_command`` function with the appropriate parameters.
64
+ ::
65
+
66
+ await component.do_command({'on': [300, 10]})
67
+ component.power # 1
68
+ await asyncio.sleep(10)
69
+ component.power # 0
70
+
71
+ For more information, see `Gantry component <https://docs.viam.com/dev/reference/apis/components/generic/>`_.
72
+ """
73
+
74
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
75
+ RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "generic"
76
+ )
@@ -0,0 +1,40 @@
1
+ from grpclib import GRPCError, Status
2
+ from grpclib.server import Stream
3
+
4
+ from viam.components.component_base import ComponentBase
5
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse
6
+ from viam.proto.component.generic import GenericServiceBase
7
+ from viam.resource.rpc_service_base import ResourceRPCServiceBase
8
+ from viam.utils import dict_to_struct, struct_to_dict
9
+
10
+ # from .generic import Generic
11
+
12
+
13
+ class GenericRPCService(GenericServiceBase, ResourceRPCServiceBase):
14
+ """
15
+ gRPC Service for a Generic component
16
+ """
17
+
18
+ RESOURCE_TYPE = ComponentBase
19
+
20
+ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
21
+ request = await stream.recv_message()
22
+ assert request is not None
23
+ name = request.name
24
+ component = self.get_resource(name)
25
+ try:
26
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
27
+ result = await component.do_command(struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
28
+ except NotImplementedError:
29
+ raise GRPCError(Status.UNIMPLEMENTED, f"``DO`` command is unimplemented for component named: {name}")
30
+ response = DoCommandResponse(result=dict_to_struct(result))
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)
@@ -0,0 +1,11 @@
1
+ from viam.resource.registry import Registry, ResourceRegistration
2
+
3
+ from .client import GripperClient
4
+ from .gripper import Gripper
5
+ from .service import GripperRPCService
6
+
7
+ __all__ = [
8
+ "Gripper",
9
+ ]
10
+
11
+ Registry.register_api(ResourceRegistration(Gripper, GripperRPCService, lambda name, channel: GripperClient(name, channel)))
@@ -0,0 +1,85 @@
1
+ from typing import Any, Dict, List, Mapping, Optional
2
+
3
+ from grpclib.client import Channel
4
+
5
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry
6
+ from viam.proto.component.gripper import (
7
+ GrabRequest,
8
+ GrabResponse,
9
+ GripperServiceStub,
10
+ IsMovingRequest,
11
+ IsMovingResponse,
12
+ OpenRequest,
13
+ StopRequest,
14
+ )
15
+ from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
16
+ from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
17
+
18
+ from .gripper import Gripper
19
+
20
+
21
+ class GripperClient(Gripper, ReconfigurableResourceRPCClientBase):
22
+ """
23
+ gRPC client for the Gripper component
24
+ """
25
+
26
+ def __init__(self, name: str, channel: Channel):
27
+ self.channel = channel
28
+ self.client = GripperServiceStub(channel)
29
+ super().__init__(name)
30
+
31
+ async def open(
32
+ self,
33
+ *,
34
+ extra: Optional[Dict[str, Any]] = None,
35
+ timeout: Optional[float] = None,
36
+ **kwargs,
37
+ ):
38
+ md = kwargs.get("metadata", self.Metadata()).proto
39
+ request = OpenRequest(name=self.name, extra=dict_to_struct(extra))
40
+ await self.client.Open(request, timeout=timeout, metadata=md)
41
+
42
+ async def grab(
43
+ self,
44
+ *,
45
+ extra: Optional[Dict[str, Any]] = None,
46
+ timeout: Optional[float] = None,
47
+ **kwargs,
48
+ ) -> bool:
49
+ md = kwargs.get("metadata", self.Metadata()).proto
50
+ request = GrabRequest(name=self.name, extra=dict_to_struct(extra))
51
+ response: GrabResponse = await self.client.Grab(request, timeout=timeout, metadata=md)
52
+ return response.success
53
+
54
+ async def stop(
55
+ self,
56
+ *,
57
+ extra: Optional[Dict[str, Any]] = None,
58
+ timeout: Optional[float] = None,
59
+ **kwargs,
60
+ ):
61
+ md = kwargs.get("metadata", self.Metadata()).proto
62
+ request = StopRequest(name=self.name, extra=dict_to_struct(extra))
63
+ await self.client.Stop(request, timeout=timeout, metadata=md)
64
+
65
+ async def is_moving(self, *, timeout: Optional[float] = None, **kwargs) -> bool:
66
+ md = kwargs.get("metadata", self.Metadata()).proto
67
+ request = IsMovingRequest(name=self.name)
68
+ response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout, metadata=md)
69
+ return response.is_moving
70
+
71
+ async def do_command(
72
+ self,
73
+ command: Mapping[str, ValueTypes],
74
+ *,
75
+ timeout: Optional[float] = None,
76
+ **kwargs,
77
+ ) -> Mapping[str, ValueTypes]:
78
+ md = kwargs.get("metadata", self.Metadata()).proto
79
+ request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
80
+ response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
81
+ return struct_to_dict(response.result)
82
+
83
+ async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
84
+ md = kwargs.get("metadata", self.Metadata())
85
+ return await get_geometries(self.client, self.name, extra, timeout, md)
@@ -0,0 +1,114 @@
1
+ import abc
2
+ from typing import Any, Dict, Final, Optional
3
+
4
+ from viam.components.component_base import ComponentBase
5
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
6
+
7
+
8
+ class Gripper(ComponentBase):
9
+ """
10
+ Gripper represents a physical robotic gripper.
11
+
12
+ This acts as an abstract base class for any drivers representing specific
13
+ gripper implementations. This cannot be used on its own. If the ``__init__()`` function is
14
+ overridden, it must call the ``super().__init__()`` function.
15
+
16
+ ::
17
+
18
+ from viam.components.gripper import Gripper
19
+
20
+ For more information, see `Gripper component <https://docs.viam.com/dev/reference/apis/components/gripper/>`_.
21
+ """
22
+
23
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
24
+ RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "gripper"
25
+ )
26
+
27
+ @abc.abstractmethod
28
+ async def open(
29
+ self,
30
+ *,
31
+ extra: Optional[Dict[str, Any]] = None,
32
+ timeout: Optional[float] = None,
33
+ **kwargs,
34
+ ):
35
+ """
36
+ Open the gripper.
37
+
38
+ ::
39
+
40
+ my_gripper = Gripper.from_robot(robot=machine, name="my_gripper")
41
+
42
+ # Open the gripper.
43
+ await my_gripper.open()
44
+
45
+ For more information, see `Gripper component <https://docs.viam.com/dev/reference/apis/components/gripper/#open>`_.
46
+ """
47
+ ...
48
+
49
+ @abc.abstractmethod
50
+ async def grab(
51
+ self,
52
+ *,
53
+ extra: Optional[Dict[str, Any]] = None,
54
+ timeout: Optional[float] = None,
55
+ **kwargs,
56
+ ) -> bool:
57
+ """
58
+ Instruct the gripper to grab.
59
+
60
+ ::
61
+
62
+ my_gripper = Gripper.from_robot(robot=machine, name="my_gripper")
63
+
64
+ # Grab with the gripper.
65
+ grabbed = await my_gripper.grab()
66
+
67
+ Returns:
68
+ bool: Indicates if the gripper grabbed something.
69
+
70
+ For more information, see `Gripper component <https://docs.viam.com/dev/reference/apis/components/gripper/#grab>`_.
71
+ """
72
+ ...
73
+
74
+ @abc.abstractmethod
75
+ async def stop(
76
+ self,
77
+ *,
78
+ extra: Optional[Dict[str, Any]] = None,
79
+ timeout: Optional[float] = None,
80
+ **kwargs,
81
+ ):
82
+ """
83
+ Stop the gripper. It is assumed the gripper stops immediately.
84
+
85
+ ::
86
+
87
+ my_gripper = Gripper.from_robot(robot=machine, name="my_gripper")
88
+
89
+ # Stop the gripper.
90
+ await my_gripper.stop()
91
+
92
+ For more information, see `Gripper component <https://docs.viam.com/dev/reference/apis/components/gripper/#stop>`_.
93
+ """
94
+ ...
95
+
96
+ @abc.abstractmethod
97
+ async def is_moving(self) -> bool:
98
+ """
99
+ Get if the gripper is currently moving.
100
+
101
+ ::
102
+
103
+ my_gripper = Gripper.from_robot(robot=machine, name="my_gripper")
104
+
105
+ # Check whether the gripper is currently moving.
106
+ moving = await my_gripper.is_moving()
107
+ print('Moving:', moving)
108
+
109
+ Returns:
110
+ bool: Whether the gripper is moving.
111
+
112
+ For more information, see `Gripper component <https://docs.viam.com/dev/reference/apis/components/gripper/#is_moving>`_.
113
+ """
114
+ ...