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,105 @@
1
+ # TODO: Update type checking based with RSDK-4089
2
+ # pyright: reportGeneralTypeIssues=false
3
+ from google.api.httpbody_pb2 import HttpBody # type: ignore
4
+ from grpclib.server import Stream
5
+
6
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse
7
+ from viam.proto.component.camera import (
8
+ CameraServiceBase,
9
+ GetImageRequest,
10
+ GetImageResponse,
11
+ GetImagesRequest,
12
+ GetImagesResponse,
13
+ GetPointCloudRequest,
14
+ GetPointCloudResponse,
15
+ GetPropertiesRequest,
16
+ GetPropertiesResponse,
17
+ Image,
18
+ RenderFrameRequest,
19
+ )
20
+ from viam.resource.rpc_service_base import ResourceRPCServiceBase
21
+ from viam.utils import dict_to_struct, struct_to_dict
22
+
23
+ from . import Camera
24
+
25
+
26
+ class CameraRPCService(CameraServiceBase, ResourceRPCServiceBase[Camera]):
27
+ """
28
+ gRPC Service for a generic Camera
29
+ """
30
+
31
+ RESOURCE_TYPE = Camera
32
+
33
+ async def GetImage(self, stream: Stream[GetImageRequest, GetImageResponse]) -> None:
34
+ request = await stream.recv_message()
35
+ assert request is not None
36
+ name = request.name
37
+ camera = self.get_resource(name)
38
+
39
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
40
+ image = await camera.get_image(request.mime_type, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
41
+ response = GetImageResponse(mime_type=image.mime_type, image=image.data)
42
+ await stream.send_message(response)
43
+
44
+ async def GetImages(self, stream: Stream[GetImagesRequest, GetImagesResponse]) -> None:
45
+ request = await stream.recv_message()
46
+ assert request is not None
47
+ name = request.name
48
+ camera = self.get_resource(name)
49
+
50
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
51
+ images, metadata = await camera.get_images(timeout=timeout, metadata=stream.metadata)
52
+ img_bytes_lst = []
53
+ for img in images:
54
+ fmt = img.mime_type.to_proto()
55
+ img_bytes = img.data
56
+ img_bytes_lst.append(Image(source_name=name, format=fmt, image=img_bytes))
57
+ response = GetImagesResponse(images=img_bytes_lst, response_metadata=metadata)
58
+ await stream.send_message(response)
59
+
60
+ async def RenderFrame(self, stream: Stream[RenderFrameRequest, HttpBody]) -> None: # pyright: ignore [reportInvalidTypeForm]
61
+ request = await stream.recv_message()
62
+ assert request is not None
63
+ name = request.name
64
+ camera = self.get_resource(name)
65
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
66
+ image = await camera.get_image(request.mime_type, timeout=timeout, metadata=stream.metadata)
67
+ response = HttpBody(data=image.data, content_type=image.mime_type) # type: ignore
68
+ await stream.send_message(response)
69
+
70
+ async def GetPointCloud(self, stream: Stream[GetPointCloudRequest, GetPointCloudResponse]) -> None:
71
+ request = await stream.recv_message()
72
+ assert request is not None
73
+ name = request.name
74
+ camera = self.get_resource(name)
75
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
76
+ pc, mimetype = await camera.get_point_cloud(timeout=timeout, extra=struct_to_dict(request.extra), metadata=stream.metadata)
77
+ response = GetPointCloudResponse(mime_type=mimetype, point_cloud=pc)
78
+ await stream.send_message(response)
79
+
80
+ async def GetProperties(self, stream: Stream[GetPropertiesRequest, GetPropertiesResponse]) -> None:
81
+ request = await stream.recv_message()
82
+ assert request is not None
83
+ name = request.name
84
+ camera = self.get_resource(name)
85
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
86
+ properties = await camera.get_properties(timeout=timeout, metadata=stream.metadata)
87
+ await stream.send_message(properties)
88
+
89
+ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
90
+ request = await stream.recv_message()
91
+ assert request is not None
92
+ camera = self.get_resource(request.name)
93
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
94
+ result = await camera.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
95
+ response = DoCommandResponse(result=dict_to_struct(result))
96
+ await stream.send_message(response)
97
+
98
+ async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
99
+ request = await stream.recv_message()
100
+ assert request is not None
101
+ camera = self.get_resource(request.name)
102
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
103
+ geometries = await camera.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
104
+ response = GetGeometriesResponse(geometries=geometries)
105
+ await stream.send_message(response)
@@ -0,0 +1,65 @@
1
+ import abc
2
+ from logging import Logger
3
+ from typing import TYPE_CHECKING, Any, ClassVar, Dict, List, Mapping, Optional, SupportsBytes, SupportsFloat, Union, cast
4
+
5
+ from typing_extensions import Self
6
+
7
+ from viam.errors import MethodNotImplementedError
8
+ from viam.logging import getLogger
9
+ from viam.proto.common import Geometry
10
+ from viam.resource.base import ResourceBase
11
+
12
+ if TYPE_CHECKING:
13
+ from viam.resource.types import API
14
+ from viam.robot.client import RobotClient
15
+
16
+
17
+ ValueTypes = Union[bool, SupportsBytes, SupportsFloat, List, Mapping, str, None]
18
+
19
+
20
+ class ComponentBase(abc.ABC, ResourceBase):
21
+ """
22
+ Base component.
23
+ All components must inherit from this class.
24
+ """
25
+
26
+ API: ClassVar["API"]
27
+
28
+ def __init__(self, name: str, *, logger: Optional[Logger] = None):
29
+ self.name = name
30
+ self.logger = logger if logger is not None else getLogger(f"{self.API}.{name}")
31
+
32
+ @classmethod
33
+ def from_robot(cls, robot: "RobotClient", name: str) -> Self:
34
+ """Get the component named ``name`` from the provided robot.
35
+
36
+ Args:
37
+ robot (RobotClient): The robot
38
+ name (str): The name of the component
39
+
40
+ Returns:
41
+ Self: The component, if it exists on the robot
42
+ """
43
+ component = robot.get_component(cls.get_resource_name(name))
44
+ return cast(cls, component) # type: ignore
45
+
46
+ async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None, **kwargs) -> Mapping[str, ValueTypes]:
47
+ raise NotImplementedError()
48
+
49
+ async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> List[Geometry]:
50
+ """
51
+ Get all geometries associated with the component, in their current configuration, in the
52
+ `frame <https://docs.viam.com/operate/mobility/define-geometry/>`__ of the component.
53
+
54
+ ::
55
+
56
+ geometries = await component.get_geometries()
57
+
58
+ if geometries:
59
+ # Get the center of the first geometry
60
+ print(f"Pose of the first geometry's centerpoint: {geometries[0].center}")
61
+
62
+ Returns:
63
+ List[Geometry]: The geometries associated with the Component.
64
+ """
65
+ raise MethodNotImplementedError("get_geometries")
@@ -0,0 +1,18 @@
1
+ from viam.resource.registry import Registry, ResourceRegistration
2
+
3
+ from .client import EncoderClient
4
+ from .encoder import Encoder
5
+ from .service import EncoderRPCService
6
+
7
+ __all__ = [
8
+ "Encoder",
9
+ ]
10
+
11
+
12
+ Registry.register_api(
13
+ ResourceRegistration(
14
+ Encoder,
15
+ EncoderRPCService,
16
+ lambda name, channel: EncoderClient(name, channel),
17
+ )
18
+ )
@@ -0,0 +1,83 @@
1
+ from typing import Any, Dict, List, Mapping, Optional, Tuple
2
+
3
+ from grpclib.client import Channel
4
+
5
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry
6
+ from viam.proto.component.encoder import (
7
+ EncoderServiceStub,
8
+ GetPositionRequest,
9
+ GetPositionResponse,
10
+ GetPropertiesRequest,
11
+ GetPropertiesResponse,
12
+ PositionType,
13
+ ResetPositionRequest,
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 .encoder import Encoder
19
+
20
+
21
+ class EncoderClient(Encoder, ReconfigurableResourceRPCClientBase):
22
+ """
23
+ gRPC client for the Encoder component.
24
+ """
25
+
26
+ def __init__(self, name: str, channel: Channel):
27
+ self.channel = channel
28
+ self.client = EncoderServiceStub(channel)
29
+ super().__init__(name)
30
+
31
+ async def reset_position(
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 = ResetPositionRequest(name=self.name, extra=dict_to_struct(extra))
40
+ await self.client.ResetPosition(request, timeout=timeout, metadata=md)
41
+
42
+ async def get_position(
43
+ self,
44
+ position_type: Optional[PositionType.ValueType] = None,
45
+ *,
46
+ extra: Optional[Dict[str, Any]] = None,
47
+ timeout: Optional[float] = None,
48
+ **kwargs,
49
+ ) -> Tuple[float, PositionType.ValueType]:
50
+ md = kwargs.get("metadata", self.Metadata()).proto
51
+ request = GetPositionRequest(name=self.name, position_type=position_type, extra=dict_to_struct(extra))
52
+ response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout, metadata=md)
53
+ return response.value, response.position_type
54
+
55
+ async def get_properties(
56
+ self,
57
+ *,
58
+ extra: Optional[Dict[str, Any]] = None,
59
+ timeout: Optional[float] = None,
60
+ **kwargs,
61
+ ) -> Encoder.Properties:
62
+ md = kwargs.get("metadata", self.Metadata()).proto
63
+ request = GetPropertiesRequest(name=self.name, extra=dict_to_struct(extra))
64
+ response: GetPropertiesResponse = await self.client.GetProperties(request, timeout=timeout, metadata=md)
65
+ return Encoder.Properties(
66
+ ticks_count_supported=response.ticks_count_supported, angle_degrees_supported=response.angle_degrees_supported
67
+ )
68
+
69
+ async def do_command(
70
+ self,
71
+ command: Mapping[str, ValueTypes],
72
+ *,
73
+ timeout: Optional[float] = None,
74
+ **kwargs,
75
+ ) -> Mapping[str, ValueTypes]:
76
+ md = kwargs.get("metadata", self.Metadata()).proto
77
+ request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
78
+ response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
79
+ return struct_to_dict(response.result)
80
+
81
+ async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
82
+ md = kwargs.get("metadata", self.Metadata())
83
+ return await get_geometries(self.client, self.name, extra, timeout, md)
@@ -0,0 +1,118 @@
1
+ import abc
2
+ from dataclasses import dataclass
3
+ from typing import Any, Dict, Final, Optional, Tuple
4
+
5
+ from viam.proto.component.encoder import PositionType
6
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
7
+
8
+ from ..component_base import ComponentBase
9
+
10
+
11
+ class Encoder(ComponentBase):
12
+ @dataclass
13
+ class Properties:
14
+ ticks_count_supported: bool
15
+ angle_degrees_supported: bool
16
+
17
+ """
18
+ Encoder represents a physical encoder.
19
+
20
+ This acts as an abstract base class for any drivers representing specific
21
+ encoder implementations. This cannot be used on its own. If the ``__init__()`` function is
22
+ overridden, it must call the ``super().__init__()`` function.
23
+
24
+ ::
25
+
26
+ from viam.components.encoder import Encoder
27
+
28
+ For more information, see `Encoder component <https://docs.viam.com/dev/reference/apis/components/encoder/>`_.
29
+ """
30
+
31
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
32
+ RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "encoder"
33
+ )
34
+
35
+ @abc.abstractmethod
36
+ async def reset_position(
37
+ self,
38
+ *,
39
+ extra: Optional[Dict[str, Any]] = None,
40
+ timeout: Optional[float] = None,
41
+ **kwargs,
42
+ ):
43
+ """
44
+ Set the current position to be the new zero (home) position.
45
+
46
+ ::
47
+
48
+ my_encoder = Encoder.from_robot(robot=machine, name='my_encoder')
49
+
50
+ # Reset the zero position of the encoder.
51
+ await my_encoder.reset_position()
52
+
53
+
54
+ For more information, see `Encoder component <https://docs.viam.com/dev/reference/apis/components/encoder/#resetposition>`_.
55
+ """
56
+ ...
57
+
58
+ @abc.abstractmethod
59
+ async def get_position(
60
+ self,
61
+ position_type: Optional[PositionType.ValueType] = None,
62
+ *,
63
+ extra: Optional[Dict[str, Any]] = None,
64
+ timeout: Optional[float] = None,
65
+ **kwargs,
66
+ ) -> Tuple[float, PositionType.ValueType]:
67
+ """
68
+ Report the position of the encoder.
69
+ The value returned is the current position in terms of it's ``position_type``.
70
+ The position will be either in relative units (ticks away from a zero position) for
71
+ ``PositionType.POSITION_TYPE_TICKS_COUNT`` or absolute units (degrees along a circle)
72
+ for ``PositionType.POSITION_TYPE_ANGLE_DEGREES``.
73
+
74
+ ::
75
+
76
+ my_encoder = Encoder.from_robot(robot=machine, name='my_encoder')
77
+
78
+ # Get the position of the encoder in ticks
79
+ position = await my_encoder.get_position(PositionType.POSITION_TYPE_TICKS_COUNT)
80
+ print("The encoder position is currently ", position[0], position[1])
81
+
82
+ Args:
83
+ position_type (PositionType): The desired output type of the position.
84
+
85
+ Returns:
86
+ Tuple[float, PositionType]:
87
+ A tuple containing two values; the first [0] the position of the encoder which can either be
88
+ ticks since last zeroing for a relative encoder or degrees for an absolute encoder, and the second [1] the type of
89
+ position the encoder returns (ticks or degrees).
90
+
91
+ For more information, see `Encoder component <https://docs.viam.com/dev/reference/apis/components/encoder/#getposition>`_.
92
+ """
93
+ ...
94
+
95
+ @abc.abstractmethod
96
+ async def get_properties(
97
+ self,
98
+ *,
99
+ extra: Optional[Dict[str, Any]] = None,
100
+ timeout: Optional[float] = None,
101
+ **kwargs,
102
+ ) -> Properties:
103
+ """
104
+ Return a dictionary of the types of position reporting this encoder supports.
105
+
106
+ ::
107
+
108
+ my_encoder = Encoder.from_robot(robot=machine, name='my_encoder')
109
+
110
+ # Get whether the encoder returns position in ticks or degrees.
111
+ properties = await my_encoder.get_properties()
112
+
113
+ Returns:
114
+ Encoder.Properties: Map of position types to supported status.
115
+
116
+ For more information, see `Encoder component <https://docs.viam.com/dev/reference/apis/components/encoder/#getproperties>`_.
117
+ """
118
+ ...
@@ -0,0 +1,72 @@
1
+ from grpclib.server import Stream
2
+
3
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse
4
+ from viam.proto.component.encoder import (
5
+ EncoderServiceBase,
6
+ GetPositionRequest,
7
+ GetPositionResponse,
8
+ GetPropertiesRequest,
9
+ GetPropertiesResponse,
10
+ ResetPositionRequest,
11
+ ResetPositionResponse,
12
+ )
13
+ from viam.resource.rpc_service_base import ResourceRPCServiceBase
14
+ from viam.utils import dict_to_struct, struct_to_dict
15
+
16
+ from .encoder import Encoder
17
+
18
+
19
+ class EncoderRPCService(EncoderServiceBase, ResourceRPCServiceBase[Encoder]):
20
+ """
21
+ gRPC Service for an Encoder
22
+ """
23
+
24
+ RESOURCE_TYPE = Encoder
25
+
26
+ async def ResetPosition(self, stream: Stream[ResetPositionRequest, ResetPositionResponse]) -> None:
27
+ request = await stream.recv_message()
28
+ assert request is not None
29
+ name = request.name
30
+ encoder = self.get_resource(name)
31
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
32
+ await encoder.reset_position(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
33
+ await stream.send_message(ResetPositionResponse())
34
+
35
+ async def GetPosition(self, stream: Stream[GetPositionRequest, GetPositionResponse]) -> None:
36
+ request = await stream.recv_message()
37
+ assert request is not None
38
+ name = request.name
39
+ encoder = self.get_resource(name)
40
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
41
+ position, pos_type = await encoder.get_position(
42
+ position_type=request.position_type, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata
43
+ )
44
+ await stream.send_message(GetPositionResponse(value=position, position_type=pos_type))
45
+
46
+ async def GetProperties(self, stream: Stream[GetPropertiesRequest, GetPropertiesResponse]) -> None:
47
+ request = await stream.recv_message()
48
+ assert request is not None
49
+ name = request.name
50
+ encoder = self.get_resource(name)
51
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
52
+ properties = await encoder.get_properties(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
53
+ response = GetPropertiesResponse(**properties.__dict__)
54
+ await stream.send_message(response)
55
+
56
+ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
57
+ request = await stream.recv_message()
58
+ assert request is not None
59
+ encoder = self.get_resource(request.name)
60
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
61
+ result = await encoder.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
62
+ response = DoCommandResponse(result=dict_to_struct(result))
63
+ await stream.send_message(response)
64
+
65
+ async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
66
+ request = await stream.recv_message()
67
+ assert request is not None
68
+ arm = self.get_resource(request.name)
69
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
70
+ geometries = await arm.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
71
+ response = GetGeometriesResponse(geometries=geometries)
72
+ await stream.send_message(response)
@@ -0,0 +1,11 @@
1
+ from viam.resource.registry import Registry, ResourceRegistration
2
+
3
+ from .client import GantryClient
4
+ from .gantry import Gantry
5
+ from .service import GantryRPCService
6
+
7
+ __all__ = [
8
+ "Gantry",
9
+ ]
10
+
11
+ Registry.register_api(ResourceRegistration(Gantry, GantryRPCService, lambda name, channel: GantryClient(name, channel)))
@@ -0,0 +1,115 @@
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.gantry import (
7
+ GantryServiceStub,
8
+ GetLengthsRequest,
9
+ GetLengthsResponse,
10
+ GetPositionRequest,
11
+ GetPositionResponse,
12
+ HomeRequest,
13
+ HomeResponse,
14
+ IsMovingRequest,
15
+ IsMovingResponse,
16
+ MoveToPositionRequest,
17
+ StopRequest,
18
+ )
19
+ from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
20
+ from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
21
+
22
+ from .gantry import Gantry
23
+
24
+
25
+ class GantryClient(Gantry, ReconfigurableResourceRPCClientBase):
26
+ """
27
+ gRPC client for the Gantry component.
28
+ """
29
+
30
+ def __init__(self, name: str, channel: Channel):
31
+ self.channel = channel
32
+ self.client = GantryServiceStub(channel)
33
+ super().__init__(name)
34
+
35
+ async def get_position(
36
+ self,
37
+ *,
38
+ extra: Optional[Dict[str, Any]] = None,
39
+ timeout: Optional[float] = None,
40
+ **kwargs,
41
+ ) -> List[float]:
42
+ md = kwargs.get("metadata", self.Metadata()).proto
43
+ request = GetPositionRequest(name=self.name, extra=dict_to_struct(extra))
44
+ response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout, metadata=md)
45
+ return list(response.positions_mm)
46
+
47
+ async def move_to_position(
48
+ self,
49
+ positions: List[float],
50
+ speeds: List[float],
51
+ *,
52
+ extra: Optional[Dict[str, Any]] = None,
53
+ timeout: Optional[float] = None,
54
+ **kwargs,
55
+ ):
56
+ md = kwargs.get("metadata", self.Metadata()).proto
57
+ request = MoveToPositionRequest(name=self.name, positions_mm=positions, speeds_mm_per_sec=speeds, extra=dict_to_struct(extra))
58
+ await self.client.MoveToPosition(request, timeout=timeout, metadata=md)
59
+
60
+ async def home(
61
+ self,
62
+ *,
63
+ extra: Optional[Dict[str, Any]] = None,
64
+ timeout: Optional[float] = None,
65
+ **kwargs,
66
+ ) -> bool:
67
+ md = kwargs.get("metadata", self.Metadata()).proto
68
+ request = HomeRequest(name=self.name, extra=dict_to_struct(extra))
69
+ response: HomeResponse = await self.client.Home(request, timeout=timeout, metadata=md)
70
+ return response.homed
71
+
72
+ async def get_lengths(
73
+ self,
74
+ *,
75
+ extra: Optional[Dict[str, Any]] = None,
76
+ timeout: Optional[float] = None,
77
+ **kwargs,
78
+ ) -> List[float]:
79
+ md = kwargs.get("metadata", self.Metadata()).proto
80
+ request = GetLengthsRequest(name=self.name, extra=dict_to_struct(extra))
81
+ response: GetLengthsResponse = await self.client.GetLengths(request, timeout=timeout, metadata=md)
82
+ return list(response.lengths_mm)
83
+
84
+ async def stop(
85
+ self,
86
+ *,
87
+ extra: Optional[Dict[str, Any]] = None,
88
+ timeout: Optional[float] = None,
89
+ **kwargs,
90
+ ):
91
+ md = kwargs.get("metadata", self.Metadata()).proto
92
+ request = StopRequest(name=self.name, extra=dict_to_struct(extra))
93
+ await self.client.Stop(request, timeout=timeout, metadata=md)
94
+
95
+ async def is_moving(self, *, timeout: Optional[float] = None, **kwargs) -> bool:
96
+ md = kwargs.get("metadata", self.Metadata()).proto
97
+ request = IsMovingRequest(name=self.name)
98
+ response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout, metadata=md)
99
+ return response.is_moving
100
+
101
+ async def do_command(
102
+ self,
103
+ command: Mapping[str, ValueTypes],
104
+ *,
105
+ timeout: Optional[float] = None,
106
+ **kwargs,
107
+ ) -> Mapping[str, ValueTypes]:
108
+ md = kwargs.get("metadata", self.Metadata()).proto
109
+ request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
110
+ response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
111
+ return struct_to_dict(response.result)
112
+
113
+ async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
114
+ md = kwargs.get("metadata", self.Metadata())
115
+ return await get_geometries(self.client, self.name, extra, timeout, md)