viam-sdk 0.3.0__py3-none-linux_armv6l.whl → 0.66.0__py3-none-linux_armv6l.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 (452) hide show
  1. viam/__init__.py +29 -2
  2. viam/app/_logs.py +34 -0
  3. viam/app/app_client.py +2696 -0
  4. viam/app/billing_client.py +185 -0
  5. viam/app/data_client.py +2231 -0
  6. viam/app/ml_training_client.py +249 -0
  7. viam/app/provisioning_client.py +93 -0
  8. viam/app/viam_client.py +275 -0
  9. viam/components/arm/__init__.py +3 -26
  10. viam/components/arm/arm.py +123 -8
  11. viam/components/arm/client.py +37 -24
  12. viam/components/arm/service.py +35 -32
  13. viam/components/audio_in/__init__.py +24 -0
  14. viam/components/audio_in/audio_in.py +74 -0
  15. viam/components/audio_in/client.py +76 -0
  16. viam/components/audio_in/service.py +83 -0
  17. viam/components/audio_out/__init__.py +21 -0
  18. viam/components/audio_out/audio_out.py +72 -0
  19. viam/components/audio_out/client.py +67 -0
  20. viam/components/audio_out/service.py +63 -0
  21. viam/components/base/__init__.py +6 -11
  22. viam/components/base/base.py +134 -8
  23. viam/components/base/client.py +51 -23
  24. viam/components/base/service.py +33 -30
  25. viam/components/board/__init__.py +3 -12
  26. viam/components/board/board.py +247 -91
  27. viam/components/board/client.py +149 -83
  28. viam/components/board/service.py +63 -33
  29. viam/components/button/__init__.py +10 -0
  30. viam/components/button/button.py +41 -0
  31. viam/components/button/client.py +52 -0
  32. viam/components/button/service.py +46 -0
  33. viam/components/camera/__init__.py +3 -3
  34. viam/components/camera/camera.py +62 -27
  35. viam/components/camera/client.py +59 -27
  36. viam/components/camera/service.py +42 -65
  37. viam/components/component_base.py +28 -5
  38. viam/components/encoder/__init__.py +1 -1
  39. viam/components/encoder/client.py +25 -14
  40. viam/components/encoder/encoder.py +48 -10
  41. viam/components/encoder/service.py +14 -18
  42. viam/components/gantry/__init__.py +1 -13
  43. viam/components/gantry/client.py +80 -25
  44. viam/components/gantry/gantry.py +123 -9
  45. viam/components/gantry/service.py +51 -29
  46. viam/components/generic/__init__.py +1 -1
  47. viam/components/generic/client.py +21 -8
  48. viam/components/generic/generic.py +10 -2
  49. viam/components/generic/service.py +12 -7
  50. viam/components/gripper/__init__.py +3 -13
  51. viam/components/gripper/client.py +69 -21
  52. viam/components/gripper/gripper.py +123 -3
  53. viam/components/gripper/service.py +44 -22
  54. viam/components/input/__init__.py +1 -14
  55. viam/components/input/client.py +55 -23
  56. viam/components/input/input.py +106 -3
  57. viam/components/input/service.py +16 -21
  58. viam/components/motor/__init__.py +1 -21
  59. viam/components/motor/client.py +56 -33
  60. viam/components/motor/motor.py +127 -4
  61. viam/components/motor/service.py +33 -44
  62. viam/components/movement_sensor/__init__.py +1 -1
  63. viam/components/movement_sensor/client.py +102 -45
  64. viam/components/movement_sensor/movement_sensor.py +130 -61
  65. viam/components/movement_sensor/service.py +38 -41
  66. viam/components/pose_tracker/__init__.py +1 -1
  67. viam/components/pose_tracker/client.py +18 -7
  68. viam/components/pose_tracker/pose_tracker.py +4 -2
  69. viam/components/pose_tracker/service.py +12 -10
  70. viam/components/power_sensor/__init__.py +17 -0
  71. viam/components/power_sensor/client.py +86 -0
  72. viam/components/power_sensor/power_sensor.py +104 -0
  73. viam/components/power_sensor/service.py +72 -0
  74. viam/components/sensor/__init__.py +2 -1
  75. viam/components/sensor/client.py +26 -10
  76. viam/components/sensor/sensor.py +22 -4
  77. viam/components/sensor/service.py +20 -11
  78. viam/components/servo/__init__.py +1 -13
  79. viam/components/servo/client.py +47 -21
  80. viam/components/servo/service.py +15 -22
  81. viam/components/servo/servo.py +61 -2
  82. viam/components/switch/__init__.py +10 -0
  83. viam/components/switch/client.py +83 -0
  84. viam/components/switch/service.py +72 -0
  85. viam/components/switch/switch.py +98 -0
  86. viam/errors.py +10 -0
  87. viam/gen/app/agent/v1/agent_grpc.py +29 -0
  88. viam/gen/app/agent/v1/agent_pb2.py +47 -0
  89. viam/gen/app/agent/v1/agent_pb2.pyi +280 -0
  90. viam/gen/app/cloudslam/v1/__init__.py +0 -0
  91. viam/gen/app/cloudslam/v1/cloud_slam_grpc.py +70 -0
  92. viam/gen/app/cloudslam/v1/cloud_slam_pb2.py +54 -0
  93. viam/gen/app/cloudslam/v1/cloud_slam_pb2.pyi +384 -0
  94. viam/gen/app/data/v1/data_grpc.py +197 -8
  95. viam/gen/app/data/v1/data_pb2.py +238 -99
  96. viam/gen/app/data/v1/data_pb2.pyi +1222 -259
  97. viam/gen/app/datapipelines/__init__.py +0 -0
  98. viam/gen/app/datapipelines/v1/__init__.py +0 -0
  99. viam/gen/app/datapipelines/v1/data_pipelines_grpc.py +84 -0
  100. viam/gen/app/datapipelines/v1/data_pipelines_pb2.py +57 -0
  101. viam/gen/app/datapipelines/v1/data_pipelines_pb2.pyi +387 -0
  102. viam/gen/app/dataset/__init__.py +0 -0
  103. viam/gen/app/dataset/v1/__init__.py +0 -0
  104. viam/gen/app/dataset/v1/dataset_grpc.py +68 -0
  105. viam/gen/app/dataset/v1/dataset_pb2.py +44 -0
  106. viam/gen/app/dataset/v1/dataset_pb2.pyi +214 -0
  107. viam/gen/app/datasync/v1/data_sync_grpc.py +21 -4
  108. viam/gen/app/datasync/v1/data_sync_pb2.py +62 -128
  109. viam/gen/app/datasync/v1/data_sync_pb2.pyi +156 -199
  110. viam/gen/app/mlinference/__init__.py +0 -0
  111. viam/gen/app/mlinference/v1/__init__.py +0 -0
  112. viam/gen/app/mlinference/v1/ml_inference_grpc.py +28 -0
  113. viam/gen/app/mlinference/v1/ml_inference_pb2.py +23 -0
  114. viam/gen/app/mlinference/v1/ml_inference_pb2.pyi +63 -0
  115. viam/gen/app/mltraining/v1/ml_training_grpc.py +51 -3
  116. viam/gen/app/mltraining/v1/ml_training_pb2.py +135 -58
  117. viam/gen/app/mltraining/v1/ml_training_pb2.pyi +328 -39
  118. viam/gen/app/packages/v1/packages_grpc.py +15 -1
  119. viam/gen/app/packages/v1/packages_pb2.py +44 -64
  120. viam/gen/app/packages/v1/packages_pb2.pyi +75 -85
  121. viam/gen/app/v1/app_grpc.py +644 -3
  122. viam/gen/app/v1/app_pb2.py +695 -295
  123. viam/gen/app/v1/app_pb2.pyi +4488 -635
  124. viam/gen/app/v1/billing_grpc.py +53 -11
  125. viam/gen/app/v1/billing_pb2.py +94 -39
  126. viam/gen/app/v1/billing_pb2.pyi +391 -191
  127. viam/gen/app/v1/end_user_grpc.py +59 -0
  128. viam/gen/app/v1/end_user_pb2.py +55 -0
  129. viam/gen/app/v1/end_user_pb2.pyi +181 -0
  130. viam/gen/app/v1/robot_grpc.py +16 -1
  131. viam/gen/app/v1/robot_pb2.py +122 -94
  132. viam/gen/app/v1/robot_pb2.pyi +463 -123
  133. viam/gen/common/v1/common_pb2.py +87 -58
  134. viam/gen/common/v1/common_pb2.pyi +456 -149
  135. viam/gen/component/arm/v1/arm_grpc.py +58 -2
  136. viam/gen/component/arm/v1/arm_pb2.py +68 -51
  137. viam/gen/component/arm/v1/arm_pb2.pyi +108 -42
  138. viam/gen/component/audioin/__init__.py +0 -0
  139. viam/gen/component/audioin/v1/__init__.py +0 -0
  140. viam/gen/component/audioin/v1/audioin_grpc.py +54 -0
  141. viam/gen/component/audioin/v1/audioin_pb2.py +34 -0
  142. viam/gen/component/audioin/v1/audioin_pb2.pyi +94 -0
  143. viam/gen/component/audioinput/v1/audioinput_grpc.py +25 -2
  144. viam/gen/component/audioinput/v1/audioinput_pb2.py +36 -31
  145. viam/gen/component/audioinput/v1/audioinput_pb2.pyi +22 -22
  146. viam/gen/component/audioout/__init__.py +0 -0
  147. viam/gen/component/audioout/v1/__init__.py +0 -0
  148. viam/gen/component/audioout/v1/audioout_grpc.py +54 -0
  149. viam/gen/component/audioout/v1/audioout_pb2.py +32 -0
  150. viam/gen/component/audioout/v1/audioout_pb2.pyi +47 -0
  151. viam/gen/component/base/v1/base_grpc.py +42 -2
  152. viam/gen/component/base/v1/base_pb2.py +58 -47
  153. viam/gen/component/base/v1/base_pb2.pyi +65 -30
  154. viam/gen/component/board/v1/board_grpc.py +59 -7
  155. viam/gen/component/board/v1/board_pb2.py +94 -73
  156. viam/gen/component/board/v1/board_pb2.pyi +165 -68
  157. viam/gen/component/button/__init__.py +0 -0
  158. viam/gen/component/button/v1/__init__.py +0 -0
  159. viam/gen/component/button/v1/button_grpc.py +38 -0
  160. viam/gen/component/button/v1/button_pb2.py +28 -0
  161. viam/gen/component/button/v1/button_pb2.pyi +39 -0
  162. viam/gen/component/camera/v1/camera_grpc.py +38 -2
  163. viam/gen/component/camera/v1/camera_pb2.py +60 -43
  164. viam/gen/component/camera/v1/camera_pb2.pyi +191 -37
  165. viam/gen/component/encoder/v1/encoder_grpc.py +25 -2
  166. viam/gen/component/encoder/v1/encoder_pb2.py +36 -31
  167. viam/gen/component/encoder/v1/encoder_pb2.pyi +15 -15
  168. viam/gen/component/gantry/v1/gantry_grpc.py +47 -2
  169. viam/gen/component/gantry/v1/gantry_pb2.py +56 -43
  170. viam/gen/component/gantry/v1/gantry_pb2.pyi +67 -31
  171. viam/gen/component/generic/v1/generic_grpc.py +16 -2
  172. viam/gen/component/generic/v1/generic_pb2.py +16 -11
  173. viam/gen/component/gripper/v1/gripper_grpc.py +44 -2
  174. viam/gen/component/gripper/v1/gripper_pb2.py +48 -35
  175. viam/gen/component/gripper/v1/gripper_pb2.pyi +62 -24
  176. viam/gen/component/inputcontroller/v1/input_controller_grpc.py +28 -2
  177. viam/gen/component/inputcontroller/v1/input_controller_pb2.py +46 -41
  178. viam/gen/component/inputcontroller/v1/input_controller_pb2.pyi +32 -36
  179. viam/gen/component/motor/v1/motor_grpc.py +51 -2
  180. viam/gen/component/motor/v1/motor_pb2.py +78 -67
  181. viam/gen/component/motor/v1/motor_pb2.pyi +75 -46
  182. viam/gen/component/movementsensor/v1/movementsensor_grpc.py +48 -2
  183. viam/gen/component/movementsensor/v1/movementsensor_pb2.py +70 -63
  184. viam/gen/component/movementsensor/v1/movementsensor_pb2.pyi +84 -57
  185. viam/gen/component/posetracker/v1/pose_tracker_grpc.py +19 -2
  186. viam/gen/component/posetracker/v1/pose_tracker_pb2.py +26 -21
  187. viam/gen/component/posetracker/v1/pose_tracker_pb2.pyi +9 -13
  188. viam/gen/component/powersensor/__init__.py +0 -0
  189. viam/gen/component/powersensor/v1/__init__.py +0 -0
  190. viam/gen/component/powersensor/v1/powersensor_grpc.py +62 -0
  191. viam/gen/component/powersensor/v1/powersensor_pb2.py +42 -0
  192. viam/gen/component/powersensor/v1/powersensor_pb2.pyi +124 -0
  193. viam/gen/component/sensor/v1/sensor_grpc.py +21 -5
  194. viam/gen/component/sensor/v1/sensor_pb2.py +18 -22
  195. viam/gen/component/sensor/v1/sensor_pb2.pyi +1 -69
  196. viam/gen/component/servo/v1/servo_grpc.py +28 -2
  197. viam/gen/component/servo/v1/servo_pb2.py +42 -37
  198. viam/gen/component/servo/v1/servo_pb2.pyi +22 -26
  199. viam/gen/component/switch/__init__.py +0 -0
  200. viam/gen/component/switch/v1/__init__.py +0 -0
  201. viam/gen/component/switch/v1/switch_grpc.py +54 -0
  202. viam/gen/component/switch/v1/switch_pb2.py +40 -0
  203. viam/gen/component/switch/v1/switch_pb2.pyi +116 -0
  204. viam/gen/component/testecho/v1/testecho_grpc.py +15 -0
  205. viam/gen/component/testecho/v1/testecho_pb2.py +29 -26
  206. viam/gen/component/testecho/v1/testecho_pb2.pyi +16 -20
  207. viam/gen/module/v1/module_grpc.py +18 -0
  208. viam/gen/module/v1/module_pb2.py +36 -33
  209. viam/gen/module/v1/module_pb2.pyi +39 -34
  210. viam/gen/opentelemetry/__init__.py +0 -0
  211. viam/gen/opentelemetry/proto/__init__.py +0 -0
  212. viam/gen/opentelemetry/proto/common/__init__.py +0 -0
  213. viam/gen/opentelemetry/proto/common/v1/__init__.py +0 -0
  214. viam/gen/opentelemetry/proto/common/v1/common_grpc.py +0 -0
  215. viam/gen/opentelemetry/proto/common/v1/common_pb2.py +27 -0
  216. viam/gen/opentelemetry/proto/common/v1/common_pb2.pyi +208 -0
  217. viam/gen/opentelemetry/proto/resource/__init__.py +0 -0
  218. viam/gen/opentelemetry/proto/resource/v1/__init__.py +0 -0
  219. viam/gen/opentelemetry/proto/resource/v1/resource_grpc.py +0 -0
  220. viam/gen/opentelemetry/proto/resource/v1/resource_pb2.py +18 -0
  221. viam/gen/opentelemetry/proto/resource/v1/resource_pb2.pyi +59 -0
  222. viam/gen/opentelemetry/proto/trace/__init__.py +0 -0
  223. viam/gen/opentelemetry/proto/trace/v1/__init__.py +0 -0
  224. viam/gen/opentelemetry/proto/trace/v1/trace_grpc.py +0 -0
  225. viam/gen/opentelemetry/proto/trace/v1/trace_pb2.py +37 -0
  226. viam/gen/opentelemetry/proto/trace/v1/trace_pb2.pyi +402 -0
  227. viam/gen/proto/rpc/examples/echo/v1/echo_grpc.py +12 -0
  228. viam/gen/proto/rpc/examples/echo/v1/echo_pb2.py +25 -22
  229. viam/gen/proto/rpc/examples/echo/v1/echo_pb2.pyi +13 -17
  230. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_grpc.py +12 -0
  231. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.py +23 -20
  232. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.pyi +13 -17
  233. viam/gen/proto/rpc/v1/auth_grpc.py +11 -0
  234. viam/gen/proto/rpc/v1/auth_pb2.py +27 -24
  235. viam/gen/proto/rpc/v1/auth_pb2.pyi +12 -16
  236. viam/gen/proto/rpc/webrtc/v1/grpc_pb2.py +35 -32
  237. viam/gen/proto/rpc/webrtc/v1/grpc_pb2.pyi +37 -41
  238. viam/gen/proto/rpc/webrtc/v1/signaling_grpc.py +15 -0
  239. viam/gen/proto/rpc/webrtc/v1/signaling_pb2.py +62 -57
  240. viam/gen/proto/rpc/webrtc/v1/signaling_pb2.pyi +78 -69
  241. viam/gen/provisioning/__init__.py +0 -0
  242. viam/gen/provisioning/v1/__init__.py +0 -0
  243. viam/gen/provisioning/v1/provisioning_grpc.py +59 -0
  244. viam/gen/provisioning/v1/provisioning_pb2.py +45 -0
  245. viam/gen/provisioning/v1/provisioning_pb2.pyi +229 -0
  246. viam/gen/robot/v1/robot_grpc.py +144 -15
  247. viam/gen/robot/v1/robot_pb2.py +193 -119
  248. viam/gen/robot/v1/robot_pb2.pyi +565 -137
  249. viam/gen/service/datamanager/v1/data_manager_grpc.py +20 -2
  250. viam/gen/service/datamanager/v1/data_manager_pb2.py +27 -17
  251. viam/gen/service/datamanager/v1/data_manager_pb2.pyi +52 -10
  252. viam/gen/service/discovery/__init__.py +0 -0
  253. viam/gen/service/discovery/v1/__init__.py +0 -0
  254. viam/gen/service/discovery/v1/discovery_grpc.py +39 -0
  255. viam/gen/service/discovery/v1/discovery_pb2.py +29 -0
  256. viam/gen/service/discovery/v1/discovery_pb2.pyi +51 -0
  257. viam/gen/service/generic/__init__.py +0 -0
  258. viam/gen/service/generic/v1/__init__.py +0 -0
  259. viam/gen/service/generic/v1/generic_grpc.py +29 -0
  260. viam/gen/service/generic/v1/generic_pb2.py +21 -0
  261. viam/gen/service/generic/v1/generic_pb2.pyi +6 -0
  262. viam/gen/service/mlmodel/v1/mlmodel_grpc.py +9 -0
  263. viam/gen/service/mlmodel/v1/mlmodel_pb2.py +76 -29
  264. viam/gen/service/mlmodel/v1/mlmodel_pb2.pyi +307 -28
  265. viam/gen/service/motion/v1/motion_grpc.py +42 -4
  266. viam/gen/service/motion/v1/motion_pb2.py +119 -51
  267. viam/gen/service/motion/v1/motion_pb2.pyi +595 -120
  268. viam/gen/service/navigation/v1/navigation_grpc.py +49 -1
  269. viam/gen/service/navigation/v1/navigation_pb2.py +76 -51
  270. viam/gen/service/navigation/v1/navigation_pb2.pyi +188 -33
  271. viam/gen/service/sensors/v1/sensors_grpc.py +12 -0
  272. viam/gen/service/sensors/v1/sensors_pb2.py +60 -29
  273. viam/gen/service/sensors/v1/sensors_pb2.pyi +18 -21
  274. viam/gen/service/shell/v1/shell_grpc.py +27 -1
  275. viam/gen/service/shell/v1/shell_pb2.py +37 -15
  276. viam/gen/service/shell/v1/shell_pb2.pyi +260 -7
  277. viam/gen/service/slam/v1/slam_grpc.py +24 -2
  278. viam/gen/service/slam/v1/slam_pb2.py +44 -30
  279. viam/gen/service/slam/v1/slam_pb2.pyi +128 -27
  280. viam/gen/service/video/__init__.py +0 -0
  281. viam/gen/service/video/v1/__init__.py +0 -0
  282. viam/gen/service/video/v1/video_grpc.py +39 -0
  283. viam/gen/service/video/v1/video_pb2.py +29 -0
  284. viam/gen/service/video/v1/video_pb2.pyi +72 -0
  285. viam/gen/service/vision/v1/vision_grpc.py +39 -1
  286. viam/gen/service/vision/v1/vision_pb2.py +61 -45
  287. viam/gen/service/vision/v1/vision_pb2.pyi +180 -41
  288. viam/gen/service/worldstatestore/__init__.py +0 -0
  289. viam/gen/service/worldstatestore/v1/__init__.py +0 -0
  290. viam/gen/service/worldstatestore/v1/world_state_store_grpc.py +55 -0
  291. viam/gen/service/worldstatestore/v1/world_state_store_pb2.py +39 -0
  292. viam/gen/service/worldstatestore/v1/world_state_store_pb2.pyi +171 -0
  293. viam/gen/stream/__init__.py +0 -0
  294. viam/gen/stream/v1/__init__.py +0 -0
  295. viam/gen/stream/v1/stream_grpc.py +59 -0
  296. viam/gen/stream/v1/stream_pb2.py +39 -0
  297. viam/gen/stream/v1/stream_pb2.pyi +161 -0
  298. viam/gen/tagger/v1/tagger_pb2.py +9 -8
  299. viam/logging.py +160 -17
  300. viam/media/__init__.py +0 -9
  301. viam/media/audio.py +22 -10
  302. viam/media/utils/__init__.py +0 -0
  303. viam/media/utils/pil/__init__.py +55 -0
  304. viam/media/{viam_rgba_plugin.py → utils/pil/viam_rgba_plugin.py} +10 -16
  305. viam/media/viam_rgba.py +10 -0
  306. viam/media/video.py +197 -73
  307. viam/module/module.py +191 -44
  308. viam/module/resource_data_consumer.py +41 -0
  309. viam/module/service.py +9 -1
  310. viam/module/types.py +4 -5
  311. viam/operations.py +4 -3
  312. viam/proto/app/__init__.py +361 -5
  313. viam/proto/app/agent/__init__.py +28 -0
  314. viam/proto/app/billing.py +51 -27
  315. viam/proto/app/cloudslam/__init__.py +48 -0
  316. viam/proto/app/data/__init__.py +103 -17
  317. viam/proto/app/datapipelines/__init__.py +56 -0
  318. viam/proto/app/dataset/__init__.py +40 -0
  319. viam/proto/app/datasync/__init__.py +11 -5
  320. viam/proto/app/end_user.py +34 -0
  321. viam/proto/app/mlinference/__init__.py +15 -0
  322. viam/proto/app/mltraining/__init__.py +25 -1
  323. viam/proto/app/packages/__init__.py +3 -3
  324. viam/proto/app/robot.py +19 -1
  325. viam/proto/common/__init__.py +35 -8
  326. viam/proto/component/arm/__init__.py +9 -1
  327. viam/proto/component/audioin/__init__.py +16 -0
  328. viam/proto/component/audioinput/__init__.py +3 -1
  329. viam/proto/component/audioout/__init__.py +15 -0
  330. viam/proto/component/base/__init__.py +7 -1
  331. viam/proto/component/board/__init__.py +13 -5
  332. viam/proto/component/button/__init__.py +15 -0
  333. viam/proto/component/camera/__init__.py +9 -1
  334. viam/proto/component/encoder/__init__.py +3 -1
  335. viam/proto/component/gantry/__init__.py +7 -1
  336. viam/proto/component/generic/__init__.py +3 -1
  337. viam/proto/component/gripper/__init__.py +7 -1
  338. viam/proto/component/inputcontroller/__init__.py +7 -1
  339. viam/proto/component/motor/__init__.py +7 -1
  340. viam/proto/component/movementsensor/__init__.py +7 -1
  341. viam/proto/component/posetracker/__init__.py +7 -1
  342. viam/proto/component/powersensor/__init__.py +30 -0
  343. viam/proto/component/sensor/__init__.py +3 -4
  344. viam/proto/component/servo/__init__.py +3 -1
  345. viam/proto/component/switch/__init__.py +26 -0
  346. viam/proto/component/testecho/__init__.py +3 -1
  347. viam/proto/module/__init__.py +3 -1
  348. viam/proto/opentelemetry/__init__.py +0 -0
  349. viam/proto/opentelemetry/proto/__init__.py +0 -0
  350. viam/proto/opentelemetry/proto/common/__init__.py +15 -0
  351. viam/proto/opentelemetry/proto/resource/__init__.py +10 -0
  352. viam/proto/opentelemetry/proto/trace/__init__.py +15 -0
  353. viam/proto/provisioning/__init__.py +42 -0
  354. viam/proto/robot/__init__.py +57 -9
  355. viam/proto/rpc/auth.py +11 -1
  356. viam/proto/rpc/examples/echo/__init__.py +3 -1
  357. viam/proto/rpc/examples/echoresource/__init__.py +7 -1
  358. viam/proto/rpc/webrtc/grpc.py +3 -1
  359. viam/proto/rpc/webrtc/signaling.py +5 -1
  360. viam/proto/service/datamanager/__init__.py +15 -2
  361. viam/proto/service/discovery/__init__.py +15 -0
  362. viam/proto/service/generic/__init__.py +12 -0
  363. viam/proto/service/mlmodel/__init__.py +27 -1
  364. viam/proto/service/motion/__init__.py +35 -5
  365. viam/proto/service/navigation/__init__.py +19 -1
  366. viam/proto/service/sensors/__init__.py +3 -1
  367. viam/proto/service/shell/__init__.py +25 -2
  368. viam/proto/service/slam/__init__.py +13 -1
  369. viam/proto/service/video/__init__.py +15 -0
  370. viam/proto/service/vision/__init__.py +11 -1
  371. viam/proto/service/worldstatestore/__init__.py +32 -0
  372. viam/proto/stream/__init__.py +36 -0
  373. viam/py.typed +0 -0
  374. viam/resource/base.py +45 -8
  375. viam/resource/easy_resource.py +149 -0
  376. viam/resource/manager.py +35 -14
  377. viam/resource/registry.py +40 -52
  378. viam/resource/rpc_client_base.py +33 -1
  379. viam/resource/rpc_service_base.py +15 -8
  380. viam/resource/types.py +39 -26
  381. viam/robot/client.py +458 -91
  382. viam/robot/service.py +13 -107
  383. viam/rpc/dial.py +133 -15
  384. viam/rpc/libviam_rust_utils.so +0 -0
  385. viam/rpc/server.py +59 -15
  386. viam/rpc/types.py +2 -4
  387. viam/services/discovery/__init__.py +12 -0
  388. viam/services/discovery/client.py +55 -0
  389. viam/services/discovery/discovery.py +52 -0
  390. viam/services/discovery/service.py +43 -0
  391. viam/services/generic/__init__.py +18 -0
  392. viam/services/generic/client.py +58 -0
  393. viam/services/generic/generic.py +58 -0
  394. viam/services/generic/service.py +29 -0
  395. viam/services/mlmodel/__init__.py +15 -1
  396. viam/services/mlmodel/client.py +20 -15
  397. viam/services/mlmodel/mlmodel.py +44 -7
  398. viam/services/mlmodel/service.py +9 -13
  399. viam/services/mlmodel/utils.py +101 -0
  400. viam/services/motion/__init__.py +15 -3
  401. viam/services/motion/client.py +109 -150
  402. viam/services/motion/motion.py +380 -0
  403. viam/services/motion/service.py +132 -0
  404. viam/services/navigation/__init__.py +11 -0
  405. viam/services/navigation/client.py +99 -0
  406. viam/services/navigation/navigation.py +250 -0
  407. viam/services/navigation/service.py +137 -0
  408. viam/services/service_base.py +43 -4
  409. viam/services/service_client_base.py +4 -4
  410. viam/services/slam/__init__.py +4 -1
  411. viam/services/slam/client.py +21 -11
  412. viam/services/slam/service.py +16 -19
  413. viam/services/slam/slam.py +66 -5
  414. viam/services/vision/__init__.py +8 -0
  415. viam/services/vision/client.py +115 -111
  416. viam/services/vision/service.py +143 -0
  417. viam/services/vision/vision.py +317 -0
  418. viam/services/worldstatestore/__init__.py +18 -0
  419. viam/services/worldstatestore/client.py +94 -0
  420. viam/services/worldstatestore/service.py +55 -0
  421. viam/services/worldstatestore/worldstatestore.py +90 -0
  422. viam/sessions_client.py +254 -0
  423. viam/streams.py +44 -0
  424. viam/utils.py +143 -15
  425. viam/version_metadata.py +4 -0
  426. viam_sdk-0.66.0.dist-info/METADATA +157 -0
  427. viam_sdk-0.66.0.dist-info/RECORD +531 -0
  428. {viam_sdk-0.3.0.dist-info → viam_sdk-0.66.0.dist-info}/WHEEL +1 -1
  429. viam/components/audio_input/__init__.py +0 -18
  430. viam/components/audio_input/audio_input.py +0 -79
  431. viam/components/audio_input/client.py +0 -60
  432. viam/components/audio_input/service.py +0 -118
  433. viam/components/types.py +0 -5
  434. viam/gen/app/model/v1/model_grpc.py +0 -39
  435. viam/gen/app/model/v1/model_pb2.py +0 -71
  436. viam/gen/app/model/v1/model_pb2.pyi +0 -285
  437. viam/gen/proto/rpc/examples/fileupload/v1/fileupload_grpc.py +0 -21
  438. viam/gen/proto/rpc/examples/fileupload/v1/fileupload_pb2.py +0 -18
  439. viam/gen/proto/rpc/examples/fileupload/v1/fileupload_pb2.pyi +0 -49
  440. viam/media/media.py +0 -53
  441. viam/proto/app/model/__init__.py +0 -40
  442. viam/proto/rpc/examples/fileupload/__init__.py +0 -13
  443. viam/services/sensors/__init__.py +0 -5
  444. viam/services/sensors/client.py +0 -63
  445. viam_sdk-0.3.0.dist-info/LICENSE +0 -202
  446. viam_sdk-0.3.0.dist-info/METADATA +0 -122
  447. viam_sdk-0.3.0.dist-info/RECORD +0 -372
  448. /viam/{gen/app/model → app}/__init__.py +0 -0
  449. /viam/gen/app/{model/v1 → agent}/__init__.py +0 -0
  450. /viam/gen/{proto/rpc/examples/fileupload → app/agent/v1}/__init__.py +0 -0
  451. /viam/gen/{proto/rpc/examples/fileupload/v1 → app/cloudslam}/__init__.py +0 -0
  452. /LICENSE → /viam_sdk-0.66.0.dist-info/licenses/LICENSE +0 -0
