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
viam/logging.py CHANGED
@@ -1,14 +1,120 @@
1
+ import asyncio
1
2
  import logging
2
3
  import sys
3
4
  from copy import copy
5
+ from datetime import datetime
4
6
  from logging import DEBUG, ERROR, FATAL, INFO, WARN, WARNING # noqa: F401
5
- from typing import Dict
7
+ from threading import Event, Lock, Thread
8
+ from typing import TYPE_CHECKING, Dict, Iterable, List, Optional, Union
6
9
 
7
- LOG_LEVEL = INFO
8
- LOGGERS: Dict[str, logging.Logger] = {}
10
+ from grpclib.exceptions import StreamTerminatedError
11
+
12
+ import viam
9
13
 
14
+ if TYPE_CHECKING:
15
+ from .robot.client import RobotClient
10
16
 
11
- class ColorFormatter(logging.Formatter):
17
+
18
+ LOG_LEVEL = INFO
19
+ LOGGERS: Dict[str, logging.Logger] = {}
20
+ _MODULE_PARENT: Optional["RobotClient"] = None
21
+
22
+
23
+ class _SingletonEventLoopThread:
24
+ _instance = None
25
+ _lock = Lock()
26
+ # We use a threading.Event instead of an asyncio.Event because the latter are not thread safe,
27
+ # and this is set in a separate thread than it is waited on.
28
+ _ready_event = Event()
29
+ _loop: asyncio.AbstractEventLoop
30
+ _thread: Thread
31
+
32
+ def __new__(cls):
33
+ # Ensure singleton precondition
34
+ if cls._instance is None:
35
+ with cls._lock:
36
+ if cls._instance is None:
37
+ cls._instance = super(_SingletonEventLoopThread, cls).__new__(cls)
38
+ cls._instance._loop = asyncio.new_event_loop()
39
+ cls._instance._thread = Thread(target=cls._instance._run)
40
+ cls._instance._thread.start()
41
+ return cls._instance
42
+
43
+ def _run(self):
44
+ asyncio.set_event_loop(self._loop)
45
+ self._ready_event.set()
46
+ self._loop.run_forever()
47
+
48
+ def stop(self):
49
+ if self._loop is not None:
50
+ self._loop.call_soon_threadsafe(self._loop.stop)
51
+ self._thread.join()
52
+
53
+ def get_loop(self):
54
+ if self._loop is None:
55
+ raise RuntimeError("Event loop is None. Did you call .start() and .wait_until_ready()?")
56
+ return self._loop
57
+
58
+ def wait_until_ready(self):
59
+ self._ready_event.wait()
60
+
61
+
62
+ class _ModuleHandler(logging.Handler):
63
+ _parent: "RobotClient"
64
+ _logger: logging.Logger
65
+ _worker: _SingletonEventLoopThread
66
+
67
+ def __init__(self, parent: "RobotClient"):
68
+ super().__init__()
69
+ self._parent = parent
70
+ self._logger = logging.getLogger("ModuleLogger")
71
+ addHandlers(self._logger, True)
72
+ self._logger.setLevel(self.level)
73
+ self._worker = _SingletonEventLoopThread()
74
+
75
+ def setLevel(self, level: Union[int, str]) -> None:
76
+ self._logger.setLevel(level)
77
+ return super().setLevel(level)
78
+
79
+ async def handle_task_result(self, task: asyncio.Task):
80
+ try:
81
+ _ = task.result()
82
+ except (asyncio.CancelledError, asyncio.InvalidStateError, StreamTerminatedError):
83
+ pass
84
+
85
+ def emit(self, record: logging.LogRecord):
86
+ assert isinstance(record, logging.LogRecord)
87
+ # Fully qualified name of form "{API triplet}/{name}", e.g. "rdk:component:arm/myarm"
88
+ name = record.name.replace(".", "/")
89
+ message = f"{record.filename}:{record.lineno}\t{record.getMessage()}"
90
+ stack = f"exc_info: {record.exc_info}, exc_text: {record.exc_text}, stack_info: {record.stack_info}"
91
+ time = datetime.fromtimestamp(record.created)
92
+
93
+ try:
94
+ loop = self._worker.get_loop()
95
+ asyncio.run_coroutine_threadsafe(
96
+ self._asynchronously_emit(record, name, message, stack, time),
97
+ loop,
98
+ )
99
+ except Exception as err:
100
+ # If the module log fails, log using stdout/stderr handlers
101
+ self._logger.error(f"ModuleLogger failed for {record.name} - {err}")
102
+ self._logger.log(record.levelno, message)
103
+
104
+ async def _asynchronously_emit(self, record: logging.LogRecord, name: str, message: str, stack: str, time: datetime):
105
+ self._worker.wait_until_ready()
106
+ task = self._worker.get_loop().create_task(
107
+ self._parent.log(name, record.levelname, time, message, stack),
108
+ name=f"{viam._TASK_PREFIX}-LOG-{record.created}",
109
+ )
110
+ task.add_done_callback(lambda t: asyncio.run_coroutine_threadsafe(self.handle_task_result(t), self._worker.get_loop()))
111
+
112
+ def close(self):
113
+ self._worker.stop()
114
+ super().close()
115
+
116
+
117
+ class _ColorFormatter(logging.Formatter):
12
118
  MAPPING = {
13
119
  "DEBUG": 37, # white
14
120
  "INFO": 36, # cyan
@@ -17,8 +123,8 @@ class ColorFormatter(logging.Formatter):
17
123
  "CRITICAL": 41, # white on red bg
18
124
  }
