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,52 @@
1
+ from typing import Any, Mapping, Optional
2
+
3
+ from grpclib.client import Channel
4
+
5
+ from viam.gen.component.button.v1.button_pb2 import PushRequest
6
+ from viam.proto.common import (
7
+ DoCommandRequest,
8
+ DoCommandResponse,
9
+ )
10
+ from viam.proto.component.button import ButtonServiceStub
11
+ from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
12
+ from viam.utils import (
13
+ ValueTypes,
14
+ dict_to_struct,
15
+ struct_to_dict,
16
+ )
17
+
18
+ from .button import Button
19
+
20
+
21
+ class ButtonClient(Button, ReconfigurableResourceRPCClientBase):
22
+ """
23
+ gRPC client for Button component
24
+ """
25
+
26
+ def __init__(self, name: str, channel: Channel):
27
+ self.channel = channel
28
+ self.client = ButtonServiceStub(channel)
29
+ super().__init__(name)
30
+
31
+ async def push(
32
+ self,
33
+ *,
34
+ extra: Optional[Mapping[str, Any]] = None,
35
+ timeout: Optional[float] = None,
36
+ **kwargs,
37
+ ) -> None:
38
+ md = kwargs.get("metadata", self.Metadata()).proto
39
+ request = PushRequest(name=self.name, extra=dict_to_struct(extra))
40
+ await self.client.Push(request, timeout=timeout, metadata=md)
41
+
42
+ async def do_command(
43
+ self,
44
+ command: Mapping[str, ValueTypes],
45
+ *,
46
+ timeout: Optional[float] = None,
47
+ **kwargs,
48
+ ) -> Mapping[str, ValueTypes]:
49
+ md = kwargs.get("metadata", self.Metadata()).proto
50
+ request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
51
+ response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
52
+ return struct_to_dict(response.result)
@@ -0,0 +1,46 @@
1
+ from grpclib.server import Stream
2
+
3
+ from viam.gen.component.button.v1.button_pb2 import (
4
+ PushRequest,
5
+ PushResponse,
6
+ )
7
+ from viam.proto.common import (
8
+ DoCommandRequest,
9
+ DoCommandResponse,
10
+ )
11
+ from viam.proto.component.button import ButtonServiceBase
12
+ from viam.resource.rpc_service_base import ResourceRPCServiceBase
13
+ from viam.utils import dict_to_struct, struct_to_dict
14
+
15
+ from .button import Button
16
+
17
+
18
+ class ButtonRPCService(ButtonServiceBase, ResourceRPCServiceBase[Button]):
19
+ """
20
+ gRPC Service for a generic Button
21
+ """
22
+
23
+ RESOURCE_TYPE = Button
24
+
25
+ async def Push(self, stream: Stream[PushRequest, PushResponse]) -> None:
26
+ request = await stream.recv_message()
27
+ assert request is not None
28
+ name = request.name
29
+ button = self.get_resource(name)
30
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
31
+ await button.push(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
32
+ await stream.send_message(PushResponse())
33
+
34
+ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
35
+ request = await stream.recv_message()
36
+ assert request is not None
37
+ name = request.name
38
+ button = self.get_resource(name)
39
+ timeout = stream.deadline.time_remaining() if stream.deadline else None
40
+ result = await button.do_command(
41
+ command=struct_to_dict(request.command),
42
+ timeout=timeout,
43
+ metadata=stream.metadata,
44
+ )
45
+ response = DoCommandResponse(result=dict_to_struct(result))
46
+ await stream.send_message(response)
@@ -13,7 +13,7 @@ __all__ = [
13
13
  "ViamImage",
14
14
  ]
15
15
 
16
- Registry.register_subtype(
16
+ Registry.register_api(
17
17
  ResourceRegistration(
18
18
  Camera,
19
19
  CameraRPCService,
@@ -1,11 +1,11 @@
1
1
  import abc
2
2
  import sys
3
- from typing import Any, Dict, Final, List, Optional, Tuple
3
+ from typing import Any, Dict, Final, Optional, Sequence, Tuple
4
4
 
5
5
  from viam.media.video import NamedImage, ViamImage
6
6
  from viam.proto.common import ResponseMetadata
7
7
  from viam.proto.component.camera import GetPropertiesResponse
8
- from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, Subtype
8
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
9
9
 
10
10
  from ..component_base import ComponentBase
11
11
 
@@ -27,10 +27,10 @@ class Camera(ComponentBase):
27
27
 
28
28
  from viam.components.camera import Camera
29
29
 
30
- For more information, see `Camera component <https://docs.viam.com/components/camera/>`_.
30
+ For more information, see `Camera component <https://docs.viam.com/dev/reference/apis/components/camera/>`_.
31
31
  """
32
32
 
33
- SUBTYPE: Final = Subtype( # pyright: ignore [reportIncompatibleVariableOverride]
33
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
34
34
  RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "camera"
35
35
  )
36
36
 
@@ -48,14 +48,9 @@ class Camera(ComponentBase):
48
48
 
49
49
  ::
50
50
 
51
- my_camera = Camera.from_robot(robot=robot, name="my_camera")
52
-
53
- # Assume "frame" has a mime_type of "image/vnd.viam.dep"
54
- frame = await my_camera.get_image(mime_type = CameraMimeType.VIAM_RAW_DEPTH)
55
-
56
- # Convert "frame" to a standard 2D image representation.
57
- # Remove the 1st 3x8 bytes and reshape the raw bytes to List[List[Int]].
58
- standard_frame = frame.bytes_to_depth_array()
51
+ my_camera = Camera.from_robot(machine, "my_camera")
52
+ frame = await my_camera.get_image()
53
+ print(f"Frame: {frame}")
59
54
 
60
55
  Args:
61
56
  mime_type (str): The desired mime type of the image. This does not guarantee output type
@@ -63,28 +58,39 @@ class Camera(ComponentBase):
63
58
  Returns:
64
59
  ViamImage: The frame.
65
60
 
66
- For more information, see `Camera component <https://docs.viam.com/components/camera/>`_.
61
+ For more information, see `Camera component <https://docs.viam.com/dev/reference/apis/components/camera/#getimage>`_.
67
62
  """
68
63
  ...
69
64
 
70
65
  @abc.abstractmethod
71
- async def get_images(self, *, timeout: Optional[float] = None, **kwargs) -> Tuple[List[NamedImage], ResponseMetadata]:
66
+ async def get_images(
67
+ self,
68
+ *,
69
+ filter_source_names: Optional[Sequence[str]] = None,
70
+ extra: Optional[Dict[str, Any]] = None,
71
+ timeout: Optional[float] = None,
72
+ **kwargs,
73
+ ) -> Tuple[Sequence[NamedImage], ResponseMetadata]:
72
74
  """Get simultaneous images from different imagers, along with associated metadata.
73
75
  This should not be used for getting a time series of images from the same imager.
74
76
 
75
77
  ::
76
78
 
77
- my_camera = Camera.from_robot(robot=robot, name="my_camera")
79
+ my_camera = Camera.from_robot(robot=machine, name="my_camera")
78
80
 
79
81
  images, metadata = await my_camera.get_images()
80
- img0 = images[0].image
82
+ first_image = images[0]
81
83
  timestamp = metadata.captured_at
82
84
 
85
+ Args:
86
+ filter_source_names (Sequence[str]): The filter_source_names parameter can be used to filter only the images from the specified
87
+ source names. When unspecified, all images are returned.
88
+
83
89
  Returns:
84
- Tuple[List[NamedImage], ResponseMetadata]: A tuple containing two values; the first [0] a list of images
90
+ Tuple[Sequence[NamedImage], ResponseMetadata]: A tuple containing two values; the first [0] a list of images
85
91
  returned from the camera system, and the second [1] the metadata associated with this response.
86
92
 
87
- For more information, see `Camera component <https://docs.viam.com/components/camera/>`_.
93
+ For more information, see `Camera component <https://docs.viam.com/dev/reference/apis/components/camera/#getimages>`_.
88
94
  """
89
95
  ...
90
96
 
@@ -100,12 +106,15 @@ class Camera(ComponentBase):
100
106
  by the mimetype.
101
107
 
102
108
  To deserialize the returned information into a numpy array, use the Open3D library.
109
+
103
110
  ::
104
111
 
105
112
  import numpy as np
106
113
  import open3d as o3d
107
114
 
108
- data, _ = await camera.get_point_cloud()
115
+ my_camera = Camera.from_robot(robot=machine, name="my_camera")
116
+
117
+ data, _ = await my_camera.get_point_cloud()
109
118
 
110
119
  # write the point cloud into a temporary file
111
120
  with open("/tmp/pointcloud_data.pcd", "wb") as f:
@@ -117,7 +126,7 @@ class Camera(ComponentBase):
117
126
  Tuple[bytes, str]: A tuple containing two values; the first [0] the pointcloud data,
118
127
  and the second [1] the mimetype of the pointcloud (for example, PCD).
119
128
 
120
- For more information, see `Camera component <https://docs.viam.com/components/camera/>`_.
129
+ For more information, see `Camera component <https://docs.viam.com/dev/reference/apis/components/camera/#getpointcloud>`_.
121
130
  """
122
131
  ...
123
132
 
@@ -128,13 +137,13 @@ class Camera(ComponentBase):
128
137
 
129
138
  ::
130
139
 
131
- my_camera = Camera.from_robot(robot=robot, name="my_camera")
140
+ my_camera = Camera.from_robot(robot=machine, name="my_camera")
132
141
 
133
142
  properties = await my_camera.get_properties()
134
143
 
135
144
  Returns:
136
145
  Properties: The properties of the camera.
137
146
 
138
- For more information, see `Camera component <https://docs.viam.com/components/camera/>`_.
147
+ For more information, see `Camera component <https://docs.viam.com/dev/reference/apis/components/camera/#getproperties>`_.
139
148
  """
140
149
  ...
@@ -1,4 +1,4 @@
1
- from typing import Any, Dict, List, Mapping, Optional, Tuple
1
+ from typing import Any, Dict, Mapping, Optional, Sequence, Tuple
2
2
 
3
3
  from grpclib.client import Channel
4
4
 
@@ -36,25 +36,31 @@ class CameraClient(Camera, ReconfigurableResourceRPCClientBase):
36
36
  *,
37
37
  extra: Optional[Dict[str, Any]] = None,
38
38
  timeout: Optional[float] = None,
39
- **__,
39
+ **kwargs,
40
40
  ) -> ViamImage:
41
- if extra is None:
42
- extra = {}
41
+ md = kwargs.get("metadata", self.Metadata()).proto
43
42
  request = GetImageRequest(name=self.name, mime_type=mime_type, extra=dict_to_struct(extra))
44
- response: GetImageResponse = await self.client.GetImage(request, timeout=timeout)
43
+ response: GetImageResponse = await self.client.GetImage(request, timeout=timeout, metadata=md)
45
44
  return ViamImage(response.image, CameraMimeType.from_string(response.mime_type))
46
45
 
47
46
  async def get_images(
48
47
  self,
49
48
  *,
49
+ filter_source_names: Optional[Sequence[str]] = None,
50
+ extra: Optional[Dict[str, Any]] = None,
50
51
  timeout: Optional[float] = None,
51
- **__,
52
- ) -> Tuple[List[NamedImage], ResponseMetadata]:
53
- request = GetImagesRequest(name=self.name)
54
- response: GetImagesResponse = await self.client.GetImages(request, timeout=timeout)
52
+ **kwargs,
53
+ ) -> Tuple[Sequence[NamedImage], ResponseMetadata]:
54
+ md = kwargs.get("metadata", self.Metadata()).proto
55
+ request = GetImagesRequest(name=self.name, extra=dict_to_struct(extra), filter_source_names=filter_source_names)
56
+ response: GetImagesResponse = await self.client.GetImages(request, timeout=timeout, metadata=md)
55
57
  imgs = []
56
58
  for img_data in response.images:
57
- mime_type = CameraMimeType.from_proto(img_data.format)
59
+ if img_data.mime_type:
60
+ mime_type = CameraMimeType.from_string(img_data.mime_type)
61
+ else:
62
+ # TODO(RSDK-11728): remove this once we deleted the format field
63
+ mime_type = CameraMimeType.from_proto(img_data.format)
58
64
  img = NamedImage(img_data.source_name, img_data.image, mime_type)
59
65
  imgs.append(img)
60
66
  resp_metadata: ResponseMetadata = response.response_metadata
@@ -65,32 +71,36 @@ class CameraClient(Camera, ReconfigurableResourceRPCClientBase):
65
71
  *,
66
72
  extra: Optional[Dict[str, Any]] = None,
67
73
  timeout: Optional[float] = None,
68
- **__,
74
+ **kwargs,
69
75
  ) -> Tuple[bytes, str]:
70
- if extra is None:
71
- extra = {}
76
+ md = kwargs.get("metadata", self.Metadata()).proto
72
77
  request = GetPointCloudRequest(name=self.name, mime_type=CameraMimeType.PCD, extra=dict_to_struct(extra))
73
- response: GetPointCloudResponse = await self.client.GetPointCloud(request, timeout=timeout)
78
+ response: GetPointCloudResponse = await self.client.GetPointCloud(request, timeout=timeout, metadata=md)
74
79
  return (response.point_cloud, response.mime_type)
75
80
 
76
81
  async def get_properties(
77
82
  self,
78
83
  *,
79
84
  timeout: Optional[float] = None,
80
- **__,
85
+ **kwargs,
81
86
  ) -> Camera.Properties:
82
- return await self.client.GetProperties(GetPropertiesRequest(name=self.name), timeout=timeout)
87
+ md = kwargs.get("metadata", self.Metadata()).proto
88
+ return await self.client.GetProperties(GetPropertiesRequest(name=self.name), timeout=timeout, metadata=md)
83
89
 
84
90
  async def do_command(
85
91
  self,
86
92
  command: Mapping[str, ValueTypes],
87
93
  *,
88
94
  timeout: Optional[float] = None,
89
- **__,
95
+ **kwargs,
90
96
  ) -> Mapping[str, ValueTypes]:
97
+ md = kwargs.get("metadata", self.Metadata()).proto
91
98
  request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
92
- response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
99
+ response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
93
100
  return struct_to_dict(response.result)
94
101
 
95
- async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> List[Geometry]:
96
- return await get_geometries(self.client, self.name, extra, timeout)
102
+ async def get_geometries(
103
+ self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs
104
+ ) -> Sequence[Geometry]:
105
+ md = kwargs.get("metadata", self.Metadata())
106
+ return await get_geometries(self.client, self.name, extra, timeout, md)
@@ -3,6 +3,7 @@
3
3
  from google.api.httpbody_pb2 import HttpBody # type: ignore
4
4
  from grpclib.server import Stream
5
5
 
6
+ from viam.media.video import CameraMimeType
6
7
  from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse
7
8
  from viam.proto.component.camera import (
8
9
  CameraServiceBase,
@@ -44,16 +45,23 @@ class CameraRPCService(CameraServiceBase, ResourceRPCServiceBase[Camera]):
44
45
  async def GetImages(self, stream: Stream[GetImagesRequest, GetImagesResponse]) -> None:
45
46
  request = await stream.recv_message()
46
47
  assert request is not None
47
- name = request.name
48
- camera = self.get_resource(name)
48
+ camera = self.get_resource(request.name)
49
49
 
50
50
  timeout = stream.deadline.time_remaining() if stream.deadline else None
51
- images, metadata = await camera.get_images(timeout=timeout, metadata=stream.metadata)
51
+ images, metadata = await camera.get_images(
52
+ timeout=timeout,
53
+ metadata=stream.metadata,
54
+ extra=struct_to_dict(request.extra),
55
+ filter_source_names=request.filter_source_names,
56
+ )
52
57
  img_bytes_lst = []
53
58
  for img in images:
54
- fmt = img.mime_type.to_proto()
59
+ mime_type = CameraMimeType.from_string(img.mime_type)
60
+ # TODO(RSDK-11728): remove this fmt logic once we deleted the format field
61
+ fmt = mime_type.to_proto() # Will be Format.FORMAT_UNSPECIFIED if an unsupported/custom mime type is set
62
+
55
63
  img_bytes = img.data
56
- img_bytes_lst.append(Image(source_name=name, format=fmt, image=img_bytes))
64
+ img_bytes_lst.append(Image(source_name=img.name, mime_type=img.mime_type, format=fmt, image=img_bytes))
57
65
  response = GetImagesResponse(images=img_bytes_lst, response_metadata=metadata)
58
66
  await stream.send_message(response)
59
67
 
@@ -84,13 +92,7 @@ class CameraRPCService(CameraServiceBase, ResourceRPCServiceBase[Camera]):
84
92
  camera = self.get_resource(name)
85
93
  timeout = stream.deadline.time_remaining() if stream.deadline else None
86
94
  properties = await camera.get_properties(timeout=timeout, metadata=stream.metadata)
87
- response = GetPropertiesResponse(
88
- supports_pcd=properties.supports_pcd,
89
- intrinsic_parameters=properties.intrinsic_parameters,
90
- distortion_parameters=properties.distortion_parameters,
91
- mime_types=properties.mime_types,
92
- )
93
- await stream.send_message(response)
95
+ await stream.send_message(properties)
94
96
 
95
97
  async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
96
98
  request = await stream.recv_message()
@@ -1,14 +1,16 @@
1
1
  import abc
2
- from typing import TYPE_CHECKING, Any, ClassVar, Dict, List, Mapping, Optional, SupportsBytes, SupportsFloat, Union, cast
2
+ from logging import Logger
3
+ from typing import TYPE_CHECKING, Any, ClassVar, Dict, List, Mapping, Optional, Sequence, SupportsBytes, SupportsFloat, Union, cast
3
4
 
4
5
  from typing_extensions import Self
5
6
 
6
7
  from viam.errors import MethodNotImplementedError
8
+ from viam.logging import getLogger
7
9
  from viam.proto.common import Geometry
8
10
  from viam.resource.base import ResourceBase
9
11
 
10
12
  if TYPE_CHECKING:
11
- from viam.resource.types import Subtype
13
+ from viam.resource.types import API
12
14
  from viam.robot.client import RobotClient
13
15
 
14
16
 
@@ -21,10 +23,11 @@ class ComponentBase(abc.ABC, ResourceBase):
21
23
  All components must inherit from this class.
22
24
  """
23
25
 
24
- SUBTYPE: ClassVar["Subtype"]
26
+ API: ClassVar["API"]
25
27
 
26
- def __init__(self, name: str):
28
+ def __init__(self, name: str, *, logger: Optional[Logger] = None):
27
29
  self.name = name
30
+ self.logger = logger if logger is not None else getLogger(f"{self.API}.{name}")
28
31
 
29
32
  @classmethod
30
33
  def from_robot(cls, robot: "RobotClient", name: str) -> Self:
@@ -38,15 +41,15 @@ class ComponentBase(abc.ABC, ResourceBase):
38
41
  Self: The component, if it exists on the robot
39
42
  """
40
43
  component = robot.get_component(cls.get_resource_name(name))
41
- return cast(cls, component)
44
+ return cast(cls, component) # type: ignore
42
45
 
43
46
  async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None, **kwargs) -> Mapping[str, ValueTypes]:
44
47
  raise NotImplementedError()
45
48
 
46
- async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> List[Geometry]:
49
+ async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> Sequence[Geometry]:
47
50
  """
48
51
  Get all geometries associated with the component, in their current configuration, in the
49
- `frame <https://docs.viam.com/services/frame-system/>`__ of the component.
52
+ `frame <https://docs.viam.com/operate/mobility/define-geometry/>`__ of the component.
50
53
 
51
54
  ::
52
55
 
@@ -9,7 +9,7 @@ __all__ = [
9
9
  ]
10
10
 
11
11
 
12
- Registry.register_subtype(
12
+ Registry.register_api(
13
13
  ResourceRegistration(
14
14
  Encoder,
15
15
  EncoderRPCService,
@@ -33,12 +33,11 @@ class EncoderClient(Encoder, ReconfigurableResourceRPCClientBase):
33
33
  *,
34
34
  extra: Optional[Dict[str, Any]] = None,
35
35
  timeout: Optional[float] = None,
36
- **__,
36
+ **kwargs,
37
37
  ):
38
- if extra is None:
39
- extra = {}
38
+ md = kwargs.get("metadata", self.Metadata()).proto
40
39
  request = ResetPositionRequest(name=self.name, extra=dict_to_struct(extra))
41
- await self.client.ResetPosition(request, timeout=timeout)
40
+ await self.client.ResetPosition(request, timeout=timeout, metadata=md)
42
41
 
43
42
  async def get_position(
44
43
  self,
@@ -46,12 +45,11 @@ class EncoderClient(Encoder, ReconfigurableResourceRPCClientBase):
46
45
  *,
47
46
  extra: Optional[Dict[str, Any]] = None,
48
47
  timeout: Optional[float] = None,
49
- **__,
48
+ **kwargs,
50
49
  ) -> Tuple[float, PositionType.ValueType]:
51
- if extra is None:
52
- extra = {}
50
+ md = kwargs.get("metadata", self.Metadata()).proto
53
51
  request = GetPositionRequest(name=self.name, position_type=position_type, extra=dict_to_struct(extra))
54
- response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout)
52
+ response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout, metadata=md)
55
53
  return response.value, response.position_type
56
54
 
57
55
  async def get_properties(
@@ -59,12 +57,11 @@ class EncoderClient(Encoder, ReconfigurableResourceRPCClientBase):
59
57
  *,
60
58
  extra: Optional[Dict[str, Any]] = None,
61
59
  timeout: Optional[float] = None,
62
- **__,
60
+ **kwargs,
63
61
  ) -> Encoder.Properties:
64
- if extra is None:
65
- extra = {}
62
+ md = kwargs.get("metadata", self.Metadata()).proto
66
63
  request = GetPropertiesRequest(name=self.name, extra=dict_to_struct(extra))
67
- response: GetPropertiesResponse = await self.client.GetProperties(request, timeout=timeout)
64
+ response: GetPropertiesResponse = await self.client.GetProperties(request, timeout=timeout, metadata=md)
68
65
  return Encoder.Properties(
69
66
  ticks_count_supported=response.ticks_count_supported, angle_degrees_supported=response.angle_degrees_supported
70
67
  )
@@ -74,11 +71,13 @@ class EncoderClient(Encoder, ReconfigurableResourceRPCClientBase):
74
71
  command: Mapping[str, ValueTypes],
75
72
  *,
76
73
  timeout: Optional[float] = None,
77
- **__,
74
+ **kwargs,
78
75
  ) -> Mapping[str, ValueTypes]:
76
+ md = kwargs.get("metadata", self.Metadata()).proto
79
77
  request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
80
- response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
78
+ response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
81
79
  return struct_to_dict(response.result)
82
80
 
83
- async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> List[Geometry]:
84
- return await get_geometries(self.client, self.name, extra, timeout)
81
+ async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
82
+ md = kwargs.get("metadata", self.Metadata())
83
+ return await get_geometries(self.client, self.name, extra, timeout, md)
@@ -3,7 +3,7 @@ from dataclasses import dataclass
3
3
  from typing import Any, Dict, Final, Optional, Tuple
4
4
 
5
5
  from viam.proto.component.encoder import PositionType
6
- from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, Subtype
6
+ from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
7
7
 
8
8
  from ..component_base import ComponentBase
9
9
 
@@ -25,10 +25,10 @@ class Encoder(ComponentBase):
25
25
 
26
26
  from viam.components.encoder import Encoder
27
27
 
28
- For more information, see `Encoder component <https://docs.viam.com/components/encoder/>`_.
28
+ For more information, see `Encoder component <https://docs.viam.com/dev/reference/apis/components/encoder/>`_.
29
29
  """
30
30
 
31
- SUBTYPE: Final = Subtype( # pyright: ignore [reportIncompatibleVariableOverride]
31
+ API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
32
32
  RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "encoder"
33
33
  )
34
34
 
@@ -45,13 +45,13 @@ class Encoder(ComponentBase):
45
45
 
46
46
  ::
47
47
 
48
- my_encoder = Encoder.from_robot(robot=robot, name='my_encoder')
48
+ my_encoder = Encoder.from_robot(robot=machine, name='my_encoder')
49
49
 
50
50
  # Reset the zero position of the encoder.
51
51
  await my_encoder.reset_position()
52
52
 
53
53
 
54
- For more information, see `Encoder component <https://docs.viam.com/components/encoder/>`_.
54
+ For more information, see `Encoder component <https://docs.viam.com/dev/reference/apis/components/encoder/#resetposition>`_.
55
55
  """
56
56
  ...
57
57
 
@@ -73,7 +73,7 @@ class Encoder(ComponentBase):
73
73
 
74
74
  ::
75
75
 
76
- my_encoder = Encoder.from_robot(robot=robot, name='my_encoder')
76
+ my_encoder = Encoder.from_robot(robot=machine, name='my_encoder')
77
77
 
78
78
  # Get the position of the encoder in ticks
79
79
  position = await my_encoder.get_position(PositionType.POSITION_TYPE_TICKS_COUNT)
@@ -88,7 +88,7 @@ class Encoder(ComponentBase):
88
88
  ticks since last zeroing for a relative encoder or degrees for an absolute encoder, and the second [1] the type of
89
89
  position the encoder returns (ticks or degrees).
90
90
 
91
- For more information, see `Encoder component <https://docs.viam.com/components/encoder/>`_.
91
+ For more information, see `Encoder component <https://docs.viam.com/dev/reference/apis/components/encoder/#getposition>`_.
92
92
  """
93
93
  ...
94
94
 
@@ -105,7 +105,7 @@ class Encoder(ComponentBase):
105
105
 
106
106
  ::
107
107
 
108
- my_encoder = Encoder.from_robot(robot=robot, name='my_encoder')
108
+ my_encoder = Encoder.from_robot(robot=machine, name='my_encoder')
109
109
 
110
110
  # Get whether the encoder returns position in ticks or degrees.
111
111
  properties = await my_encoder.get_properties()
@@ -113,6 +113,6 @@ class Encoder(ComponentBase):
113
113
  Returns:
114
114
  Encoder.Properties: Map of position types to supported status.
115
115
 
116
- For more information, see `Encoder component <https://docs.viam.com/components/encoder/>`_.
116
+ For more information, see `Encoder component <https://docs.viam.com/dev/reference/apis/components/encoder/#getproperties>`_.
117
117
  """
118
118
  ...
@@ -1,9 +1,4 @@
1
- import asyncio
2
-
3
- from viam.proto.component.gantry import Status as GantryStatus
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 GantryClient
9
4
  from .gantry import Gantry
@@ -13,11 +8,4 @@ __all__ = [
13
8
  "Gantry",
14
9
  ]
15
10
 
16
-
17
- async def create_status(component: Gantry) -> Status:
18
- (positions_mm, lengths_mm, is_moving) = await asyncio.gather(component.get_position(), component.get_lengths(), component.is_moving())
19
- s = GantryStatus(positions_mm=positions_mm, lengths_mm=lengths_mm, is_moving=is_moving)
20
- return Status(name=Gantry.get_resource_name(component.name), status=message_to_struct(s))
21
-
22
-
23
- Registry.register_subtype(ResourceRegistration(Gantry, GantryRPCService, lambda name, channel: GantryClient(name, channel), create_status))
11
+ Registry.register_api(ResourceRegistration(Gantry, GantryRPCService, lambda name, channel: GantryClient(name, channel)))