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,48 @@
1
+ import abc
2
+ from typing import Any, Final, Mapping, Optional
3
+
4
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
5
+ from viam.utils import SensorReading
6
+
7
+ from ..component_base import ComponentBase
8
+
9
+
10
+ class Sensor(ComponentBase):
11
+ """
12
+ Sensor represents a physical sensing device that can provide measurement readings.
13
+
14
+ This acts as an abstract base class for any drivers representing specific
15
+ sensor implementations. This cannot be used on its own. If the ``__init__()`` function is
16
+ overridden, it must call the ``super().__init__()`` function.
17
+
18
+ ::
19
+
20
+ from viam.components.sensor import Sensor
21
+
22
+ For more information, see `Sensor component <https://docs.viam.com/dev/reference/apis/components/sensor/>`_.
23
+ """
24
+
25
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
26
+ RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "sensor"
27
+ )
28
+
29
+ @abc.abstractmethod
30
+ async def get_readings(
31
+ self, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None, **kwargs
32
+ ) -> Mapping[str, SensorReading]:
33
+ """
34
+ Obtain the measurements/data specific to this sensor.
35
+
36
+ ::
37
+
38
+ my_sensor = Sensor.from_robot(robot=machine, name='my_sensor')
39
+
40
+ # Get the readings provided by the sensor.
41
+ readings = await my_sensor.get_readings()
42
+
43
+ Returns:
44
+ Mapping[str, Any]: The measurements. Can be of any type.
45
+
46
+ For more information, see `Sensor component <https://docs.viam.com/dev/reference/apis/components/sensor/#getreadings>`_.
47
+ """
48
+ ...
@@ -0,0 +1,51 @@
1
+ from grpclib.server import Stream
2
+
3
+ from viam.proto.common import (
4
+ DoCommandRequest,
5
+ DoCommandResponse,
6
+ GetGeometriesRequest,
7
+ GetGeometriesResponse,
8
+ GetReadingsRequest,
9
+ GetReadingsResponse,
10
+ )
11
+ from viam.proto.component.sensor import SensorServiceBase
12
+ from viam.resource.rpc_service_base import ResourceRPCServiceBase
13
+ from viam.utils import dict_to_struct, sensor_readings_native_to_value, struct_to_dict
14
+
15
+ from .sensor import Sensor
16
+
17
+
18
+ class SensorRPCService(SensorServiceBase, ResourceRPCServiceBase[Sensor]):
19
+ """
20
+ gRPC Service for a generic Sensor
21
+ """
22
+
23
+ RESOURCE_TYPE = Sensor
24
+
25
+ async def GetReadings(self, stream: Stream[GetReadingsRequest, GetReadingsResponse]) -> None:
26
+ request = await stream.recv_message()
27
+ assert request is not None
28
+ name = request.name
29
+ sensor = self.get_resource(name)
30
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
31
+ readings = await sensor.get_readings(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
32
+ response = GetReadingsResponse(readings=sensor_readings_native_to_value(readings))
33
+ await stream.send_message(response)
34
+
35
+ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
36
+ request = await stream.recv_message()
37
+ assert request is not None
38
+ sensor = self.get_resource(request.name)
39
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
40
+ result = await sensor.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
41
+ response = DoCommandResponse(result=dict_to_struct(result))
42
+ await stream.send_message(response)
43
+
44
+ async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
45
+ request = await stream.recv_message()
46
+ assert request is not None
47
+ sensor = self.get_resource(request.name)
48
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
49
+ geometries = await sensor.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
50
+ response = GetGeometriesResponse(geometries=geometries)
51
+ await stream.send_message(response)
@@ -0,0 +1,11 @@
1
+ from viam.resource.registry import Registry, ResourceRegistration
2
+
3
+ from .client import ServoClient
4
+ from .service import ServoRPCService
5
+ from .servo import Servo
6
+
7
+ __all__ = [
8
+ "Servo",
9
+ ]
10
+
11
+ Registry.register_api(ResourceRegistration(Servo, ServoRPCService, lambda name, channel: ServoClient(name, channel)))
@@ -0,0 +1,86 @@
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.servo import (
7
+ GetPositionRequest,
8
+ GetPositionResponse,
9
+ IsMovingRequest,
10
+ IsMovingResponse,
11
+ MoveRequest,
12
+ ServoServiceStub,
13
+ StopRequest,
14
+ )
15
+ from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
16
+ from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
17
+
18
+ from .servo import Servo
19
+
20
+
21
+ class ServoClient(Servo, ReconfigurableResourceRPCClientBase):
22
+ """
23
+ gRPC client for the Servo component.
24
+ """
25
+
26
+ def __init__(self, name: str, channel: Channel):
27
+ self.channel = channel
28
+ self.client = ServoServiceStub(channel)
29
+ super().__init__(name)
30
+
31
+ async def get_position(
32
+ self,
33
+ *,
34
+ extra: Optional[Mapping[str, Any]] = None,
35
+ timeout: Optional[float] = None,
36
+ **kwargs,
37
+ ) -> int:
38
+ md = kwargs.get("metadata", self.Metadata()).proto
39
+ request = GetPositionRequest(name=self.name, extra=dict_to_struct(extra))
40
+ response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout, metadata=md)
41
+ return response.position_deg
42
+
43
+ async def move(
44
+ self,
45
+ angle: int,
46
+ *,
47
+ extra: Optional[Mapping[str, Any]] = None,
48
+ timeout: Optional[float] = None,
49
+ **kwargs,
50
+ ):
51
+ md = kwargs.get("metadata", self.Metadata()).proto
52
+ request = MoveRequest(name=self.name, angle_deg=angle, extra=dict_to_struct(extra))
53
+ await self.client.Move(request, timeout=timeout, metadata=md)
54
+
55
+ async def stop(
56
+ self,
57
+ *,
58
+ extra: Optional[Mapping[str, Any]] = None,
59
+ timeout: Optional[float] = None,
60
+ **kwargs,
61
+ ):
62
+ md = kwargs.get("metadata", self.Metadata()).proto
63
+ request = StopRequest(name=self.name, extra=dict_to_struct(extra))
64
+ await self.client.Stop(request, timeout=timeout, metadata=md)
65
+
66
+ async def is_moving(self, *, timeout: Optional[float] = None, **kwargs) -> bool:
67
+ md = kwargs.get("metadata", self.Metadata()).proto
68
+ request = IsMovingRequest(name=self.name)
69
+ response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout, metadata=md)
70
+ return response.is_moving
71
+
72
+ async def do_command(
73
+ self,
74
+ command: Mapping[str, ValueTypes],
75
+ *,
76
+ timeout: Optional[float] = None,
77
+ **kwargs,
78
+ ) -> Mapping[str, ValueTypes]:
79
+ md = kwargs.get("metadata", self.Metadata()).proto
80
+ request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
81
+ response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
82
+ return struct_to_dict(response.result)
83
+
84
+ async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
85
+ md = kwargs.get("metadata", self.Metadata())
86
+ return await get_geometries(self.client, self.name, extra, timeout, md)
@@ -0,0 +1,80 @@
1
+ from grpclib.server import Stream
2
+
3
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse
4
+ from viam.proto.component.servo import (
5
+ GetPositionRequest,
6
+ GetPositionResponse,
7
+ IsMovingRequest,
8
+ IsMovingResponse,
9
+ MoveRequest,
10
+ MoveResponse,
11
+ ServoServiceBase,
12
+ StopRequest,
13
+ StopResponse,
14
+ )
15
+ from viam.resource.rpc_service_base import ResourceRPCServiceBase
16
+ from viam.utils import dict_to_struct, struct_to_dict
17
+
18
+ from .servo import Servo
19
+
20
+
21
+ class ServoRPCService(ServoServiceBase, ResourceRPCServiceBase[Servo]):
22
+ """
23
+ gRPC Service for a Servo
24
+ """
25
+
26
+ RESOURCE_TYPE = Servo
27
+
28
+ async def Move(self, stream: Stream[MoveRequest, MoveResponse]) -> None:
29
+ request = await stream.recv_message()
30
+ assert request is not None
31
+ name = request.name
32
+ servo = self.get_resource(name)
33
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
34
+ await servo.move(request.angle_deg, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
35
+ await stream.send_message(MoveResponse())
36
+
37
+ async def GetPosition(self, stream: Stream[GetPositionRequest, GetPositionResponse]) -> None:
38
+ request = await stream.recv_message()
39
+ assert request is not None
40
+ name = request.name
41
+ servo = self.get_resource(name)
42
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
43
+ position = await servo.get_position(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
44
+ resp = GetPositionResponse(position_deg=position)
45
+ await stream.send_message(resp)
46
+
47
+ async def Stop(self, stream: Stream[StopRequest, StopResponse]) -> None:
48
+ request = await stream.recv_message()
49
+ assert request is not None
50
+ name = request.name
51
+ servo = self.get_resource(name)
52
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
53
+ await servo.stop(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
54
+ await stream.send_message(StopResponse())
55
+
56
+ async def IsMoving(self, stream: Stream[IsMovingRequest, IsMovingResponse]) -> None:
57
+ request = await stream.recv_message()
58
+ assert request is not None
59
+ name = request.name
60
+ servo = self.get_resource(name)
61
+ is_moving = await servo.is_moving()
62
+ await stream.send_message(IsMovingResponse(is_moving=is_moving))
63
+
64
+ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
65
+ request = await stream.recv_message()
66
+ assert request is not None
67
+ servo = self.get_resource(request.name)
68
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
69
+ result = await servo.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
70
+ response = DoCommandResponse(result=dict_to_struct(result))
71
+ await stream.send_message(response)
72
+
73
+ async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
74
+ request = await stream.recv_message()
75
+ assert request is not None
76
+ servo = self.get_resource(request.name)
77
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
78
+ geometries = await servo.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
79
+ response = GetGeometriesResponse(geometries=geometries)
80
+ await stream.send_message(response)
@@ -0,0 +1,114 @@
1
+ import abc
2
+ from typing import Any, Final, Mapping, Optional
3
+
4
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
5
+
6
+ from ..component_base import ComponentBase
7
+
8
+
9
+ class Servo(ComponentBase):
10
+ """
11
+ Servo represents a physical servo.
12
+
13
+ This acts as an abstract base class for any drivers representing specific
14
+ servo implementations. This cannot be used on its own. If the ``__init__()`` function is
15
+ overridden, it must call the ``super().__init__()`` function.
16
+
17
+ ::
18
+
19
+ from viam.components.servo import Servo
20
+
21
+ For more information, see `Servo component <https://docs.viam.com/dev/reference/apis/components/servo/>`_.
22
+ """
23
+
24
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
25
+ RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "servo"
26
+ )
27
+
28
+ @abc.abstractmethod
29
+ async def move(self, angle: int, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None, **kwargs):
30
+ """
31
+ Move the servo to the provided angle.
32
+
33
+ ::
34
+
35
+ my_servo = Servo.from_robot(robot=machine, name="my_servo")
36
+
37
+ # Move the servo from its origin to the desired angle of 10 degrees.
38
+ await my_servo.move(10)
39
+
40
+ # Move the servo from its origin to the desired angle of 90 degrees.
41
+ await my_servo.move(90)
42
+
43
+ Args:
44
+ angle (int): The desired angle of the servo in degrees.
45
+
46
+ For more information, see `Servo component <https://docs.viam.com/dev/reference/apis/components/servo/#move>`_.
47
+ """
48
+ ...
49
+
50
+ @abc.abstractmethod
51
+ async def get_position(self, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> int:
52
+ """
53
+ Get the current angle (degrees) of the servo.
54
+
55
+ ::
56
+
57
+ my_servo = Servo.from_robot(robot=machine, name="my_servo")
58
+
59
+ # Move the servo from its origin to the desired angle of 10 degrees.
60
+ await my_servo.move(10)
61
+
62
+ # Get the current set angle of the servo.
63
+ pos1 = await my_servo.get_position()
64
+
65
+ # Move the servo from its origin to the desired angle of 20 degrees.
66
+ await my_servo.move(20)
67
+
68
+ # Get the current set angle of the servo.
69
+ pos2 = await my_servo.get_position()
70
+
71
+ Returns:
72
+ int: The current angle of the servo in degrees.
73
+
74
+ For more information, see `Servo component <https://docs.viam.com/dev/reference/apis/components/servo/#getposition>`_.
75
+ """
76
+ ...
77
+
78
+ @abc.abstractmethod
79
+ async def stop(self, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None, **kwargs):
80
+ """
81
+ Stop the servo. It is assumed that the servo stops immediately.
82
+
83
+ ::
84
+
85
+ my_servo = Servo.from_robot(robot=machine, name="my_servo")
86
+
87
+ # Move the servo from its origin to the desired angle of 10 degrees.
88
+ await my_servo.move(10)
89
+
90
+ # Stop the servo. It is assumed that the servo stops moving immediately.
91
+ await my_servo.stop()
92
+
93
+ For more information, see `Servo component <https://docs.viam.com/dev/reference/apis/components/servo/#stop>`_.
94
+ """
95
+ ...
96
+
97
+ @abc.abstractmethod
98
+ async def is_moving(self) -> bool:
99
+ """
100
+ Get if the servo is currently moving.
101
+
102
+ ::
103
+
104
+ my_servo = Servo.from_robot(robot=machine, name="my_servo")
105
+
106
+ print(await my_servo.is_moving())
107
+
108
+
109
+ Returns:
110
+ bool: Whether the servo is moving.
111
+
112
+ For more information, see `Servo component <https://docs.viam.com/dev/reference/apis/components/servo/#ismoving>`_.
113
+ """
114
+ ...
@@ -0,0 +1,10 @@
1
+ import viam.gen.component.switch.v1.switch_pb2
2
+ from viam.resource.registry import Registry, ResourceRegistration
3
+
4
+ from .client import SwitchClient
5
+ from .service import SwitchRPCService
6
+ from .switch import Switch
7
+
8
+ __all__ = ["Switch"]
9
+
10
+ Registry.register_api(ResourceRegistration(Switch, SwitchRPCService, lambda name, channel: SwitchClient(name, channel)))
@@ -0,0 +1,83 @@
1
+ from typing import Any, Mapping, Optional
2
+
3
+ from grpclib.client import Channel
4
+
5
+ from viam.gen.component.switch.v1.switch_pb2 import (
6
+ GetNumberOfPositionsRequest,
7
+ GetNumberOfPositionsResponse,
8
+ GetPositionRequest,
9
+ GetPositionResponse,
10
+ SetPositionRequest,
11
+ )
12
+ from viam.proto.common import (
13
+ DoCommandRequest,
14
+ DoCommandResponse,
15
+ )
16
+ from viam.proto.component.switch import SwitchServiceStub
17
+ from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
18
+ from viam.utils import (
19
+ ValueTypes,
20
+ dict_to_struct,
21
+ struct_to_dict,
22
+ )
23
+
24
+ from .switch import Switch
25
+
26
+
27
+ class SwitchClient(Switch, ReconfigurableResourceRPCClientBase):
28
+ """
29
+ gRPC client for Switch component
30
+ """
31
+
32
+ def __init__(self, name: str, channel: Channel):
33
+ self.channel = channel
34
+ self.client = SwitchServiceStub(channel)
35
+ super().__init__(name)
36
+
37
+ async def get_position(
38
+ self,
39
+ *,
40
+ extra: Optional[Mapping[str, Any]] = None,
41
+ timeout: Optional[float] = None,
42
+ **kwargs,
43
+ ) -> int:
44
+ md = kwargs.get("metadata", self.Metadata()).proto
45
+ request = GetPositionRequest(name=self.name, extra=dict_to_struct(extra))
46
+ response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout, metadata=md)
47
+ return response.position
48
+
49
+ async def set_position(
50
+ self,
51
+ position: int,
52
+ *,
53
+ extra: Optional[Mapping[str, Any]] = None,
54
+ timeout: Optional[float] = None,
55
+ **kwargs,
56
+ ) -> None:
57
+ md = kwargs.get("metadata", self.Metadata()).proto
58
+ request = SetPositionRequest(name=self.name, position=position, extra=dict_to_struct(extra))
59
+ await self.client.SetPosition(request, timeout=timeout, metadata=md)
60
+
61
+ async def get_number_of_positions(
62
+ self,
63
+ *,
64
+ extra: Optional[Mapping[str, Any]] = None,
65
+ timeout: Optional[float] = None,
66
+ **kwargs,
67
+ ) -> int:
68
+ md = kwargs.get("metadata", self.Metadata()).proto
69
+ request = GetNumberOfPositionsRequest(name=self.name, extra=dict_to_struct(extra))
70
+ response: GetNumberOfPositionsResponse = await self.client.GetNumberOfPositions(request, timeout=timeout, metadata=md)
71
+ return response.number_of_positions
72
+
73
+ async def do_command(
74
+ self,
75
+ command: Mapping[str, ValueTypes],
76
+ *,
77
+ timeout: Optional[float] = None,
78
+ **kwargs,
79
+ ) -> Mapping[str, ValueTypes]:
80
+ md = kwargs.get("metadata", self.Metadata()).proto
81
+ request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
82
+ response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
83
+ return struct_to_dict(response.result)
@@ -0,0 +1,72 @@
1
+ from grpclib.server import Stream
2
+
3
+ from viam.gen.component.switch.v1.switch_pb2 import (
4
+ GetNumberOfPositionsRequest,
5
+ GetNumberOfPositionsResponse,
6
+ GetPositionRequest,
7
+ GetPositionResponse,
8
+ SetPositionRequest,
9
+ SetPositionResponse,
10
+ )
11
+ from viam.proto.common import (
12
+ DoCommandRequest,
13
+ DoCommandResponse,
14
+ )
15
+ from viam.proto.component.switch import SwitchServiceBase
16
+ from viam.resource.rpc_service_base import ResourceRPCServiceBase
17
+ from viam.utils import dict_to_struct, struct_to_dict
18
+
19
+ from .switch import Switch
20
+
21
+
22
+ class SwitchRPCService(SwitchServiceBase, ResourceRPCServiceBase[Switch]):
23
+ """
24
+ gRPC Service for a generic Switch
25
+ """
26
+
27
+ RESOURCE_TYPE = Switch
28
+
29
+ async def GetPosition(self, stream: Stream[GetPositionRequest, GetPositionResponse]) -> None:
30
+ request = await stream.recv_message()
31
+ assert request is not None
32
+ name = request.name
33
+ switch = self.get_resource(name)
34
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
35
+ position = await switch.get_position(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
36
+ response = GetPositionResponse(position=position)
37
+ await stream.send_message(response)
38
+
39
+ async def SetPosition(self, stream: Stream[SetPositionRequest, SetPositionResponse]) -> None:
40
+ request = await stream.recv_message()
41
+ assert request is not None
42
+ name = request.name
43
+ switch = self.get_resource(name)
44
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
45
+ await switch.set_position(position=request.position, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
46
+ await stream.send_message(SetPositionResponse())
47
+
48
+ async def GetNumberOfPositions(self, stream: Stream[GetNumberOfPositionsRequest, GetNumberOfPositionsResponse]) -> None:
49
+ request = await stream.recv_message()
50
+ assert request is not None
51
+ name = request.name
52
+ switch = self.get_resource(name)
53
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
54
+ number_of_positions = await switch.get_number_of_positions(
55
+ extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata
56
+ )
57
+ response = GetNumberOfPositionsResponse(number_of_positions=number_of_positions)
58
+ await stream.send_message(response)
59
+
60
+ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
61
+ request = await stream.recv_message()
62
+ assert request is not None
63
+ name = request.name
64
+ switch = self.get_resource(name)
65
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
66
+ result = await switch.do_command(
67
+ command=struct_to_dict(request.command),
68
+ timeout=timeout,
69
+ metadata=stream.metadata,
70
+ )
71
+ response = DoCommandResponse(result=dict_to_struct(result))
72
+ await stream.send_message(response)
@@ -0,0 +1,95 @@
1
+ import abc
2
+ from typing import Any, Final, Mapping, Optional
3
+
4
+ from viam.components.component_base import ComponentBase
5
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
6
+
7
+
8
+ class Switch(ComponentBase):
9
+ """
10
+ Switch represents a device with two or more finite states (or positions) than can be set and retrieved.
11
+
12
+ This acts as an abstract base class for any drivers representing specific
13
+ switch implementations. This cannot be used on its own. If the ``__init__()`` function is
14
+ overridden, it must call the ``super().__init__()`` function.
15
+
16
+ ::
17
+
18
+ from viam.components.switch import Switch
19
+
20
+ For more information, see `Switch component <https://docs.viam.com/dev/reference/apis/components/switch/>`_.
21
+ """
22
+
23
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
24
+ RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "switch"
25
+ )
26
+
27
+ @abc.abstractmethod
28
+ async def get_position(self, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> int:
29
+ """
30
+ Get the current position of the switch
31
+
32
+ ::
33
+
34
+ my_switch = Switch.from_robot(robot=machine, name="my_switch")
35
+
36
+ # Update the switch from its current position to the desired position of 1.
37
+ await my_switch.set_position(1)
38
+
39
+ # Get the current set position of the switch.
40
+ pos1 = await my_switch.get_position()
41
+
42
+ # Update the switch from its current position to the desired position.
43
+ await my_switch.set_position(0)
44
+
45
+ # Get the current set position of the switch.
46
+ pos2 = await my_switch.get_position()
47
+
48
+ Returns:
49
+ int: The current position of the switch within the range of available positions.
50
+
51
+ For more information, see `Switch component <https://docs.viam.com/dev/reference/apis/components/Switch/#getposition>`_.
52
+ """
53
+ ...
54
+
55
+ @abc.abstractmethod
56
+ async def set_position(
57
+ self, position: int, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None, **kwargs
58
+ ) -> None:
59
+ """
60
+ Sets the current position of the switch.
61
+
62
+ ::
63
+
64
+ my_switch = Switch.from_robot(robot=machine, name="my_switch")
65
+
66
+ # Update the switch from its current position to the desired position of 1.
67
+ await my_switch.set_position(1)
68
+
69
+ # Update the switch from its current position to the desired position of 0.
70
+ await my_switch.set_position(0)
71
+
72
+ Args:
73
+ position (int): The position of the switch within the range of available positions.
74
+
75
+ For more information, see `Switch component <https://docs.viam.com/dev/reference/apis/components/switch/#setposition>`_.
76
+ """
77
+ ...
78
+
79
+ @abc.abstractmethod
80
+ async def get_number_of_positions(self, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> int:
81
+ """
82
+ Get the number of available positions on the switch.
83
+
84
+ ::
85
+
86
+ my_switch = Switch.from_robot(robot=machine, name="my_switch")
87
+
88
+ print(await my_switch.get_number_of_positions())
89
+
90
+ Returns:
91
+ int: The number of available positions.
92
+
93
+ For more information, see `Switch component <https://docs.viam.com/dev/reference/apis/components/switch/#getnumberofpositions>`_.
94
+ """
95
+ ...