viam-sdk 0.45.2__py3-none-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of viam-sdk might be problematic. Click here for more details.

Files changed (476) hide show
  1. viam/__init__.py +71 -0
  2. viam/app/__init__.py +0 -0
  3. viam/app/_logs.py +34 -0
  4. viam/app/app_client.py +2525 -0
  5. viam/app/billing_client.py +143 -0
  6. viam/app/data_client.py +1715 -0
  7. viam/app/ml_training_client.py +251 -0
  8. viam/app/provisioning_client.py +95 -0
  9. viam/app/viam_client.py +260 -0
  10. viam/components/__init__.py +0 -0
  11. viam/components/arm/__init__.py +16 -0
  12. viam/components/arm/arm.py +223 -0
  13. viam/components/arm/client.py +124 -0
  14. viam/components/arm/service.py +123 -0
  15. viam/components/audio_input/__init__.py +18 -0
  16. viam/components/audio_input/audio_input.py +81 -0
  17. viam/components/audio_input/client.py +70 -0
  18. viam/components/audio_input/service.py +114 -0
  19. viam/components/base/__init__.py +13 -0
  20. viam/components/base/base.py +260 -0
  21. viam/components/base/client.py +153 -0
  22. viam/components/base/service.py +138 -0
  23. viam/components/board/__init__.py +9 -0
  24. viam/components/board/board.py +414 -0
  25. viam/components/board/client.py +241 -0
  26. viam/components/board/service.py +223 -0
  27. viam/components/button/__init__.py +10 -0
  28. viam/components/button/button.py +41 -0
  29. viam/components/button/client.py +52 -0
  30. viam/components/button/service.py +46 -0
  31. viam/components/camera/__init__.py +22 -0
  32. viam/components/camera/camera.py +138 -0
  33. viam/components/camera/client.py +98 -0
  34. viam/components/camera/service.py +105 -0
  35. viam/components/component_base.py +65 -0
  36. viam/components/encoder/__init__.py +18 -0
  37. viam/components/encoder/client.py +83 -0
  38. viam/components/encoder/encoder.py +118 -0
  39. viam/components/encoder/service.py +72 -0
  40. viam/components/gantry/__init__.py +11 -0
  41. viam/components/gantry/client.py +115 -0
  42. viam/components/gantry/gantry.py +156 -0
  43. viam/components/gantry/service.py +113 -0
  44. viam/components/generic/__init__.py +18 -0
  45. viam/components/generic/client.py +62 -0
  46. viam/components/generic/generic.py +76 -0
  47. viam/components/generic/service.py +40 -0
  48. viam/components/gripper/__init__.py +11 -0
  49. viam/components/gripper/client.py +85 -0
  50. viam/components/gripper/gripper.py +114 -0
  51. viam/components/gripper/service.py +81 -0
  52. viam/components/input/__init__.py +15 -0
  53. viam/components/input/client.py +194 -0
  54. viam/components/input/input.py +297 -0
  55. viam/components/input/service.py +175 -0
  56. viam/components/motor/__init__.py +11 -0
  57. viam/components/motor/client.py +168 -0
  58. viam/components/motor/motor.py +301 -0
  59. viam/components/motor/service.py +150 -0
  60. viam/components/movement_sensor/__init__.py +21 -0
  61. viam/components/movement_sensor/client.py +161 -0
  62. viam/components/movement_sensor/movement_sensor.py +253 -0
  63. viam/components/movement_sensor/service.py +146 -0
  64. viam/components/pose_tracker/__init__.py +17 -0
  65. viam/components/pose_tracker/client.py +50 -0
  66. viam/components/pose_tracker/pose_tracker.py +40 -0
  67. viam/components/pose_tracker/service.py +45 -0
  68. viam/components/power_sensor/__init__.py +17 -0
  69. viam/components/power_sensor/client.py +86 -0
  70. viam/components/power_sensor/power_sensor.py +104 -0
  71. viam/components/power_sensor/service.py +72 -0
  72. viam/components/sensor/__init__.py +18 -0
  73. viam/components/sensor/client.py +49 -0
  74. viam/components/sensor/sensor.py +48 -0
  75. viam/components/sensor/service.py +51 -0
  76. viam/components/servo/__init__.py +11 -0
  77. viam/components/servo/client.py +86 -0
  78. viam/components/servo/service.py +80 -0
  79. viam/components/servo/servo.py +114 -0
  80. viam/components/switch/__init__.py +10 -0
  81. viam/components/switch/client.py +83 -0
  82. viam/components/switch/service.py +72 -0
  83. viam/components/switch/switch.py +95 -0
  84. viam/errors.py +105 -0
  85. viam/gen/__init__.py +0 -0
  86. viam/gen/app/__init__.py +0 -0
  87. viam/gen/app/agent/__init__.py +0 -0
  88. viam/gen/app/agent/v1/__init__.py +0 -0
  89. viam/gen/app/agent/v1/agent_grpc.py +29 -0
  90. viam/gen/app/agent/v1/agent_pb2.py +47 -0
  91. viam/gen/app/agent/v1/agent_pb2.pyi +280 -0
  92. viam/gen/app/cloudslam/__init__.py +0 -0
  93. viam/gen/app/cloudslam/v1/__init__.py +0 -0
  94. viam/gen/app/cloudslam/v1/cloud_slam_grpc.py +70 -0
  95. viam/gen/app/cloudslam/v1/cloud_slam_pb2.py +54 -0
  96. viam/gen/app/cloudslam/v1/cloud_slam_pb2.pyi +384 -0
  97. viam/gen/app/data/__init__.py +0 -0
  98. viam/gen/app/data/v1/__init__.py +0 -0
  99. viam/gen/app/data/v1/data_grpc.py +206 -0
  100. viam/gen/app/data/v1/data_pb2.py +178 -0
  101. viam/gen/app/data/v1/data_pb2.pyi +1485 -0
  102. viam/gen/app/datapipelines/__init__.py +0 -0
  103. viam/gen/app/datapipelines/v1/__init__.py +0 -0
  104. viam/gen/app/datapipelines/v1/data_pipelines_grpc.py +84 -0
  105. viam/gen/app/datapipelines/v1/data_pipelines_pb2.py +56 -0
  106. viam/gen/app/datapipelines/v1/data_pipelines_pb2.pyi +370 -0
  107. viam/gen/app/dataset/__init__.py +0 -0
  108. viam/gen/app/dataset/v1/__init__.py +0 -0
  109. viam/gen/app/dataset/v1/dataset_grpc.py +60 -0
  110. viam/gen/app/dataset/v1/dataset_pb2.py +40 -0
  111. viam/gen/app/dataset/v1/dataset_pb2.pyi +179 -0
  112. viam/gen/app/datasync/__init__.py +0 -0
  113. viam/gen/app/datasync/v1/__init__.py +0 -0
  114. viam/gen/app/datasync/v1/data_sync_grpc.py +47 -0
  115. viam/gen/app/datasync/v1/data_sync_pb2.py +70 -0
  116. viam/gen/app/datasync/v1/data_sync_pb2.pyi +425 -0
  117. viam/gen/app/mlinference/__init__.py +0 -0
  118. viam/gen/app/mlinference/v1/__init__.py +0 -0
  119. viam/gen/app/mlinference/v1/ml_inference_grpc.py +28 -0
  120. viam/gen/app/mlinference/v1/ml_inference_pb2.py +23 -0
  121. viam/gen/app/mlinference/v1/ml_inference_pb2.pyi +63 -0
  122. viam/gen/app/mltraining/__init__.py +0 -0
  123. viam/gen/app/mltraining/v1/__init__.py +0 -0
  124. viam/gen/app/mltraining/v1/ml_training_grpc.py +78 -0
  125. viam/gen/app/mltraining/v1/ml_training_pb2.py +124 -0
  126. viam/gen/app/mltraining/v1/ml_training_pb2.pyi +415 -0
  127. viam/gen/app/packages/__init__.py +0 -0
  128. viam/gen/app/packages/v1/__init__.py +0 -0
  129. viam/gen/app/packages/v1/packages_grpc.py +54 -0
  130. viam/gen/app/packages/v1/packages_pb2.py +52 -0
  131. viam/gen/app/packages/v1/packages_pb2.pyi +311 -0
  132. viam/gen/app/v1/__init__.py +0 -0
  133. viam/gen/app/v1/app_grpc.py +863 -0
  134. viam/gen/app/v1/app_pb2.py +649 -0
  135. viam/gen/app/v1/app_pb2.pyi +5279 -0
  136. viam/gen/app/v1/billing_grpc.py +76 -0
  137. viam/gen/app/v1/billing_pb2.py +92 -0
  138. viam/gen/app/v1/billing_pb2.pyi +463 -0
  139. viam/gen/app/v1/end_user_grpc.py +59 -0
  140. viam/gen/app/v1/end_user_pb2.py +55 -0
  141. viam/gen/app/v1/end_user_pb2.pyi +181 -0
  142. viam/gen/app/v1/robot_grpc.py +55 -0
  143. viam/gen/app/v1/robot_pb2.py +127 -0
  144. viam/gen/app/v1/robot_pb2.pyi +1202 -0
  145. viam/gen/common/__init__.py +0 -0
  146. viam/gen/common/v1/__init__.py +0 -0
  147. viam/gen/common/v1/common_grpc.py +0 -0
  148. viam/gen/common/v1/common_pb2.py +78 -0
  149. viam/gen/common/v1/common_pb2.pyi +687 -0
  150. viam/gen/component/__init__.py +0 -0
  151. viam/gen/component/arm/__init__.py +0 -0
  152. viam/gen/component/arm/v1/__init__.py +0 -0
  153. viam/gen/component/arm/v1/arm_grpc.py +102 -0
  154. viam/gen/component/arm/v1/arm_pb2.py +74 -0
  155. viam/gen/component/arm/v1/arm_pb2.pyi +344 -0
  156. viam/gen/component/audioinput/__init__.py +0 -0
  157. viam/gen/component/audioinput/v1/__init__.py +0 -0
  158. viam/gen/component/audioinput/v1/audioinput_grpc.py +63 -0
  159. viam/gen/component/audioinput/v1/audioinput_pb2.py +45 -0
  160. viam/gen/component/audioinput/v1/audioinput_pb2.pyi +179 -0
  161. viam/gen/component/base/__init__.py +0 -0
  162. viam/gen/component/base/v1/__init__.py +0 -0
  163. viam/gen/component/base/v1/base_grpc.py +94 -0
  164. viam/gen/component/base/v1/base_pb2.py +66 -0
  165. viam/gen/component/base/v1/base_pb2.pyi +258 -0
  166. viam/gen/component/board/__init__.py +0 -0
  167. viam/gen/component/board/v1/__init__.py +0 -0
  168. viam/gen/component/board/v1/board_grpc.py +127 -0
  169. viam/gen/component/board/v1/board_pb2.py +103 -0
  170. viam/gen/component/board/v1/board_pb2.pyi +496 -0
  171. viam/gen/component/button/__init__.py +0 -0
  172. viam/gen/component/button/v1/__init__.py +0 -0
  173. viam/gen/component/button/v1/button_grpc.py +38 -0
  174. viam/gen/component/button/v1/button_pb2.py +28 -0
  175. viam/gen/component/button/v1/button_pb2.pyi +39 -0
  176. viam/gen/component/camera/__init__.py +0 -0
  177. viam/gen/component/camera/v1/__init__.py +0 -0
  178. viam/gen/component/camera/v1/camera_grpc.py +79 -0
  179. viam/gen/component/camera/v1/camera_pb2.py +67 -0
  180. viam/gen/component/camera/v1/camera_pb2.pyi +373 -0
  181. viam/gen/component/encoder/__init__.py +0 -0
  182. viam/gen/component/encoder/v1/__init__.py +0 -0
  183. viam/gen/component/encoder/v1/encoder_grpc.py +62 -0
  184. viam/gen/component/encoder/v1/encoder_pb2.py +44 -0
  185. viam/gen/component/encoder/v1/encoder_pb2.pyi +147 -0
  186. viam/gen/component/gantry/__init__.py +0 -0
  187. viam/gen/component/gantry/v1/__init__.py +0 -0
  188. viam/gen/component/gantry/v1/gantry_grpc.py +86 -0
  189. viam/gen/component/gantry/v1/gantry_pb2.py +62 -0
  190. viam/gen/component/gantry/v1/gantry_pb2.pyi +239 -0
  191. viam/gen/component/generic/__init__.py +0 -0
  192. viam/gen/component/generic/v1/__init__.py +0 -0
  193. viam/gen/component/generic/v1/generic_grpc.py +37 -0
  194. viam/gen/component/generic/v1/generic_pb2.py +23 -0
  195. viam/gen/component/generic/v1/generic_pb2.pyi +6 -0
  196. viam/gen/component/gripper/__init__.py +0 -0
  197. viam/gen/component/gripper/v1/__init__.py +0 -0
  198. viam/gen/component/gripper/v1/gripper_grpc.py +70 -0
  199. viam/gen/component/gripper/v1/gripper_pb2.py +48 -0
  200. viam/gen/component/gripper/v1/gripper_pb2.pyi +137 -0
  201. viam/gen/component/inputcontroller/__init__.py +0 -0
  202. viam/gen/component/inputcontroller/v1/__init__.py +0 -0
  203. viam/gen/component/inputcontroller/v1/input_controller_grpc.py +71 -0
  204. viam/gen/component/inputcontroller/v1/input_controller_pb2.py +55 -0
  205. viam/gen/component/inputcontroller/v1/input_controller_pb2.pyi +243 -0
  206. viam/gen/component/motor/__init__.py +0 -0
  207. viam/gen/component/motor/v1/__init__.py +0 -0
  208. viam/gen/component/motor/v1/motor_grpc.py +118 -0
  209. viam/gen/component/motor/v1/motor_pb2.py +86 -0
  210. viam/gen/component/motor/v1/motor_pb2.pyi +368 -0
  211. viam/gen/component/movementsensor/__init__.py +0 -0
  212. viam/gen/component/movementsensor/v1/__init__.py +0 -0
  213. viam/gen/component/movementsensor/v1/movementsensor_grpc.py +110 -0
  214. viam/gen/component/movementsensor/v1/movementsensor_pb2.py +78 -0
  215. viam/gen/component/movementsensor/v1/movementsensor_pb2.pyi +384 -0
  216. viam/gen/component/posetracker/__init__.py +0 -0
  217. viam/gen/component/posetracker/v1/__init__.py +0 -0
  218. viam/gen/component/posetracker/v1/pose_tracker_grpc.py +46 -0
  219. viam/gen/component/posetracker/v1/pose_tracker_pb2.py +34 -0
  220. viam/gen/component/posetracker/v1/pose_tracker_pb2.pyi +79 -0
  221. viam/gen/component/powersensor/__init__.py +0 -0
  222. viam/gen/component/powersensor/v1/__init__.py +0 -0
  223. viam/gen/component/powersensor/v1/powersensor_grpc.py +62 -0
  224. viam/gen/component/powersensor/v1/powersensor_pb2.py +42 -0
  225. viam/gen/component/powersensor/v1/powersensor_pb2.pyi +124 -0
  226. viam/gen/component/sensor/__init__.py +0 -0
  227. viam/gen/component/sensor/v1/__init__.py +0 -0
  228. viam/gen/component/sensor/v1/sensor_grpc.py +45 -0
  229. viam/gen/component/sensor/v1/sensor_pb2.py +25 -0
  230. viam/gen/component/sensor/v1/sensor_pb2.pyi +6 -0
  231. viam/gen/component/servo/__init__.py +0 -0
  232. viam/gen/component/servo/v1/__init__.py +0 -0
  233. viam/gen/component/servo/v1/servo_grpc.py +70 -0
  234. viam/gen/component/servo/v1/servo_pb2.py +50 -0
  235. viam/gen/component/servo/v1/servo_pb2.pyi +150 -0
  236. viam/gen/component/switch/__init__.py +0 -0
  237. viam/gen/component/switch/v1/__init__.py +0 -0
  238. viam/gen/component/switch/v1/switch_grpc.py +54 -0
  239. viam/gen/component/switch/v1/switch_pb2.py +40 -0
  240. viam/gen/component/switch/v1/switch_pb2.pyi +109 -0
  241. viam/gen/component/testecho/__init__.py +0 -0
  242. viam/gen/component/testecho/v1/__init__.py +0 -0
  243. viam/gen/component/testecho/v1/testecho_grpc.py +52 -0
  244. viam/gen/component/testecho/v1/testecho_pb2.py +36 -0
  245. viam/gen/component/testecho/v1/testecho_pb2.pyi +114 -0
  246. viam/gen/module/__init__.py +0 -0
  247. viam/gen/module/v1/__init__.py +0 -0
  248. viam/gen/module/v1/module_grpc.py +61 -0
  249. viam/gen/module/v1/module_pb2.py +43 -0
  250. viam/gen/module/v1/module_pb2.pyi +211 -0
  251. viam/gen/proto/__init__.py +0 -0
  252. viam/gen/proto/rpc/__init__.py +0 -0
  253. viam/gen/proto/rpc/examples/__init__.py +0 -0
  254. viam/gen/proto/rpc/examples/echo/__init__.py +0 -0
  255. viam/gen/proto/rpc/examples/echo/v1/__init__.py +0 -0
  256. viam/gen/proto/rpc/examples/echo/v1/echo_grpc.py +44 -0
  257. viam/gen/proto/rpc/examples/echo/v1/echo_pb2.py +32 -0
  258. viam/gen/proto/rpc/examples/echo/v1/echo_pb2.pyi +87 -0
  259. viam/gen/proto/rpc/examples/echoresource/__init__.py +0 -0
  260. viam/gen/proto/rpc/examples/echoresource/v1/__init__.py +0 -0
  261. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_grpc.py +43 -0
  262. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.py +29 -0
  263. viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.pyi +93 -0
  264. viam/gen/proto/rpc/v1/__init__.py +0 -0
  265. viam/gen/proto/rpc/v1/auth_grpc.py +47 -0
  266. viam/gen/proto/rpc/v1/auth_pb2.py +34 -0
  267. viam/gen/proto/rpc/v1/auth_pb2.pyi +92 -0
  268. viam/gen/proto/rpc/webrtc/__init__.py +0 -0
  269. viam/gen/proto/rpc/webrtc/v1/__init__.py +0 -0
  270. viam/gen/proto/rpc/webrtc/v1/grpc_grpc.py +0 -0
  271. viam/gen/proto/rpc/webrtc/v1/grpc_pb2.py +43 -0
  272. viam/gen/proto/rpc/webrtc/v1/grpc_pb2.pyi +304 -0
  273. viam/gen/proto/rpc/webrtc/v1/signaling_grpc.py +54 -0
  274. viam/gen/proto/rpc/webrtc/v1/signaling_pb2.py +70 -0
  275. viam/gen/proto/rpc/webrtc/v1/signaling_pb2.pyi +496 -0
  276. viam/gen/provisioning/__init__.py +0 -0
  277. viam/gen/provisioning/v1/__init__.py +0 -0
  278. viam/gen/provisioning/v1/provisioning_grpc.py +51 -0
  279. viam/gen/provisioning/v1/provisioning_pb2.py +39 -0
  280. viam/gen/provisioning/v1/provisioning_pb2.pyi +188 -0
  281. viam/gen/robot/__init__.py +0 -0
  282. viam/gen/robot/v1/__init__.py +0 -0
  283. viam/gen/robot/v1/robot_grpc.py +208 -0
  284. viam/gen/robot/v1/robot_pb2.py +188 -0
  285. viam/gen/robot/v1/robot_pb2.pyi +1020 -0
  286. viam/gen/service/__init__.py +0 -0
  287. viam/gen/service/datamanager/__init__.py +0 -0
  288. viam/gen/service/datamanager/v1/__init__.py +0 -0
  289. viam/gen/service/datamanager/v1/data_manager_grpc.py +38 -0
  290. viam/gen/service/datamanager/v1/data_manager_pb2.py +28 -0
  291. viam/gen/service/datamanager/v1/data_manager_pb2.pyi +39 -0
  292. viam/gen/service/discovery/__init__.py +0 -0
  293. viam/gen/service/discovery/v1/__init__.py +0 -0
  294. viam/gen/service/discovery/v1/discovery_grpc.py +39 -0
  295. viam/gen/service/discovery/v1/discovery_pb2.py +29 -0
  296. viam/gen/service/discovery/v1/discovery_pb2.pyi +51 -0
  297. viam/gen/service/generic/__init__.py +0 -0
  298. viam/gen/service/generic/v1/__init__.py +0 -0
  299. viam/gen/service/generic/v1/generic_grpc.py +29 -0
  300. viam/gen/service/generic/v1/generic_pb2.py +21 -0
  301. viam/gen/service/generic/v1/generic_pb2.pyi +6 -0
  302. viam/gen/service/mlmodel/__init__.py +0 -0
  303. viam/gen/service/mlmodel/v1/__init__.py +0 -0
  304. viam/gen/service/mlmodel/v1/mlmodel_grpc.py +37 -0
  305. viam/gen/service/mlmodel/v1/mlmodel_pb2.py +83 -0
  306. viam/gen/service/mlmodel/v1/mlmodel_pb2.pyi +480 -0
  307. viam/gen/service/motion/__init__.py +0 -0
  308. viam/gen/service/motion/v1/__init__.py +0 -0
  309. viam/gen/service/motion/v1/motion_grpc.py +87 -0
  310. viam/gen/service/motion/v1/motion_pb2.py +97 -0
  311. viam/gen/service/motion/v1/motion_pb2.pyi +838 -0
  312. viam/gen/service/navigation/__init__.py +0 -0
  313. viam/gen/service/navigation/v1/__init__.py +0 -0
  314. viam/gen/service/navigation/v1/navigation_grpc.py +102 -0
  315. viam/gen/service/navigation/v1/navigation_pb2.py +84 -0
  316. viam/gen/service/navigation/v1/navigation_pb2.pyi +419 -0
  317. viam/gen/service/sensors/__init__.py +0 -0
  318. viam/gen/service/sensors/v1/__init__.py +0 -0
  319. viam/gen/service/sensors/v1/sensors_grpc.py +46 -0
  320. viam/gen/service/sensors/v1/sensors_pb2.py +68 -0
  321. viam/gen/service/sensors/v1/sensors_pb2.pyi +137 -0
  322. viam/gen/service/shell/__init__.py +0 -0
  323. viam/gen/service/shell/v1/__init__.py +0 -0
  324. viam/gen/service/shell/v1/shell_grpc.py +55 -0
  325. viam/gen/service/shell/v1/shell_pb2.py +45 -0
  326. viam/gen/service/shell/v1/shell_pb2.pyi +307 -0
  327. viam/gen/service/slam/__init__.py +0 -0
  328. viam/gen/service/slam/v1/__init__.py +0 -0
  329. viam/gen/service/slam/v1/slam_grpc.py +61 -0
  330. viam/gen/service/slam/v1/slam_pb2.py +51 -0
  331. viam/gen/service/slam/v1/slam_pb2.pyi +213 -0
  332. viam/gen/service/vision/__init__.py +0 -0
  333. viam/gen/service/vision/v1/__init__.py +0 -0
  334. viam/gen/service/vision/v1/vision_grpc.py +87 -0
  335. viam/gen/service/vision/v1/vision_pb2.py +69 -0
  336. viam/gen/service/vision/v1/vision_pb2.pyi +454 -0
  337. viam/gen/stream/__init__.py +0 -0
  338. viam/gen/stream/v1/__init__.py +0 -0
  339. viam/gen/stream/v1/stream_grpc.py +59 -0
  340. viam/gen/stream/v1/stream_pb2.py +39 -0
  341. viam/gen/stream/v1/stream_pb2.pyi +161 -0
  342. viam/gen/tagger/__init__.py +0 -0
  343. viam/gen/tagger/v1/__init__.py +0 -0
  344. viam/gen/tagger/v1/tagger_grpc.py +0 -0
  345. viam/gen/tagger/v1/tagger_pb2.py +16 -0
  346. viam/gen/tagger/v1/tagger_pb2.pyi +15 -0
  347. viam/logging.py +216 -0
  348. viam/media/__init__.py +0 -0
  349. viam/media/audio.py +16 -0
  350. viam/media/utils/__init__.py +0 -0
  351. viam/media/utils/pil/__init__.py +51 -0
  352. viam/media/utils/pil/viam_rgba_plugin.py +73 -0
  353. viam/media/viam_rgba.py +10 -0
  354. viam/media/video.py +217 -0
  355. viam/module/__init__.py +5 -0
  356. viam/module/module.py +281 -0
  357. viam/module/service.py +66 -0
  358. viam/module/types.py +23 -0
  359. viam/operations.py +124 -0
  360. viam/proto/__init__.py +0 -0
  361. viam/proto/app/__init__.py +554 -0
  362. viam/proto/app/agent/__init__.py +28 -0
  363. viam/proto/app/billing.py +58 -0
  364. viam/proto/app/cloudslam/__init__.py +48 -0
  365. viam/proto/app/data/__init__.py +138 -0
  366. viam/proto/app/datapipelines/__init__.py +56 -0
  367. viam/proto/app/dataset/__init__.py +36 -0
  368. viam/proto/app/datasync/__init__.py +44 -0
  369. viam/proto/app/end_user.py +34 -0
  370. viam/proto/app/mlinference/__init__.py +15 -0
  371. viam/proto/app/mltraining/__init__.py +52 -0
  372. viam/proto/app/packages/__init__.py +38 -0
  373. viam/proto/app/robot.py +84 -0
  374. viam/proto/common/__init__.py +66 -0
  375. viam/proto/component/__init__.py +0 -0
  376. viam/proto/component/arm/__init__.py +48 -0
  377. viam/proto/component/audioinput/__init__.py +30 -0
  378. viam/proto/component/base/__init__.py +42 -0
  379. viam/proto/component/board/__init__.py +62 -0
  380. viam/proto/component/button/__init__.py +15 -0
  381. viam/proto/component/camera/__init__.py +46 -0
  382. viam/proto/component/encoder/__init__.py +28 -0
  383. viam/proto/component/gantry/__init__.py +40 -0
  384. viam/proto/component/generic/__init__.py +12 -0
  385. viam/proto/component/gripper/__init__.py +30 -0
  386. viam/proto/component/inputcontroller/__init__.py +38 -0
  387. viam/proto/component/motor/__init__.py +56 -0
  388. viam/proto/component/movementsensor/__init__.py +50 -0
  389. viam/proto/component/posetracker/__init__.py +19 -0
  390. viam/proto/component/powersensor/__init__.py +30 -0
  391. viam/proto/component/sensor/__init__.py +12 -0
  392. viam/proto/component/servo/__init__.py +32 -0
  393. viam/proto/component/switch/__init__.py +26 -0
  394. viam/proto/component/testecho/__init__.py +30 -0
  395. viam/proto/module/__init__.py +38 -0
  396. viam/proto/provisioning/__init__.py +36 -0
  397. viam/proto/robot/__init__.py +130 -0
  398. viam/proto/rpc/__init__.py +0 -0
  399. viam/proto/rpc/auth.py +34 -0
  400. viam/proto/rpc/examples/__init__.py +0 -0
  401. viam/proto/rpc/examples/echo/__init__.py +26 -0
  402. viam/proto/rpc/examples/echoresource/__init__.py +30 -0
  403. viam/proto/rpc/webrtc/__init__.py +0 -0
  404. viam/proto/rpc/webrtc/grpc.py +36 -0
  405. viam/proto/rpc/webrtc/signaling.py +58 -0
  406. viam/proto/service/__init__.py +0 -0
  407. viam/proto/service/datamanager/__init__.py +19 -0
  408. viam/proto/service/discovery/__init__.py +15 -0
  409. viam/proto/service/generic/__init__.py +12 -0
  410. viam/proto/service/mlmodel/__init__.py +54 -0
  411. viam/proto/service/motion/__init__.py +68 -0
  412. viam/proto/service/navigation/__init__.py +58 -0
  413. viam/proto/service/sensors/__init__.py +18 -0
  414. viam/proto/service/shell/__init__.py +36 -0
  415. viam/proto/service/slam/__init__.py +36 -0
  416. viam/proto/service/vision/__init__.py +46 -0
  417. viam/proto/stream/__init__.py +36 -0
  418. viam/proto/tagger/__init__.py +6 -0
  419. viam/py.typed +0 -0
  420. viam/resource/__init__.py +0 -0
  421. viam/resource/base.py +123 -0
  422. viam/resource/easy_resource.py +153 -0
  423. viam/resource/manager.py +126 -0
  424. viam/resource/registry.py +199 -0
  425. viam/resource/rpc_client_base.py +65 -0
  426. viam/resource/rpc_service_base.py +48 -0
  427. viam/resource/types.py +213 -0
  428. viam/robot/__init__.py +0 -0
  429. viam/robot/client.py +909 -0
  430. viam/robot/service.py +69 -0
  431. viam/rpc/__init__.py +0 -0
  432. viam/rpc/dial.py +420 -0
  433. viam/rpc/libviam_rust_utils.dll +0 -0
  434. viam/rpc/server.py +201 -0
  435. viam/rpc/signaling.py +29 -0
  436. viam/rpc/types.py +22 -0
  437. viam/services/__init__.py +0 -0
  438. viam/services/discovery/__init__.py +12 -0
  439. viam/services/discovery/client.py +55 -0
  440. viam/services/discovery/discovery.py +52 -0
  441. viam/services/discovery/service.py +43 -0
  442. viam/services/generic/__init__.py +18 -0
  443. viam/services/generic/client.py +58 -0
  444. viam/services/generic/generic.py +58 -0
  445. viam/services/generic/service.py +29 -0
  446. viam/services/mlmodel/__init__.py +24 -0
  447. viam/services/mlmodel/client.py +37 -0
  448. viam/services/mlmodel/mlmodel.py +78 -0
  449. viam/services/mlmodel/service.py +38 -0
  450. viam/services/mlmodel/utils.py +101 -0
  451. viam/services/motion/__init__.py +17 -0
  452. viam/services/motion/client.py +215 -0
  453. viam/services/motion/motion.py +378 -0
  454. viam/services/motion/service.py +132 -0
  455. viam/services/navigation/__init__.py +11 -0
  456. viam/services/navigation/client.py +99 -0
  457. viam/services/navigation/navigation.py +250 -0
  458. viam/services/navigation/service.py +137 -0
  459. viam/services/service_base.py +78 -0
  460. viam/services/service_client_base.py +46 -0
  461. viam/services/slam/__init__.py +17 -0
  462. viam/services/slam/client.py +62 -0
  463. viam/services/slam/service.py +75 -0
  464. viam/services/slam/slam.py +111 -0
  465. viam/services/vision/__init__.py +15 -0
  466. viam/services/vision/client.py +206 -0
  467. viam/services/vision/service.py +146 -0
  468. viam/services/vision/vision.py +315 -0
  469. viam/sessions_client.py +245 -0
  470. viam/streams.py +44 -0
  471. viam/utils.py +365 -0
  472. viam/version_metadata.py +4 -0
  473. viam_sdk-0.45.2.dist-info/METADATA +157 -0
  474. viam_sdk-0.45.2.dist-info/RECORD +476 -0
  475. viam_sdk-0.45.2.dist-info/WHEEL +4 -0
  476. viam_sdk-0.45.2.dist-info/licenses/LICENSE +202 -0