19
125
 
20
- def __init__(self, patern):
21
- logging.Formatter.__init__(self, patern)
126
+ def __init__(self, pattern):
127
+ logging.Formatter.__init__(self, pattern)
22
128
 
23
129
  def format(self, record):
24
130
  colored_record = copy(record)
@@ -43,21 +149,56 @@ def getLogger(name: str) -> logging.Logger:
43
149
  return logger
44
150
 
45
151
 
46
- def addHandlers(logger: logging.Logger):
47
- format = ColorFormatter("%(asctime)s\t\t" + "%(levelname)s\t" + "%(name)s (%(filename)s:%(lineno)d)\t" + "%(message)s\t")
152
+ def addHandlers(logger: logging.Logger, use_default_handlers=False):
153
+ _addHandlers([logger], use_default_handlers)
154
+
155
+
156
+ def update_log_level(logger: logging.Logger, level: Union[int, str]):
157
+ if level == "":
158
+ level = LOG_LEVEL
159
+ logger.setLevel(level)
160
+ for handler in logger.handlers:
161
+ handler.setLevel(level)
162
+
48
163
 
49
- handler = logging.StreamHandler(stream=sys.stdout)
50
- handler.setFormatter(format)
164
+ def _addHandlers(loggers: Iterable[logging.Logger], use_default_handlers=False):
165
+ format = _ColorFormatter("%(asctime)s\t\t" + "%(levelname)s\t" + "%(name)s (%(filename)s:%(lineno)d)\t" + "%(message)s\t")
166
+
167
+ handlers: List[logging.Handler] = []
168
+
169
+ std_handler = logging.StreamHandler(stream=sys.stdout)
170
+ std_handler.setFormatter(format)
51
171
  # filter out logs at error level or above
52
- handler.setLevel(LOG_LEVEL)
53
- handler.addFilter(filter=lambda record: (record.levelno < ERROR))
54
- logger.addHandler(handler)
172
+ std_handler.setLevel(LOG_LEVEL)
173
+ std_handler.addFilter(filter=lambda record: (record.levelno < ERROR))
55
174
 
56
175
  err_handler = logging.StreamHandler(stream=sys.stderr)
57
176
  err_handler.setFormatter(format)
58
177
  # filter out logs below error level
59
178
  err_handler.setLevel(max(ERROR, LOG_LEVEL))
60
- logger.addHandler(err_handler)
179
+
180
+ if _MODULE_PARENT is not None and not use_default_handlers:
181
+ mod_handler = _ModuleHandler(_MODULE_PARENT)
182
+ mod_handler.setFormatter(format)
183
+ mod_handler.setLevel(LOG_LEVEL)
184
+ handlers = [mod_handler]
185
+ else:
186
+ handlers = [std_handler, err_handler]
187
+
188
+ for logger in loggers:
189
+ logger.handlers.clear()
190
+ if "viam.sessions_client" in LOGGERS and LOGGERS["viam.sessions_client"] == logger:
191
+ logger.addHandler(std_handler)
192
+ logger.addHandler(err_handler)
193
+ else:
194
+ for h in handlers:
195
+ logger.addHandler(h)
196
+
197
+
198
+ def setParent(parent: "RobotClient"):
199
+ global _MODULE_PARENT
200
+ _MODULE_PARENT = parent
201
+ _addHandlers(LOGGERS.values())
61
202
 
