viam-sdk 0.25.2__py3-none-linux_armv7l.whl → 0.62.0__py3-none-linux_armv7l.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.
Files changed (328) hide show
  1. viam/app/_logs.py +3 -6
  2. viam/app/app_client.py +606 -262
  3. viam/app/billing_client.py +60 -18
  4. viam/app/data_client.py +1086 -315
  5. viam/app/ml_training_client.py +51 -48
  6. viam/app/provisioning_client.py +3 -5
  7. viam/app/viam_client.py +105 -11
  8. viam/components/arm/__init__.py +1 -25
  9. viam/components/arm/arm.py +21 -22
  10. viam/components/arm/client.py +27 -30
  11. viam/components/arm/service.py +3 -3
  12. viam/components/audio_in/__init__.py +24 -0
  13. viam/components/audio_in/audio_in.py +74 -0
  14. viam/components/audio_in/client.py +76 -0
  15. viam/components/audio_in/service.py +83 -0
  16. viam/components/audio_input/__init__.py +1 -1
  17. viam/components/audio_input/audio_input.py +4 -3
  18. viam/components/audio_input/client.py +19 -8
  19. viam/components/audio_input/service.py +10 -0
  20. viam/components/audio_out/__init__.py +21 -0
  21. viam/components/audio_out/audio_out.py +72 -0
  22. viam/components/audio_out/client.py +67 -0
  23. viam/components/audio_out/service.py +63 -0
  24. viam/components/base/__init__.py +2 -10
  25. viam/components/base/base.py +20 -20
  26. viam/components/base/client.py +27 -30
  27. viam/components/board/__init__.py +2 -25
  28. viam/components/board/board.py +39 -77
  29. viam/components/board/client.py +39 -73
  30. viam/components/button/__init__.py +10 -0
  31. viam/components/button/button.py +41 -0
  32. viam/components/button/client.py +52 -0
  33. viam/components/button/service.py +46 -0
  34. viam/components/camera/__init__.py +1 -1
  35. viam/components/camera/camera.py +31 -22
  36. viam/components/camera/client.py +30 -20
  37. viam/components/camera/service.py +14 -12
  38. viam/components/component_base.py +10 -7
  39. viam/components/encoder/__init__.py +1 -1
  40. viam/components/encoder/client.py +15 -16
  41. viam/components/encoder/encoder.py +9 -9
  42. viam/components/gantry/__init__.py +1 -13
  43. viam/components/gantry/client.py +41 -28
  44. viam/components/gantry/gantry.py +48 -17
  45. viam/components/gantry/service.py +21 -5
  46. viam/components/generic/__init__.py +1 -1
  47. viam/components/generic/client.py +11 -7
  48. viam/components/generic/generic.py +3 -3
  49. viam/components/gripper/__init__.py +3 -12
  50. viam/components/gripper/client.py +43 -20
  51. viam/components/gripper/gripper.py +87 -12
  52. viam/components/gripper/service.py +32 -3
  53. viam/components/input/__init__.py +1 -14
  54. viam/components/input/client.py +22 -23
  55. viam/components/input/input.py +18 -12
  56. viam/components/motor/__init__.py +1 -21
  57. viam/components/motor/client.py +36 -42
  58. viam/components/motor/motor.py +24 -24
  59. viam/components/movement_sensor/__init__.py +1 -1
  60. viam/components/movement_sensor/client.py +33 -40
  61. viam/components/movement_sensor/movement_sensor.py +12 -12
  62. viam/components/pose_tracker/__init__.py +1 -1
  63. viam/components/pose_tracker/client.py +9 -8
  64. viam/components/pose_tracker/pose_tracker.py +2 -2
  65. viam/components/power_sensor/__init__.py +1 -1
  66. viam/components/power_sensor/client.py +15 -18
  67. viam/components/power_sensor/power_sensor.py +12 -12
  68. viam/components/sensor/__init__.py +1 -1
  69. viam/components/sensor/client.py +9 -8
  70. viam/components/sensor/sensor.py +5 -5
  71. viam/components/servo/__init__.py +1 -13
  72. viam/components/servo/client.py +18 -18
  73. viam/components/servo/servo.py +12 -12
  74. viam/components/switch/__init__.py +10 -0
  75. viam/components/switch/client.py +83 -0
  76. viam/components/switch/service.py +72 -0
  77. viam/components/switch/switch.py +95 -0
  78. viam/gen/app/agent/v1/agent_pb2.py +40 -29
  79. viam/gen/app/agent/v1/agent_pb2.pyi +73 -11
  80. viam/gen/app/cloudslam/v1/cloud_slam_pb2.py +45 -42
  81. viam/gen/app/data/v1/data_grpc.py +98 -2
  82. viam/gen/app/data/v1/data_pb2.py +238 -119
  83. viam/gen/app/data/v1/data_pb2.pyi +804 -34
  84. viam/gen/app/datapipelines/v1/data_pipelines_grpc.py +84 -0
  85. viam/gen/app/datapipelines/v1/data_pipelines_pb2.py +57 -0
  86. viam/gen/app/datapipelines/v1/data_pipelines_pb2.pyi +387 -0
  87. viam/gen/app/dataset/v1/dataset_grpc.py +10 -2
  88. viam/gen/app/dataset/v1/dataset_pb2.py +38 -31
  89. viam/gen/app/dataset/v1/dataset_pb2.pyi +36 -1
  90. viam/gen/app/datasync/v1/data_sync_grpc.py +1 -1
  91. viam/gen/app/datasync/v1/data_sync_pb2.py +61 -51
  92. viam/gen/app/datasync/v1/data_sync_pb2.pyi +52 -12
  93. viam/gen/app/mlinference/__init__.py +0 -0
  94. viam/gen/app/mlinference/v1/__init__.py +0 -0
  95. viam/gen/app/mlinference/v1/ml_inference_grpc.py +28 -0
  96. viam/gen/app/mlinference/v1/ml_inference_pb2.py +23 -0
  97. viam/gen/app/mlinference/v1/ml_inference_pb2.pyi +63 -0
  98. viam/gen/app/mltraining/v1/ml_training_grpc.py +18 -2
  99. viam/gen/app/mltraining/v1/ml_training_pb2.py +134 -101
  100. viam/gen/app/mltraining/v1/ml_training_pb2.pyi +193 -7
  101. viam/gen/app/packages/v1/packages_pb2.py +43 -40
  102. viam/gen/app/v1/app_grpc.py +290 -2
  103. viam/gen/app/v1/app_pb2.py +670 -453
  104. viam/gen/app/v1/app_pb2.pyi +3133 -947
  105. viam/gen/app/v1/billing_grpc.py +34 -2
  106. viam/gen/app/v1/billing_pb2.py +94 -35
  107. viam/gen/app/v1/billing_pb2.pyi +314 -61
  108. viam/gen/app/v1/end_user_pb2.py +50 -29
  109. viam/gen/app/v1/robot_pb2.py +120 -111
  110. viam/gen/app/v1/robot_pb2.pyi +137 -15
  111. viam/gen/common/v1/common_pb2.py +86 -66
  112. viam/gen/common/v1/common_pb2.pyi +184 -8
  113. viam/gen/component/arm/v1/arm_grpc.py +18 -2
  114. viam/gen/component/arm/v1/arm_pb2.py +68 -55
  115. viam/gen/component/arm/v1/arm_pb2.pyi +73 -3
  116. viam/gen/component/audioin/__init__.py +0 -0
  117. viam/gen/component/audioin/v1/__init__.py +0 -0
  118. viam/gen/component/audioin/v1/audioin_grpc.py +54 -0
  119. viam/gen/component/audioin/v1/audioin_pb2.py +34 -0
  120. viam/gen/component/audioin/v1/audioin_pb2.pyi +94 -0
  121. viam/gen/component/audioinput/v1/audioinput_pb2.py +35 -32
  122. viam/gen/component/audioout/__init__.py +0 -0
  123. viam/gen/component/audioout/v1/__init__.py +0 -0
  124. viam/gen/component/audioout/v1/audioout_grpc.py +54 -0
  125. viam/gen/component/audioout/v1/audioout_pb2.py +32 -0
  126. viam/gen/component/audioout/v1/audioout_pb2.pyi +47 -0
  127. viam/gen/component/base/v1/base_pb2.py +57 -54
  128. viam/gen/component/board/v1/board_pb2.py +93 -90
  129. viam/gen/component/button/__init__.py +0 -0
  130. viam/gen/component/button/v1/__init__.py +0 -0
  131. viam/gen/component/button/v1/button_grpc.py +38 -0
  132. viam/gen/component/button/v1/button_pb2.py +28 -0
  133. viam/gen/component/button/v1/button_pb2.pyi +39 -0
  134. viam/gen/component/camera/v1/camera_pb2.py +58 -55
  135. viam/gen/component/camera/v1/camera_pb2.pyi +31 -7
  136. viam/gen/component/encoder/v1/encoder_pb2.py +35 -32
  137. viam/gen/component/gantry/v1/gantry_grpc.py +9 -1
  138. viam/gen/component/gantry/v1/gantry_pb2.py +56 -51
  139. viam/gen/component/generic/v1/generic_pb2.py +15 -12
  140. viam/gen/component/gripper/v1/gripper_grpc.py +18 -2
  141. viam/gen/component/gripper/v1/gripper_pb2.py +48 -37
  142. viam/gen/component/gripper/v1/gripper_pb2.pyi +43 -1
  143. viam/gen/component/inputcontroller/v1/input_controller_pb2.py +45 -42
  144. viam/gen/component/motor/v1/motor_pb2.py +77 -74
  145. viam/gen/component/movementsensor/v1/movementsensor_pb2.py +69 -66
  146. viam/gen/component/posetracker/v1/pose_tracker_pb2.py +25 -22
  147. viam/gen/component/powersensor/v1/powersensor_pb2.py +33 -30
  148. viam/gen/component/sensor/v1/sensor_pb2.py +17 -14
  149. viam/gen/component/servo/v1/servo_pb2.py +41 -38
  150. viam/gen/component/switch/__init__.py +0 -0
  151. viam/gen/component/switch/v1/__init__.py +0 -0
  152. viam/gen/component/switch/v1/switch_grpc.py +54 -0
  153. viam/gen/component/switch/v1/switch_pb2.py +40 -0
  154. viam/gen/component/switch/v1/switch_pb2.pyi +116 -0
  155. viam/gen/component/testecho/v1/testecho_pb2.py +29 -26
  156. viam/gen/module/v1/module_pb2.py +36 -33
  157. viam/gen/module/v1/module_pb2.pyi +7 -2
  158. viam/gen/proto/rpc/examples/echo/v1/echo_pb2.py +26 -23
  159. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.py +23 -20
  160. viam/gen/proto/rpc/v1/auth_pb2.py +27 -24
  161. viam/gen/proto/rpc/webrtc/v1/grpc_pb2.py +35 -32
  162. viam/gen/proto/rpc/webrtc/v1/signaling_pb2.py +62 -57
  163. viam/gen/proto/rpc/webrtc/v1/signaling_pb2.pyi +18 -4
  164. viam/gen/provisioning/v1/provisioning_grpc.py +10 -2
  165. viam/gen/provisioning/v1/provisioning_pb2.py +38 -31
  166. viam/gen/provisioning/v1/provisioning_pb2.pyi +20 -2
  167. viam/gen/robot/v1/robot_grpc.py +61 -29
  168. viam/gen/robot/v1/robot_pb2.py +186 -155
  169. viam/gen/robot/v1/robot_pb2.pyi +278 -59
  170. viam/gen/service/datamanager/v1/data_manager_grpc.py +11 -2
  171. viam/gen/service/datamanager/v1/data_manager_pb2.py +27 -17
  172. viam/gen/service/datamanager/v1/data_manager_pb2.pyi +47 -1
  173. viam/gen/service/discovery/__init__.py +0 -0
  174. viam/gen/service/discovery/v1/__init__.py +0 -0
  175. viam/gen/service/discovery/v1/discovery_grpc.py +39 -0
  176. viam/gen/service/discovery/v1/discovery_pb2.py +29 -0
  177. viam/gen/service/discovery/v1/discovery_pb2.pyi +51 -0
  178. viam/gen/service/generic/v1/generic_pb2.py +13 -10
  179. viam/gen/service/mlmodel/v1/mlmodel_pb2.py +75 -72
  180. viam/gen/service/motion/v1/motion_pb2.py +118 -85
  181. viam/gen/service/motion/v1/motion_pb2.pyi +130 -68
  182. viam/gen/service/navigation/v1/navigation_pb2.py +75 -72
  183. viam/gen/service/sensors/v1/sensors_pb2.py +59 -56
  184. viam/gen/service/shell/v1/shell_pb2.py +35 -32
  185. viam/gen/service/slam/v1/slam_pb2.py +43 -40
  186. viam/gen/service/slam/v1/slam_pb2.pyi +1 -1
  187. viam/gen/service/video/__init__.py +0 -0
  188. viam/gen/service/video/v1/__init__.py +0 -0
  189. viam/gen/service/video/v1/video_grpc.py +39 -0
  190. viam/gen/service/video/v1/video_pb2.py +29 -0
  191. viam/gen/service/video/v1/video_pb2.pyi +72 -0
  192. viam/gen/service/vision/v1/vision_pb2.py +60 -57
  193. viam/gen/service/vision/v1/vision_pb2.pyi +28 -3
  194. viam/gen/service/worldstatestore/__init__.py +0 -0
  195. viam/gen/service/worldstatestore/v1/__init__.py +0 -0
  196. viam/gen/service/worldstatestore/v1/world_state_store_grpc.py +55 -0
  197. viam/gen/service/worldstatestore/v1/world_state_store_pb2.py +39 -0
  198. viam/gen/service/worldstatestore/v1/world_state_store_pb2.pyi +171 -0
  199. viam/gen/stream/v1/stream_grpc.py +17 -1
  200. viam/gen/stream/v1/stream_pb2.py +34 -21
  201. viam/gen/stream/v1/stream_pb2.pyi +79 -1
  202. viam/gen/tagger/v1/tagger_pb2.py +9 -8
  203. viam/logging.py +77 -18
  204. viam/media/audio.py +28 -0
  205. viam/media/utils/pil/__init__.py +7 -3
  206. viam/media/video.py +80 -17
  207. viam/module/module.py +111 -38
  208. viam/module/resource_data_consumer.py +41 -0
  209. viam/module/service.py +9 -1
  210. viam/module/types.py +2 -4
  211. viam/proto/app/__init__.py +199 -0
  212. viam/proto/app/agent/__init__.py +5 -2
  213. viam/proto/app/billing.py +31 -4
  214. viam/proto/app/cloudslam/__init__.py +1 -0
  215. viam/proto/app/data/__init__.py +63 -0
  216. viam/proto/app/datapipelines/__init__.py +56 -0
  217. viam/proto/app/dataset/__init__.py +5 -0
  218. viam/proto/app/datasync/__init__.py +3 -0
  219. viam/proto/app/end_user.py +1 -0
  220. viam/proto/app/mlinference/__init__.py +15 -0
  221. viam/proto/app/mltraining/__init__.py +13 -0
  222. viam/proto/app/packages/__init__.py +1 -0
  223. viam/proto/app/robot.py +7 -0
  224. viam/proto/common/__init__.py +15 -0
  225. viam/proto/component/arm/__init__.py +7 -0
  226. viam/proto/component/audioin/__init__.py +16 -0
  227. viam/proto/component/audioinput/__init__.py +1 -0
  228. viam/proto/component/audioout/__init__.py +15 -0
  229. viam/proto/component/base/__init__.py +1 -0
  230. viam/proto/component/board/__init__.py +1 -0
  231. viam/proto/component/button/__init__.py +15 -0
  232. viam/proto/component/camera/__init__.py +1 -0
  233. viam/proto/component/encoder/__init__.py +1 -0
  234. viam/proto/component/gantry/__init__.py +1 -0
  235. viam/proto/component/generic/__init__.py +1 -0
  236. viam/proto/component/gripper/__init__.py +5 -0
  237. viam/proto/component/inputcontroller/__init__.py +1 -0
  238. viam/proto/component/motor/__init__.py +1 -0
  239. viam/proto/component/movementsensor/__init__.py +1 -0
  240. viam/proto/component/posetracker/__init__.py +1 -0
  241. viam/proto/component/powersensor/__init__.py +1 -0
  242. viam/proto/component/sensor/__init__.py +1 -0
  243. viam/proto/component/servo/__init__.py +1 -0
  244. viam/proto/component/switch/__init__.py +26 -0
  245. viam/proto/component/testecho/__init__.py +1 -0
  246. viam/proto/module/__init__.py +1 -0
  247. viam/proto/provisioning/__init__.py +5 -0
  248. viam/proto/robot/__init__.py +29 -8
  249. viam/proto/rpc/auth.py +1 -0
  250. viam/proto/rpc/examples/echo/__init__.py +1 -0
  251. viam/proto/rpc/examples/echoresource/__init__.py +1 -0
  252. viam/proto/rpc/webrtc/grpc.py +1 -0
  253. viam/proto/rpc/webrtc/signaling.py +3 -0
  254. viam/proto/service/datamanager/__init__.py +9 -1
  255. viam/proto/service/discovery/__init__.py +15 -0
  256. viam/proto/service/generic/__init__.py +1 -0
  257. viam/proto/service/mlmodel/__init__.py +1 -0
  258. viam/proto/service/motion/__init__.py +3 -0
  259. viam/proto/service/navigation/__init__.py +1 -0
  260. viam/proto/service/sensors/__init__.py +1 -0
  261. viam/proto/service/shell/__init__.py +1 -0
  262. viam/proto/service/slam/__init__.py +1 -0
  263. viam/proto/service/video/__init__.py +15 -0
  264. viam/proto/service/vision/__init__.py +1 -0
  265. viam/proto/service/worldstatestore/__init__.py +32 -0
  266. viam/proto/stream/__init__.py +11 -0
  267. viam/py.typed +0 -0
  268. viam/resource/base.py +12 -8
  269. viam/resource/easy_resource.py +24 -13
  270. viam/resource/manager.py +6 -5
  271. viam/resource/registry.py +39 -51
  272. viam/resource/rpc_client_base.py +33 -1
  273. viam/resource/types.py +13 -14
  274. viam/robot/client.py +190 -122
  275. viam/robot/service.py +2 -50
  276. viam/rpc/dial.py +54 -4
  277. viam/rpc/libviam_rust_utils.so +0 -0
  278. viam/rpc/server.py +25 -11
  279. viam/rpc/types.py +2 -4
  280. viam/services/discovery/__init__.py +12 -0
  281. viam/services/discovery/client.py +55 -0
  282. viam/services/discovery/discovery.py +52 -0
  283. viam/services/discovery/service.py +43 -0
  284. viam/services/generic/__init__.py +1 -1
  285. viam/services/generic/client.py +8 -5
  286. viam/services/generic/generic.py +2 -2
  287. viam/services/mlmodel/__init__.py +1 -1
  288. viam/services/mlmodel/client.py +17 -7
  289. viam/services/mlmodel/mlmodel.py +23 -12
  290. viam/services/mlmodel/service.py +5 -2
  291. viam/services/mlmodel/utils.py +11 -1
  292. viam/services/motion/__init__.py +2 -2
  293. viam/services/motion/client.py +32 -32
  294. viam/services/motion/motion.py +66 -62
  295. viam/services/navigation/__init__.py +1 -1
  296. viam/services/navigation/client.py +30 -20
  297. viam/services/navigation/navigation.py +23 -23
  298. viam/services/service_base.py +13 -9
  299. viam/services/service_client_base.py +3 -3
  300. viam/services/slam/__init__.py +1 -1
  301. viam/services/slam/client.py +15 -10
  302. viam/services/slam/slam.py +11 -11
  303. viam/services/vision/__init__.py +1 -1
  304. viam/services/vision/client.py +31 -24
  305. viam/services/vision/service.py +8 -8
  306. viam/services/vision/vision.py +36 -53
  307. viam/services/worldstatestore/__init__.py +18 -0
  308. viam/services/worldstatestore/client.py +94 -0
  309. viam/services/worldstatestore/service.py +55 -0
  310. viam/services/worldstatestore/worldstatestore.py +90 -0
  311. viam/sessions_client.py +115 -46
  312. viam/streams.py +3 -6
  313. viam/utils.py +44 -14
  314. viam/version_metadata.py +4 -0
  315. {viam_sdk-0.25.2.dist-info → viam_sdk-0.62.0.dist-info}/METADATA +27 -28
  316. viam_sdk-0.62.0.dist-info/RECORD +514 -0
  317. {viam_sdk-0.25.2.dist-info → viam_sdk-0.62.0.dist-info}/WHEEL +1 -1
  318. viam/gen/proto/rpc/examples/fileupload/v1/fileupload_grpc.py +0 -27
  319. viam/gen/proto/rpc/examples/fileupload/v1/fileupload_pb2.py +0 -18
  320. viam/gen/proto/rpc/examples/fileupload/v1/fileupload_pb2.pyi +0 -45
  321. viam/proto/rpc/examples/fileupload/__init__.py +0 -18
  322. viam/services/sensors/__init__.py +0 -5
  323. viam/services/sensors/client.py +0 -65
  324. viam_sdk-0.25.2.dist-info/LICENSE +0 -202
  325. viam_sdk-0.25.2.dist-info/RECORD +0 -442
  326. /viam/gen/{proto/rpc/examples/fileupload → app/datapipelines}/__init__.py +0 -0
  327. /viam/gen/{proto/rpc/examples/fileupload → app/datapipelines}/v1/__init__.py +0 -0
  328. /LICENSE → /viam_sdk-0.62.0.dist-info/licenses/LICENSE +0 -0
