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.
- viam/__init__.py +29 -2
- viam/app/_logs.py +34 -0
- viam/app/app_client.py +2696 -0
- viam/app/billing_client.py +185 -0
- viam/app/data_client.py +2231 -0
- viam/app/ml_training_client.py +249 -0
- viam/app/provisioning_client.py +93 -0
- viam/app/viam_client.py +275 -0
- viam/components/arm/__init__.py +3 -26
- viam/components/arm/arm.py +123 -8
- viam/components/arm/client.py +37 -24
- viam/components/arm/service.py +35 -32
- viam/components/audio_in/__init__.py +24 -0
- viam/components/audio_in/audio_in.py +74 -0
- viam/components/audio_in/client.py +76 -0
- viam/components/audio_in/service.py +83 -0
- viam/components/audio_out/__init__.py +21 -0
- viam/components/audio_out/audio_out.py +72 -0
- viam/components/audio_out/client.py +67 -0
- viam/components/audio_out/service.py +63 -0
- viam/components/base/__init__.py +6 -11
- viam/components/base/base.py +134 -8
- viam/components/base/client.py +51 -23
- viam/components/base/service.py +33 -30
- viam/components/board/__init__.py +3 -12
- viam/components/board/board.py +247 -91
- viam/components/board/client.py +149 -83
- viam/components/board/service.py +63 -33
- viam/components/button/__init__.py +10 -0
- viam/components/button/button.py +41 -0
- viam/components/button/client.py +52 -0
- viam/components/button/service.py +46 -0
- viam/components/camera/__init__.py +3 -3
- viam/components/camera/camera.py +62 -27
- viam/components/camera/client.py +59 -27
- viam/components/camera/service.py +42 -65
- viam/components/component_base.py +28 -5
- viam/components/encoder/__init__.py +1 -1
- viam/components/encoder/client.py +25 -14
- viam/components/encoder/encoder.py +48 -10
- viam/components/encoder/service.py +14 -18
- viam/components/gantry/__init__.py +1 -13
- viam/components/gantry/client.py +80 -25
- viam/components/gantry/gantry.py +123 -9
- viam/components/gantry/service.py +51 -29
- viam/components/generic/__init__.py +1 -1
- viam/components/generic/client.py +21 -8
- viam/components/generic/generic.py +10 -2
- viam/components/generic/service.py +12 -7
- viam/components/gripper/__init__.py +3 -13
- viam/components/gripper/client.py +69 -21
- viam/components/gripper/gripper.py +123 -3
- viam/components/gripper/service.py +44 -22
- viam/components/input/__init__.py +1 -14
- viam/components/input/client.py +55 -23
- viam/components/input/input.py +106 -3
- viam/components/input/service.py +16 -21
- viam/components/motor/__init__.py +1 -21
- viam/components/motor/client.py +56 -33
- viam/components/motor/motor.py +127 -4
- viam/components/motor/service.py +33 -44
- viam/components/movement_sensor/__init__.py +1 -1
- viam/components/movement_sensor/client.py +102 -45
- viam/components/movement_sensor/movement_sensor.py +130 -61
- viam/components/movement_sensor/service.py +38 -41
- viam/components/pose_tracker/__init__.py +1 -1
- viam/components/pose_tracker/client.py +18 -7
- viam/components/pose_tracker/pose_tracker.py +4 -2
- viam/components/pose_tracker/service.py +12 -10
- viam/components/power_sensor/__init__.py +17 -0
- viam/components/power_sensor/client.py +86 -0
- viam/components/power_sensor/power_sensor.py +104 -0
- viam/components/power_sensor/service.py +72 -0
- viam/components/sensor/__init__.py +2 -1
- viam/components/sensor/client.py +26 -10
- viam/components/sensor/sensor.py +22 -4
- viam/components/sensor/service.py +20 -11
- viam/components/servo/__init__.py +1 -13
- viam/components/servo/client.py +47 -21
- viam/components/servo/service.py +15 -22
- viam/components/servo/servo.py +61 -2
- viam/components/switch/__init__.py +10 -0
- viam/components/switch/client.py +83 -0
- viam/components/switch/service.py +72 -0
- viam/components/switch/switch.py +98 -0
- viam/errors.py +10 -0
- viam/gen/app/agent/v1/agent_grpc.py +29 -0
- viam/gen/app/agent/v1/agent_pb2.py +47 -0
- viam/gen/app/agent/v1/agent_pb2.pyi +280 -0
- viam/gen/app/cloudslam/v1/__init__.py +0 -0
- viam/gen/app/cloudslam/v1/cloud_slam_grpc.py +70 -0
- viam/gen/app/cloudslam/v1/cloud_slam_pb2.py +54 -0
- viam/gen/app/cloudslam/v1/cloud_slam_pb2.pyi +384 -0
- viam/gen/app/data/v1/data_grpc.py +197 -8
- viam/gen/app/data/v1/data_pb2.py +238 -99
- viam/gen/app/data/v1/data_pb2.pyi +1222 -259
- viam/gen/app/datapipelines/__init__.py +0 -0
- viam/gen/app/datapipelines/v1/__init__.py +0 -0
- viam/gen/app/datapipelines/v1/data_pipelines_grpc.py +84 -0
- viam/gen/app/datapipelines/v1/data_pipelines_pb2.py +57 -0
- viam/gen/app/datapipelines/v1/data_pipelines_pb2.pyi +387 -0
- viam/gen/app/dataset/__init__.py +0 -0
- viam/gen/app/dataset/v1/__init__.py +0 -0
- viam/gen/app/dataset/v1/dataset_grpc.py +68 -0
- viam/gen/app/dataset/v1/dataset_pb2.py +44 -0
- viam/gen/app/dataset/v1/dataset_pb2.pyi +214 -0
- viam/gen/app/datasync/v1/data_sync_grpc.py +21 -4
- viam/gen/app/datasync/v1/data_sync_pb2.py +62 -128
- viam/gen/app/datasync/v1/data_sync_pb2.pyi +156 -199
- viam/gen/app/mlinference/__init__.py +0 -0
- viam/gen/app/mlinference/v1/__init__.py +0 -0
- viam/gen/app/mlinference/v1/ml_inference_grpc.py +28 -0
- viam/gen/app/mlinference/v1/ml_inference_pb2.py +23 -0
- viam/gen/app/mlinference/v1/ml_inference_pb2.pyi +63 -0
- viam/gen/app/mltraining/v1/ml_training_grpc.py +51 -3
- viam/gen/app/mltraining/v1/ml_training_pb2.py +135 -58
- viam/gen/app/mltraining/v1/ml_training_pb2.pyi +328 -39
- viam/gen/app/packages/v1/packages_grpc.py +15 -1
- viam/gen/app/packages/v1/packages_pb2.py +44 -64
- viam/gen/app/packages/v1/packages_pb2.pyi +75 -85
- viam/gen/app/v1/app_grpc.py +644 -3
- viam/gen/app/v1/app_pb2.py +695 -295
- viam/gen/app/v1/app_pb2.pyi +4488 -635
- viam/gen/app/v1/billing_grpc.py +53 -11
- viam/gen/app/v1/billing_pb2.py +94 -39
- viam/gen/app/v1/billing_pb2.pyi +391 -191
- viam/gen/app/v1/end_user_grpc.py +59 -0
- viam/gen/app/v1/end_user_pb2.py +55 -0
- viam/gen/app/v1/end_user_pb2.pyi +181 -0
- viam/gen/app/v1/robot_grpc.py +16 -1
- viam/gen/app/v1/robot_pb2.py +122 -94
- viam/gen/app/v1/robot_pb2.pyi +463 -123
- viam/gen/common/v1/common_pb2.py +87 -58
- viam/gen/common/v1/common_pb2.pyi +456 -149
- viam/gen/component/arm/v1/arm_grpc.py +58 -2
- viam/gen/component/arm/v1/arm_pb2.py +68 -51
- viam/gen/component/arm/v1/arm_pb2.pyi +108 -42
- viam/gen/component/audioin/__init__.py +0 -0
- viam/gen/component/audioin/v1/__init__.py +0 -0
- viam/gen/component/audioin/v1/audioin_grpc.py +54 -0
- viam/gen/component/audioin/v1/audioin_pb2.py +34 -0
- viam/gen/component/audioin/v1/audioin_pb2.pyi +94 -0
- viam/gen/component/audioinput/v1/audioinput_grpc.py +25 -2
- viam/gen/component/audioinput/v1/audioinput_pb2.py +36 -31
- viam/gen/component/audioinput/v1/audioinput_pb2.pyi +22 -22
- viam/gen/component/audioout/__init__.py +0 -0
- viam/gen/component/audioout/v1/__init__.py +0 -0
- viam/gen/component/audioout/v1/audioout_grpc.py +54 -0
- viam/gen/component/audioout/v1/audioout_pb2.py +32 -0
- viam/gen/component/audioout/v1/audioout_pb2.pyi +47 -0
- viam/gen/component/base/v1/base_grpc.py +42 -2
- viam/gen/component/base/v1/base_pb2.py +58 -47
- viam/gen/component/base/v1/base_pb2.pyi +65 -30
- viam/gen/component/board/v1/board_grpc.py +59 -7
- viam/gen/component/board/v1/board_pb2.py +94 -73
- viam/gen/component/board/v1/board_pb2.pyi +165 -68
- viam/gen/component/button/__init__.py +0 -0
- viam/gen/component/button/v1/__init__.py +0 -0
- viam/gen/component/button/v1/button_grpc.py +38 -0
- viam/gen/component/button/v1/button_pb2.py +28 -0
- viam/gen/component/button/v1/button_pb2.pyi +39 -0
- viam/gen/component/camera/v1/camera_grpc.py +38 -2
- viam/gen/component/camera/v1/camera_pb2.py +60 -43
- viam/gen/component/camera/v1/camera_pb2.pyi +191 -37
- viam/gen/component/encoder/v1/encoder_grpc.py +25 -2
- viam/gen/component/encoder/v1/encoder_pb2.py +36 -31
- viam/gen/component/encoder/v1/encoder_pb2.pyi +15 -15
- viam/gen/component/gantry/v1/gantry_grpc.py +47 -2
- viam/gen/component/gantry/v1/gantry_pb2.py +56 -43
- viam/gen/component/gantry/v1/gantry_pb2.pyi +67 -31
- viam/gen/component/generic/v1/generic_grpc.py +16 -2
- viam/gen/component/generic/v1/generic_pb2.py +16 -11
- viam/gen/component/gripper/v1/gripper_grpc.py +44 -2
- viam/gen/component/gripper/v1/gripper_pb2.py +48 -35
- viam/gen/component/gripper/v1/gripper_pb2.pyi +62 -24
- viam/gen/component/inputcontroller/v1/input_controller_grpc.py +28 -2
- viam/gen/component/inputcontroller/v1/input_controller_pb2.py +46 -41
- viam/gen/component/inputcontroller/v1/input_controller_pb2.pyi +32 -36
- viam/gen/component/motor/v1/motor_grpc.py +51 -2
- viam/gen/component/motor/v1/motor_pb2.py +78 -67
- viam/gen/component/motor/v1/motor_pb2.pyi +75 -46
- viam/gen/component/movementsensor/v1/movementsensor_grpc.py +48 -2
- viam/gen/component/movementsensor/v1/movementsensor_pb2.py +70 -63
- viam/gen/component/movementsensor/v1/movementsensor_pb2.pyi +84 -57
- viam/gen/component/posetracker/v1/pose_tracker_grpc.py +19 -2
- viam/gen/component/posetracker/v1/pose_tracker_pb2.py +26 -21
- viam/gen/component/posetracker/v1/pose_tracker_pb2.pyi +9 -13
- viam/gen/component/powersensor/__init__.py +0 -0
- viam/gen/component/powersensor/v1/__init__.py +0 -0
- viam/gen/component/powersensor/v1/powersensor_grpc.py +62 -0
- viam/gen/component/powersensor/v1/powersensor_pb2.py +42 -0
- viam/gen/component/powersensor/v1/powersensor_pb2.pyi +124 -0
- viam/gen/component/sensor/v1/sensor_grpc.py +21 -5
- viam/gen/component/sensor/v1/sensor_pb2.py +18 -22
- viam/gen/component/sensor/v1/sensor_pb2.pyi +1 -69
- viam/gen/component/servo/v1/servo_grpc.py +28 -2
- viam/gen/component/servo/v1/servo_pb2.py +42 -37
- viam/gen/component/servo/v1/servo_pb2.pyi +22 -26
- viam/gen/component/switch/__init__.py +0 -0
- viam/gen/component/switch/v1/__init__.py +0 -0
- viam/gen/component/switch/v1/switch_grpc.py +54 -0
- viam/gen/component/switch/v1/switch_pb2.py +40 -0
- viam/gen/component/switch/v1/switch_pb2.pyi +116 -0
- viam/gen/component/testecho/v1/testecho_grpc.py +15 -0
- viam/gen/component/testecho/v1/testecho_pb2.py +29 -26
- viam/gen/component/testecho/v1/testecho_pb2.pyi +16 -20
- viam/gen/module/v1/module_grpc.py +18 -0
- viam/gen/module/v1/module_pb2.py +36 -33
- viam/gen/module/v1/module_pb2.pyi +39 -34
- viam/gen/opentelemetry/__init__.py +0 -0
- viam/gen/opentelemetry/proto/__init__.py +0 -0
- viam/gen/opentelemetry/proto/common/__init__.py +0 -0
- viam/gen/opentelemetry/proto/common/v1/__init__.py +0 -0
- viam/gen/opentelemetry/proto/common/v1/common_grpc.py +0 -0
- viam/gen/opentelemetry/proto/common/v1/common_pb2.py +27 -0
- viam/gen/opentelemetry/proto/common/v1/common_pb2.pyi +208 -0
- viam/gen/opentelemetry/proto/resource/__init__.py +0 -0
- viam/gen/opentelemetry/proto/resource/v1/__init__.py +0 -0
- viam/gen/opentelemetry/proto/resource/v1/resource_grpc.py +0 -0
- viam/gen/opentelemetry/proto/resource/v1/resource_pb2.py +18 -0
- viam/gen/opentelemetry/proto/resource/v1/resource_pb2.pyi +59 -0
- viam/gen/opentelemetry/proto/trace/__init__.py +0 -0
- viam/gen/opentelemetry/proto/trace/v1/__init__.py +0 -0
- viam/gen/opentelemetry/proto/trace/v1/trace_grpc.py +0 -0
- viam/gen/opentelemetry/proto/trace/v1/trace_pb2.py +37 -0
- viam/gen/opentelemetry/proto/trace/v1/trace_pb2.pyi +402 -0
- viam/gen/proto/rpc/examples/echo/v1/echo_grpc.py +12 -0
- viam/gen/proto/rpc/examples/echo/v1/echo_pb2.py +25 -22
- viam/gen/proto/rpc/examples/echo/v1/echo_pb2.pyi +13 -17
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_grpc.py +12 -0
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.py +23 -20
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.pyi +13 -17
- viam/gen/proto/rpc/v1/auth_grpc.py +11 -0
- viam/gen/proto/rpc/v1/auth_pb2.py +27 -24
- viam/gen/proto/rpc/v1/auth_pb2.pyi +12 -16
- viam/gen/proto/rpc/webrtc/v1/grpc_pb2.py +35 -32
- viam/gen/proto/rpc/webrtc/v1/grpc_pb2.pyi +37 -41
- viam/gen/proto/rpc/webrtc/v1/signaling_grpc.py +15 -0
- viam/gen/proto/rpc/webrtc/v1/signaling_pb2.py +62 -57
- viam/gen/proto/rpc/webrtc/v1/signaling_pb2.pyi +78 -69
- viam/gen/provisioning/__init__.py +0 -0
- viam/gen/provisioning/v1/__init__.py +0 -0
- viam/gen/provisioning/v1/provisioning_grpc.py +59 -0
- viam/gen/provisioning/v1/provisioning_pb2.py +45 -0
- viam/gen/provisioning/v1/provisioning_pb2.pyi +229 -0
- viam/gen/robot/v1/robot_grpc.py +144 -15
- viam/gen/robot/v1/robot_pb2.py +193 -119
- viam/gen/robot/v1/robot_pb2.pyi +565 -137
- viam/gen/service/datamanager/v1/data_manager_grpc.py +20 -2
- viam/gen/service/datamanager/v1/data_manager_pb2.py +27 -17
- viam/gen/service/datamanager/v1/data_manager_pb2.pyi +52 -10
- viam/gen/service/discovery/__init__.py +0 -0
- viam/gen/service/discovery/v1/__init__.py +0 -0
- viam/gen/service/discovery/v1/discovery_grpc.py +39 -0
- viam/gen/service/discovery/v1/discovery_pb2.py +29 -0
- viam/gen/service/discovery/v1/discovery_pb2.pyi +51 -0
- viam/gen/service/generic/__init__.py +0 -0
- viam/gen/service/generic/v1/__init__.py +0 -0
- viam/gen/service/generic/v1/generic_grpc.py +29 -0
- viam/gen/service/generic/v1/generic_pb2.py +21 -0
- viam/gen/service/generic/v1/generic_pb2.pyi +6 -0
- viam/gen/service/mlmodel/v1/mlmodel_grpc.py +9 -0
- viam/gen/service/mlmodel/v1/mlmodel_pb2.py +76 -29
- viam/gen/service/mlmodel/v1/mlmodel_pb2.pyi +307 -28
- viam/gen/service/motion/v1/motion_grpc.py +42 -4
- viam/gen/service/motion/v1/motion_pb2.py +119 -51
- viam/gen/service/motion/v1/motion_pb2.pyi +595 -120
- viam/gen/service/navigation/v1/navigation_grpc.py +49 -1
- viam/gen/service/navigation/v1/navigation_pb2.py +76 -51
- viam/gen/service/navigation/v1/navigation_pb2.pyi +188 -33
- viam/gen/service/sensors/v1/sensors_grpc.py +12 -0
- viam/gen/service/sensors/v1/sensors_pb2.py +60 -29
- viam/gen/service/sensors/v1/sensors_pb2.pyi +18 -21
- viam/gen/service/shell/v1/shell_grpc.py +27 -1
- viam/gen/service/shell/v1/shell_pb2.py +37 -15
- viam/gen/service/shell/v1/shell_pb2.pyi +260 -7
- viam/gen/service/slam/v1/slam_grpc.py +24 -2
- viam/gen/service/slam/v1/slam_pb2.py +44 -30
- viam/gen/service/slam/v1/slam_pb2.pyi +128 -27
- viam/gen/service/video/__init__.py +0 -0
- viam/gen/service/video/v1/__init__.py +0 -0
- viam/gen/service/video/v1/video_grpc.py +39 -0
- viam/gen/service/video/v1/video_pb2.py +29 -0
- viam/gen/service/video/v1/video_pb2.pyi +72 -0
- viam/gen/service/vision/v1/vision_grpc.py +39 -1
- viam/gen/service/vision/v1/vision_pb2.py +61 -45
- viam/gen/service/vision/v1/vision_pb2.pyi +180 -41
- viam/gen/service/worldstatestore/__init__.py +0 -0
- viam/gen/service/worldstatestore/v1/__init__.py +0 -0
- viam/gen/service/worldstatestore/v1/world_state_store_grpc.py +55 -0
- viam/gen/service/worldstatestore/v1/world_state_store_pb2.py +39 -0
- viam/gen/service/worldstatestore/v1/world_state_store_pb2.pyi +171 -0
- viam/gen/stream/__init__.py +0 -0
- viam/gen/stream/v1/__init__.py +0 -0
- viam/gen/stream/v1/stream_grpc.py +59 -0
- viam/gen/stream/v1/stream_pb2.py +39 -0
- viam/gen/stream/v1/stream_pb2.pyi +161 -0
- viam/gen/tagger/v1/tagger_pb2.py +9 -8
- viam/logging.py +160 -17
- viam/media/__init__.py +0 -9
- viam/media/audio.py +22 -10
- viam/media/utils/__init__.py +0 -0
- viam/media/utils/pil/__init__.py +55 -0
- viam/media/{viam_rgba_plugin.py → utils/pil/viam_rgba_plugin.py} +10 -16
- viam/media/viam_rgba.py +10 -0
- viam/media/video.py +197 -73
- viam/module/module.py +191 -44
- viam/module/resource_data_consumer.py +41 -0
- viam/module/service.py +9 -1
- viam/module/types.py +4 -5
- viam/operations.py +4 -3
- viam/proto/app/__init__.py +361 -5
- viam/proto/app/agent/__init__.py +28 -0
- viam/proto/app/billing.py +51 -27
- viam/proto/app/cloudslam/__init__.py +48 -0
- viam/proto/app/data/__init__.py +103 -17
- viam/proto/app/datapipelines/__init__.py +56 -0
- viam/proto/app/dataset/__init__.py +40 -0
- viam/proto/app/datasync/__init__.py +11 -5
- viam/proto/app/end_user.py +34 -0
- viam/proto/app/mlinference/__init__.py +15 -0
- viam/proto/app/mltraining/__init__.py +25 -1
- viam/proto/app/packages/__init__.py +3 -3
- viam/proto/app/robot.py +19 -1
- viam/proto/common/__init__.py +35 -8
- viam/proto/component/arm/__init__.py +9 -1
- viam/proto/component/audioin/__init__.py +16 -0
- viam/proto/component/audioinput/__init__.py +3 -1
- viam/proto/component/audioout/__init__.py +15 -0
- viam/proto/component/base/__init__.py +7 -1
- viam/proto/component/board/__init__.py +13 -5
- viam/proto/component/button/__init__.py +15 -0
- viam/proto/component/camera/__init__.py +9 -1
- viam/proto/component/encoder/__init__.py +3 -1
- viam/proto/component/gantry/__init__.py +7 -1
- viam/proto/component/generic/__init__.py +3 -1
- viam/proto/component/gripper/__init__.py +7 -1
- viam/proto/component/inputcontroller/__init__.py +7 -1
- viam/proto/component/motor/__init__.py +7 -1
- viam/proto/component/movementsensor/__init__.py +7 -1
- viam/proto/component/posetracker/__init__.py +7 -1
- viam/proto/component/powersensor/__init__.py +30 -0
- viam/proto/component/sensor/__init__.py +3 -4
- viam/proto/component/servo/__init__.py +3 -1
- viam/proto/component/switch/__init__.py +26 -0
- viam/proto/component/testecho/__init__.py +3 -1
- viam/proto/module/__init__.py +3 -1
- viam/proto/opentelemetry/__init__.py +0 -0
- viam/proto/opentelemetry/proto/__init__.py +0 -0
- viam/proto/opentelemetry/proto/common/__init__.py +15 -0
- viam/proto/opentelemetry/proto/resource/__init__.py +10 -0
- viam/proto/opentelemetry/proto/trace/__init__.py +15 -0
- viam/proto/provisioning/__init__.py +42 -0
- viam/proto/robot/__init__.py +57 -9
- viam/proto/rpc/auth.py +11 -1
- viam/proto/rpc/examples/echo/__init__.py +3 -1
- viam/proto/rpc/examples/echoresource/__init__.py +7 -1
- viam/proto/rpc/webrtc/grpc.py +3 -1
- viam/proto/rpc/webrtc/signaling.py +5 -1
- viam/proto/service/datamanager/__init__.py +15 -2
- viam/proto/service/discovery/__init__.py +15 -0
- viam/proto/service/generic/__init__.py +12 -0
- viam/proto/service/mlmodel/__init__.py +27 -1
- viam/proto/service/motion/__init__.py +35 -5
- viam/proto/service/navigation/__init__.py +19 -1
- viam/proto/service/sensors/__init__.py +3 -1
- viam/proto/service/shell/__init__.py +25 -2
- viam/proto/service/slam/__init__.py +13 -1
- viam/proto/service/video/__init__.py +15 -0
- viam/proto/service/vision/__init__.py +11 -1
- viam/proto/service/worldstatestore/__init__.py +32 -0
- viam/proto/stream/__init__.py +36 -0
- viam/py.typed +0 -0
- viam/resource/base.py +45 -8
- viam/resource/easy_resource.py +149 -0
- viam/resource/manager.py +35 -14
- viam/resource/registry.py +40 -52
- viam/resource/rpc_client_base.py +33 -1
- viam/resource/rpc_service_base.py +15 -8
- viam/resource/types.py +39 -26
- viam/robot/client.py +458 -91
- viam/robot/service.py +13 -107
- viam/rpc/dial.py +133 -15
- viam/rpc/libviam_rust_utils.so +0 -0
- viam/rpc/server.py +59 -15
- viam/rpc/types.py +2 -4
- viam/services/discovery/__init__.py +12 -0
- viam/services/discovery/client.py +55 -0
- viam/services/discovery/discovery.py +52 -0
- viam/services/discovery/service.py +43 -0
- viam/services/generic/__init__.py +18 -0
- viam/services/generic/client.py +58 -0
- viam/services/generic/generic.py +58 -0
- viam/services/generic/service.py +29 -0
- viam/services/mlmodel/__init__.py +15 -1
- viam/services/mlmodel/client.py +20 -15
- viam/services/mlmodel/mlmodel.py +44 -7
- viam/services/mlmodel/service.py +9 -13
- viam/services/mlmodel/utils.py +101 -0
- viam/services/motion/__init__.py +15 -3
- viam/services/motion/client.py +109 -150
- viam/services/motion/motion.py +380 -0
- viam/services/motion/service.py +132 -0
- viam/services/navigation/__init__.py +11 -0
- viam/services/navigation/client.py +99 -0
- viam/services/navigation/navigation.py +250 -0
- viam/services/navigation/service.py +137 -0
- viam/services/service_base.py +43 -4
- viam/services/service_client_base.py +4 -4
- viam/services/slam/__init__.py +4 -1
- viam/services/slam/client.py +21 -11
- viam/services/slam/service.py +16 -19
- viam/services/slam/slam.py +66 -5
- viam/services/vision/__init__.py +8 -0
- viam/services/vision/client.py +115 -111
- viam/services/vision/service.py +143 -0
- viam/services/vision/vision.py +317 -0
- viam/services/worldstatestore/__init__.py +18 -0
- viam/services/worldstatestore/client.py +94 -0
- viam/services/worldstatestore/service.py +55 -0
- viam/services/worldstatestore/worldstatestore.py +90 -0
- viam/sessions_client.py +254 -0
- viam/streams.py +44 -0
- viam/utils.py +143 -15
- viam/version_metadata.py +4 -0
- viam_sdk-0.66.0.dist-info/METADATA +157 -0
- viam_sdk-0.66.0.dist-info/RECORD +531 -0
- {viam_sdk-0.3.0.dist-info → viam_sdk-0.66.0.dist-info}/WHEEL +1 -1
- viam/components/audio_input/__init__.py +0 -18
- viam/components/audio_input/audio_input.py +0 -79
- viam/components/audio_input/client.py +0 -60
- viam/components/audio_input/service.py +0 -118
- viam/components/types.py +0 -5
- viam/gen/app/model/v1/model_grpc.py +0 -39
- viam/gen/app/model/v1/model_pb2.py +0 -71
- viam/gen/app/model/v1/model_pb2.pyi +0 -285
- viam/gen/proto/rpc/examples/fileupload/v1/fileupload_grpc.py +0 -21
- viam/gen/proto/rpc/examples/fileupload/v1/fileupload_pb2.py +0 -18
- viam/gen/proto/rpc/examples/fileupload/v1/fileupload_pb2.pyi +0 -49
- viam/media/media.py +0 -53
- viam/proto/app/model/__init__.py +0 -40
- viam/proto/rpc/examples/fileupload/__init__.py +0 -13
- viam/services/sensors/__init__.py +0 -5
- viam/services/sensors/client.py +0 -63
- viam_sdk-0.3.0.dist-info/LICENSE +0 -202
- viam_sdk-0.3.0.dist-info/METADATA +0 -122
- viam_sdk-0.3.0.dist-info/RECORD +0 -372
- /viam/{gen/app/model → app}/__init__.py +0 -0
- /viam/gen/app/{model/v1 → agent}/__init__.py +0 -0
- /viam/gen/{proto/rpc/examples/fileupload → app/agent/v1}/__init__.py +0 -0
- /viam/gen/{proto/rpc/examples/fileupload/v1 → app/cloudslam}/__init__.py +0 -0
- /LICENSE → /viam_sdk-0.66.0.dist-info/licenses/LICENSE +0 -0
viam/components/input/client.py
CHANGED
|
@@ -10,7 +10,7 @@ from grpclib.client import Channel
|
|
|
10
10
|
import viam
|
|
11
11
|
from viam.errors import NotSupportedError
|
|
12
12
|
from viam.logging import getLogger
|
|
13
|
-
from viam.proto.common import DoCommandRequest, DoCommandResponse
|
|
13
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry
|
|
14
14
|
from viam.proto.component.inputcontroller import (
|
|
15
15
|
GetControlsRequest,
|
|
16
16
|
GetControlsResponse,
|
|
@@ -21,8 +21,8 @@ from viam.proto.component.inputcontroller import (
|
|
|
21
21
|
StreamEventsResponse,
|
|
22
22
|
TriggerEventRequest,
|
|
23
23
|
)
|
|
24
|
-
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
25
|
-
from viam.utils import ValueTypes, dict_to_struct, struct_to_dict
|
|
24
|
+
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase, ResourceRPCClientBase
|
|
25
|
+
from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
|
|
26
26
|
|
|
27
27
|
from .input import Control, ControlFunction, Controller, Event, EventType
|
|
28
28
|
|
|
@@ -43,25 +43,39 @@ class ControllerClient(Controller, ReconfigurableResourceRPCClientBase):
|
|
|
43
43
|
self._callback_extra: Struct = dict_to_struct({})
|
|
44
44
|
super().__init__(name)
|
|
45
45
|
|
|
46
|
-
async def get_controls(
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
async def get_controls(
|
|
47
|
+
self,
|
|
48
|
+
*,
|
|
49
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
50
|
+
timeout: Optional[float] = None,
|
|
51
|
+
**kwargs,
|
|
52
|
+
) -> List[Control]:
|
|
53
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
49
54
|
request = GetControlsRequest(controller=self.name, extra=dict_to_struct(extra))
|
|
50
|
-
response: GetControlsResponse = await self.client.GetControls(request, timeout=timeout)
|
|
55
|
+
response: GetControlsResponse = await self.client.GetControls(request, timeout=timeout, metadata=md)
|
|
51
56
|
return [Control(control) for control in response.controls]
|
|
52
57
|
|
|
53
|
-
async def get_events(
|
|
54
|
-
|
|
55
|
-
|
|
58
|
+
async def get_events(
|
|
59
|
+
self,
|
|
60
|
+
*,
|
|
61
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
62
|
+
timeout: Optional[float] = None,
|
|
63
|
+
**kwargs,
|
|
64
|
+
) -> Dict[Control, Event]:
|
|
65
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
56
66
|
request = GetEventsRequest(controller=self.name, extra=dict_to_struct(extra))
|
|
57
|
-
response: GetEventsResponse = await self.client.GetEvents(request, timeout=timeout)
|
|
67
|
+
response: GetEventsResponse = await self.client.GetEvents(request, timeout=timeout, metadata=md)
|
|
58
68
|
return {Control(event.control): Event.from_proto(event) for (event) in response.events}
|
|
59
69
|
|
|
60
70
|
def register_control_callback(
|
|
61
|
-
self,
|
|
71
|
+
self,
|
|
72
|
+
control: Control,
|
|
73
|
+
triggers: List[EventType],
|
|
74
|
+
function: Optional[ControlFunction],
|
|
75
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
76
|
+
**kwargs,
|
|
62
77
|
):
|
|
63
|
-
|
|
64
|
-
extra = {}
|
|
78
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
65
79
|
self._callback_extra = dict_to_struct(extra)
|
|
66
80
|
with self._lock:
|
|
67
81
|
callbacks = self.callbacks.get(control, {})
|
|
@@ -82,7 +96,7 @@ class ControllerClient(Controller, ReconfigurableResourceRPCClientBase):
|
|
|
82
96
|
except Exception:
|
|
83
97
|
LOGGER.exception("Exception raised by task = %r", task)
|
|
84
98
|
|
|
85
|
-
task = asyncio.create_task(self._stream_events(), name=f"{viam._TASK_PREFIX}-input_stream_events")
|
|
99
|
+
task = asyncio.create_task(self._stream_events(md), name=f"{viam._TASK_PREFIX}-input_stream_events")
|
|
86
100
|
task.add_done_callback(handle_task_result)
|
|
87
101
|
|
|
88
102
|
def reset_channel(self, channel: Channel):
|
|
@@ -92,18 +106,24 @@ class ControllerClient(Controller, ReconfigurableResourceRPCClientBase):
|
|
|
92
106
|
for event_type, func in callback.items():
|
|
93
107
|
self.register_control_callback(control, [event_type], func)
|
|
94
108
|
|
|
95
|
-
async def trigger_event(
|
|
96
|
-
|
|
97
|
-
|
|
109
|
+
async def trigger_event(
|
|
110
|
+
self,
|
|
111
|
+
event: Event,
|
|
112
|
+
*,
|
|
113
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
114
|
+
timeout: Optional[float] = None,
|
|
115
|
+
**kwargs,
|
|
116
|
+
):
|
|
117
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
98
118
|
request = TriggerEventRequest(controller=self.name, event=event.proto, extra=dict_to_struct(extra))
|
|
99
119
|
try:
|
|
100
|
-
await self.client.TriggerEvent(request, timeout=timeout)
|
|
120
|
+
await self.client.TriggerEvent(request, timeout=timeout, metadata=md)
|
|
101
121
|
except GRPCError as e:
|
|
102
122
|
if e.status == Status.UNIMPLEMENTED and ("does not support triggering events" in e.message if e.message else False):
|
|
103
123
|
raise NotSupportedError(f"Input controller named {self.name} does not support triggering events")
|
|
104
124
|
raise e
|
|
105
125
|
|
|
106
|
-
async def _stream_events(self):
|
|
126
|
+
async def _stream_events(self, metadata: ResourceRPCClientBase.Metadata):
|
|
107
127
|
with self._stream_lock:
|
|
108
128
|
if self._is_streaming:
|
|
109
129
|
return
|
|
@@ -112,6 +132,7 @@ class ControllerClient(Controller, ReconfigurableResourceRPCClientBase):
|
|
|
112
132
|
if not self.callbacks:
|
|
113
133
|
return
|
|
114
134
|
|
|
135
|
+
md = metadata.proto
|
|
115
136
|
request = StreamEventsRequest(controller=self.name, events=[], extra=self._callback_extra)
|
|
116
137
|
with self._lock:
|
|
117
138
|
for control, callbacks in self.callbacks.items():
|
|
@@ -123,7 +144,7 @@ class ControllerClient(Controller, ReconfigurableResourceRPCClientBase):
|
|
|
123
144
|
request.events.append(event)
|
|
124
145
|
|
|
125
146
|
try:
|
|
126
|
-
async with self.client.StreamEvents.open() as stream:
|
|
147
|
+
async with self.client.StreamEvents.open(metadata=md) as stream:
|
|
127
148
|
await stream.send_message(request, end=True)
|
|
128
149
|
self._send_connection_status(True)
|
|
129
150
|
reply: StreamEventsResponse
|
|
@@ -156,7 +177,18 @@ class ControllerClient(Controller, ReconfigurableResourceRPCClientBase):
|
|
|
156
177
|
if all_callback is not None:
|
|
157
178
|
all_callback(event)
|
|
158
179
|
|
|
159
|
-
async def do_command(
|
|
180
|
+
async def do_command(
|
|
181
|
+
self,
|
|
182
|
+
command: Mapping[str, ValueTypes],
|
|
183
|
+
*,
|
|
184
|
+
timeout: Optional[float] = None,
|
|
185
|
+
**kwargs,
|
|
186
|
+
) -> Mapping[str, ValueTypes]:
|
|
187
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
160
188
|
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
161
|
-
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
|
|
189
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
162
190
|
return struct_to_dict(response.result)
|
|
191
|
+
|
|
192
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
|
|
193
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
194
|
+
return await get_geometries(self.client, self.name, extra, timeout, md)
|
viam/components/input/input.py
CHANGED
|
@@ -10,7 +10,7 @@ from typing_extensions import Self
|
|
|
10
10
|
from viam.components.component_base import ComponentBase
|
|
11
11
|
from viam.errors import NotSupportedError
|
|
12
12
|
from viam.proto.component.inputcontroller import Event as PBEvent
|
|
13
|
-
from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
13
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class EventType(str, Enum):
|
|
@@ -135,17 +135,39 @@ class Controller(ComponentBase):
|
|
|
135
135
|
Controller is a logical "container" more than an actual device
|
|
136
136
|
Could be a single gamepad, or a collection of digitalInterrupts
|
|
137
137
|
and analogReaders, a keyboard, etc.
|
|
138
|
+
|
|
139
|
+
::
|
|
140
|
+
|
|
141
|
+
from viam.components.input import Control, Controller, EventType
|
|
142
|
+
|
|
143
|
+
For more information, see `Input Controller component <https://docs.viam.com/dev/reference/apis/components/input-controller/>`_.
|
|
138
144
|
"""
|
|
139
145
|
|
|
140
|
-
|
|
146
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
147
|
+
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "input_controller"
|
|
148
|
+
)
|
|
141
149
|
|
|
142
150
|
@abc.abstractmethod
|
|
143
151
|
async def get_controls(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Control]:
|
|
144
152
|
"""
|
|
145
153
|
Returns a list of Controls provided by the Controller
|
|
146
154
|
|
|
155
|
+
::
|
|
156
|
+
|
|
157
|
+
# Get the controller from the machine.
|
|
158
|
+
my_controller = Controller.from_robot(
|
|
159
|
+
robot=machine, "my_controller")
|
|
160
|
+
|
|
161
|
+
# Get the list of Controls provided by the controller.
|
|
162
|
+
controls = await my_controller.get_controls()
|
|
163
|
+
|
|
164
|
+
# Print the list of Controls provided by the controller.
|
|
165
|
+
print(f"Controls: {controls}")
|
|
166
|
+
|
|
147
167
|
Returns:
|
|
148
168
|
List[Control]: List of controls provided by the Controller
|
|
169
|
+
|
|
170
|
+
For more information, see `Input Controller component <https://docs.viam.com/dev/reference/apis/components/input-controller/#getcontrols>`_.
|
|
149
171
|
"""
|
|
150
172
|
...
|
|
151
173
|
|
|
@@ -157,8 +179,22 @@ class Controller(ComponentBase):
|
|
|
157
179
|
Returns the most recent Event for each input
|
|
158
180
|
(which should be the current state)
|
|
159
181
|
|
|
182
|
+
::
|
|
183
|
+
|
|
184
|
+
# Get the controller from the machine.
|
|
185
|
+
my_controller = Controller.from_robot(
|
|
186
|
+
robot=machine, "my_controller")
|
|
187
|
+
|
|
188
|
+
# Get the most recent Event for each Control.
|
|
189
|
+
recent_events = await my_controller.get_events()
|
|
190
|
+
|
|
191
|
+
# Print out the most recent Event for each Control.
|
|
192
|
+
print(f"Recent Events: {recent_events}")
|
|
193
|
+
|
|
160
194
|
Returns:
|
|
161
195
|
Dict[Control, Event]: The most recent event for each input
|
|
196
|
+
|
|
197
|
+
For more information, see `Input Controller component <https://docs.viam.com/dev/reference/apis/components/input-controller/#getevents>`_.
|
|
162
198
|
"""
|
|
163
199
|
...
|
|
164
200
|
|
|
@@ -176,19 +212,86 @@ class Controller(ComponentBase):
|
|
|
176
212
|
Register a function that will fire on given EventTypes for a given
|
|
177
213
|
Control
|
|
178
214
|
|
|
215
|
+
::
|
|
216
|
+
|
|
217
|
+
from viam.components.input import Control, EventType
|
|
218
|
+
|
|
219
|
+
# Define a function to handle pressing the Start Menu Button "BUTTON_START" on
|
|
220
|
+
# your controller, printing out the start time.
|
|
221
|
+
def print_start_time(event):
|
|
222
|
+
print(f"Start Menu Button was pressed at this time: {event.time}")
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
# Define a function that handles the controller.
|
|
226
|
+
async def handle_controller(controller):
|
|
227
|
+
# Get the list of Controls on the controller.
|
|
228
|
+
controls = await controller.get_controls()
|
|
229
|
+
|
|
230
|
+
# If the "BUTTON_START" Control is found, register the function
|
|
231
|
+
# print_start_time to fire when "BUTTON_START" has the event "ButtonPress"
|
|
232
|
+
# occur.
|
|
233
|
+
if Control.BUTTON_START in controls:
|
|
234
|
+
controller.register_control_callback(
|
|
235
|
+
Control.BUTTON_START, [EventType.BUTTON_PRESS], print_start_time)
|
|
236
|
+
else:
|
|
237
|
+
print("Oops! Couldn't find the start button control! Is your "
|
|
238
|
+
"controller connected?")
|
|
239
|
+
exit()
|
|
240
|
+
|
|
241
|
+
while True:
|
|
242
|
+
await asyncio.sleep(1.0)
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
async def main():
|
|
246
|
+
# ... < INSERT CONNECTION CODE FROM MACHINE'S CONNECT TAB >
|
|
247
|
+
|
|
248
|
+
# Get your controller from the machine.
|
|
249
|
+
my_controller = Controller.from_robot(
|
|
250
|
+
robot=machine, "my_controller")
|
|
251
|
+
|
|
252
|
+
# Run the handleController function.
|
|
253
|
+
await handle_controller(my_controller)
|
|
254
|
+
|
|
255
|
+
# ... < INSERT ANY OTHER CODE FOR MAIN FUNCTION >
|
|
256
|
+
|
|
179
257
|
Args:
|
|
180
258
|
control (Control): The control to register the function for
|
|
181
259
|
triggers (List[EventType]): The events that will
|
|
182
260
|
trigger the function
|
|
183
261
|
function (ControlFunction): The function to run on
|
|
184
262
|
specific triggers
|
|
263
|
+
|
|
264
|
+
For more information, see `Input Controller component <https://docs.viam.com/dev/reference/apis/components/input-controller/#registercontrolcallback>`_.
|
|
185
265
|
"""
|
|
186
266
|
...
|
|
187
267
|
|
|
188
|
-
async def trigger_event(
|
|
268
|
+
async def trigger_event(
|
|
269
|
+
self,
|
|
270
|
+
event: Event,
|
|
271
|
+
*,
|
|
272
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
273
|
+
timeout: Optional[float] = None,
|
|
274
|
+
**kwargs,
|
|
275
|
+
) -> None: # Explicitly return None for typechecking, as this is technically a NoReturn default implementation
|
|
189
276
|
"""Directly send an Event (such as a button press) from external code
|
|
190
277
|
|
|
278
|
+
::
|
|
279
|
+
|
|
280
|
+
# Get your controller from the machine.
|
|
281
|
+
my_controller = Controller.from_robot(
|
|
282
|
+
robot=machine, "my_controller")
|
|
283
|
+
|
|
284
|
+
# Define a "Button is Pressed" event for the control BUTTON_START.
|
|
285
|
+
button_is_pressed_event = Event(
|
|
286
|
+
time(), EventType.BUTTON_PRESS, Control.BUTTON_START, 1.0)
|
|
287
|
+
|
|
288
|
+
# Trigger the event on your controller. Set this trigger to timeout if it has
|
|
289
|
+
# not completed in 7 seconds.
|
|
290
|
+
await my_controller.trigger_event(event=button_is_pressed_event, timeout=7.0)
|
|
291
|
+
|
|
191
292
|
Args:
|
|
192
293
|
event (Event): The event to trigger
|
|
294
|
+
|
|
295
|
+
For more information, see `Input Controller component <https://docs.viam.com/dev/reference/apis/components/input-controller/#triggerevent>`_.
|
|
193
296
|
"""
|
|
194
297
|
raise NotSupportedError(f"Input controller named {self.name} does not support triggering events")
|
viam/components/input/service.py
CHANGED
|
@@ -6,8 +6,8 @@ from grpclib.server import Stream
|
|
|
6
6
|
from h2.exceptions import StreamClosedError
|
|
7
7
|
|
|
8
8
|
import viam
|
|
9
|
-
from viam.errors import NotSupportedError
|
|
10
|
-
from viam.proto.common import DoCommandRequest, DoCommandResponse
|
|
9
|
+
from viam.errors import NotSupportedError
|
|
10
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse
|
|
11
11
|
from viam.proto.component.inputcontroller import (
|
|
12
12
|
GetControlsRequest,
|
|
13
13
|
GetControlsResponse,
|
|
@@ -38,10 +38,7 @@ class InputControllerRPCService(InputControllerServiceBase, ResourceRPCServiceBa
|
|
|
38
38
|
request = await stream.recv_message()
|
|
39
39
|
assert request is not None
|
|
40
40
|
name = request.controller
|
|
41
|
-
|
|
42
|
-
controller = self.get_resource(name)
|
|
43
|
-
except ResourceNotFoundError as e:
|
|
44
|
-
raise e.grpc_error
|
|
41
|
+
controller = self.get_resource(name)
|
|
45
42
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
46
43
|
controls = await controller.get_controls(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
47
44
|
response = GetControlsResponse(controls=[c.value for c in controls])
|
|
@@ -51,10 +48,7 @@ class InputControllerRPCService(InputControllerServiceBase, ResourceRPCServiceBa
|
|
|
51
48
|
request = await stream.recv_message()
|
|
52
49
|
assert request is not None
|
|
53
50
|
name = request.controller
|
|
54
|
-
|
|
55
|
-
controller = self.get_resource(name)
|
|
56
|
-
except ResourceNotFoundError as e:
|
|
57
|
-
raise e.grpc_error
|
|
51
|
+
controller = self.get_resource(name)
|
|
58
52
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
59
53
|
events = await controller.get_events(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
60
54
|
pb_events = [e.proto for e in events.values()]
|
|
@@ -65,10 +59,7 @@ class InputControllerRPCService(InputControllerServiceBase, ResourceRPCServiceBa
|
|
|
65
59
|
request = await stream.recv_message()
|
|
66
60
|
assert request is not None
|
|
67
61
|
name = request.controller
|
|
68
|
-
|
|
69
|
-
controller = self.get_resource(name)
|
|
70
|
-
except ResourceNotFoundError as e:
|
|
71
|
-
raise e.grpc_error
|
|
62
|
+
controller = self.get_resource(name)
|
|
72
63
|
|
|
73
64
|
loop = asyncio.get_running_loop()
|
|
74
65
|
# Using Pipes to send event data back to this function so it can be streamed to clients
|
|
@@ -154,13 +145,11 @@ class InputControllerRPCService(InputControllerServiceBase, ResourceRPCServiceBa
|
|
|
154
145
|
assert request is not None
|
|
155
146
|
name = request.controller
|
|
156
147
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
148
|
+
controller = self.get_resource(name)
|
|
157
149
|
try:
|
|
158
|
-
controller = self.get_resource(name)
|
|
159
150
|
pb_event = request.event
|
|
160
151
|
event = Event.from_proto(pb_event)
|
|
161
152
|
await controller.trigger_event(event, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
162
|
-
except ResourceNotFoundError as e:
|
|
163
|
-
raise e.grpc_error
|
|
164
153
|
except NotSupportedError as e:
|
|
165
154
|
raise e.grpc_error
|
|
166
155
|
|
|
@@ -170,11 +159,17 @@ class InputControllerRPCService(InputControllerServiceBase, ResourceRPCServiceBa
|
|
|
170
159
|
async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
|
|
171
160
|
request = await stream.recv_message()
|
|
172
161
|
assert request is not None
|
|
173
|
-
|
|
174
|
-
controller = self.get_resource(request.name)
|
|
175
|
-
except ResourceNotFoundError as e:
|
|
176
|
-
raise e.grpc_error
|
|
162
|
+
controller = self.get_resource(request.name)
|
|
177
163
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
178
164
|
result = await controller.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
|
|
179
165
|
response = DoCommandResponse(result=dict_to_struct(result))
|
|
180
166
|
await stream.send_message(response)
|
|
167
|
+
|
|
168
|
+
async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
|
|
169
|
+
request = await stream.recv_message()
|
|
170
|
+
assert request is not None
|
|
171
|
+
arm = self.get_resource(request.name)
|
|
172
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
173
|
+
geometries = await arm.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
|
|
174
|
+
response = GetGeometriesResponse(geometries=geometries)
|
|
175
|
+
await stream.send_message(response)
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
import asyncio
|
|
2
|
-
|
|
3
|
-
from viam.proto.component.motor import Status as MotorStatus
|
|
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 MotorClient
|
|
9
4
|
from .motor import Motor
|
|
@@ -13,19 +8,4 @@ __all__ = [
|
|
|
13
8
|
"Motor",
|
|
14
9
|
]
|
|
15
10
|
|
|
16
|
-
|
|
17
|
-
async def create_status(component: Motor) -> Status:
|
|
18
|
-
((is_powered, _), position, is_moving) = await asyncio.gather(
|
|
19
|
-
component.is_powered(),
|
|
20
|
-
component.get_position(),
|
|
21
|
-
component.is_moving(),
|
|
22
|
-
)
|
|
23
|
-
s = MotorStatus(
|
|
24
|
-
is_powered=is_powered,
|
|
25
|
-
position=position,
|
|
26
|
-
is_moving=is_moving,
|
|
27
|
-
)
|
|
28
|
-
return Status(name=Motor.get_resource_name(component.name), status=message_to_struct(s))
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
Registry.register_subtype(ResourceRegistration(Motor, MotorRPCService, lambda name, channel: MotorClient(name, channel), create_status))
|
|
11
|
+
Registry.register_api(ResourceRegistration(Motor, MotorRPCService, lambda name, channel: MotorClient(name, channel)))
|
viam/components/motor/client.py
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
from typing import Any, Dict, Mapping, Optional, Tuple
|
|
1
|
+
from typing import Any, Dict, List, Mapping, Optional, Tuple
|
|
2
2
|
|
|
3
3
|
from grpclib.client import Channel
|
|
4
4
|
|
|
5
|
-
from viam.proto.common import DoCommandRequest, DoCommandResponse
|
|
5
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry
|
|
6
6
|
from viam.proto.component.motor import (
|
|
7
7
|
GetPositionRequest,
|
|
8
8
|
GetPositionResponse,
|
|
@@ -17,10 +17,11 @@ from viam.proto.component.motor import (
|
|
|
17
17
|
MotorServiceStub,
|
|
18
18
|
ResetZeroPositionRequest,
|
|
19
19
|
SetPowerRequest,
|
|
20
|
+
SetRPMRequest,
|
|
20
21
|
StopRequest,
|
|
21
22
|
)
|
|
22
23
|
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
23
|
-
from viam.utils import ValueTypes, dict_to_struct, struct_to_dict
|
|
24
|
+
from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
|
|
24
25
|
|
|
25
26
|
from .motor import Motor
|
|
26
27
|
|
|
@@ -41,11 +42,11 @@ class MotorClient(Motor, ReconfigurableResourceRPCClientBase):
|
|
|
41
42
|
*,
|
|
42
43
|
extra: Optional[Dict[str, Any]] = None,
|
|
43
44
|
timeout: Optional[float] = None,
|
|
45
|
+
**kwargs,
|
|
44
46
|
):
|
|
45
|
-
|
|
46
|
-
extra = {}
|
|
47
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
47
48
|
request = SetPowerRequest(name=self.name, power_pct=power, extra=dict_to_struct(extra))
|
|
48
|
-
await self.client.SetPower(request, timeout=timeout)
|
|
49
|
+
await self.client.SetPower(request, timeout=timeout, metadata=md)
|
|
49
50
|
|
|
50
51
|
async def go_for(
|
|
51
52
|
self,
|
|
@@ -54,11 +55,11 @@ class MotorClient(Motor, ReconfigurableResourceRPCClientBase):
|
|
|
54
55
|
*,
|
|
55
56
|
extra: Optional[Dict[str, Any]] = None,
|
|
56
57
|
timeout: Optional[float] = None,
|
|
58
|
+
**kwargs,
|
|
57
59
|
):
|
|
58
|
-
|
|
59
|
-
extra = {}
|
|
60
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
60
61
|
request = GoForRequest(name=self.name, rpm=rpm, revolutions=revolutions, extra=dict_to_struct(extra))
|
|
61
|
-
await self.client.GoFor(request, timeout=timeout)
|
|
62
|
+
await self.client.GoFor(request, timeout=timeout, metadata=md)
|
|
62
63
|
|
|
63
64
|
async def go_to(
|
|
64
65
|
self,
|
|
@@ -67,11 +68,23 @@ class MotorClient(Motor, ReconfigurableResourceRPCClientBase):
|
|
|
67
68
|
*,
|
|
68
69
|
extra: Optional[Dict[str, Any]] = None,
|
|
69
70
|
timeout: Optional[float] = None,
|
|
71
|
+
**kwargs,
|
|
70
72
|
):
|
|
71
|
-
|
|
72
|
-
extra = {}
|
|
73
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
73
74
|
request = GoToRequest(name=self.name, rpm=rpm, position_revolutions=position_revolutions, extra=dict_to_struct(extra))
|
|
74
|
-
await self.client.GoTo(request, timeout=timeout)
|
|
75
|
+
await self.client.GoTo(request, timeout=timeout, metadata=md)
|
|
76
|
+
|
|
77
|
+
async def set_rpm(
|
|
78
|
+
self,
|
|
79
|
+
rpm: float,
|
|
80
|
+
*,
|
|
81
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
82
|
+
timeout: Optional[float] = None,
|
|
83
|
+
**kwargs,
|
|
84
|
+
):
|
|
85
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
86
|
+
request = SetRPMRequest(name=self.name, rpm=rpm, extra=dict_to_struct(extra))
|
|
87
|
+
await self.client.SetRPM(request, timeout=timeout, metadata=md)
|
|
75
88
|
|
|
76
89
|
async def reset_zero_position(
|
|
77
90
|
self,
|
|
@@ -79,22 +92,22 @@ class MotorClient(Motor, ReconfigurableResourceRPCClientBase):
|
|
|
79
92
|
*,
|
|
80
93
|
extra: Optional[Dict[str, Any]] = None,
|
|
81
94
|
timeout: Optional[float] = None,
|
|
95
|
+
**kwargs,
|
|
82
96
|
):
|
|
83
|
-
|
|
84
|
-
extra = {}
|
|
97
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
85
98
|
request = ResetZeroPositionRequest(name=self.name, offset=offset, extra=dict_to_struct(extra))
|
|
86
|
-
await self.client.ResetZeroPosition(request, timeout=timeout)
|
|
99
|
+
await self.client.ResetZeroPosition(request, timeout=timeout, metadata=md)
|
|
87
100
|
|
|
88
101
|
async def get_position(
|
|
89
102
|
self,
|
|
90
103
|
*,
|
|
91
104
|
extra: Optional[Dict[str, Any]] = None,
|
|
92
105
|
timeout: Optional[float] = None,
|
|
106
|
+
**kwargs,
|
|
93
107
|
) -> float:
|
|
94
|
-
|
|
95
|
-
extra = {}
|
|
108
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
96
109
|
request = GetPositionRequest(name=self.name, extra=dict_to_struct(extra))
|
|
97
|
-
response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout)
|
|
110
|
+
response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout, metadata=md)
|
|
98
111
|
return response.position
|
|
99
112
|
|
|
100
113
|
async def get_properties(
|
|
@@ -102,11 +115,11 @@ class MotorClient(Motor, ReconfigurableResourceRPCClientBase):
|
|
|
102
115
|
*,
|
|
103
116
|
extra: Optional[Dict[str, Any]] = None,
|
|
104
117
|
timeout: Optional[float] = None,
|
|
118
|
+
**kwargs,
|
|
105
119
|
) -> Motor.Properties:
|
|
106
|
-
|
|
107
|
-
extra = {}
|
|
120
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
108
121
|
request = GetPropertiesRequest(name=self.name, extra=dict_to_struct(extra))
|
|
109
|
-
response: GetPropertiesResponse = await self.client.GetProperties(request, timeout=timeout)
|
|
122
|
+
response: GetPropertiesResponse = await self.client.GetProperties(request, timeout=timeout, metadata=md)
|
|
110
123
|
return Motor.Properties(position_reporting=response.position_reporting)
|
|
111
124
|
|
|
112
125
|
async def stop(
|
|
@@ -114,32 +127,42 @@ class MotorClient(Motor, ReconfigurableResourceRPCClientBase):
|
|
|
114
127
|
*,
|
|
115
128
|
extra: Optional[Dict[str, Any]] = None,
|
|
116
129
|
timeout: Optional[float] = None,
|
|
130
|
+
**kwargs,
|
|
117
131
|
):
|
|
118
|
-
|
|
119
|
-
extra = {}
|
|
132
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
120
133
|
request = StopRequest(name=self.name, extra=dict_to_struct(extra))
|
|
121
|
-
await self.client.Stop(request, timeout=timeout)
|
|
134
|
+
await self.client.Stop(request, timeout=timeout, metadata=md)
|
|
122
135
|
|
|
123
136
|
async def is_powered(
|
|
124
137
|
self,
|
|
125
138
|
*,
|
|
126
139
|
extra: Optional[Dict[str, Any]] = None,
|
|
127
140
|
timeout: Optional[float] = None,
|
|
141
|
+
**kwargs,
|
|
128
142
|
) -> Tuple[bool, float]:
|
|
129
|
-
|
|
130
|
-
extra = {}
|
|
143
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
131
144
|
request = IsPoweredRequest(name=self.name, extra=dict_to_struct(extra))
|
|
132
|
-
response: IsPoweredResponse = await self.client.IsPowered(request, timeout=timeout)
|
|
145
|
+
response: IsPoweredResponse = await self.client.IsPowered(request, timeout=timeout, metadata=md)
|
|
133
146
|
return response.is_on, response.power_pct
|
|
134
147
|
|
|
135
|
-
async def is_moving(self, *,
|
|
136
|
-
|
|
137
|
-
extra = {}
|
|
148
|
+
async def is_moving(self, *, timeout: Optional[float] = None, **kwargs) -> bool:
|
|
149
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
138
150
|
request = IsMovingRequest(name=self.name)
|
|
139
|
-
response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout)
|
|
151
|
+
response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout, metadata=md)
|
|
140
152
|
return response.is_moving
|
|
141
153
|
|
|
142
|
-
async def do_command(
|
|
154
|
+
async def do_command(
|
|
155
|
+
self,
|
|
156
|
+
command: Mapping[str, ValueTypes],
|
|
157
|
+
*,
|
|
158
|
+
timeout: Optional[float] = None,
|
|
159
|
+
**kwargs,
|
|
160
|
+
) -> Mapping[str, ValueTypes]:
|
|
161
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
143
162
|
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
144
|
-
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
|
|
163
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
145
164
|
return struct_to_dict(response.result)
|
|
165
|
+
|
|
166
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
|
|
167
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
168
|
+
return await get_geometries(self.client, self.name, extra, timeout, md)
|