62
203
 
63
204
  def setLevel(level: int):
@@ -65,10 +206,12 @@ def setLevel(level: int):
65
206
  LOG_LEVEL = level
66
207
  for logger in LOGGERS.values():
67
208
  logger.setLevel(LOG_LEVEL)
68
- for handler in logger.handlers:
69
- logger.removeHandler(handler)
70
- addHandlers(logger)
209
+ _addHandlers(LOGGERS.values())
71
210
 
72
211
 
73
212
  def silence():
74
213
  setLevel(FATAL + 1)
214
+
215
+
216
+ def shutdown():
217
+ logging.shutdown()
viam/media/__init__.py CHANGED
@@ -1,9 +0,0 @@
1
- from .media import MediaReader, MediaSource, MediaStream, MediaStreamWithIterator, MediaType
2
-
3
- __all__ = [
4
- "MediaReader",
5
- "MediaSource",
6
- "MediaStream",
7
- "MediaStreamWithIterator",
8
- "MediaType",
9
- ]
viam/media/audio.py CHANGED
@@ -1,16 +1,28 @@
1
- from dataclasses import dataclass
1
+ from enum import Enum
2
2
 
3
- from viam.media.media import MediaReader, MediaStream
4
- from viam.proto.component.audioinput import AudioChunk, AudioChunkInfo
5
3
 
4
+ class AudioCodec(str, Enum):
5
+ """Common audio codec identifiers.
6
6
 
7
- @dataclass
8
- class Audio:
9
- """A block of audio data containing information about the block and the audio data"""
7
+ These constants represent commonly supported audio codecs
8
+ for audioin and audioout components.
10
9
 
11
- info: AudioChunkInfo
12
- chunk: AudioChunk
10
+ Example::
13
11
 
12
+ from viam.components.codecs import AudioCodec
13
+ from viam.proto.common import AudioInfo
14
14
 
15
- AudioReader = MediaReader[Audio]
16
- AudioStream = MediaStream[Audio]
15
+ audio_info = AudioInfo(
16
+ codec=AudioCodec.PCM16,
17
+ sample_rate_hz=44100,
18
+ num_channels=2
19
+ )
20
+ """
21
+
22
+ PCM16 = "pcm16"
23
+ PCM32 = "pcm32"
24
+ PCM32_FLOAT = "pcm32_float"
25
+ MP3 = "mp3"
26
+ AAC = "aac"
27
+ OPUS = "opus"
28
+ FLAC = "flac"
File without changes
@@ -0,0 +1,55 @@
1
+ from io import BytesIO
2
+
3
+ from PIL import Image
4
+
5
+ from ....media.video import CameraMimeType, ViamImage
6
+ from .viam_rgba_plugin import RGBA_FORMAT_LABEL
7
+
8
+ # Formats that are supported by PIL
9
+ LIBRARY_SUPPORTED_FORMATS = ["JPEG", "PNG", RGBA_FORMAT_LABEL]
10
+
11
+
12
+ def viam_to_pil_image(image: ViamImage) -> Image.Image:
13
+ """
14
+ Convert a ViamImage to a PIL.Image.
15
+
16
+ In order to use this function, Pillow must be installed.
17
+ https://pillow.readthedocs.io/
18
+
19
+ Args:
20
+ image (ViamImage): The image to convert.
21
+
22
+ Returns:
23
+ Image.Image: The resulting PIL.Image
24
+ """
25
+ return Image.open(BytesIO(image.data), formats=LIBRARY_SUPPORTED_FORMATS)
26
+
27
+
28
+ def pil_to_viam_image(image: Image.Image, mime_type: CameraMimeType) -> ViamImage:
29
+ """
30
+ Convert a PIL.Image to a ViamImage.
31
+
32
+ In order to use this function, Pillow must be installed.
33
+ https://pillow.readthedocs.io/
34
+
35
+ Args:
36
+ image (Image.Image): The image to convert.
37
+ mime_type (CameraMimeType): The mime type to convert the image to.
38
+
39
+ Returns:
40
+ ViamImage: The resulting ViamImage
41
+ """
42
+ # Make sure at runtime the mime_type string is actually a CameraMimeType
43
+ if not isinstance(mime_type, CameraMimeType):
44
+ raise ValueError(f"Cannot encode to unsupported mimetype: {mime_type}")
45
+
46
+ if mime_type.name in LIBRARY_SUPPORTED_FORMATS:
47
+ buf = BytesIO()
48
+ if image.mode == "RGBA" and mime_type == CameraMimeType.JPEG:
49
+ image = image.convert("RGB")
50
+ image.save(buf, format=mime_type.name)
51
+ data = buf.getvalue()
52
+ else:
53
+ raise ValueError(f"Cannot encode to unsupported mimetype: {mime_type}")
54
+
55
+ return ViamImage(data, mime_type)
@@ -1,19 +1,10 @@
1
- from typing import Tuple
1
+ from typing import ClassVar, Tuple
2
2
 