@@ -0,0 +1,67 @@
1
+ from typing import Any, Dict, List, Mapping, Optional
2
+
3
+ from grpclib.client import Channel
4
+
5
+ from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetPropertiesRequest, GetPropertiesResponse
6
+ from viam.proto.component.audioout import AudioOutServiceStub, PlayRequest
7
+ from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
8
+ from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
9
+
10
+ from .audio_out import AudioInfo, AudioOut
11
+
12
+
13
+ class AudioOutClient(AudioOut, ReconfigurableResourceRPCClientBase):
14
+ """gRPC client for AudioOut component."""
15
+
16
+ def __init__(self, name: str, channel: Channel) -> None:
17
+ self.channel = channel
18
+ self.client = AudioOutServiceStub(channel)
19
+ super().__init__(name)
20
+
21
+ async def play(
22
+ self,
23
+ data: bytes,
24
+ info: Optional[AudioInfo] = None,
25
+ *,
26
+ extra: Optional[Dict[str, Any]] = None,
27
+ timeout: Optional[float] = None,
28
+ **kwargs,
29
+ ) -> None:
30
+ if extra is None:
31
+ extra = {}
32
+
33
+ md = kwargs.get("metadata", self.Metadata()).proto
34
+ request = PlayRequest(
35
+ name=self.name,
36
+ audio_data=data,
37
+ audio_info=info,
38
+ extra=dict_to_struct(extra),
39
+ )
40
+ await self.client.Play(request, timeout=timeout, metadata=md)
41
+
42
+ async def get_properties(
43
+ self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs
44
+ ) -> AudioOut.Properties:
45
+ if extra is None:
46
+ extra = {}
47
+
48
+ md = kwargs.get("metadata", self.Metadata()).proto
49
+ request = GetPropertiesRequest(name=self.name, extra=dict_to_struct(extra))
50
+ response: GetPropertiesResponse = await self.client.GetProperties(request, timeout=timeout, metadata=md)
51
+ return response
52
+
53
+ async def do_command(
54
+ self,
55
+ command: Mapping[str, ValueTypes],
56
+ *,
57
+ timeout: Optional[float] = None,
58
+ **kwargs,
59
+ ) -> Mapping[str, ValueTypes]:
60
+ md = kwargs.get("metadata", self.Metadata()).proto
61
+ request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
62
+ response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
63
+ return struct_to_dict(response.result)
64
+
65
+ async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
66
+ md = kwargs.get("metadata", self.Metadata())
67
+ return await get_geometries(self.client, self.name, extra, timeout, md)
@@ -0,0 +1,63 @@
1
+ from grpclib.server import Stream
2
+
3
+ from viam.proto.common import (
4
+ DoCommandRequest,
5
+ DoCommandResponse,
6
+ GetGeometriesRequest,
7
+ GetGeometriesResponse,
8
+ GetPropertiesRequest,
9
+ GetPropertiesResponse,
10
+ )
11
+ from viam.proto.component.audioout import (
12
+ AudioOutServiceBase,
13
+ PlayRequest,
14
+ PlayResponse,
15
+ )
16
+ from viam.resource.rpc_service_base import ResourceRPCServiceBase
17
+ from viam.utils import dict_to_struct, struct_to_dict
18
+
19
+ from .audio_out import AudioOut
20
+
21
+
22
+ class AudioOutRPCService(AudioOutServiceBase, ResourceRPCServiceBase[AudioOut]):
23
+ """gRPC service for AudioOut component."""
24
+
25
+ RESOURCE_TYPE = AudioOut
26
+
27
+ async def Play(self, stream: Stream[PlayRequest, PlayResponse]) -> None:
28
+ request = await stream.recv_message()
29
+ assert request is not None
30
+ name = request.name
31
+ audio_out = self.get_resource(name)
32
+ # Check if audio_info was provided in the request
33
+ audio_info = request.audio_info if request.HasField("audio_info") else None
34
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
35
+ await audio_out.play(request.audio_data, audio_info, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
36
+ await stream.send_message(PlayResponse())
37
+
38
+ async def GetProperties(self, stream: Stream[GetPropertiesRequest, GetPropertiesResponse]) -> None:
39
+ request = await stream.recv_message()
40
+ assert request is not None
41
+ name = request.name
42
+ audio_out = self.get_resource(name)
43
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
44
+ properties = await audio_out.get_properties(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
45
+ await stream.send_message(properties)
46
+
47
+ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
48
+ request = await stream.recv_message()
49
+ assert request is not None
50
+ audio_out = self.get_resource(request.name)
51
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
52
+ result = await audio_out.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
53
+ response = DoCommandResponse(result=dict_to_struct(result))
54
+ await stream.send_message(response)
55
+
56
+ async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
57
+ request = await stream.recv_message()
58
+ assert request is not None
59
+ audio_out = self.get_resource(request.name)
60
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
61
+ geometries = await audio_out.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
62
+ response = GetGeometriesResponse(geometries=geometries)
63
+ await stream.send_message(response)
@@ -1,7 +1,5 @@
1
- from viam.proto.common import ActuatorStatus, Vector3
2
- from viam.proto.robot import Status
1
+ from viam.proto.common import Vector3
3
2
  from viam.resource.registry import Registry, ResourceRegistration
4
- from viam.utils import message_to_struct
5
3
 
6
4
  from .base import Base
7
5
  from .client import BaseClient
@@ -12,10 +10,4 @@ __all__ = [
12
10
  "Vector3",
13
11
  ]
14
12
 
15
-
16
- async def create_status(component: Base) -> Status:
17
- s = ActuatorStatus(is_moving=await component.is_moving())
18
- return Status(name=Base.get_resource_name(component.name), status=message_to_struct(s))
19
-
20
-
21
- Registry.register_subtype(ResourceRegistration(Base, BaseRPCService, lambda name, channel: BaseClient(name, channel), create_status))
13
+ Registry.register_api(ResourceRegistration(Base, BaseRPCService, lambda name, channel: BaseClient(name, channel)))
@@ -2,7 +2,7 @@ import abc
2
2
  from dataclasses import dataclass
3
3
  from typing import Any, Dict, Final, Optional
4
4
 
5
- from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, Subtype
5
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
6
6
 
7
7
  from ..component_base import ComponentBase
8
8
  from . import Vector3
@@ -20,10 +20,10 @@ class Base(ComponentBase):
20
20
 
21
21
  from viam.components.base import Base
22
22
 
23
- For more information, see `Base component <https://docs.viam.com/components/base/>`_.
23
+ For more information, see `Base component <https://docs.viam.com/dev/reference/apis/components/base/>`_.
24
24
  """
25
25
 
26
- SUBTYPE: Final = Subtype( # pyright: ignore [reportIncompatibleVariableOverride]
26
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
27
27
  RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "base"
28
28
  )
29
29
 
@@ -51,7 +51,7 @@ class Base(ComponentBase):
51
51
 
52
52
  ::
53
53
 
54
- my_base = Base.from_robot(robot=robot, name="my_base")
54
+ my_base = Base.from_robot(robot=machine, name="my_base")
55
55
 
56
56
  # Move the base 40 mm at a velocity of 90 mm/s, forward.
57
57
  await my_base.move_straight(distance=40, velocity=90)
@@ -65,7 +65,7 @@ class Base(ComponentBase):
65
65
  velocity (float): The velocity (in millimeters per second) to move.
66
66
  Negative implies backwards.
67
67
 
68
- For more information, see `Base component <https://docs.viam.com/components/base/>`_.
68
+ For more information, see `Base component <https://docs.viam.com/dev/reference/apis/components/base/#movestraight>`_.
69
69
  """
70
70
  ...
71
71
 
@@ -87,7 +87,7 @@ class Base(ComponentBase):
87
87
 
88
88
  ::
89
89
 
90
- my_base = Base.from_robot(robot=robot, name="my_base")
90
+ my_base = Base.from_robot(robot=machine, name="my_base")
91
91
 
92
92
  # Spin the base 10 degrees at an angular velocity of 15 deg/sec.
93
93
  await my_base.spin(angle=10, velocity=15)
@@ -98,7 +98,7 @@ class Base(ComponentBase):
98
98
  to spin.
99
99
  Given a positive angle and a positive velocity, the base will turn to the left.
100
100
 
101
- For more information, see `Base component <https://docs.viam.com/components/base/>`_.
101
+ For more information, see `Base component <https://docs.viam.com/dev/reference/apis/components/base/#spin>`_.
102
102
  """
103
103
  ...
104
104
 
@@ -113,20 +113,20 @@ class Base(ComponentBase):
113
113
  **kwargs,
114
114
  ):
115
115
  """Set the linear and angular velocity of the Base
116
- When ``linear`` is 0, the the base will spin.
117
- When ``angular`` is 0, the the base will move in a straight line.
116
+ When ``linear`` is 0, the base will spin.
117
+ When ``angular`` is 0, the base will move in a straight line.
118
118
  When both ``linear`` and ``angular`` are 0, the base will stop.
119
119
  When ``linear`` and ``angular`` are both nonzero, the base will move in an arc,
120
120
  with a tighter radius if angular power is greater than linear power.
121
121
 
122
122
  ::
123
123
 
124
- my_base = Base.from_robot(robot=robot, name="my_base")
124
+ my_base = Base.from_robot(robot=machine, name="my_base")
125
125
 
126
126
  # Make your wheeled base move forward. Set linear power to 75%.
127
127
  print("move forward")
128
128
  await my_base.set_power(
129
- linear=Vector3(x=0, y=-.75, z=0),
129
+ linear=Vector3(x=0, y=.75, z=0),
130
130
  angular=Vector3(x=0, y=0, z=0))
131
131
 
132
132
  # Make your wheeled base move backward. Set linear power to -100%.
@@ -153,7 +153,7 @@ class Base(ComponentBase):
153
153
  angular (Vector3): The angular component. Only the Z component is used
154
154
  for wheeled base. Positive turns left; negative turns right.
155
155
 
156
- For more information, see `Base component <https://docs.viam.com/components/base/>`_.
156
+ For more information, see `Base component <https://docs.viam.com/dev/reference/apis/components/base/#setpower>`_.
157
157
  """
158
158
  ...
159
159
 
@@ -172,7 +172,7 @@ class Base(ComponentBase):
172
172
 
173
173
  ::
174
174
 
175
- my_base = Base.from_robot(robot=robot, name="my_base")
175
+ my_base = Base.from_robot(robot=machine, name="my_base")
176
176
 
177
177
  # Set the linear velocity to 50 mm/sec and the angular velocity to
178
178
  # 15 degree/sec.
@@ -183,7 +183,7 @@ class Base(ComponentBase):
183
183
  linear (Vector3): Velocity in mm/sec
184
184
  angular (Vector3): Velocity in deg/sec
185
185
 
186
- For more information, see `Base component <https://docs.viam.com/components/base/>`_.
186
+ For more information, see `Base component <https://docs.viam.com/dev/reference/apis/components/base/#setvelocity>`_.
187
187
  """
188
188
 
189
189
  @abc.abstractmethod
@@ -199,7 +199,7 @@ class Base(ComponentBase):
199
199
 
200
200
  ::
201
201
 
202
- my_base = Base.from_robot(robot=robot, name="my_base")
202
+ my_base = Base.from_robot(robot=machine, name="my_base")
203
203
 
204
204
  # Move the base forward 10 mm at a velocity of 50 mm/s.
205
205
  await my_base.move_straight(distance=10, velocity=50)
@@ -207,7 +207,7 @@ class Base(ComponentBase):
207
207
  # Stop the base.
208
208
  await my_base.stop()
209
209
 
210
- For more information, see `Base component <https://docs.viam.com/components/base/>`_.
210
+ For more information, see `Base component <https://docs.viam.com/dev/reference/apis/components/base/#stop>`_.
211
211
  """
212
212
  ...
213
213
 
@@ -218,7 +218,7 @@ class Base(ComponentBase):
218
218
 
219
219
  ::
220
220
 
221
- my_base = Base.from_robot(robot=robot, name="my_base")
221
+ my_base = Base.from_robot(robot=machine, name="my_base")
222
222
 
223
223
  # Check whether the base is currently moving.
224
224
  moving = await my_base.is_moving()
@@ -227,7 +227,7 @@ class Base(ComponentBase):
227
227
  Returns:
228
228
  bool: Whether the base is moving.
229
229
 
230
- For more information, see `Base component <https://docs.viam.com/components/base/>`_.
230
+ For more information, see `Base component <https://docs.viam.com/dev/reference/apis/components/base/#ismoving>`_.
231
231
  """
232
232
  ...
233
233
 
@@ -238,7 +238,7 @@ class Base(ComponentBase):
238
238
 
239
239
  ::
240
240
 
241
- my_base = Base.from_robot(robot=robot, name="my_base")
241
+ my_base = Base.from_robot(robot=machine, name="my_base")
242
242
 
243
243
  # Get the width and turning radius of the base
244
244
  properties = await my_base.get_properties()
@@ -255,6 +255,6 @@ class Base(ComponentBase):
255
255
  Returns:
256
256
  Properties: The properties of the base
257
257
 
258
- For more information, see `Base component <https://docs.viam.com/components/base/>`_.
258
+ For more information, see `Base component <https://docs.viam.com/dev/reference/apis/components/base/#getproperties>`_.
259
259
  """
260
260
  ...
@@ -38,17 +38,16 @@ class BaseClient(Base, ReconfigurableResourceRPCClientBase):
38
38
  *,
39
39
  extra: Optional[Dict[str, Any]] = None,
40
40
  timeout: Optional[float] = None,
41
- **__,
41
+ **kwargs,
42
42
  ):
43
- if extra is None:
44
- extra = {}
43
+ md = kwargs.get("metadata", self.Metadata()).proto
45
44
  request = MoveStraightRequest(
46
45
  name=self.name,
47
46
  distance_mm=distance,
48
47
  mm_per_sec=velocity,
49
48
  extra=dict_to_struct(extra),
50
49
  )
51
- await self.client.MoveStraight(request, timeout=timeout)
50
+ await self.client.MoveStraight(request, timeout=timeout, metadata=md)
52
51
 
53
52
  async def spin(
54
53
  self,
@@ -57,17 +56,16 @@ class BaseClient(Base, ReconfigurableResourceRPCClientBase):
57
56
  *,
58
57
  extra: Optional[Dict[str, Any]] = None,
59
58
  timeout: Optional[float] = None,
60
- **__,
59
+ **kwargs,
61
60
  ):
62
- if extra is None:
63
- extra = {}
61
+ md = kwargs.get("metadata", self.Metadata()).proto
64
62
  request = SpinRequest(
65
63
  name=self.name,
66
64
  angle_deg=angle,
67
65
  degs_per_sec=velocity,
68
66
  extra=dict_to_struct(extra),
69
67
  )
70
- await self.client.Spin(request, timeout=timeout)
68
+ await self.client.Spin(request, timeout=timeout, metadata=md)
71
69
 
72
70
  async def set_power(
73
71
  self,
@@ -76,17 +74,16 @@ class BaseClient(Base, ReconfigurableResourceRPCClientBase):
76
74
  *,
77
75
  extra: Optional[Dict[str, Any]] = None,
78
76
  timeout: Optional[float] = None,
79
- **__,
77
+ **kwargs,
80
78
  ):
81
- if extra is None:
82
- extra = {}
79
+ md = kwargs.get("metadata", self.Metadata()).proto
83
80
  request = SetPowerRequest(
84
81
  name=self.name,
85
82
  linear=linear,
86
83
  angular=angular,
87
84
  extra=dict_to_struct(extra),
88
85
  )
89
- await self.client.SetPower(request, timeout=timeout)
86
+ await self.client.SetPower(request, timeout=timeout, metadata=md)
90
87
 
91
88
  async def set_velocity(
92
89
  self,
@@ -95,33 +92,32 @@ class BaseClient(Base, ReconfigurableResourceRPCClientBase):
95
92
  *,
96
93
  extra: Optional[Dict[str, Any]] = None,
97
94
  timeout: Optional[float] = None,
98
- **__,
95
+ **kwargs,
99
96
  ):
100
- if extra is None:
101
- extra = {}
97
+ md = kwargs.get("metadata", self.Metadata()).proto
102
98
  request = SetVelocityRequest(name=self.name, linear=linear, angular=angular, extra=dict_to_struct(extra))
103
- await self.client.SetVelocity(request, timeout=timeout)
99
+ await self.client.SetVelocity(request, timeout=timeout, metadata=md)
104
100
 
105
101
  async def stop(
106
102
  self,
107
103
  *,
108
104
  extra: Optional[Dict[str, Any]] = None,
109
105
  timeout: Optional[float] = None,
110
- **__,
106
+ **kwargs,
111
107
  ):
112
- if extra is None:
113
- extra = {}
108
+ md = kwargs.get("metadata", self.Metadata()).proto
114
109
  request = StopRequest(name=self.name, extra=dict_to_struct(extra))
115
- await self.client.Stop(request, timeout=timeout)
110
+ await self.client.Stop(request, timeout=timeout, metadata=md)
116
111
 
117
112
  async def is_moving(
118
113
  self,
119
114
  *,
120
115
  timeout: Optional[float] = None,
121
- **__,
116
+ **kwargs,
122
117
  ) -> bool:
118
+ md = kwargs.get("metadata", self.Metadata()).proto
123
119
  request = IsMovingRequest(name=self.name)
124
- response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout)
120
+ response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout, metadata=md)
125
121
  return response.is_moving
126
122
 
127
123
  async def get_properties(
@@ -129,12 +125,11 @@ class BaseClient(Base, ReconfigurableResourceRPCClientBase):
129
125
  *,
130
126
  extra: Optional[Dict[str, Any]] = None,
131
127
  timeout: Optional[float] = None,
132
- **__,
128
+ **kwargs,
133
129
  ) -> Base.Properties:
134
- if extra is None:
135
- extra = {}
130
+ md = kwargs.get("metadata", self.Metadata()).proto
136
131
  request = GetPropertiesRequest(name=self.name, extra=dict_to_struct(extra))
137
- response: GetPropertiesResponse = await self.client.GetProperties(request, timeout=timeout)
132
+ response: GetPropertiesResponse = await self.client.GetProperties(request, timeout=timeout, metadata=md)
138
133
  return Base.Properties(
139
134
  width_meters=response.width_meters,
140
135
  turning_radius_meters=response.turning_radius_meters,
@@ -146,11 +141,13 @@ class BaseClient(Base, ReconfigurableResourceRPCClientBase):
146
141
  command: Mapping[str, ValueTypes],
147
142
  *,
148
143
  timeout: Optional[float] = None,
149
- **__,
144
+ **kwargs,
150
145
  ) -> Mapping[str, ValueTypes]:
146
+ md = kwargs.get("metadata", self.Metadata()).proto
151
147
  request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
152
- response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
148
+ response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
153
149
  return struct_to_dict(response.result)
154
150
 
155
- async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> List[Geometry]:
156
- return await get_geometries(self.client, self.name, extra, timeout)
151
+ async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
152
+ md = kwargs.get("metadata", self.Metadata())
153
+ return await get_geometries(self.client, self.name, extra, timeout, md)
@@ -1,32 +1,9 @@
1
- import asyncio
2
-
3
- from viam.proto.component.board import Status as BoardStatus
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 .board import Board, Tick, TickStream
9
4
  from .client import BoardClient
10
5
  from .service import BoardRPCService
11
6
 
12
- __all__ = ["Board"]
13
-
14
-
15
- async def create_status(component: Board) -> Status:
16
- (analog_names, digital_interrupt_names) = await asyncio.gather(component.analog_names(), component.digital_interrupt_names())
17
- analogs, digital_interrupts = {}, {}
18
- for x in analog_names:
19
- analog = await component.analog_by_name(x)
20
- read = await analog.read()
21
- analogs[x] = read.value
22
-
23
- for y in digital_interrupt_names:
24
- digital_interrupt = await component.digital_interrupt_by_name(y)
25
- val = await digital_interrupt.value()
26
- digital_interrupts[y] = val
27
-
28
- s = BoardStatus(analogs=analogs, digital_interrupts=digital_interrupts)
29
- return Status(name=Board.get_resource_name(component.name), status=message_to_struct(s))
30
-
7
+ __all__ = ["Board", "Tick", "TickStream"]
31
8
 
32
- Registry.register_subtype(ResourceRegistration(Board, BoardRPCService, lambda name, channel: BoardClient(name, channel), create_status))
9
+ Registry.register_api(ResourceRegistration(Board, BoardRPCService, lambda name, channel: BoardClient(name, channel)))