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,251 @@
1
+ from typing import List, Mapping, Optional
2
+
3
+ from grpclib.client import Channel
4
+
5
+ from viam import logging
6
+ from viam.proto.app.mltraining import (
7
+ CancelTrainingJobRequest,
8
+ DeleteCompletedTrainingJobRequest,
9
+ GetTrainingJobRequest,
10
+ GetTrainingJobResponse,
11
+ ListTrainingJobsRequest,
12
+ ListTrainingJobsResponse,
13
+ MLTrainingServiceStub,
14
+ ModelType,
15
+ SubmitCustomTrainingJobRequest,
16
+ SubmitCustomTrainingJobResponse,
17
+ SubmitTrainingJobRequest,
18
+ SubmitTrainingJobResponse,
19
+ TrainingJobMetadata,
20
+ TrainingStatus,
21
+ )
22
+
23
+ LOGGER = logging.getLogger(__name__)
24
+
25
+
26
+ class MLTrainingClient:
27
+ """gRPC client for working with ML training jobs.
28
+
29
+ Constructor is used by `ViamClient` to instantiate relevant service stubs.
30
+ Calls to `MLTrainingClient` methods should be made through `ViamClient`.
31
+
32
+ Establish a Connection::
33
+
34
+ import asyncio
35
+
36
+ from viam.rpc.dial import DialOptions, Credentials
37
+ from viam.app.viam_client import ViamClient
38
+
39
+
40
+ async def connect() -> ViamClient:
41
+ # Replace "<API-KEY>" (including brackets) with your API key and "<API-KEY-ID>" with your API key ID
42
+ dial_options = DialOptions.with_api_key("<API-KEY>", "<API-KEY-ID>")
43
+ return await ViamClient.create_from_dial_options(dial_options)
44
+
45
+
46
+ async def main():
47
+
48
+ # Make a ViamClient
49
+ viam_client = await connect()
50
+ # Instantiate an MLTrainingClient to run ML training client API methods on
51
+ ml_training_client = viam_client.ml_training_client
52
+
53
+ viam_client.close()
54
+
55
+ if __name__ == '__main__':
56
+ asyncio.run(main())
57
+
58
+ For more information, see `ML Training Client API <https://docs.viam.com/dev/reference/apis/ml-training-client/>`_.
59
+ """
60
+
61
+ def __init__(self, channel: Channel, metadata: Mapping[str, str]):
62
+ """Create a `MLTrainingClient` that maintains a connection to app.
63
+
64
+ Args:
65
+ channel (grpclib.client.Channel): Connection to app.
66
+ metadata (Mapping[str, str]): Required authorization token to send requests to app.
67
+
68
+ For more information, see `ML Training Client API <https://docs.viam.com/dev/reference/apis/ml-training-client/>`_.
69
+ """
70
+ self._metadata = metadata
71
+ self._ml_training_client = MLTrainingServiceStub(channel)
72
+ self._channel = channel
73
+
74
+ async def submit_training_job(
75
+ self,
76
+ org_id: str,
77
+ dataset_id: str,
78
+ model_name: str,
79
+ model_version: str,
80
+ model_type: ModelType.ValueType,
81
+ tags: List[str],
82
+ ) -> str:
83
+ """Submit a training job.
84
+
85
+ ::
86
+
87
+ from viam.proto.app.mltraining import ModelType
88
+
89
+ job_id = await ml_training_client.submit_training_job(
90
+ org_id="<organization-id>",
91
+ dataset_id="<dataset-id>",
92
+ model_name="<your-model-name>",
93
+ model_version="1",
94
+ model_type=ModelType.MODEL_TYPE_SINGLE_LABEL_CLASSIFICATION,
95
+ tags=["tag1", "tag2"]
96
+ )
97
+
98
+ Args:
99
+ org_id (str): the ID of the org to submit the training job to.
100
+ dataset_id (str): the ID of the dataset to train the model on.
101
+ model_name (str): the model name.
102
+ model_version (str): the model version.
103
+ model_type (ModelType.ValueType): the model type.
104
+ tags (List[str]): the labels to train the model on.
105
+
106
+ Returns:
107
+ str: the ID of the training job.
108
+
109
+ For more information, see `ML Training Client API <https://docs.viam.com/dev/reference/apis/ml-training-client/#submittrainingjob>`_.
110
+ """
111
+
112
+ request = SubmitTrainingJobRequest(
113
+ dataset_id=dataset_id,
114
+ organization_id=org_id,
115
+ model_name=model_name,
116
+ model_version=model_version,
117
+ model_type=model_type,
118
+ tags=tags,
119
+ )
120
+ response: SubmitTrainingJobResponse = await self._ml_training_client.SubmitTrainingJob(request, metadata=self._metadata)
121
+ return response.id
122
+
123
+ async def submit_custom_training_job(
124
+ self, org_id: str, dataset_id: str, registry_item_id: str, registry_item_version: str, model_name: str, model_version: str
125
+ ) -> str:
126
+ """Submit a custom training job.
127
+
128
+ ::
129
+
130
+ job_id = await ml_training_client.submit_custom_training_job(
131
+ org_id="<organization-id>",
132
+ dataset_id="<dataset-id>",
133
+ registry_item_id="viam:classification-tflite",
134
+ registry_item_version="2024-08-13T12-11-54",
135
+ model_name="<your-model-name>",
136
+ model_version="1"
137
+ )
138
+
139
+ Args:
140
+ org_id (str): the ID of the org to submit the training job to.
141
+ dataset_id (str): the ID of the dataset to train the model on.
142
+ registry_item_id (str): the ID of the training script from the registry.
143
+ registry_item_version (str): the version of the training script from the registry.
144
+ model_name (str): the model name.
145
+ model_version (str): the model version.
146
+
147
+ Returns:
148
+ str: the ID of the training job.
149
+
150
+ For more information, see `ML Training Client API <https://docs.viam.com/dev/reference/apis/ml-training-client/#submitcustomtrainingjob>`_.
151
+ """
152
+
153
+ request = SubmitCustomTrainingJobRequest(
154
+ dataset_id=dataset_id,
155
+ registry_item_id=registry_item_id,
156
+ registry_item_version=registry_item_version,
157
+ organization_id=org_id,
158
+ model_name=model_name,
159
+ model_version=model_version,
160
+ )
161
+ response: SubmitCustomTrainingJobResponse = await self._ml_training_client.SubmitCustomTrainingJob(request, metadata=self._metadata)
162
+ return response.id
163
+
164
+ async def get_training_job(self, id: str) -> TrainingJobMetadata:
165
+ """Gets training job data.
166
+
167
+ ::
168
+
169
+ job_metadata = await ml_training_client.get_training_job(
170
+ id="<job-id>")
171
+
172
+ Args:
173
+ id (str): the ID of the requested training job.
174
+
175
+ Returns:
176
+ viam.proto.app.mltraining.TrainingJobMetadata: the training job data.
177
+
178
+ For more information, see `ML Training Client API <https://docs.viam.com/dev/reference/apis/ml-training-client/#gettrainingjob>`_.
179
+ """
180
+
181
+ request = GetTrainingJobRequest(id=id)
182
+ response: GetTrainingJobResponse = await self._ml_training_client.GetTrainingJob(request, metadata=self._metadata)
183
+
184
+ return response.metadata
185
+
186
+ async def list_training_jobs(
187
+ self,
188
+ org_id: str,
189
+ training_status: Optional[TrainingStatus.ValueType] = None,
190
+ ) -> List[TrainingJobMetadata]:
191
+ """Returns training job data for all jobs within an org.
192
+
193
+ ::
194
+
195
+ jobs_metadata = await ml_training_client.list_training_jobs(
196
+ org_id="<org-id>")
197
+
198
+ first_job_id = jobs_metadata[1].id
199
+
200
+ Args:
201
+ org_id (str): the ID of the org to request training job data from.
202
+ training_status (Optional[TrainingStatus]): the status to filter the training jobs list by.
203
+ If unspecified, all training jobs will be returned.
204
+
205
+ Returns:
206
+ List[viam.proto.app.mltraining.TrainingJobMetadata]: the list of training job data.
207
+
208
+ For more information, see `ML Training Client API <https://docs.viam.com/dev/reference/apis/ml-training-client/#listtrainingjobs>`_.
209
+ """
210
+
211
+ training_status = training_status if training_status else TrainingStatus.TRAINING_STATUS_UNSPECIFIED
212
+ request = ListTrainingJobsRequest(organization_id=org_id, status=training_status)
213
+ response: ListTrainingJobsResponse = await self._ml_training_client.ListTrainingJobs(request, metadata=self._metadata)
214
+
215
+ return list(response.jobs)
216
+
217
+ async def cancel_training_job(self, id: str) -> None:
218
+ """Cancels the specified training job.
219
+
220
+ ::
221
+
222
+ await ml_training_client.cancel_training_job(
223
+ id="<job-id>")
224
+
225
+ Args:
226
+ id (str): the ID of the job to cancel.
227
+
228
+ Raises:
229
+ GRPCError: if no training job exists with the given ID.
230
+
231
+ For more information, see `ML Training Client API <https://docs.viam.com/dev/reference/apis/ml-training-client/#canceltrainingjob>`_.
232
+ """
233
+
234
+ request = CancelTrainingJobRequest(id=id)
235
+ await self._ml_training_client.CancelTrainingJob(request, metadata=self._metadata)
236
+
237
+ async def delete_completed_training_job(self, id: str) -> None:
238
+ """Delete a completed training job from the database, whether the job succeeded or failed.
239
+
240
+ ::
241
+
242
+ await ml_training_client.delete_completed_training_job(
243
+ id="<job-id>")
244
+
245
+ Args:
246
+ id (str): the ID of the training job to delete.
247
+
248
+ For more information, see `ML Training Client API <https://docs.viam.com/dev/reference/apis/ml-training-client/#deletecompletedtrainingjob>`_.
249
+ """
250
+ request = DeleteCompletedTrainingJobRequest(id=id)
251
+ await self._ml_training_client.DeleteCompletedTrainingJob(request, metadata=self._metadata)
@@ -0,0 +1,95 @@
1
+ from typing import List, Mapping, Optional
2
+
3
+ from grpclib.client import Channel
4
+
5
+ from viam import logging
6
+ from viam.proto.provisioning import (
7
+ CloudConfig,
8
+ GetNetworkListRequest,
9
+ GetNetworkListResponse,
10
+ GetSmartMachineStatusRequest,
11
+ GetSmartMachineStatusResponse,
12
+ NetworkInfo,
13
+ ProvisioningServiceStub,
14
+ SetNetworkCredentialsRequest,
15
+ SetSmartMachineCredentialsRequest,
16
+ )
17
+
18
+ LOGGER = logging.getLogger(__name__)
19
+
20
+
21
+ class ProvisioningClient:
22
+ """gRPC client for getting and setting smart machine info.
23
+
24
+ Constructor is used by `ViamClient` to instantiate relevant service stubs. Calls to
25
+ `ProvisioningClient` methods should be made through `ViamClient`.
26
+
27
+ Establish a connection::
28
+
29
+ import asyncio
30
+
31
+ from viam.rpc.dial import DialOptions, Credentials
32
+ from viam.app.viam_client import ViamClient
33
+
34
+
35
+ async def connect() -> ViamClient:
36
+ # Replace "<API-KEY>" (including brackets) with your API key and "<API-KEY-ID>" with your API key ID
37
+ dial_options = DialOptions.with_api_key("<API-KEY>", "<API-KEY-ID>")
38
+ return await ViamClient.create_from_dial_options(dial_options)
39
+
40
+
41
+ async def main():
42
+
43
+ # Make a ViamClient
44
+ viam_client = await connect()
45
+ # Instantiate a ProvisioningClient to run provisioning client API methods on
46
+ provisioning_client = viam_client.provisioning_client
47
+
48
+ viam_client.close()
49
+
50
+ if __name__ == '__main__':
51
+ asyncio.run(main())
52
+
53
+ """
54
+
55
+ def __init__(self, channel: Channel, metadata: Mapping[str, str]):
56
+ """Create a `ProvisioningClient` that maintains a connection to app.
57
+
58
+ Args:
59
+ channel (grpclib.client.Channel): Connection to app.
60
+ metadata (Mapping[str, str]): Required authorization token to send requests to app.
61
+ """
62
+ self._metadata = metadata
63
+ self._provisioning_client = ProvisioningServiceStub(channel)
64
+ self._channel = channel
65
+
66
+ _provisioning_client: ProvisioningServiceStub
67
+ _metadata: Mapping[str, str]
68
+ _channel: Channel
69
+
70
+ async def get_network_list(self) -> List[NetworkInfo]:
71
+ """Returns list of networks that are visible to the Smart Machine."""
72
+ request = GetNetworkListRequest()
73
+ resp: GetNetworkListResponse = await self._provisioning_client.GetNetworkList(request, metadata=self._metadata)
74
+ return list(resp.networks)
75
+
76
+ async def get_smart_machine_status(self) -> GetSmartMachineStatusResponse:
77
+ """Returns the status of the smart machine."""
78
+ request = GetSmartMachineStatusRequest()
79
+ return await self._provisioning_client.GetSmartMachineStatus(request, metadata=self._metadata)
80
+
81
+ async def set_network_credentials(self, network_type: str, ssid: str, psk: str) -> None:
82
+ """Sets the network credentials of the Smart Machine.
83
+
84
+ Args:
85
+ network_type (str): The type of the network.
86
+ ssid (str): The SSID of the network.
87
+ psk (str): The network's passkey.
88
+ """
89
+
90
+ request = SetNetworkCredentialsRequest(type=network_type, ssid=ssid, psk=psk)
91
+ await self._provisioning_client.SetNetworkCredentials(request, metadata=self._metadata)
92
+
93
+ async def set_smart_machine_credentials(self, cloud_config: Optional[CloudConfig] = None) -> None:
94
+ request = SetSmartMachineCredentialsRequest(cloud=cloud_config)
95
+ await self._provisioning_client.SetSmartMachineCredentials(request, metadata=self._metadata)
@@ -0,0 +1,260 @@
1
+ import os
2
+ from typing import Mapping, Optional
3
+
4
+ from grpclib.client import Channel
5
+ from typing_extensions import Self
6
+
7
+ from viam import logging
8
+ from viam.app.app_client import AppClient
9
+ from viam.app.billing_client import BillingClient
10
+ from viam.app.data_client import DataClient
11
+ from viam.app.ml_training_client import MLTrainingClient
12
+ from viam.app.provisioning_client import ProvisioningClient
13
+ from viam.robot.client import RobotClient
14
+ from viam.rpc.dial import Credentials, DialOptions, _dial_app, _get_access_token
15
+
16
+ LOGGER = logging.getLogger(__name__)
17
+
18
+
19
+ class ViamClient:
20
+ """gRPC client for all communication and interaction with app.
21
+
22
+ `ViamClient` class for creating and managing specialized client instances.
23
+ There is currently 1 way to instantiate a `ViamClient` object::
24
+
25
+ ViamClient.create_from_dial_options(...)
26
+ """
27
+
28
+ @classmethod
29
+ async def create_from_env_vars(cls, dial_options: Optional[DialOptions] = None, app_url: Optional[str] = None) -> Self:
30
+ """Create `ViamClient` using credentials set in the environment as `VIAM_API_KEY` and `VIAM_API_KEY_ID`.
31
+
32
+ ::
33
+
34
+ client = await ViamClient.create_from_env_vars()
35
+
36
+ Args:
37
+ dial_options (Optional[viam.rpc.dial.DialOptions]): Options for authorization and connection to app.
38
+ If not provided, default options will be selected. Note that `creds` and `auth_entity`
39
+ fields will be overwritten by the values set by a module.
40
+ app_url: (Optional[str]): URL of app. Uses app.viam.com if not specified.
41
+
42
+ Raises:
43
+ ValueError: If there are no env vars set by the module, or if they are set improperly
44
+
45
+ """
46
+ dial_options = dial_options if dial_options else DialOptions()
47
+ api_key = os.environ.get("VIAM_API_KEY")
48
+ if api_key is None:
49
+ raise ValueError("api key cannot be None")
50
+ api_key_id = os.environ.get("VIAM_API_KEY_ID")
51
+ if api_key_id is None:
52
+ raise ValueError("api key ID cannot be None")
53
+ credentials = Credentials(type="api-key", payload=api_key)
54
+ dial_options.credentials = credentials
55
+ dial_options.auth_entity = api_key_id
56
+
57
+ return await cls.create_from_dial_options(dial_options, app_url)
58
+
59
+ @classmethod
60
+ async def create_from_dial_options(cls, dial_options: DialOptions, app_url: Optional[str] = None) -> Self:
61
+ """Create `ViamClient` that establishes a connection to the Viam app.
62
+
63
+ ::
64
+
65
+ dial_options = DialOptions.with_api_key("<API-KEY>", "<API-KEY-ID>")
66
+ client = await ViamClient.create_from_dial_options(dial_options)
67
+
68
+ Args:
69
+ dial_options (viam.rpc.dial.DialOptions): Required information for authorization and connection to app.
70
+ `creds` and `auth_entity` fields are required.
71
+ app_url: (Optional[str]): URL of app. Uses app.viam.com if not specified.
72
+
73
+ Raises:
74
+ ValueError: If the input parameters are missing a required field or simply invalid.
75
+
76
+ Returns:
77
+ Self: The `ViamClient`.
78
+ """
79
+ if dial_options.credentials is None:
80
+ raise ValueError("dial_options.credentials cannot be None.")
81
+ if dial_options.credentials.type == "robot-secret":
82
+ raise ValueError("dial_options.credentials.type cannot be 'robot-secret'")
83
+ if dial_options.auth_entity is None:
84
+ raise ValueError("dial_options.auth_entity cannot be None.")
85
+
86
+ self = cls()
87
+ self._dial_options = dial_options
88
+ self._location_id = None
89
+ if dial_options.credentials.type == "robot-location-secret":
90
+ self._location_id = dial_options.auth_entity.split(".")[1]
91
+ if app_url is None:
92
+ app_url = "app.viam.com"
93
+ self._channel = await _dial_app(app_url)
94
+ access_token = await _get_access_token(self._channel, dial_options.auth_entity, dial_options)
95
+ self._metadata = {"authorization": f"Bearer {access_token}"}
96
+ return self
97
+
98
+ _channel: Channel
99
+ _metadata: Mapping[str, str]
100
+ _closed: bool = False
101
+ _location_id: Optional[str]
102
+ _dial_options: DialOptions
103
+
104
+ @property
105
+ def data_client(self) -> DataClient:
106
+ """Instantiate and return a `DataClient` object used to make `data` and `data_sync` method calls.
107
+ To use the `DataClient`, you must first instantiate a `ViamClient`.
108
+
109
+ ::
110
+
111
+ async def connect() -> ViamClient:
112
+ # Replace "<API-KEY>" (including brackets) with your API key and "<API-KEY-ID>" with your API key ID
113
+ dial_options = DialOptions.with_api_key("<API-KEY>", "<API-KEY-ID>")
114
+ return await ViamClient.create_from_dial_options(dial_options)
115
+
116
+ async def main():
117
+ viam_client = await connect()
118
+
119
+ # Instantiate a DataClient to run data client API methods on
120
+ data_client = viam_client.data_client
121
+ """
122
+ return DataClient(self._channel, self._metadata)
123
+
124
+ @property
125
+ def app_client(self) -> AppClient:
126
+ """Instantiate and return an `AppClient` used to make `app` method calls.
127
+ To use the `AppClient`, you must first instantiate a `ViamClient`.
128
+
129
+ ::
130
+
131
+ async def connect() -> ViamClient:
132
+ # Replace "<API-KEY>" (including brackets) with your API key and "<API-KEY-ID>" with your API key ID
133
+ dial_options = DialOptions.with_api_key("<API-KEY>", "<API-KEY-ID>")
134
+ return await ViamClient.create_from_dial_options(dial_options)
135
+
136
+
137
+ async def main():
138
+ viam_client = await connect()
139
+
140
+ # Instantiate an AppClient called "fleet" to run fleet management API methods on
141
+ fleet = viam_client.app_client
142
+ """
143
+ return AppClient(self._channel, self._metadata, self._location_id)
144
+
145
+ @property
146
+ def ml_training_client(self) -> MLTrainingClient:
147
+ """Instantiate and return a `MLTrainingClient` used to make `ml_training` method calls.
148
+ To use the `MLTrainingClient`, you must first instantiate a `ViamClient`.
149
+
150
+ ::
151
+
152
+ async def connect() -> ViamClient:
153
+ # Replace "<API-KEY>" (including brackets) with your API key and "<API-KEY-ID>" with your API key ID
154
+ dial_options = DialOptions.with_api_key("<API-KEY>", "<API-KEY-ID>")
155
+ return await ViamClient.create_from_dial_options(dial_options)
156
+
157
+
158
+ async def main():
159
+ viam_client = await connect()
160
+
161
+ # Instantiate an MLTrainingClient to run ML training client API methods on
162
+ ml_training_client = viam_client.ml_training_client
163
+ """
164
+ return MLTrainingClient(self._channel, self._metadata)
165
+
166
+ @property
167
+ def billing_client(self) -> BillingClient:
168
+ """Instantiate and return a `BillingClient` used to make `billing` method calls.
169
+ To use the `BillingClient`, you must first instantiate a `ViamClient`.
170
+
171
+ ::
172
+
173
+ async def connect() -> ViamClient:
174
+ # Replace "<API-KEY>" (including brackets) with your API key and "<API-KEY-ID>" with your API key ID
175
+ dial_options = DialOptions.with_api_key("<API-KEY>", "<API-KEY-ID>")
176
+ return await ViamClient.create_from_dial_options(dial_options)
177
+
178
+
179
+ async def main():
180
+ viam_client = await connect()
181
+
182
+ # Instantiate a BillingClient to run billing client API methods on
183
+ billing_client = viam_client.billing_client
184
+ """
185
+
186
+ return BillingClient(self._channel, self._metadata)
187
+
188
+ @property
189
+ def provisioning_client(self) -> ProvisioningClient:
190
+ """Instantiate and return a `ProvisioningClient` used to make `provisioning` method calls.
191
+ To use the `ProvisioningClient`, you must first instantiate a `ViamClient`.
192
+
193
+ ::
194
+
195
+ async def connect() -> ViamClient:
196
+ # Replace "<API-KEY>" (including brackets) with your API key and "<API-KEY-ID>" with your API key ID
197
+ dial_options = DialOptions.with_api_key("<API-KEY>", "<API-KEY-ID>")
198
+ return await ViamClient.create_from_dial_options(dial_options)
199
+
200
+
201
+ async def main():
202
+ viam_client = await connect()
203
+
204
+ # Instantiate a ProvisioningClient to run provisioning API methods on
205
+ provisioning_client = viam_client.provisioning_client
206
+ """
207
+ return ProvisioningClient(self._channel, self._metadata)
208
+
209
+ def close(self):
210
+ """Close opened channels used for the various service stubs initialized."""
211
+ if self._closed:
212
+ LOGGER.debug("ViamClient is already closed.")
213
+ return
214
+ LOGGER.debug("Closing gRPC channel to app.")
215
+ self._channel.close()
216
+ self._closed = True
217
+
218
+ async def connect_to_machine(self, *, address: Optional[str] = None, id: Optional[str] = None) -> RobotClient:
219
+ """Connect to a machine using existing credentials.
220
+
221
+ A connection can be attempted using either the machine's address or its ID.
222
+ If both an address and ID are provided, the address will take precedence and the ID will be ignored.
223
+
224
+ ::
225
+
226
+ async def connect() -> ViamClient:
227
+ # Replace "<API-KEY>" (including brackets) with your API key and "<API-KEY-ID>" with your API key ID
228
+ dial_options = DialOptions.with_api_key("<API-KEY>", "<API-KEY-ID>")
229
+ return await ViamClient.create_from_dial_options(dial_options)
230
+
231
+
232
+ async def main():
233
+ viam_client = await connect()
234
+
235
+ # Connect to a machine and obtain a RobotClient
236
+ # Replace "<MACHINE_ADDRESS>" (including brackets) with your machine's connection address
237
+ machine = await viam_client.connect_to_machine(address="<MACHINE_ADDRESS>")
238
+
239
+ Args:
240
+ address (Optional[str]): The address (FQDN) of the machine. Defaults to None.
241
+ id (Optional[str]): The ID (as a UUID) of the machine. Defaults to None.
242
+
243
+ Raises:
244
+ ValueError: If neither an address nor ID is provided.
245
+
246
+ Returns:
247
+ RobotClient: The active connection to the machine.
248
+ """
249
+ if address is None and id is None:
250
+ raise ValueError("Either a machine address or ID must be provided")
251
+
252
+ if id is not None and address is None:
253
+ parts = await self.app_client.get_robot_parts(id)
254
+ main_part = next(p for p in parts if p.main_part)
255
+ address = main_part.fqdn
256
+
257
+ opts = RobotClient.Options(dial_options=self._dial_options)
258
+
259
+ assert address is not None
260
+ return await RobotClient.at_address(address, opts)
File without changes
@@ -0,0 +1,16 @@
1
+ from viam.proto.common import KinematicsFileFormat, Pose
2
+ from viam.proto.component.arm import JointPositions
3
+ from viam.resource.registry import Registry, ResourceRegistration
4
+
5
+ from .arm import Arm
6
+ from .client import ArmClient
7
+ from .service import ArmRPCService
8
+
9
+ __all__ = [
10
+ "Arm",
11
+ "JointPositions",
12
+ "KinematicsFileFormat",
13
+ "Pose",
14
+ ]
15
+
16
+ Registry.register_api(ResourceRegistration(Arm, ArmRPCService, lambda name, channel: ArmClient(name, channel)))