3
3
  from PIL import Image
4
- from PIL.ImageFile import ImageFile, PyDecoder, PyEncoder, _safe_read
5
- from PIL.ImageFile import _save as image_save
4
+ from PIL.ImageFile import ImageFile, PyDecoder, PyEncoder, _safe_read # type: ignore -- (njooma) this exists, manually checked
5
+ from PIL.ImageFile import _save as image_save # type: ignore -- (njooma) this exists, manually checked
6
6
 
7
- # Viam uses a special header prepended to raw RGBA data. The header is composed of a
8
- # 4-byte magic number followed by a 4-byte line of the width as a uint32 number
9
- # and another for the height. Credit to Ben Zotto for inventing this formulation
10
- # https://bzotto.medium.com/introducing-the-rgba-bitmap-file-format-4a8a94329e2c
11
-
12
- RGBA_MAGIC_NUMBER = bytes("RGBA", "utf-8")
13
-
14
- RGBA_FORMAT_LABEL = "VIAM_RGBA"
15
-
16
- RGBA_HEADER_LENGTH = 12
7
+ from ...viam_rgba import RGBA_FORMAT_LABEL, RGBA_HEADER_LENGTH, RGBA_MAGIC_NUMBER
17
8
 
18
9
 
19
10
  def _accept(prefix: str):
@@ -25,7 +16,7 @@ class RGBAEncoder(PyEncoder):
25
16
 
26
17
  _pushes_fd = True
27
18
 
28
- def encode(self, bufsize):
19
+ def encode(self, bufsize): # pyright: ignore [reportIncompatibleMethodOverride]
29
20
  data_arr = bytearray()
30
21
  width, height = self.im.size
31
22
  for y in range(height):
@@ -46,7 +37,7 @@ def _save_rgba(img, fp, filename):
46
37
 
47
38
 
48
39
  class RGBAImage(ImageFile):
49
- format: str = RGBA_FORMAT_LABEL
40
+ format: ClassVar[str] = RGBA_FORMAT_LABEL # pyright: ignore [reportIncompatibleVariableOverride]
50
41
  format_description = "Viam's Raw RGBA Format"
51
42
 
52
43
  def _open(self):
@@ -55,7 +46,10 @@ class RGBAImage(ImageFile):
55
46
  width = int.from_bytes(header[4:8], "big")
56
47
  height = int.from_bytes(header[8:12], "big")
57
48
  self._size = width, height
58
- self.mode = "RGBA"
49
+ if hasattr(self, "_mode"):
50
+ self._mode = "RGBA"
51
+ else:
52
+ self.mode = "RGBA" # type: ignore -- (njooma) newer versions of PIL hide this behind _mode, which is why we check
59
53
 
60
54
  # data descriptor
61
55
  self.tile = [(RGBAEncoder.ENCODER_NAME, (0, 0, width, height), RGBA_HEADER_LENGTH, (self.mode, 0, 1))]
@@ -0,0 +1,10 @@
1
+ # Viam uses a special header prepended to raw RGBA data. The header is composed of a
2
+ # 4-byte magic number followed by a 4-byte line of the width as a uint32 number
3
+ # and another for the height. Credit to Ben Zotto for inventing this formulation
4
+ # https://bzotto.medium.com/introducing-the-rgba-bitmap-file-format-4a8a94329e2c
5
+
6
+ RGBA_MAGIC_NUMBER = bytes("RGBA", "utf-8")
7
+
8
+ RGBA_FORMAT_LABEL = "VIAM_RGBA"
9
+
10
+ RGBA_HEADER_LENGTH = 12