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,414 @@
1
+ import abc
2
+ import sys
3
+ from datetime import timedelta
4
+ from typing import Any, Dict, Final, List, Optional
5
+
6
+ from viam.proto.component.board import PowerMode, ReadAnalogReaderResponse, StreamTicksResponse
7
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
8
+ from viam.streams import Stream
9
+
10
+ from ..component_base import ComponentBase
11
+
12
+ if sys.version_info >= (3, 10):
13
+ from typing import TypeAlias
14
+ else:
15
+ from typing_extensions import TypeAlias
16
+
17
+ Tick = StreamTicksResponse
18
+ TickStream = Stream[Tick]
19
+
20
+
21
+ class Board(ComponentBase):
22
+ """
23
+ Board represents a physical general purpose compute board that contains various
24
+ components such as analog readers/writers, and digital interrupts.
25
+
26
+ This acts as an abstract base class for any drivers representing specific
27
+ board implementations. This cannot be used on its own. If the ``__init__()`` function is
28
+ overridden, it must call the ``super().__init__()`` function.
29
+
30
+ ::
31
+
32
+ from viam.components.board import Board
33
+
34
+ For more information, see `Board component <https://docs.viam.com/dev/reference/apis/components/board/>`_.
35
+ """
36
+
37
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
38
+ RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "board"
39
+ )
40
+
41
+ class Analog:
42
+ """
43
+ Analog represents an analog pin reader or writer that resides on a Board.
44
+ """
45
+
46
+ name: str
47
+ """The name of the analog pin"""
48
+
49
+ Value: "TypeAlias" = ReadAnalogReaderResponse
50
+ """
51
+ Value contains the result of reading an analog reader. It contains the raw data read,
52
+ the reader's minimum and maximum possible values, and its step size (the minimum possible
53
+ change between values it can read).
54
+
55
+ For more information, see `analogs <https://docs.viam.com/dev/reference/apis/components/board/#analogs>`_.
56
+ """
57
+
58
+ def __init__(self, name: str):
59
+ self.name = name
60
+
61
+ @abc.abstractmethod
62
+ async def read(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> Value:
63
+ """
64
+ Read the current value from the reader.
65
+
66
+ ::
67
+
68
+ my_board = Board.from_robot(robot=machine, name="my_board")
69
+
70
+ # Get the Analog "my_example_analog_reader".
71
+ reader = await my_board.analog_by_name(
72
+ name="my_example_analog_reader")
73
+
74
+ # Get the value of the digital signal "my_example_analog_reader" has most
75
+ # recently measured.
76
+ reading = await reader.read()
77
+
78
+ Returns:
79
+ Value: The current value, including the min, max, and step_size of the reader.
80
+
81
+ For more information, see `Board component Analog API <https://docs.viam.com/dev/reference/apis/components/board/#analog-api>`_.
82
+ """
83
+ ...
84
+
85
+ @abc.abstractmethod
86
+ async def write(self, value: int, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs):
87
+ """
88
+ Write a value to the Analog writer.
89
+
90
+ ::
91
+
92
+ my_board = Board.from_robot(robot=machine, name="my_board")
93
+
94
+ # Get the Analog "my_example_analog_writer".
95
+ writer = await my_board.analog_by_name(
96
+ name="my_example_analog_writer")
97
+
98
+ await writer.write(42)
99
+
100
+ Args:
101
+ value (int): Value to write to the analog writer.
102
+
103
+ For more information, see `Board component Analog API <https://docs.viam.com/dev/reference/apis/components/board/#analog-api>`_.
104
+ """
105
+ ...
106
+
107
+ class DigitalInterrupt:
108
+ """
109
+ DigitalInterrupt represents a configured interrupt on the Board that
110
+ when interrupted, calls the added callbacks. Post processors can
111
+ be added to modify what Value it ultimately returns.
112
+
113
+ For more information, see `digital_interrupts <https://docs.viam.com/dev/reference/apis/components/board/#digital_interrupts>`_.
114
+ """
115
+
116
+ name: str
117
+ """The name of the digital interrupt."""
118
+
119
+ def __init__(self, name: str):
120
+ self.name = name
121
+
122
+ @abc.abstractmethod
123
+ async def value(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> int:
124
+ """
125
+ Get the current value of the interrupt,
126
+ which is based on the type of interrupt.
127
+
128
+ ::
129
+
130
+ my_board = Board.from_robot(robot=machine, name="my_board")
131
+
132
+ # Get the DigitalInterrupt "my_example_digital_interrupt".
133
+ interrupt = await my_board.digital_interrupt_by_name(
134
+ name="my_example_digital_interrupt")
135
+
136
+ # Get the amount of times this DigitalInterrupt has been interrupted with a
137
+ # tick.
138
+ count = await interrupt.value()
139
+
140
+ Returns:
141
+ int: The current value.
142
+
143
+ For more information, see
144
+ `Board component DigitalInterrupt API <https://docs.viam.com/dev/reference/apis/components/board/#digitalinterrupt-api>`_.
145
+ """
146
+ ...
147
+
148
+ class GPIOPin:
149
+ """
150
+ Abstract representation of an individual GPIO pin on a board.
151
+ """
152
+
153
+ name: str
154
+ """The name of the GPIO pin."""
155
+
156
+ def __init__(self, name: str):
157
+ self.name = name
158
+
159
+ @abc.abstractmethod
160
+ async def set(self, high: bool, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs):
161
+ """
162
+ Set the pin to either low or high.
163
+
164
+ ::
165
+
166
+ my_board = Board.from_robot(robot=machine, name="my_board")
167
+
168
+ # Get the GPIOPin with pin number 15.
169
+ pin = await my_board.gpio_pin_by_name(name="15")
170
+
171
+ # Set the pin to high.
172
+ await pin.set(high=True)
173
+
174
+ Args:
175
+ high (bool): When true, sets the pin to high. When false, sets the pin to low.
176
+
177
+ For more information, see `GPIOPin API <https://docs.viam.com/dev/reference/apis/components/board/#gpiopin-api>`_.
178
+ """
179
+ ...
180
+
181
+ @abc.abstractmethod
182
+ async def get(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> bool:
183
+ """
184
+ Get the high/low state of the pin.
185
+
186
+ ::
187
+
188
+ my_board = Board.from_robot(robot=machine, name="my_board")
189
+
190
+ # Get the GPIOPin with pin number 15.
191
+ pin = await my_board.gpio_pin_by_name(name="15")
192
+
193
+ # Get if it is true or false that the state of the pin is high.
194
+ high = await pin.get()
195
+
196
+ Returns:
197
+ bool: Indicates if the state of the pin is high.
198
+
199
+ For more information, see `GPIOPin API <https://docs.viam.com/dev/reference/apis/components/board/#gpiopin-api>`_.
200
+ """
201
+ ...
202
+
203
+ @abc.abstractmethod
204
+ async def get_pwm(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> float:
205
+ """
206
+ Get the pin's given duty cycle.
207
+
208
+ ::
209
+
210
+ my_board = Board.from_robot(robot=machine, name="my_board")
211
+
212
+ # Get the GPIOPin with pin number 15.
213
+ pin = await my_board.gpio_pin_by_name(name="15")
214
+
215
+ # Get if it is true or false that the state of the pin is high.
216
+ duty_cycle = await pin.get_pwm()
217
+
218
+ Returns:
219
+ float: The duty cycle.
220
+
221
+ For more information, see `GPIOPin API <https://docs.viam.com/dev/reference/apis/components/board/#gpiopin-api>`_.
222
+ """
223
+ ...
224
+
225
+ @abc.abstractmethod
226
+ async def set_pwm(self, duty_cycle: float, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs):
227
+ """
228
+ Set the pin to the given ``duty_cycle``.
229
+
230
+ ::
231
+
232
+ my_board = Board.from_robot(robot=machine, name="my_board")
233
+
234
+ # Get the GPIOPin with pin number 15.
235
+ pin = await my_board.gpio_pin_by_name(name="15")
236
+
237
+ # Set the duty cycle to .6, meaning that this pin will be in the high state for
238
+ # 60% of the duration of the PWM interval period.
239
+ await pin.set_pwm(duty_cycle=.6)
240
+
241
+ Args:
242
+ duty_cycle (float): The duty cycle.
243
+
244
+ For more information, see `GPIOPin API <https://docs.viam.com/dev/reference/apis/components/board/#gpiopin-api>`_.
245
+ """
246
+ ...
247
+
248
+ @abc.abstractmethod
249
+ async def get_pwm_frequency(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> int:
250
+ """
251
+ Get the PWM frequency of the pin.
252
+
253
+ ::
254
+
255
+ my_board = Board.from_robot(robot=machine, name="my_board")
256
+
257
+ # Get the GPIOPin with pin number 15.
258
+ pin = await my_board.gpio_pin_by_name(name="15")
259
+
260
+ # Get the PWM frequency of this pin.
261
+ freq = await pin.get_pwm_frequency()
262
+
263
+ Returns:
264
+ int: The PWM frequency.
265
+
266
+ For more information, see `GPIOPin API <https://docs.viam.com/dev/reference/apis/components/board/#gpiopin-api>`_.
267
+ """
268
+ ...
269
+
270
+ @abc.abstractmethod
271
+ async def set_pwm_frequency(
272
+ self,
273
+ frequency: int,
274
+ *,
275
+ extra: Optional[Dict[str, Any]] = None,
276
+ timeout: Optional[float] = None,
277
+ **kwargs,
278
+ ):
279
+ """
280
+ Set the pin to the given PWM ``frequency`` (in Hz).
281
+ When ``frequency`` is 0, it will use the board's default PWM frequency.
282
+
283
+ ::
284
+
285
+ my_board = Board.from_robot(robot=machine, name="my_board")
286
+
287
+ # Get the GPIOPin with pin number 15.
288
+ pin = await my_board.gpio_pin_by_name(name="15")
289
+
290
+ # Set the PWM frequency of this pin to 1600 Hz.
291
+ high = await pin.set_pwm_frequency(frequency=1600)
292
+
293
+ Args:
294
+ frequency (int): The frequency, in Hz.
295
+
296
+ For more information, see `GPIOPin API <https://docs.viam.com/dev/reference/apis/components/board/#gpiopin-api>`_.
297
+ """
298
+ ...
299
+
300
+ @abc.abstractmethod
301
+ async def analog_by_name(self, name: str) -> Analog:
302
+ """
303
+ Get an Analog (reader or writer) by ``name``.
304
+
305
+ ::
306
+
307
+ my_board = Board.from_robot(robot=machine, name="my_board")
308
+
309
+ # Get the Analog "my_example_analog_reader".
310
+ reader = await my_board.analog_by_name(name="my_example_analog_reader")
311
+
312
+ Args:
313
+ name (str): Name of the analog reader to be retrieved.
314
+
315
+ Returns:
316
+ Analog: The analog reader or writer.
317
+
318
+ For more information, see `Board component <https://docs.viam.com/dev/reference/apis/components/board/#analogbyname>`_.
319
+ """
320
+ ...
321
+
322
+ @abc.abstractmethod
323
+ async def digital_interrupt_by_name(self, name: str) -> DigitalInterrupt:
324
+ """
325
+ Get a DigitalInterrupt by ``name``.
326
+
327
+ ::
328
+
329
+ my_board = Board.from_robot(robot=machine, name="my_board")
330
+
331
+ # Get the DigitalInterrupt "my_example_digital_interrupt".
332
+ interrupt = await my_board.digital_interrupt_by_name(
333
+ name="my_example_digital_interrupt")
334
+
335
+ Args:
336
+ name (str): Name of the digital interrupt.
337
+
338
+ Returns:
339
+ DigitalInterrupt: The digital interrupt.
340
+
341
+ For more information, see `Board component <https://docs.viam.com/dev/reference/apis/components/board/#digitalinterruptbyname>`_.
342
+ """
343
+ ...
344
+
345
+ @abc.abstractmethod
346
+ async def gpio_pin_by_name(self, name: str) -> GPIOPin:
347
+ """
348
+ Get a GPIO Pin by ``name``.
349
+
350
+ ::
351
+
352
+ my_board = Board.from_robot(robot=machine, name="my_board")
353
+
354
+ # Get the GPIOPin with pin number 15.
355
+ pin = await my_board.gpio_pin_by_name(name="15")
356
+
357
+ Args:
358
+ name (str): Name of the GPIO pin.
359
+
360
+ Returns:
361
+ GPIOPin: The pin.
362
+
363
+ For more information, see `Board component <https://docs.viam.com/dev/reference/apis/components/board/#gpiopinbyname>`_.
364
+ """
365
+ ...
366
+
367
+ @abc.abstractmethod
368
+ async def set_power_mode(
369
+ self, mode: PowerMode.ValueType, duration: Optional[timedelta] = None, *, timeout: Optional[float] = None, **kwargs
370
+ ):
371
+ """
372
+ Set the board to the indicated power mode.
373
+
374
+ ::
375
+
376
+ my_board = Board.from_robot(robot=machine, name="my_board")
377
+
378
+ # Set the power mode of the board to OFFLINE_DEEP.
379
+ status = await my_board.set_power_mode(mode=PowerMode.POWER_MODE_OFFLINE_DEEP)
380
+
381
+ Args:
382
+ mode (PowerMode): The desired power mode.
383
+ duration (Optional[timedelta]): Requested duration to stay in power mode.
384
+
385
+ For more information, see `Board component <https://docs.viam.com/dev/reference/apis/components/board/#setpowermode>`_.
386
+ """
387
+ ...
388
+
389
+ @abc.abstractmethod
390
+ async def stream_ticks(self, interrupts: List[DigitalInterrupt], *, timeout: Optional[float] = None, **kwargs) -> TickStream:
391
+ """
392
+ Stream digital interrupt ticks.
393
+
394
+ ::
395
+
396
+
397
+ my_board = Board.from_robot(robot=machine, name="my_board")
398
+ di8 = await my_board.digital_interrupt_by_name(name="8")
399
+ di11 = await my_board.digital_interrupt_by_name(name="11")
400
+
401
+ # Iterate over stream of ticks from pins 8 and 11.
402
+ async for tick in await my_board.stream_ticks([di8, di11]):
403
+ print(f"Pin {tick.pin_name} changed to {'high' if tick.high else 'low'} at {tick.time}")
404
+
405
+
406
+ Args:
407
+ interrupts (List[DigitalInterrupt]) : list of digital interrupts to receive ticks from.
408
+
409
+ Returns:
410
+ TickStream: stream of ticks.
411
+
412
+ For more information, see `Board component <https://docs.viam.com/dev/reference/apis/components/board/#streamticks>`_.
413
+ """
414
+ ...
@@ -0,0 +1,241 @@
1
+ from datetime import timedelta
2
+ from typing import Any, Dict, List, Mapping, Optional
3
+
4
+ from google.protobuf.duration_pb2 import Duration
5
+ from grpclib.client import Channel
6
+ from grpclib.client import Stream as ClientStream
7
+
8
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry
9
+ from viam.proto.component.board import (
10
+ BoardServiceStub,
11
+ GetDigitalInterruptValueRequest,
12
+ GetDigitalInterruptValueResponse,
13
+ GetGPIORequest,
14
+ GetGPIOResponse,
15
+ PowerMode,
16
+ PWMFrequencyRequest,
17
+ PWMFrequencyResponse,
18
+ PWMRequest,
19
+ PWMResponse,
20
+ ReadAnalogReaderRequest,
21
+ SetGPIORequest,
22
+ SetPowerModeRequest,
23
+ SetPWMFrequencyRequest,
24
+ SetPWMRequest,
25
+ StreamTicksRequest,
26
+ StreamTicksResponse,
27
+ WriteAnalogRequest,
28
+ )
29
+ from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase, ResourceRPCClientBase
30
+ from viam.streams import StreamWithIterator
31
+ from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
32
+
33
+ from .board import Board, TickStream
34
+
35
+
36
+ class AnalogClient(Board.Analog):
37
+ def __init__(self, name: str, board: "BoardClient"):
38
+ self.board = board
39
+ super().__init__(name)
40
+
41
+ async def read(
42
+ self,
43
+ *,
44
+ extra: Optional[Dict[str, Any]] = None,
45
+ timeout: Optional[float] = None,
46
+ **kwargs,
47
+ ) -> Board.Analog.Value:
48
+ md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
49
+ request = ReadAnalogReaderRequest(board_name=self.board.name, analog_reader_name=self.name, extra=dict_to_struct(extra))
50
+ return await self.board.client.ReadAnalogReader(request, timeout=timeout, metadata=md)
51
+
52
+ async def write(
53
+ self,
54
+ value: int,
55
+ *,
56
+ extra: Optional[Dict[str, Any]] = None,
57
+ timeout: Optional[float] = None,
58
+ **kwargs,
59
+ ):
60
+ md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
61
+ request = WriteAnalogRequest(name=self.board.name, pin=self.name, value=value, extra=dict_to_struct(extra))
62
+ await self.board.client.WriteAnalog(request, timeout=timeout, metadata=md)
63
+
64
+
65
+ class DigitalInterruptClient(Board.DigitalInterrupt):
66
+ def __init__(self, name: str, board: "BoardClient"):
67
+ self.board = board
68
+ super().__init__(name)
69
+
70
+ async def value(
71
+ self,
72
+ *,
73
+ extra: Optional[Dict[str, Any]] = None,
74
+ timeout: Optional[float] = None,
75
+ **kwargs,
76
+ ) -> int:
77
+ md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
78
+ request = GetDigitalInterruptValueRequest(board_name=self.board.name, digital_interrupt_name=self.name, extra=dict_to_struct(extra))
79
+ response: GetDigitalInterruptValueResponse = await self.board.client.GetDigitalInterruptValue(request, timeout=timeout, metadata=md)
80
+ return response.value
81
+
82
+
83
+ class GPIOPinClient(Board.GPIOPin):
84
+ def __init__(self, name: str, board: "BoardClient"):
85
+ self.board = board
86
+ super().__init__(name)
87
+
88
+ async def get(
89
+ self,
90
+ *,
91
+ extra: Optional[Dict[str, Any]] = None,
92
+ timeout: Optional[float] = None,
93
+ **kwargs,
94
+ ) -> bool:
95
+ md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
96
+ request = GetGPIORequest(name=self.board.name, pin=self.name, extra=dict_to_struct(extra))
97
+ response: GetGPIOResponse = await self.board.client.GetGPIO(request, timeout=timeout, metadata=md)
98
+ return response.high
99
+
100
+ async def set(
101
+ self,
102
+ high: bool,
103
+ *,
104
+ extra: Optional[Dict[str, Any]] = None,
105
+ timeout: Optional[float] = None,
106
+ **kwargs,
107
+ ):
108
+ md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
109
+ request = SetGPIORequest(name=self.board.name, pin=self.name, high=high, extra=dict_to_struct(extra))
110
+ await self.board.client.SetGPIO(request, timeout=timeout, metadata=md)
111
+
112
+ async def get_pwm(
113
+ self,
114
+ *,
115
+ extra: Optional[Dict[str, Any]] = None,
116
+ timeout: Optional[float] = None,
117
+ **kwargs,
118
+ ) -> float:
119
+ md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
120
+ request = PWMRequest(name=self.board.name, pin=self.name, extra=dict_to_struct(extra))
121
+ response: PWMResponse = await self.board.client.PWM(request, timeout=timeout, metadata=md)
122
+ return response.duty_cycle_pct
123
+
124
+ async def set_pwm(
125
+ self,
126
+ duty_cycle: float,
127
+ *,
128
+ extra: Optional[Dict[str, Any]] = None,
129
+ timeout: Optional[float] = None,
130
+ **kwargs,
131
+ ):
132
+ md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
133
+ request = SetPWMRequest(name=self.board.name, pin=self.name, duty_cycle_pct=duty_cycle, extra=dict_to_struct(extra))
134
+ await self.board.client.SetPWM(request, timeout=timeout, metadata=md)
135
+
136
+ async def get_pwm_frequency(
137
+ self,
138
+ *,
139
+ extra: Optional[Dict[str, Any]] = None,
140
+ timeout: Optional[float] = None,
141
+ **kwargs,
142
+ ) -> int:
143
+ md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
144
+ request = PWMFrequencyRequest(name=self.board.name, pin=self.name, extra=dict_to_struct(extra))
145
+ response: PWMFrequencyResponse = await self.board.client.PWMFrequency(request, timeout=timeout, metadata=md)
146
+ return response.frequency_hz
147
+
148
+ async def set_pwm_frequency(
149
+ self,
150
+ frequency: int,
151
+ *,
152
+ extra: Optional[Dict[str, Any]] = None,
153
+ timeout: Optional[float] = None,
154
+ **kwargs,
155
+ ):
156
+ md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
157
+ request = SetPWMFrequencyRequest(name=self.board.name, pin=self.name, frequency_hz=frequency, extra=dict_to_struct(extra))
158
+ await self.board.client.SetPWMFrequency(request, timeout=timeout, metadata=md)
159
+
160
+
161
+ class BoardClient(Board, ReconfigurableResourceRPCClientBase):
162
+ """
163
+ gRPC client for the Board component.
164
+ """
165
+
166
+ _analog_names: List[str]
167
+ _digital_interrupt_names: List[str]
168
+
169
+ def __init__(self, name: str, channel: Channel):
170
+ self.channel = channel
171
+ self.client = BoardServiceStub(channel)
172
+ self._analog_names = []
173
+ self._digital_interrupt_names = []
174
+ super().__init__(name)
175
+
176
+ async def analog_by_name(self, name: str) -> Board.Analog:
177
+ self._analog_names.append(name)
178
+ return AnalogClient(name, self)
179
+
180
+ async def digital_interrupt_by_name(self, name: str) -> Board.DigitalInterrupt:
181
+ self._digital_interrupt_names.append(name)
182
+ return DigitalInterruptClient(name, self)
183
+
184
+ async def gpio_pin_by_name(self, name: str) -> Board.GPIOPin:
185
+ return GPIOPinClient(name, self)
186
+
187
+ async def do_command(
188
+ self,
189
+ command: Mapping[str, ValueTypes],
190
+ *,
191
+ timeout: Optional[float] = None,
192
+ **kwargs,
193
+ ) -> Mapping[str, ValueTypes]:
194
+ md = kwargs.get("metadata", self.Metadata()).proto
195
+ request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
196
+ response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
197
+ return struct_to_dict(response.result)
198
+
199
+ async def set_power_mode(
200
+ self,
201
+ mode: PowerMode.ValueType,
202
+ duration: Optional[timedelta] = None,
203
+ *,
204
+ timeout: Optional[float] = None,
205
+ **kwargs,
206
+ ):
207
+ md = kwargs.get("metadata", self.Metadata()).proto
208
+ duration_pb: Optional[Duration] = None
209
+ if duration is not None:
210
+ duration_pb = [(d, d.FromTimedelta(duration)) for d in [Duration()]][0][0]
211
+ request = SetPowerModeRequest(name=self.name, power_mode=mode, duration=duration_pb)
212
+ await self.client.SetPowerMode(request, timeout=timeout, metadata=md)
213
+
214
+ async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
215
+ md = kwargs.get("metadata", self.Metadata())
216
+ return await get_geometries(self.client, self.name, extra, timeout, md)
217
+
218
+ async def stream_ticks(
219
+ self,
220
+ interrupts: List[Board.DigitalInterrupt],
221
+ *,
222
+ extra: Optional[Dict[str, Any]] = None,
223
+ **kwargs,
224
+ ) -> TickStream:
225
+ names = []
226
+ for di in interrupts:
227
+ names.append(di.name)
228
+ request = StreamTicksRequest(name=self.name, pin_names=names, extra=dict_to_struct(extra))
229
+
230
+ async def read():
231
+ md = kwargs.get("metadata", self.Metadata()).proto
232
+ tick_stream: ClientStream[StreamTicksRequest, StreamTicksResponse]
233
+ async with self.client.StreamTicks.open(metadata=md) as tick_stream:
234
+ try:
235
+ await tick_stream.send_message(request, end=True)
236
+ async for tick in tick_stream:
237
+ yield tick
238
+ except Exception as e:
239
+ raise (e)
240
+
241
+ return StreamWithIterator(read())