@@ -0,0 +1,59 @@
1
+ import abc
2
+ import typing
3
+ import grpclib.const
4
+ import grpclib.client
5
+ import grpclib.exceptions
6
+ if typing.TYPE_CHECKING:
7
+ import grpclib.server
8
+ from ... import stream
9
+
10
+ class StreamServiceBase(abc.ABC):
11
+
12
+ @abc.abstractmethod
13
+ async def ListStreams(self, stream: 'grpclib.server.Stream[stream.v1.stream_pb2.ListStreamsRequest, stream.v1.stream_pb2.ListStreamsResponse]') -> None:
14
+ pass
15
+
16
+ @abc.abstractmethod
17
+ async def AddStream(self, stream: 'grpclib.server.Stream[stream.v1.stream_pb2.AddStreamRequest, stream.v1.stream_pb2.AddStreamResponse]') -> None:
18
+ pass
19
+
20
+ @abc.abstractmethod
21
+ async def GetStreamOptions(self, stream: 'grpclib.server.Stream[stream.v1.stream_pb2.GetStreamOptionsRequest, stream.v1.stream_pb2.GetStreamOptionsResponse]') -> None:
22
+ pass
23
+
24
+ @abc.abstractmethod
25
+ async def SetStreamOptions(self, stream: 'grpclib.server.Stream[stream.v1.stream_pb2.SetStreamOptionsRequest, stream.v1.stream_pb2.SetStreamOptionsResponse]') -> None:
26
+ pass
27
+
28
+ @abc.abstractmethod
29
+ async def RemoveStream(self, stream: 'grpclib.server.Stream[stream.v1.stream_pb2.RemoveStreamRequest, stream.v1.stream_pb2.RemoveStreamResponse]') -> None:
30
+ pass
31
+
32
+ def __mapping__(self) -> typing.Dict[str, grpclib.const.Handler]:
33
+ return {'/proto.stream.v1.StreamService/ListStreams': grpclib.const.Handler(self.ListStreams, grpclib.const.Cardinality.UNARY_UNARY, stream.v1.stream_pb2.ListStreamsRequest, stream.v1.stream_pb2.ListStreamsResponse), '/proto.stream.v1.StreamService/AddStream': grpclib.const.Handler(self.AddStream, grpclib.const.Cardinality.UNARY_UNARY, stream.v1.stream_pb2.AddStreamRequest, stream.v1.stream_pb2.AddStreamResponse), '/proto.stream.v1.StreamService/GetStreamOptions': grpclib.const.Handler(self.GetStreamOptions, grpclib.const.Cardinality.UNARY_UNARY, stream.v1.stream_pb2.GetStreamOptionsRequest, stream.v1.stream_pb2.GetStreamOptionsResponse), '/proto.stream.v1.StreamService/SetStreamOptions': grpclib.const.Handler(self.SetStreamOptions, grpclib.const.Cardinality.UNARY_UNARY, stream.v1.stream_pb2.SetStreamOptionsRequest, stream.v1.stream_pb2.SetStreamOptionsResponse), '/proto.stream.v1.StreamService/RemoveStream': grpclib.const.Handler(self.RemoveStream, grpclib.const.Cardinality.UNARY_UNARY, stream.v1.stream_pb2.RemoveStreamRequest, stream.v1.stream_pb2.RemoveStreamResponse)}
34
+
35
+ class UnimplementedStreamServiceBase(StreamServiceBase):
36
+
37
+ async def ListStreams(self, stream: 'grpclib.server.Stream[stream.v1.stream_pb2.ListStreamsRequest, stream.v1.stream_pb2.ListStreamsResponse]') -> None:
38
+ raise grpclib.exceptions.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
39
+
40
+ async def AddStream(self, stream: 'grpclib.server.Stream[stream.v1.stream_pb2.AddStreamRequest, stream.v1.stream_pb2.AddStreamResponse]') -> None:
41
+ raise grpclib.exceptions.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
42
+
43
+ async def GetStreamOptions(self, stream: 'grpclib.server.Stream[stream.v1.stream_pb2.GetStreamOptionsRequest, stream.v1.stream_pb2.GetStreamOptionsResponse]') -> None:
44
+ raise grpclib.exceptions.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
45
+
46
+ async def SetStreamOptions(self, stream: 'grpclib.server.Stream[stream.v1.stream_pb2.SetStreamOptionsRequest, stream.v1.stream_pb2.SetStreamOptionsResponse]') -> None:
47
+ raise grpclib.exceptions.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
48
+
49
+ async def RemoveStream(self, stream: 'grpclib.server.Stream[stream.v1.stream_pb2.RemoveStreamRequest, stream.v1.stream_pb2.RemoveStreamResponse]') -> None:
50
+ raise grpclib.exceptions.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
51
+
52
+ class StreamServiceStub:
53
+
54
+ def __init__(self, channel: grpclib.client.Channel) -> None:
55
+ self.ListStreams = grpclib.client.UnaryUnaryMethod(channel, '/proto.stream.v1.StreamService/ListStreams', stream.v1.stream_pb2.ListStreamsRequest, stream.v1.stream_pb2.ListStreamsResponse)
56
+ self.AddStream = grpclib.client.UnaryUnaryMethod(channel, '/proto.stream.v1.StreamService/AddStream', stream.v1.stream_pb2.AddStreamRequest, stream.v1.stream_pb2.AddStreamResponse)
57
+ self.GetStreamOptions = grpclib.client.UnaryUnaryMethod(channel, '/proto.stream.v1.StreamService/GetStreamOptions', stream.v1.stream_pb2.GetStreamOptionsRequest, stream.v1.stream_pb2.GetStreamOptionsResponse)
58
+ self.SetStreamOptions = grpclib.client.UnaryUnaryMethod(channel, '/proto.stream.v1.StreamService/SetStreamOptions', stream.v1.stream_pb2.SetStreamOptionsRequest, stream.v1.stream_pb2.SetStreamOptionsResponse)
59
+ self.RemoveStream = grpclib.client.UnaryUnaryMethod(channel, '/proto.stream.v1.StreamService/RemoveStream', stream.v1.stream_pb2.RemoveStreamRequest, stream.v1.stream_pb2.RemoveStreamResponse)
@@ -0,0 +1,39 @@
1
+ """Generated protocol buffer code."""
2
+ from google.protobuf import descriptor as _descriptor
3
+ from google.protobuf import descriptor_pool as _descriptor_pool
4
+ from google.protobuf import runtime_version as _runtime_version
5
+ from google.protobuf import symbol_database as _symbol_database
6
+ from google.protobuf.internal import builder as _builder
7
+ _runtime_version.ValidateProtobufRuntimeVersion(_runtime_version.Domain.PUBLIC, 5, 29, 2, '', 'stream/v1/stream.proto')
8
+ _sym_db = _symbol_database.Default()
9
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16stream/v1/stream.proto\x12\x0fproto.stream.v1"\x14\n\x12ListStreamsRequest"+\n\x13ListStreamsResponse\x12\x14\n\x05names\x18\x01 \x03(\tR\x05names"&\n\x10AddStreamRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name"\x13\n\x11AddStreamResponse")\n\x13RemoveStreamRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name"\x16\n\x14RemoveStreamResponse":\n\nResolution\x12\x14\n\x05width\x18\x01 \x01(\x05R\x05width\x12\x16\n\x06height\x18\x02 \x01(\x05R\x06height"-\n\x17GetStreamOptionsRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name"Y\n\x18GetStreamOptionsResponse\x12=\n\x0bresolutions\x18\x01 \x03(\x0b2\x1b.proto.stream.v1.ResolutionR\x0bresolutions"j\n\x17SetStreamOptionsRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12;\n\nresolution\x18\x02 \x01(\x0b2\x1b.proto.stream.v1.ResolutionR\nresolution"\x1a\n\x18SetStreamOptionsResponse2\xec\x03\n\rStreamService\x12X\n\x0bListStreams\x12#.proto.stream.v1.ListStreamsRequest\x1a$.proto.stream.v1.ListStreamsResponse\x12R\n\tAddStream\x12!.proto.stream.v1.AddStreamRequest\x1a".proto.stream.v1.AddStreamResponse\x12g\n\x10GetStreamOptions\x12(.proto.stream.v1.GetStreamOptionsRequest\x1a).proto.stream.v1.GetStreamOptionsResponse\x12g\n\x10SetStreamOptions\x12(.proto.stream.v1.SetStreamOptionsRequest\x1a).proto.stream.v1.SetStreamOptionsResponse\x12[\n\x0cRemoveStream\x12$.proto.stream.v1.RemoveStreamRequest\x1a%.proto.stream.v1.RemoveStreamResponseB.Z,github.com/edaniels/gostream/proto/stream/v1b\x06proto3')
10
+ _globals = globals()
11
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
12
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'stream.v1.stream_pb2', _globals)
13
+ if not _descriptor._USE_C_DESCRIPTORS:
14
+ _globals['DESCRIPTOR']._loaded_options = None
15
+ _globals['DESCRIPTOR']._serialized_options = b'Z,github.com/edaniels/gostream/proto/stream/v1'
16
+ _globals['_LISTSTREAMSREQUEST']._serialized_start = 43
17
+ _globals['_LISTSTREAMSREQUEST']._serialized_end = 63
18
+ _globals['_LISTSTREAMSRESPONSE']._serialized_start = 65
19
+ _globals['_LISTSTREAMSRESPONSE']._serialized_end = 108
20
+ _globals['_ADDSTREAMREQUEST']._serialized_start = 110
21
+ _globals['_ADDSTREAMREQUEST']._serialized_end = 148
22
+ _globals['_ADDSTREAMRESPONSE']._serialized_start = 150
23
+ _globals['_ADDSTREAMRESPONSE']._serialized_end = 169
24
+ _globals['_REMOVESTREAMREQUEST']._serialized_start = 171
25
+ _globals['_REMOVESTREAMREQUEST']._serialized_end = 212
26
+ _globals['_REMOVESTREAMRESPONSE']._serialized_start = 214
27
+ _globals['_REMOVESTREAMRESPONSE']._serialized_end = 236
28
+ _globals['_RESOLUTION']._serialized_start = 238
29
+ _globals['_RESOLUTION']._serialized_end = 296
30
+ _globals['_GETSTREAMOPTIONSREQUEST']._serialized_start = 298
31
+ _globals['_GETSTREAMOPTIONSREQUEST']._serialized_end = 343
32
+ _globals['_GETSTREAMOPTIONSRESPONSE']._serialized_start = 345
33
+ _globals['_GETSTREAMOPTIONSRESPONSE']._serialized_end = 434
34
+ _globals['_SETSTREAMOPTIONSREQUEST']._serialized_start = 436
35
+ _globals['_SETSTREAMOPTIONSREQUEST']._serialized_end = 542
36
+ _globals['_SETSTREAMOPTIONSRESPONSE']._serialized_start = 544
37
+ _globals['_SETSTREAMOPTIONSRESPONSE']._serialized_end = 570
38
+ _globals['_STREAMSERVICE']._serialized_start = 573
39
+ _globals['_STREAMSERVICE']._serialized_end = 1065
@@ -0,0 +1,161 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ """
5
+ import builtins
6
+ import collections.abc
7
+ import google.protobuf.descriptor
8
+ import google.protobuf.internal.containers
9
+ import google.protobuf.message
10
+ import typing
11
+ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
12
+
13
+ @typing.final
14
+ class ListStreamsRequest(google.protobuf.message.Message):
15
+ """ListStreamsRequest requests all streams registered."""
16
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
17
+
18
+ def __init__(self) -> None:
19
+ ...
20
+ global___ListStreamsRequest = ListStreamsRequest
21
+
22
+ @typing.final
23
+ class ListStreamsResponse(google.protobuf.message.Message):
24
+ """A ListStreamsResponse details streams registered."""
25
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
26
+ NAMES_FIELD_NUMBER: builtins.int
27
+
28
+ @property
29
+ def names(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
30
+ ...
31
+
32
+ def __init__(self, *, names: collections.abc.Iterable[builtins.str] | None=...) -> None:
33
+ ...
34
+
35
+ def ClearField(self, field_name: typing.Literal['names', b'names']) -> None:
36
+ ...
37
+ global___ListStreamsResponse = ListStreamsResponse
38
+
39
+ @typing.final
40
+ class AddStreamRequest(google.protobuf.message.Message):
41
+ """A AddStreamRequest requests the given stream be added to the connection."""
42
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
43
+ NAME_FIELD_NUMBER: builtins.int
44
+ name: builtins.str
45
+
46
+ def __init__(self, *, name: builtins.str=...) -> None:
47
+ ...
48
+
49
+ def ClearField(self, field_name: typing.Literal['name', b'name']) -> None:
50
+ ...
51
+ global___AddStreamRequest = AddStreamRequest
52
+
53
+ @typing.final
54
+ class AddStreamResponse(google.protobuf.message.Message):
55
+ """AddStreamResponse is returned after a successful AddStreamRequest."""
56
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
57
+
58
+ def __init__(self) -> None:
59
+ ...
60
+ global___AddStreamResponse = AddStreamResponse
61
+
62
+ @typing.final
63
+ class RemoveStreamRequest(google.protobuf.message.Message):
64
+ """A RemoveStreamRequest requests the given stream be removed from the connection."""
65
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
66
+ NAME_FIELD_NUMBER: builtins.int
67
+ name: builtins.str
68
+
69
+ def __init__(self, *, name: builtins.str=...) -> None:
70
+ ...
71
+
72
+ def ClearField(self, field_name: typing.Literal['name', b'name']) -> None:
73
+ ...
74
+ global___RemoveStreamRequest = RemoveStreamRequest
75
+
76
+ @typing.final
77
+ class RemoveStreamResponse(google.protobuf.message.Message):
78
+ """RemoveStreamResponse is returned after a successful RemoveStreamRequest."""
79
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
80
+
81
+ def __init__(self) -> None:
82
+ ...
83
+ global___RemoveStreamResponse = RemoveStreamResponse
84
+
85
+ @typing.final
86
+ class Resolution(google.protobuf.message.Message):
87
+ """Resolution details the width and height of a stream."""
88
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
89
+ WIDTH_FIELD_NUMBER: builtins.int
90
+ HEIGHT_FIELD_NUMBER: builtins.int
91
+ width: builtins.int
92
+ height: builtins.int
93
+
94
+ def __init__(self, *, width: builtins.int=..., height: builtins.int=...) -> None:
95
+ ...
96
+
97
+ def ClearField(self, field_name: typing.Literal['height', b'height', 'width', b'width']) -> None:
98
+ ...
99
+ global___Resolution = Resolution
100
+
101
+ @typing.final
102
+ class GetStreamOptionsRequest(google.protobuf.message.Message):
103
+ """GetStreamOptionsRequest requests the options for a particular stream."""
104
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
105
+ NAME_FIELD_NUMBER: builtins.int
106
+ name: builtins.str
107
+
108
+ def __init__(self, *, name: builtins.str=...) -> None:
109
+ ...
110
+
111
+ def ClearField(self, field_name: typing.Literal['name', b'name']) -> None:
112
+ ...
113
+ global___GetStreamOptionsRequest = GetStreamOptionsRequest
114
+
115
+ @typing.final
116
+ class GetStreamOptionsResponse(google.protobuf.message.Message):
117
+ """GetStreamOptionsResponse details the options for a particular stream."""
118
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
119
+ RESOLUTIONS_FIELD_NUMBER: builtins.int
120
+
121
+ @property
122
+ def resolutions(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Resolution]:
123
+ ...
124
+
125
+ def __init__(self, *, resolutions: collections.abc.Iterable[global___Resolution] | None=...) -> None:
126
+ ...
127
+
128
+ def ClearField(self, field_name: typing.Literal['resolutions', b'resolutions']) -> None:
129
+ ...
130
+ global___GetStreamOptionsResponse = GetStreamOptionsResponse
131
+
132
+ @typing.final
133
+ class SetStreamOptionsRequest(google.protobuf.message.Message):
134
+ """SetStreamOptionsRequest sets the options for a particular stream."""
135
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
136
+ NAME_FIELD_NUMBER: builtins.int
137
+ RESOLUTION_FIELD_NUMBER: builtins.int
138
+ name: builtins.str
139
+
140
+ @property
141
+ def resolution(self) -> global___Resolution:
142
+ ...
143
+
144
+ def __init__(self, *, name: builtins.str=..., resolution: global___Resolution | None=...) -> None:
145
+ ...
146
+
147
+ def HasField(self, field_name: typing.Literal['resolution', b'resolution']) -> builtins.bool:
148
+ ...
149
+
150
+ def ClearField(self, field_name: typing.Literal['name', b'name', 'resolution', b'resolution']) -> None:
151
+ ...
152
+ global___SetStreamOptionsRequest = SetStreamOptionsRequest
153
+
154
+ @typing.final
155
+ class SetStreamOptionsResponse(google.protobuf.message.Message):
156
+ """SetStreamOptionsResponse is returned after a successful SetStreamOptionsRequest."""
157
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
158
+
159
+ def __init__(self) -> None:
160
+ ...
161
+ global___SetStreamOptionsResponse = SetStreamOptionsResponse
File without changes
File without changes
File without changes
@@ -0,0 +1,16 @@
1
+ """Generated protocol buffer code."""
2
+ from google.protobuf import descriptor as _descriptor
3
+ from google.protobuf import descriptor_pool as _descriptor_pool
4
+ from google.protobuf import runtime_version as _runtime_version
5
+ from google.protobuf import symbol_database as _symbol_database
6
+ from google.protobuf.internal import builder as _builder
7
+ _runtime_version.ValidateProtobufRuntimeVersion(_runtime_version.Domain.PUBLIC, 5, 29, 2, '', 'tagger/v1/tagger.proto')
8
+ _sym_db = _symbol_database.Default()
9
+ from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2
10
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16tagger/v1/tagger.proto\x12\ttagger.v1\x1a google/protobuf/descriptor.proto:3\n\x04tags\x12\x1d.google.protobuf.FieldOptions\x18\xc3\xe03 \x01(\tR\x04tags:>\n\noneof_tags\x12\x1d.google.protobuf.OneofOptions\x18\xc3\xe03 \x01(\tR\toneofTagsB4Z2github.com/srikrsna/protoc-gen-gotag/tagger;taggerb\x06proto3')
11
+ _globals = globals()
12
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
13
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'tagger.v1.tagger_pb2', _globals)
14
+ if not _descriptor._USE_C_DESCRIPTORS:
15
+ _globals['DESCRIPTOR']._loaded_options = None
16
+ _globals['DESCRIPTOR']._serialized_options = b'Z2github.com/srikrsna/protoc-gen-gotag/tagger;tagger'
@@ -0,0 +1,15 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ """
5
+ import builtins
6
+ import google.protobuf.descriptor
7
+ import google.protobuf.descriptor_pb2
8
+ import google.protobuf.internal.extension_dict
9
+ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
10
+ TAGS_FIELD_NUMBER: builtins.int
11
+ ONEOF_TAGS_FIELD_NUMBER: builtins.int
12
+ tags: google.protobuf.internal.extension_dict._ExtensionFieldDescriptor[google.protobuf.descriptor_pb2.FieldOptions, builtins.str]
13
+ 'Multiple Tags can be spcified.'
14
+ oneof_tags: google.protobuf.internal.extension_dict._ExtensionFieldDescriptor[google.protobuf.descriptor_pb2.OneofOptions, builtins.str]
15
+ 'Multiple Tags can be spcified.'
viam/logging.py ADDED
@@ -0,0 +1,216 @@
1
+ import asyncio
2
+ import logging
3
+ import sys
4
+ from copy import copy
5
+ from datetime import datetime
6
+ from logging import DEBUG, ERROR, FATAL, INFO, WARN, WARNING # noqa: F401
7
+ from threading import Lock, Thread
8
+ from typing import TYPE_CHECKING, Dict, Iterable, List, Optional, Union
9
+
10
+ from grpclib.exceptions import StreamTerminatedError
11
+
12
+ import viam
13
+
14
+ if TYPE_CHECKING:
15
+ from .robot.client import RobotClient
16
+
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
+ _ready_event = asyncio.Event()
27
+ _loop: Union[asyncio.AbstractEventLoop, None]
28
+ _thread: Thread
29
+
30
+ def __new__(cls):
31
+ # Ensure singleton precondition
32
+ if cls._instance is None:
33
+ with cls._lock:
34
+ if cls._instance is None:
35
+ cls._instance = super(_SingletonEventLoopThread, cls).__new__(cls)
36
+ cls._instance._loop = None
37
+ cls._instance._thread = Thread(target=cls._instance._run)
38
+ cls._instance._thread.start()
39
+ return cls._instance
40
+
41
+ def _run(self):
42
+ self._loop = asyncio.new_event_loop()
43
+ asyncio.set_event_loop(self._loop)
44
+ self._ready_event.set()
45
+ self._loop.run_forever()
46
+
47
+ def stop(self):
48
+ if self._loop is not None:
49
+ self._loop.call_soon_threadsafe(self._loop.stop)
50
+ self._thread.join()
51
+
52
+ def get_loop(self):
53
+ if self._loop is None:
54
+ raise RuntimeError("Event loop is None. Did you call .start() and .wait_until_ready()?")
55
+ return self._loop
56
+
57
+ async def wait_until_ready(self):
58
+ await self._ready_event.wait()
59
+
60
+
61
+ class _ModuleHandler(logging.Handler):
62
+ _parent: "RobotClient"
63
+ _logger: logging.Logger
64
+ _worker: _SingletonEventLoopThread
65
+
66
+ def __init__(self, parent: "RobotClient"):
67
+ super().__init__()
68
+ self._parent = parent
69
+ self._logger = logging.getLogger("ModuleLogger")
70
+ addHandlers(self._logger, True)
71
+ self._logger.setLevel(self.level)
72
+ self._worker = _SingletonEventLoopThread()
73
+
74
+ def setLevel(self, level: Union[int, str]) -> None:
75
+ self._logger.setLevel(level)
76
+ return super().setLevel(level)
77
+
78
+ async def handle_task_result(self, task: asyncio.Task):
79
+ try:
80
+ _ = task.result()
81
+ except (asyncio.CancelledError, asyncio.InvalidStateError, StreamTerminatedError):
82
+ pass
83
+
84
+ def emit(self, record: logging.LogRecord):
85
+ assert isinstance(record, logging.LogRecord)
86
+ # Fully qualified name of form "{API triplet}/{name}", e.g. "rdk:component:arm/myarm"
87
+ name = record.name.replace(".", "/")
88
+ message = f"{record.filename}:{record.lineno}\t{record.getMessage()}"
89
+ stack = f"exc_info: {record.exc_info}, exc_text: {record.exc_text}, stack_info: {record.stack_info}"
90
+ time = datetime.fromtimestamp(record.created)
91
+
92
+ try:
93
+ loop = self._worker.get_loop()
94
+ asyncio.run_coroutine_threadsafe(
95
+ self._asynchronously_emit(record, name, message, stack, time),
96
+ loop,
97
+ )
98
+ except Exception as err:
99
+ # If the module log fails, log using stdout/stderr handlers
100
+ self._logger.error(f"ModuleLogger failed for {record.name} - {err}")
101
+ self._logger.log(record.levelno, message)
102
+
103
+ async def _asynchronously_emit(self, record: logging.LogRecord, name: str, message: str, stack: str, time: datetime):
104
+ await self._worker.wait_until_ready()
105
+ task = self._worker.get_loop().create_task(
106
+ self._parent.log(name, record.levelname, time, message, stack),
107
+ name=f"{viam._TASK_PREFIX}-LOG-{record.created}",
108
+ )
109
+ task.add_done_callback(lambda t: asyncio.run_coroutine_threadsafe(self.handle_task_result(t), self._worker.get_loop()))
110
+
111
+ def close(self):
112
+ self._worker.stop()
113
+ super().close()
114
+
115
+
116
+ class _ColorFormatter(logging.Formatter):
117
+ MAPPING = {
118
+ "DEBUG": 37, # white
119
+ "INFO": 36, # cyan
120
+ "WARNING": 33, # yellow
121
+ "ERROR": 31, # red
122
+ "CRITICAL": 41, # white on red bg
123
+ }
124
+
125
+ def __init__(self, pattern):
126
+ logging.Formatter.__init__(self, pattern)
127
+
128
+ def format(self, record):
129
+ colored_record = copy(record)
130
+ levelname = colored_record.levelname
131
+ seq = self.MAPPING.get(levelname, 37) # default white
132
+ colored_levelname = f"\x1b[33;{seq}m{levelname}\x1b[0m"
133
+ colored_record.levelname = colored_levelname
134
+ return super().format(colored_record)
135
+
136
+
137
+ def getLogger(name: str) -> logging.Logger:
138
+ logger = LOGGERS.get(name)
139
+ if logger:
140
+ return logger
141
+
142
+ logger = logging.getLogger(name)
143
+ logger.setLevel(LOG_LEVEL)
144
+
145
+ addHandlers(logger)
146
+
147
+ LOGGERS[name] = logger
148
+ return logger
149
+
150
+
151
+ def addHandlers(logger: logging.Logger, use_default_handlers=False):
152
+ _addHandlers([logger], use_default_handlers)
153
+
154
+
155
+ def update_log_level(logger: logging.Logger, level: Union[int, str]):
156
+ if level == "":
157
+ level = LOG_LEVEL
158
+ logger.setLevel(level)
159
+ for handler in logger.handlers:
160
+ handler.setLevel(level)
161
+
162
+
163
+ def _addHandlers(loggers: Iterable[logging.Logger], use_default_handlers=False):
164
+ format = _ColorFormatter("%(asctime)s\t\t" + "%(levelname)s\t" + "%(name)s (%(filename)s:%(lineno)d)\t" + "%(message)s\t")
165
+
166
+ handlers: List[logging.Handler] = []
167
+
168
+ std_handler = logging.StreamHandler(stream=sys.stdout)
169
+ std_handler.setFormatter(format)
170
+ # filter out logs at error level or above
171
+ std_handler.setLevel(LOG_LEVEL)
172
+ std_handler.addFilter(filter=lambda record: (record.levelno < ERROR))
173
+
174
+ err_handler = logging.StreamHandler(stream=sys.stderr)
175
+ err_handler.setFormatter(format)
176
+ # filter out logs below error level
177
+ err_handler.setLevel(max(ERROR, LOG_LEVEL))
178
+
179
+ if _MODULE_PARENT is not None and not use_default_handlers:
180
+ mod_handler = _ModuleHandler(_MODULE_PARENT)
181
+ mod_handler.setFormatter(format)
182
+ mod_handler.setLevel(LOG_LEVEL)
183
+ handlers = [mod_handler]
184
+ else:
185
+ handlers = [std_handler, err_handler]
186
+
187
+ for logger in loggers:
188
+ logger.handlers.clear()
189
+ if "viam.sessions_client" in LOGGERS and LOGGERS["viam.sessions_client"] == logger:
190
+ logger.addHandler(std_handler)
191
+ logger.addHandler(err_handler)
192
+ else:
193
+ for h in handlers:
194
+ logger.addHandler(h)
195
+
196
+
197
+ def setParent(parent: "RobotClient"):
198
+ global _MODULE_PARENT
199
+ _MODULE_PARENT = parent
200
+ _addHandlers(LOGGERS.values())
201
+
202
+
203
+ def setLevel(level: int):
204
+ global LOG_LEVEL
205
+ LOG_LEVEL = level
206
+ for logger in LOGGERS.values():
207
+ logger.setLevel(LOG_LEVEL)
208
+ _addHandlers(LOGGERS.values())
209
+
210
+
211
+ def silence():
212
+ setLevel(FATAL + 1)
213
+
214
+
215
+ def shutdown():
216
+ logging.shutdown()
viam/media/__init__.py ADDED
File without changes
viam/media/audio.py ADDED
@@ -0,0 +1,16 @@
1
+ from dataclasses import dataclass
2
+
3
+ from viam.proto.component.audioinput import AudioChunk, AudioChunkInfo
4
+ from viam.streams import Stream, StreamReader
5
+
6
+
7
+ @dataclass
8
+ class Audio:
9
+ """A block of audio data containing information about the block and the audio data"""
10
+
11
+ info: AudioChunkInfo
12
+ chunk: AudioChunk
13
+
14
+
15
+ AudioReader = StreamReader[Audio]
16
+ AudioStream = Stream[Audio]
File without changes
@@ -0,0 +1,51 @@
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
+ if mime_type.name in LIBRARY_SUPPORTED_FORMATS:
43
+ buf = BytesIO()
44
+ if image.mode == "RGBA" and mime_type == CameraMimeType.JPEG:
45
+ image = image.convert("RGB")
46
+ image.save(buf, format=mime_type.name)
47
+ data = buf.getvalue()
48
+ else:
49
+ raise ValueError(f"Cannot encode image to {mime_type}")
50
+
51
+ return ViamImage(data, mime_type)
@@ -0,0 +1,73 @@
1
+ from typing import ClassVar, Tuple
2
+
3
+ from PIL import Image
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
+
7
+ from ...viam_rgba import RGBA_FORMAT_LABEL, RGBA_HEADER_LENGTH, RGBA_MAGIC_NUMBER
8
+
9
+
10
+ def _accept(prefix: str):
11
+ return prefix[:4] == RGBA_MAGIC_NUMBER
12
+
13
+
14
+ class RGBAEncoder(PyEncoder):
15
+ ENCODER_NAME = RGBA_FORMAT_LABEL
16
+
17
+ _pushes_fd = True
18
+
19
+ def encode(self, bufsize): # pyright: ignore [reportIncompatibleMethodOverride]
20
+ data_arr = bytearray()
21
+ width, height = self.im.size
22
+ for y in range(height):
23
+ for x in range(width):
24
+ data_arr.extend(self.im.getpixel((x, y)))
25
+ data = bytes(data_arr)
26
+
27
+ return len(data), 0, data
28
+
29
+
30
+ def _save_rgba(img, fp, filename):
31
+ width, height = img.size
32
+ fp.write(RGBA_MAGIC_NUMBER)
33
+ fp.write(width.to_bytes(4, byteorder="big"))
34
+ fp.write(height.to_bytes(4, byteorder="big"))
35
+
36
+ image_save(img, fp, [(RGBAEncoder.ENCODER_NAME, (0, 0, width, height), 0, ("RGBA", 0, 1))])
37
+
38
+
39
+ class RGBAImage(ImageFile):
40
+ format: ClassVar[str] = RGBA_FORMAT_LABEL # pyright: ignore [reportIncompatibleVariableOverride]
41
+ format_description = "Viam's Raw RGBA Format"
42
+
43
+ def _open(self):
44
+ header = self.fp.read(RGBA_HEADER_LENGTH)
45
+
46
+ width = int.from_bytes(header[4:8], "big")
47
+ height = int.from_bytes(header[8:12], "big")
48
+ self._size = width, height
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
53
+
54
+ # data descriptor
55
+ self.tile = [(RGBAEncoder.ENCODER_NAME, (0, 0, width, height), RGBA_HEADER_LENGTH, (self.mode, 0, 1))]
56
+
57
+
58
+ class RGBADecoder(PyDecoder):
59
+ _pulls_fd = True
60
+
61
+ def decode(self, buffer) -> Tuple[int, int]:
62
+ width, height = self.im.size
63
+ self.set_as_raw(_safe_read(self.fd, width * height * 4))
64
+ return -1, 0
65
+
66
+
67
+ # Register Viam's custom RGBA format so that it can be read using Image.open
68
+ Image.register_open(RGBAImage.format, RGBAImage, _accept)
69
+ Image.register_save(RGBAImage.format, _save_rgba)
70
+ Image.register_mime(RGBAImage.format, "image/vnd.viam.rgba")
71
+ Image.register_extension(RGBAImage.format, ".viam.rgba")
72
+ Image.register_encoder(RGBAEncoder.ENCODER_NAME, RGBAEncoder)
73
+ Image.register_decoder(RGBA_FORMAT_LABEL, RGBADecoder)
@@ -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