@@ -0,0 +1,104 @@
1
+ import abc
2
+ from typing import Any, Dict, Final, Mapping, Optional, Tuple
3
+
4
+ from viam.components.component_base import ComponentBase
5
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
6
+ from viam.utils import SensorReading
7
+
8
+
9
+ class PowerSensor(ComponentBase):
10
+ """PowerSensor reports information about voltage, current and power.
11
+
12
+ This acts as an abstract base class for any sensors that can provide data regarding voltage, current and/or power.
13
+ This cannot be used on its own. If the ``__init__()`` function is overridden, it must call the ``super().__init__()`` function.
14
+
15
+ ::
16
+
17
+ from viam.components.power_sensor import PowerSensor
18
+
19
+ For more information, see `Power Sensor component <https://docs.viam.com/dev/reference/apis/components/power-sensor/>`_.
20
+ """
21
+
22
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
23
+ RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "power_sensor"
24
+ )
25
+
26
+ @abc.abstractmethod
27
+ async def get_voltage(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> Tuple[float, bool]:
28
+ """Return the voltage reading of a specified device and whether it is AC or DC.
29
+
30
+ ::
31
+
32
+ my_power_sensor = PowerSensor.from_robot(robot=machine, name='my_power_sensor')
33
+
34
+ # Get the voltage reading from the power sensor
35
+ voltage, is_ac = await my_power_sensor.get_voltage()
36
+ print("The voltage is", voltage, "V, Is AC:", is_ac)
37
+
38
+ Returns:
39
+ Tuple[float, bool]: A float representing the voltage reading in V. A bool indicating whether the voltage is AC (`true`) or DC
40
+ (`false`).
41
+
42
+ For more information, see `Power Sensor component <https://docs.viam.com/dev/reference/apis/components/power-sensor/#getvoltage>`_.
43
+ """
44
+ ...
45
+
46
+ @abc.abstractmethod
47
+ async def get_current(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> Tuple[float, bool]:
48
+ """Return the current of a specified device and whether it is AC or DC.
49
+
50
+ ::
51
+
52
+ my_power_sensor = PowerSensor.from_robot(robot=machine, name='my_power_sensor')
53
+
54
+ # Get the current reading from the power sensor
55
+ current, is_ac = await my_power_sensor.get_current()
56
+ print("The current is ", current, " A, Is AC: ", is_ac)
57
+
58
+ Returns:
59
+ Tuple[float, bool]: A tuple which includes a float representing the current reading in amps, and a bool indicating whether the
60
+ current is AC (`true`) or DC (`false`).
61
+
62
+ For more information, see `Power Sensor component <https://docs.viam.com/dev/reference/apis/components/power-sensor/#getcurrent>`_.
63
+ """
64
+ ...
65
+
66
+ @abc.abstractmethod
67
+ async def get_power(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> float:
68
+ """Return the power reading in watts.
69
+
70
+ ::
71
+
72
+ my_power_sensor = PowerSensor.from_robot(robot=machine, name='my_power_sensor')
73
+
74
+ # Get the power reading from the power sensor
75
+ power = await my_power_sensor.get_power()
76
+ print("The power is", power, "Watts")
77
+
78
+ Returns:
79
+ float: The power reading in watts.
80
+
81
+ For more information, see `Power Sensor component <https://docs.viam.com/dev/reference/apis/components/power-sensor/#getpower>`_.
82
+ """
83
+ ...
84
+
85
+ async def get_readings(
86
+ self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs
87
+ ) -> Mapping[str, SensorReading]:
88
+ """Get the measurements or readings that this power sensor provides. If a sensor is not configured correctly or fails to read a
89
+ piece of data, it will not appear in the readings dictionary.
90
+
91
+ ::
92
+
93
+ my_power_sensor = PowerSensor.from_robot(robot=machine, name='my_power_sensor')
94
+
95
+ # Get the readings provided by the sensor.
96
+ readings = await my_power_sensor.get_readings()
97
+
98
+ Returns:
99
+ Mapping[str, Any]: The readings for the PowerSensor. Can be of any type. Includes voltage in volts (float), current in
100
+ amperes (float), is_ac (bool), and power in watts (float).
101
+
102
+ For more information, see `Power Sensor component <https://docs.viam.com/dev/reference/apis/components/power-sensor/#getreadings>`_.
103
+ """
104
+ ...
@@ -0,0 +1,72 @@
1
+ from grpclib.server import Stream
2
+
3
+ from viam.components.power_sensor.power_sensor import PowerSensor
4
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, GetReadingsRequest, GetReadingsResponse
5
+ from viam.proto.component.powersensor import (
6
+ GetCurrentRequest,
7
+ GetCurrentResponse,
8
+ GetPowerRequest,
9
+ GetPowerResponse,
10
+ GetVoltageRequest,
11
+ GetVoltageResponse,
12
+ PowerSensorServiceBase,
13
+ )
14
+ from viam.resource.rpc_service_base import ResourceRPCServiceBase
15
+ from viam.utils import dict_to_struct, sensor_readings_native_to_value, struct_to_dict
16
+
17
+
18
+ class PowerSensorRPCService(PowerSensorServiceBase, ResourceRPCServiceBase[PowerSensor]):
19
+ """
20
+ gRPC Service for a PowerSensor
21
+ """
22
+
23
+ RESOURCE_TYPE = PowerSensor
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 GetVoltage(self, stream: Stream[GetVoltageRequest, GetVoltageResponse]) -> None:
36
+ request = await stream.recv_message()
37
+ assert request is not None
38
+ name = request.name
39
+ sensor = self.get_resource(name)
40
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
41
+ voltage, is_ac = await sensor.get_voltage(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
42
+ response = GetVoltageResponse(volts=voltage, is_ac=is_ac)
43
+ await stream.send_message(response)
44
+
45
+ async def GetCurrent(self, stream: Stream[GetCurrentRequest, GetCurrentResponse]) -> None:
46
+ request = await stream.recv_message()
47
+ assert request is not None
48
+ name = request.name
49
+ sensor = self.get_resource(name)
50
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
51
+ current, is_ac = await sensor.get_current(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
52
+ response = GetCurrentResponse(amperes=current, is_ac=is_ac)
53
+ await stream.send_message(response)
54
+
55
+ async def GetPower(self, stream: Stream[GetPowerRequest, GetPowerResponse]) -> None:
56
+ request = await stream.recv_message()
57
+ assert request is not None
58
+ name = request.name
59
+ sensor = self.get_resource(name)
60
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
61
+ power = await sensor.get_power(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
62
+ response = GetPowerResponse(watts=power)
63
+ await stream.send_message(response)
64
+
65
+ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
66
+ request = await stream.recv_message()
67
+ assert request is not None
68
+ sensor = self.get_resource(request.name)
69
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
70
+ result = await sensor.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
71
+ response = DoCommandResponse(result=dict_to_struct(result))
72
+ await stream.send_message(response)
@@ -1,3 +1,4 @@
1
+ import viam.gen.component.sensor.v1.sensor_pb2 # Need this import for Sensor service descriptors to resolve
1
2
  from viam.resource.registry import Registry, ResourceRegistration
2
3
 
3
4
  from .client import SensorClient
@@ -8,7 +9,7 @@ __all__ = [
8
9
  "Sensor",
9
10
  ]
10
11
 
11
- Registry.register_subtype(
12
+ Registry.register_api(
12
13
  ResourceRegistration(
13
14
  Sensor,
14
15
  SensorRPCService,
@@ -1,11 +1,11 @@
1
- from typing import Any, Mapping, Optional
1
+ from typing import Any, Dict, List, Mapping, Optional
2
2
 
3
3
  from grpclib.client import Channel
4
4
 
5
- from viam.proto.common import DoCommandRequest, DoCommandResponse
6
- from viam.proto.component.sensor import GetReadingsRequest, GetReadingsResponse, SensorServiceStub
5
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetReadingsRequest, GetReadingsResponse
6
+ from viam.proto.component.sensor import SensorServiceStub
7
7
  from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
8
- from viam.utils import ValueTypes, dict_to_struct, sensor_readings_value_to_native, struct_to_dict
8
+ from viam.utils import SensorReading, ValueTypes, dict_to_struct, get_geometries, sensor_readings_value_to_native, struct_to_dict
9
9
 
10
10
  from .sensor import Sensor
11
11
 
@@ -20,14 +20,30 @@ class SensorClient(Sensor, ReconfigurableResourceRPCClientBase):
20
20
  self.client = SensorServiceStub(channel)
21
21
  super().__init__(name)
22
22
 
23
- async def get_readings(self, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None) -> Mapping[str, Any]:
24
- if extra is None:
25
- extra = {}
23
+ async def get_readings(
24
+ self,
25
+ *,
26
+ extra: Optional[Mapping[str, Any]] = None,
27
+ timeout: Optional[float] = None,
28
+ **kwargs,
29
+ ) -> Mapping[str, SensorReading]:
30
+ md = kwargs.get("metadata", self.Metadata()).proto
26
31
  request = GetReadingsRequest(name=self.name, extra=dict_to_struct(extra))
27
- response: GetReadingsResponse = await self.client.GetReadings(request, timeout=timeout)
32
+ response: GetReadingsResponse = await self.client.GetReadings(request, timeout=timeout, metadata=md)
28
33
  return sensor_readings_value_to_native(response.readings)
29
34
 
30
- async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None) -> Mapping[str, ValueTypes]:
35
+ async def do_command(
36
+ self,
37
+ command: Mapping[str, ValueTypes],
38
+ *,
39
+ timeout: Optional[float] = None,
40
+ **kwargs,
41
+ ) -> Mapping[str, ValueTypes]:
42
+ md = kwargs.get("metadata", self.Metadata()).proto
31
43
  request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
32
- response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
44
+ response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
33
45
  return struct_to_dict(response.result)
46
+
47
+ async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
48
+ md = kwargs.get("metadata", self.Metadata())
49
+ return await get_geometries(self.client, self.name, extra, timeout, md)
@@ -1,7 +1,8 @@
1
1
  import abc
2
- from typing import Any, Mapping, Optional
2
+ from typing import Any, Final, Mapping, Optional
3
3
 
4
- from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, Subtype
4
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
5
+ from viam.utils import SensorReading
5
6
 
6
7
  from ..component_base import ComponentBase
7
8
 
@@ -13,18 +14,35 @@ class Sensor(ComponentBase):
13
14
  This acts as an abstract base class for any drivers representing specific
14
15
  sensor implementations. This cannot be used on its own. If the ``__init__()`` function is
15
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/>`_.
16
23
  """
17
24
 
18
- SUBTYPE = Subtype(RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "sensor")
25
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
26
+ RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "sensor"
27
+ )
19
28
 
20
29
  @abc.abstractmethod
21
30
  async def get_readings(
22
31
  self, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None, **kwargs
23
- ) -> Mapping[str, Any]:
32
+ ) -> Mapping[str, SensorReading]:
24
33
  """
25
34
  Obtain the measurements/data specific to this sensor.
26
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
+
27
43
  Returns:
28
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>`_.
29
47
  """
30
48
  ...
@@ -1,8 +1,14 @@
1
1
  from grpclib.server import Stream
2
2
 
3
- from viam.errors import ResourceNotFoundError
4
- from viam.proto.common import DoCommandRequest, DoCommandResponse
5
- from viam.proto.component.sensor import GetReadingsRequest, GetReadingsResponse, SensorServiceBase
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
6
12
  from viam.resource.rpc_service_base import ResourceRPCServiceBase
7
13
  from viam.utils import dict_to_struct, sensor_readings_native_to_value, struct_to_dict
8
14
 
@@ -20,10 +26,7 @@ class SensorRPCService(SensorServiceBase, ResourceRPCServiceBase[Sensor]):
20
26
  request = await stream.recv_message()
21
27
  assert request is not None
22
28
  name = request.name
23
- try:
24
- sensor = self.get_resource(name)
25
- except ResourceNotFoundError as e:
26
- raise e.grpc_error
29
+ sensor = self.get_resource(name)
27
30
  timeout = stream.deadline.time_remaining() if stream.deadline else None
28
31
  readings = await sensor.get_readings(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
29
32
  response = GetReadingsResponse(readings=sensor_readings_native_to_value(readings))
@@ -32,11 +35,17 @@ class SensorRPCService(SensorServiceBase, ResourceRPCServiceBase[Sensor]):
32
35
  async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
33
36
  request = await stream.recv_message()
34
37
  assert request is not None
35
- try:
36
- sensor = self.get_resource(request.name)
37
- except ResourceNotFoundError as e:
38
- raise e.grpc_error
38
+ sensor = self.get_resource(request.name)
39
39
  timeout = stream.deadline.time_remaining() if stream.deadline else None
40
40
  result = await sensor.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
41
41
  response = DoCommandResponse(result=dict_to_struct(result))
42
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)
@@ -1,9 +1,4 @@
1
- import asyncio
2
-
3
- from viam.proto.component.servo import Status as ServoStatus
4
- from viam.proto.robot import Status
5
1
  from viam.resource.registry import Registry, ResourceRegistration
6
- from viam.utils import message_to_struct
7
2
 
8
3
  from .client import ServoClient
9
4
  from .service import ServoRPCService
@@ -13,11 +8,4 @@ __all__ = [
13
8
  "Servo",
14
9
  ]
15
10
 
16
-
17
- async def create_status(component: Servo) -> Status:
18
- (position_deg, is_moving) = await asyncio.gather(component.get_position(), component.is_moving())
19
- s = ServoStatus(position_deg=position_deg, is_moving=is_moving)
20
- return Status(name=Servo.get_resource_name(component.name), status=message_to_struct(s))
21
-
22
-
23
- Registry.register_subtype(ResourceRegistration(Servo, ServoRPCService, lambda name, channel: ServoClient(name, channel), create_status))
11
+ Registry.register_api(ResourceRegistration(Servo, ServoRPCService, lambda name, channel: ServoClient(name, channel)))
@@ -1,8 +1,8 @@
1
- from typing import Any, Dict, Mapping, Optional
1
+ from typing import Any, Dict, List, Mapping, Optional
2
2
 
3
3
  from grpclib.client import Channel
4
4
 
5
- from viam.proto.common import DoCommandRequest, DoCommandResponse
5
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry
6
6
  from viam.proto.component.servo import (
7
7
  GetPositionRequest,
8
8
  GetPositionResponse,
@@ -13,7 +13,7 @@ from viam.proto.component.servo import (
13
13
  StopRequest,
14
14
  )
15
15
  from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
16
- from viam.utils import ValueTypes, dict_to_struct, struct_to_dict
16
+ from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
17
17
 
18
18
  from .servo import Servo
19
19
 
@@ -28,33 +28,59 @@ class ServoClient(Servo, ReconfigurableResourceRPCClientBase):
28
28
  self.client = ServoServiceStub(channel)
29
29
  super().__init__(name)
30
30
 
31
- async def get_position(self, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None) -> int:
32
- if extra is None:
33
- extra = {}
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
34
39
  request = GetPositionRequest(name=self.name, extra=dict_to_struct(extra))
35
- response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout)
40
+ response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout, metadata=md)
36
41
  return response.position_deg
37
42
 
38
- async def move(self, angle: int, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None):
39
- if extra is None:
40
- extra = {}
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
41
52
  request = MoveRequest(name=self.name, angle_deg=angle, extra=dict_to_struct(extra))
42
- await self.client.Move(request, timeout=timeout)
53
+ await self.client.Move(request, timeout=timeout, metadata=md)
43
54
 
44
- async def stop(self, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None):
45
- if extra is None:
46
- extra = {}
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
47
63
  request = StopRequest(name=self.name, extra=dict_to_struct(extra))
48
- await self.client.Stop(request, timeout=timeout)
64
+ await self.client.Stop(request, timeout=timeout, metadata=md)
49
65
 
50
- async def is_moving(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> bool:
51
- if extra is None:
52
- extra = {}
66
+ async def is_moving(self, *, timeout: Optional[float] = None, **kwargs) -> bool:
67
+ md = kwargs.get("metadata", self.Metadata()).proto
53
68
  request = IsMovingRequest(name=self.name)
54
- response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout)
69
+ response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout, metadata=md)
55
70
  return response.is_moving
56
71
 
57
- async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None) -> Mapping[str, ValueTypes]:
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
58
80
  request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
59
- response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
81
+ response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
60
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)
@@ -1,7 +1,6 @@
1
1
  from grpclib.server import Stream
2
2
 
3
- from viam.errors import ResourceNotFoundError
4
- from viam.proto.common import DoCommandRequest, DoCommandResponse
3
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse
5
4
  from viam.proto.component.servo import (
6
5
  GetPositionRequest,
7
6
  GetPositionResponse,
@@ -30,10 +29,7 @@ class ServoRPCService(ServoServiceBase, ResourceRPCServiceBase[Servo]):
30
29
  request = await stream.recv_message()
31
30
  assert request is not None
32
31
  name = request.name
33
- try:
34
- servo = self.get_resource(name)
35
- except ResourceNotFoundError as e:
36
- raise e.grpc_error
32
+ servo = self.get_resource(name)
37
33
  timeout = stream.deadline.time_remaining() if stream.deadline else None
38
34
  await servo.move(request.angle_deg, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
39
35
  await stream.send_message(MoveResponse())
@@ -42,10 +38,7 @@ class ServoRPCService(ServoServiceBase, ResourceRPCServiceBase[Servo]):
42
38
  request = await stream.recv_message()
43
39
  assert request is not None
44
40
  name = request.name
45
- try:
46
- servo = self.get_resource(name)
47
- except ResourceNotFoundError as e:
48
- raise e.grpc_error
41
+ servo = self.get_resource(name)
49
42
  timeout = stream.deadline.time_remaining() if stream.deadline else None
50
43
  position = await servo.get_position(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
51
44
  resp = GetPositionResponse(position_deg=position)
@@ -55,10 +48,7 @@ class ServoRPCService(ServoServiceBase, ResourceRPCServiceBase[Servo]):
55
48
  request = await stream.recv_message()
56
49
  assert request is not None
57
50
  name = request.name
58
- try:
59
- servo = self.get_resource(name)
60
- except ResourceNotFoundError as e:
61
- raise e.grpc_error
51
+ servo = self.get_resource(name)
62
52
  timeout = stream.deadline.time_remaining() if stream.deadline else None
63
53
  await servo.stop(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
64
54
  await stream.send_message(StopResponse())
@@ -67,21 +57,24 @@ class ServoRPCService(ServoServiceBase, ResourceRPCServiceBase[Servo]):
67
57
  request = await stream.recv_message()
68
58
  assert request is not None
69
59
  name = request.name
70
- try:
71
- servo = self.get_resource(name)
72
- except ResourceNotFoundError as e:
73
- raise e.grpc_error
60
+ servo = self.get_resource(name)
74
61
  is_moving = await servo.is_moving()
75
62
  await stream.send_message(IsMovingResponse(is_moving=is_moving))
76
63
 
77
64
  async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
78
65
  request = await stream.recv_message()
79
66
  assert request is not None
80
- try:
81
- servo = self.get_resource(request.name)
82
- except ResourceNotFoundError as e:
83
- raise e.grpc_error
67
+ servo = self.get_resource(request.name)
84
68
  timeout = stream.deadline.time_remaining() if stream.deadline else None
85
69
  result = await servo.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
86
70
  response = DoCommandResponse(result=dict_to_struct(result))
87
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)
@@ -1,7 +1,7 @@
1
1
  import abc
2
2
  from typing import Any, Final, Mapping, Optional
3
3
 
4
- from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, Subtype
4
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
5
5
 
6
6
  from ..component_base import ComponentBase
7
7
 
@@ -13,17 +13,37 @@ class Servo(ComponentBase):
13
13
  This acts as an abstract base class for any drivers representing specific
14
14
  servo implementations. This cannot be used on its own. If the ``__init__()`` function is
15
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/>`_.
16
22
  """
17
23
 
18
- SUBTYPE: Final = Subtype(RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "servo")
24
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
25
+ RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "servo"
26
+ )
19
27
 
20
28
  @abc.abstractmethod
21
29
  async def move(self, angle: int, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None, **kwargs):
22
30
  """
23
31
  Move the servo to the provided angle.
24
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
+
25
43
  Args:
26
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>`_.
27
47
  """
28
48
  ...
29
49
 
@@ -32,8 +52,26 @@ class Servo(ComponentBase):
32
52
  """
33
53
  Get the current angle (degrees) of the servo.
34
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
+
35
71
  Returns:
36
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>`_.
37
75
  """
38
76
  ...
39
77
 
@@ -41,6 +79,18 @@ class Servo(ComponentBase):
41
79
  async def stop(self, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None, **kwargs):
42
80
  """
43
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>`_.
44
94
  """
45
95
  ...
46
96
 
@@ -49,7 +99,16 @@ class Servo(ComponentBase):
49
99
  """
50
100
  Get if the servo is currently moving.
51
101
 
102
+ ::
103
+
104
+ my_servo = Servo.from_robot(robot=machine, name="my_servo")
105
+
106
+ print(await my_servo.is_moving())
107
+
108
+
52
109
  Returns:
53
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>`_.
54
113
  """
55
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)))