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/board/client.py
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
from datetime import timedelta
|
|
2
|
-
from multiprocessing import Queue
|
|
3
2
|
from typing import Any, Dict, List, Mapping, Optional
|
|
4
3
|
|
|
5
4
|
from google.protobuf.duration_pb2 import Duration
|
|
6
5
|
from grpclib.client import Channel
|
|
6
|
+
from grpclib.client import Stream as ClientStream
|
|
7
7
|
|
|
8
|
-
from viam.proto.common import
|
|
8
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry
|
|
9
9
|
from viam.proto.component.board import (
|
|
10
10
|
BoardServiceStub,
|
|
11
11
|
GetDigitalInterruptValueRequest,
|
|
@@ -18,31 +18,48 @@ from viam.proto.component.board import (
|
|
|
18
18
|
PWMRequest,
|
|
19
19
|
PWMResponse,
|
|
20
20
|
ReadAnalogReaderRequest,
|
|
21
|
-
ReadAnalogReaderResponse,
|
|
22
21
|
SetGPIORequest,
|
|
23
22
|
SetPowerModeRequest,
|
|
24
23
|
SetPWMFrequencyRequest,
|
|
25
24
|
SetPWMRequest,
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
StreamTicksRequest,
|
|
26
|
+
StreamTicksResponse,
|
|
27
|
+
WriteAnalogRequest,
|
|
28
28
|
)
|
|
29
|
-
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
30
|
-
from viam.
|
|
29
|
+
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase, ResourceRPCClientBase
|
|
30
|
+
from viam.streams import StreamWithIterator
|
|
31
|
+
from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
|
|
31
32
|
|
|
32
|
-
from .board import Board,
|
|
33
|
+
from .board import Board, TickStream
|
|
33
34
|
|
|
34
35
|
|
|
35
|
-
class
|
|
36
|
+
class AnalogClient(Board.Analog):
|
|
36
37
|
def __init__(self, name: str, board: "BoardClient"):
|
|
37
38
|
self.board = board
|
|
38
39
|
super().__init__(name)
|
|
39
40
|
|
|
40
|
-
async def read(
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
async def read(
|
|
42
|
+
self,
|
|
43
|
+
*,
|
|
44
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
45
|
+
timeout: Optional[float] = None,
|
|
46
|
+
**kwargs,
|
|
47
|
+
) -> Board.Analog.Value:
|
|
48
|
+
md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
|
|
43
49
|
request = ReadAnalogReaderRequest(board_name=self.board.name, analog_reader_name=self.name, extra=dict_to_struct(extra))
|
|
44
|
-
|
|
45
|
-
|
|
50
|
+
return await self.board.client.ReadAnalogReader(request, timeout=timeout, metadata=md)
|
|
51
|
+
|
|
52
|
+
async def write(
|
|
53
|
+
self,
|
|
54
|
+
value: int,
|
|
55
|
+
*,
|
|
56
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
57
|
+
timeout: Optional[float] = None,
|
|
58
|
+
**kwargs,
|
|
59
|
+
):
|
|
60
|
+
md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
|
|
61
|
+
request = WriteAnalogRequest(name=self.board.name, pin=self.name, value=value, extra=dict_to_struct(extra))
|
|
62
|
+
await self.board.client.WriteAnalog(request, timeout=timeout, metadata=md)
|
|
46
63
|
|
|
47
64
|
|
|
48
65
|
class DigitalInterruptClient(Board.DigitalInterrupt):
|
|
@@ -50,66 +67,95 @@ class DigitalInterruptClient(Board.DigitalInterrupt):
|
|
|
50
67
|
self.board = board
|
|
51
68
|
super().__init__(name)
|
|
52
69
|
|
|
53
|
-
async def value(
|
|
54
|
-
|
|
55
|
-
|
|
70
|
+
async def value(
|
|
71
|
+
self,
|
|
72
|
+
*,
|
|
73
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
74
|
+
timeout: Optional[float] = None,
|
|
75
|
+
**kwargs,
|
|
76
|
+
) -> int:
|
|
77
|
+
md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
|
|
56
78
|
request = GetDigitalInterruptValueRequest(board_name=self.board.name, digital_interrupt_name=self.name, extra=dict_to_struct(extra))
|
|
57
|
-
response: GetDigitalInterruptValueResponse = await self.board.client.GetDigitalInterruptValue(request, timeout=timeout)
|
|
79
|
+
response: GetDigitalInterruptValueResponse = await self.board.client.GetDigitalInterruptValue(request, timeout=timeout, metadata=md)
|
|
58
80
|
return response.value
|
|
59
81
|
|
|
60
|
-
async def tick(self, high: bool, nanos: int):
|
|
61
|
-
raise NotImplementedError()
|
|
62
|
-
|
|
63
|
-
async def add_callback(self, queue: Queue):
|
|
64
|
-
raise NotImplementedError()
|
|
65
|
-
|
|
66
|
-
async def add_post_processor(self, processor: PostProcessor):
|
|
67
|
-
raise NotImplementedError()
|
|
68
|
-
|
|
69
82
|
|
|
70
83
|
class GPIOPinClient(Board.GPIOPin):
|
|
71
84
|
def __init__(self, name: str, board: "BoardClient"):
|
|
72
85
|
self.board = board
|
|
73
86
|
super().__init__(name)
|
|
74
87
|
|
|
75
|
-
async def get(
|
|
76
|
-
|
|
77
|
-
|
|
88
|
+
async def get(
|
|
89
|
+
self,
|
|
90
|
+
*,
|
|
91
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
92
|
+
timeout: Optional[float] = None,
|
|
93
|
+
**kwargs,
|
|
94
|
+
) -> bool:
|
|
95
|
+
md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
|
|
78
96
|
request = GetGPIORequest(name=self.board.name, pin=self.name, extra=dict_to_struct(extra))
|
|
79
|
-
response: GetGPIOResponse = await self.board.client.GetGPIO(request, timeout=timeout)
|
|
97
|
+
response: GetGPIOResponse = await self.board.client.GetGPIO(request, timeout=timeout, metadata=md)
|
|
80
98
|
return response.high
|
|
81
99
|
|
|
82
|
-
async def set(
|
|
83
|
-
|
|
84
|
-
|
|
100
|
+
async def set(
|
|
101
|
+
self,
|
|
102
|
+
high: bool,
|
|
103
|
+
*,
|
|
104
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
105
|
+
timeout: Optional[float] = None,
|
|
106
|
+
**kwargs,
|
|
107
|
+
):
|
|
108
|
+
md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
|
|
85
109
|
request = SetGPIORequest(name=self.board.name, pin=self.name, high=high, extra=dict_to_struct(extra))
|
|
86
|
-
await self.board.client.SetGPIO(request, timeout=timeout)
|
|
110
|
+
await self.board.client.SetGPIO(request, timeout=timeout, metadata=md)
|
|
87
111
|
|
|
88
|
-
async def get_pwm(
|
|
89
|
-
|
|
90
|
-
|
|
112
|
+
async def get_pwm(
|
|
113
|
+
self,
|
|
114
|
+
*,
|
|
115
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
116
|
+
timeout: Optional[float] = None,
|
|
117
|
+
**kwargs,
|
|
118
|
+
) -> float:
|
|
119
|
+
md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
|
|
91
120
|
request = PWMRequest(name=self.board.name, pin=self.name, extra=dict_to_struct(extra))
|
|
92
|
-
response: PWMResponse = await self.board.client.PWM(request, timeout=timeout)
|
|
121
|
+
response: PWMResponse = await self.board.client.PWM(request, timeout=timeout, metadata=md)
|
|
93
122
|
return response.duty_cycle_pct
|
|
94
123
|
|
|
95
|
-
async def set_pwm(
|
|
96
|
-
|
|
97
|
-
|
|
124
|
+
async def set_pwm(
|
|
125
|
+
self,
|
|
126
|
+
duty_cycle: float,
|
|
127
|
+
*,
|
|
128
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
129
|
+
timeout: Optional[float] = None,
|
|
130
|
+
**kwargs,
|
|
131
|
+
):
|
|
132
|
+
md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
|
|
98
133
|
request = SetPWMRequest(name=self.board.name, pin=self.name, duty_cycle_pct=duty_cycle, extra=dict_to_struct(extra))
|
|
99
|
-
await self.board.client.SetPWM(request, timeout=timeout)
|
|
134
|
+
await self.board.client.SetPWM(request, timeout=timeout, metadata=md)
|
|
100
135
|
|
|
101
|
-
async def get_pwm_frequency(
|
|
102
|
-
|
|
103
|
-
|
|
136
|
+
async def get_pwm_frequency(
|
|
137
|
+
self,
|
|
138
|
+
*,
|
|
139
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
140
|
+
timeout: Optional[float] = None,
|
|
141
|
+
**kwargs,
|
|
142
|
+
) -> int:
|
|
143
|
+
md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
|
|
104
144
|
request = PWMFrequencyRequest(name=self.board.name, pin=self.name, extra=dict_to_struct(extra))
|
|
105
|
-
response: PWMFrequencyResponse = await self.board.client.PWMFrequency(request, timeout=timeout)
|
|
145
|
+
response: PWMFrequencyResponse = await self.board.client.PWMFrequency(request, timeout=timeout, metadata=md)
|
|
106
146
|
return response.frequency_hz
|
|
107
147
|
|
|
108
|
-
async def set_pwm_frequency(
|
|
109
|
-
|
|
110
|
-
|
|
148
|
+
async def set_pwm_frequency(
|
|
149
|
+
self,
|
|
150
|
+
frequency: int,
|
|
151
|
+
*,
|
|
152
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
153
|
+
timeout: Optional[float] = None,
|
|
154
|
+
**kwargs,
|
|
155
|
+
):
|
|
156
|
+
md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
|
|
111
157
|
request = SetPWMFrequencyRequest(name=self.board.name, pin=self.name, frequency_hz=frequency, extra=dict_to_struct(extra))
|
|
112
|
-
await self.board.client.SetPWMFrequency(request, timeout=timeout)
|
|
158
|
+
await self.board.client.SetPWMFrequency(request, timeout=timeout, metadata=md)
|
|
113
159
|
|
|
114
160
|
|
|
115
161
|
class BoardClient(Board, ReconfigurableResourceRPCClientBase):
|
|
@@ -117,49 +163,37 @@ class BoardClient(Board, ReconfigurableResourceRPCClientBase):
|
|
|
117
163
|
gRPC client for the Board component.
|
|
118
164
|
"""
|
|
119
165
|
|
|
166
|
+
_analog_names: List[str]
|
|
167
|
+
_digital_interrupt_names: List[str]
|
|
168
|
+
|
|
120
169
|
def __init__(self, name: str, channel: Channel):
|
|
121
170
|
self.channel = channel
|
|
122
171
|
self.client = BoardServiceStub(channel)
|
|
123
|
-
self.
|
|
124
|
-
self._digital_interrupt_names
|
|
172
|
+
self._analog_names = []
|
|
173
|
+
self._digital_interrupt_names = []
|
|
125
174
|
super().__init__(name)
|
|
126
175
|
|
|
127
|
-
async def
|
|
128
|
-
|
|
176
|
+
async def analog_by_name(self, name: str) -> Board.Analog:
|
|
177
|
+
self._analog_names.append(name)
|
|
178
|
+
return AnalogClient(name, self)
|
|
129
179
|
|
|
130
180
|
async def digital_interrupt_by_name(self, name: str) -> Board.DigitalInterrupt:
|
|
181
|
+
self._digital_interrupt_names.append(name)
|
|
131
182
|
return DigitalInterruptClient(name, self)
|
|
132
183
|
|
|
133
184
|
async def gpio_pin_by_name(self, name: str) -> Board.GPIOPin:
|
|
134
185
|
return GPIOPinClient(name, self)
|
|
135
186
|
|
|
136
|
-
async def
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
if self._digital_interrupt_names is None:
|
|
145
|
-
status = await self.status()
|
|
146
|
-
names = [name for name in status.digital_interrupts.keys()]
|
|
147
|
-
self._digital_interrupt_names = names
|
|
148
|
-
return self._digital_interrupt_names
|
|
149
|
-
|
|
150
|
-
async def status(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> BoardStatus:
|
|
151
|
-
if extra is None:
|
|
152
|
-
extra = {}
|
|
153
|
-
request = StatusRequest(name=self.name, extra=dict_to_struct(extra))
|
|
154
|
-
response: StatusResponse = await self.client.Status(request, timeout=timeout)
|
|
155
|
-
return response.status
|
|
156
|
-
|
|
157
|
-
async def model_attributes(self) -> Board.Attributes:
|
|
158
|
-
return Board.Attributes(remote=True)
|
|
159
|
-
|
|
160
|
-
async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None) -> Mapping[str, ValueTypes]:
|
|
187
|
+
async def do_command(
|
|
188
|
+
self,
|
|
189
|
+
command: Mapping[str, ValueTypes],
|
|
190
|
+
*,
|
|
191
|
+
timeout: Optional[float] = None,
|
|
192
|
+
**kwargs,
|
|
193
|
+
) -> Mapping[str, ValueTypes]:
|
|
194
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
161
195
|
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
162
|
-
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
|
|
196
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
163
197
|
return struct_to_dict(response.result)
|
|
164
198
|
|
|
165
199
|
async def set_power_mode(
|
|
@@ -167,10 +201,42 @@ class BoardClient(Board, ReconfigurableResourceRPCClientBase):
|
|
|
167
201
|
mode: PowerMode.ValueType,
|
|
168
202
|
duration: Optional[timedelta] = None,
|
|
169
203
|
*,
|
|
204
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
170
205
|
timeout: Optional[float] = None,
|
|
206
|
+
**kwargs,
|
|
171
207
|
):
|
|
208
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
172
209
|
duration_pb: Optional[Duration] = None
|
|
173
210
|
if duration is not None:
|
|
174
211
|
duration_pb = [(d, d.FromTimedelta(duration)) for d in [Duration()]][0][0]
|
|
175
|
-
request = SetPowerModeRequest(name=self.name, power_mode=mode, duration=duration_pb)
|
|
176
|
-
await self.client.SetPowerMode(request, timeout=timeout)
|
|
212
|
+
request = SetPowerModeRequest(name=self.name, power_mode=mode, duration=duration_pb, extra=dict_to_struct(extra))
|
|
213
|
+
await self.client.SetPowerMode(request, timeout=timeout, metadata=md)
|
|
214
|
+
|
|
215
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
|
|
216
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
217
|
+
return await get_geometries(self.client, self.name, extra, timeout, md)
|
|
218
|
+
|
|
219
|
+
async def stream_ticks(
|
|
220
|
+
self,
|
|
221
|
+
interrupts: List[Board.DigitalInterrupt],
|
|
222
|
+
*,
|
|
223
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
224
|
+
**kwargs,
|
|
225
|
+
) -> TickStream:
|
|
226
|
+
names = []
|
|
227
|
+
for di in interrupts:
|
|
228
|
+
names.append(di.name)
|
|
229
|
+
request = StreamTicksRequest(name=self.name, pin_names=names, extra=dict_to_struct(extra))
|
|
230
|
+
|
|
231
|
+
async def read():
|
|
232
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
233
|
+
tick_stream: ClientStream[StreamTicksRequest, StreamTicksResponse]
|
|
234
|
+
async with self.client.StreamTicks.open(metadata=md) as tick_stream:
|
|
235
|
+
try:
|
|
236
|
+
await tick_stream.send_message(request, end=True)
|
|
237
|
+
async for tick in tick_stream:
|
|
238
|
+
yield tick
|
|
239
|
+
except Exception as e:
|
|
240
|
+
raise (e)
|
|
241
|
+
|
|
242
|
+
return StreamWithIterator(read())
|
viam/components/board/service.py
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
from grpclib.server import Stream
|
|
2
|
+
from h2.exceptions import StreamClosedError
|
|
2
3
|
|
|
3
4
|
from viam.errors import ResourceNotFoundError
|
|
4
|
-
from viam.
|
|
5
|
+
from viam.logging import getLogger
|
|
6
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse
|
|
5
7
|
from viam.proto.component.board import (
|
|
6
8
|
BoardServiceBase,
|
|
7
9
|
GetDigitalInterruptValueRequest,
|
|
@@ -22,14 +24,18 @@ from viam.proto.component.board import (
|
|
|
22
24
|
SetPWMFrequencyResponse,
|
|
23
25
|
SetPWMRequest,
|
|
24
26
|
SetPWMResponse,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
+
StreamTicksRequest,
|
|
28
|
+
StreamTicksResponse,
|
|
29
|
+
WriteAnalogRequest,
|
|
30
|
+
WriteAnalogResponse,
|
|
27
31
|
)
|
|
28
32
|
from viam.resource.rpc_service_base import ResourceRPCServiceBase
|
|
29
33
|
from viam.utils import dict_to_struct, struct_to_dict
|
|
30
34
|
|
|
31
35
|
from .board import Board
|
|
32
36
|
|
|
37
|
+
LOGGER = getLogger(__name__)
|
|
38
|
+
|
|
33
39
|
|
|
34
40
|
class BoardRPCService(BoardServiceBase, ResourceRPCServiceBase[Board]):
|
|
35
41
|
"""
|
|
@@ -38,25 +44,12 @@ class BoardRPCService(BoardServiceBase, ResourceRPCServiceBase[Board]):
|
|
|
38
44
|
|
|
39
45
|
RESOURCE_TYPE = Board
|
|
40
46
|
|
|
41
|
-
async def Status(self, stream: Stream[StatusRequest, StatusResponse]) -> None:
|
|
42
|
-
request = await stream.recv_message()
|
|
43
|
-
assert request is not None
|
|
44
|
-
name = request.name
|
|
45
|
-
try:
|
|
46
|
-
board = self.get_resource(name)
|
|
47
|
-
except ResourceNotFoundError as e:
|
|
48
|
-
raise e.grpc_error
|
|
49
|
-
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
50
|
-
status = await board.status(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
51
|
-
response = StatusResponse(status=status)
|
|
52
|
-
await stream.send_message(response)
|
|
53
|
-
|
|
54
47
|
async def SetGPIO(self, stream: Stream[SetGPIORequest, SetGPIOResponse]) -> None:
|
|
55
48
|
request = await stream.recv_message()
|
|
56
49
|
assert request is not None
|
|
57
50
|
name = request.name
|
|
51
|
+
board = self.get_resource(name)
|
|
58
52
|
try:
|
|
59
|
-
board = self.get_resource(name)
|
|
60
53
|
pin = await board.gpio_pin_by_name(request.pin)
|
|
61
54
|
except ResourceNotFoundError as e:
|
|
62
55
|
raise e.grpc_error
|
|
@@ -69,8 +62,8 @@ class BoardRPCService(BoardServiceBase, ResourceRPCServiceBase[Board]):
|
|
|
69
62
|
request = await stream.recv_message()
|
|
70
63
|
assert request is not None
|
|
71
64
|
name = request.name
|
|
65
|
+
board = self.get_resource(name)
|
|
72
66
|
try:
|
|
73
|
-
board = self.get_resource(name)
|
|
74
67
|
pin = await board.gpio_pin_by_name(request.pin)
|
|
75
68
|
except ResourceNotFoundError as e:
|
|
76
69
|
raise e.grpc_error
|
|
@@ -83,8 +76,8 @@ class BoardRPCService(BoardServiceBase, ResourceRPCServiceBase[Board]):
|
|
|
83
76
|
request = await stream.recv_message()
|
|
84
77
|
assert request is not None
|
|
85
78
|
name = request.name
|
|
79
|
+
board = self.get_resource(name)
|
|
86
80
|
try:
|
|
87
|
-
board = self.get_resource(name)
|
|
88
81
|
pin = await board.gpio_pin_by_name(request.pin)
|
|
89
82
|
except ResourceNotFoundError as e:
|
|
90
83
|
raise e.grpc_error
|
|
@@ -97,8 +90,8 @@ class BoardRPCService(BoardServiceBase, ResourceRPCServiceBase[Board]):
|
|
|
97
90
|
request = await stream.recv_message()
|
|
98
91
|
assert request is not None
|
|
99
92
|
name = request.name
|
|
93
|
+
board = self.get_resource(name)
|
|
100
94
|
try:
|
|
101
|
-
board = self.get_resource(name)
|
|
102
95
|
pin = await board.gpio_pin_by_name(request.pin)
|
|
103
96
|
except ResourceNotFoundError as e:
|
|
104
97
|
raise e.grpc_error
|
|
@@ -111,8 +104,8 @@ class BoardRPCService(BoardServiceBase, ResourceRPCServiceBase[Board]):
|
|
|
111
104
|
request = await stream.recv_message()
|
|
112
105
|
assert request is not None
|
|
113
106
|
name = request.name
|
|
107
|
+
board = self.get_resource(name)
|
|
114
108
|
try:
|
|
115
|
-
board = self.get_resource(name)
|
|
116
109
|
pin = await board.gpio_pin_by_name(request.pin)
|
|
117
110
|
except ResourceNotFoundError as e:
|
|
118
111
|
raise e.grpc_error
|
|
@@ -125,8 +118,8 @@ class BoardRPCService(BoardServiceBase, ResourceRPCServiceBase[Board]):
|
|
|
125
118
|
request = await stream.recv_message()
|
|
126
119
|
assert request is not None
|
|
127
120
|
name = request.name
|
|
121
|
+
board = self.get_resource(name)
|
|
128
122
|
try:
|
|
129
|
-
board = self.get_resource(name)
|
|
130
123
|
pin = await board.gpio_pin_by_name(request.pin)
|
|
131
124
|
except ResourceNotFoundError as e:
|
|
132
125
|
raise e.grpc_error
|
|
@@ -139,22 +132,21 @@ class BoardRPCService(BoardServiceBase, ResourceRPCServiceBase[Board]):
|
|
|
139
132
|
request = await stream.recv_message()
|
|
140
133
|
assert request is not None
|
|
141
134
|
name = request.board_name
|
|
135
|
+
board = self.get_resource(name)
|
|
142
136
|
try:
|
|
143
|
-
|
|
144
|
-
analog_reader = await board.analog_reader_by_name(request.analog_reader_name)
|
|
137
|
+
analog_reader = await board.analog_by_name(request.analog_reader_name)
|
|
145
138
|
except ResourceNotFoundError as e:
|
|
146
139
|
raise e.grpc_error
|
|
147
140
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
148
|
-
|
|
149
|
-
response = ReadAnalogReaderResponse(value=value)
|
|
141
|
+
response = await analog_reader.read(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
150
142
|
await stream.send_message(response)
|
|
151
143
|
|
|
152
144
|
async def GetDigitalInterruptValue(self, stream: Stream[GetDigitalInterruptValueRequest, GetDigitalInterruptValueResponse]) -> None:
|
|
153
145
|
request = await stream.recv_message()
|
|
154
146
|
assert request is not None
|
|
155
147
|
name = request.board_name
|
|
148
|
+
board = self.get_resource(name)
|
|
156
149
|
try:
|
|
157
|
-
board = self.get_resource(name)
|
|
158
150
|
interrupt = await board.digital_interrupt_by_name(request.digital_interrupt_name)
|
|
159
151
|
except ResourceNotFoundError as e:
|
|
160
152
|
raise e.grpc_error
|
|
@@ -167,28 +159,66 @@ class BoardRPCService(BoardServiceBase, ResourceRPCServiceBase[Board]):
|
|
|
167
159
|
request = await stream.recv_message()
|
|
168
160
|
assert request is not None
|
|
169
161
|
name = request.name
|
|
170
|
-
|
|
171
|
-
board = self.get_resource(name)
|
|
172
|
-
except ResourceNotFoundError as e:
|
|
173
|
-
raise e.grpc_error
|
|
162
|
+
board = self.get_resource(name)
|
|
174
163
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
175
164
|
await board.set_power_mode(
|
|
176
165
|
mode=request.power_mode,
|
|
177
166
|
duration=request.duration.ToTimedelta(),
|
|
167
|
+
extra=struct_to_dict(request.extra),
|
|
178
168
|
timeout=timeout,
|
|
179
169
|
metadata=stream.metadata,
|
|
180
170
|
)
|
|
181
171
|
response = SetPowerModeResponse()
|
|
182
172
|
await stream.send_message(response)
|
|
183
173
|
|
|
184
|
-
async def
|
|
174
|
+
async def WriteAnalog(self, stream: Stream[WriteAnalogRequest, WriteAnalogResponse]) -> None:
|
|
185
175
|
request = await stream.recv_message()
|
|
186
176
|
assert request is not None
|
|
177
|
+
name = request.name
|
|
178
|
+
board = self.get_resource(name)
|
|
187
179
|
try:
|
|
188
|
-
|
|
180
|
+
analog_writer = await board.analog_by_name(request.pin)
|
|
189
181
|
except ResourceNotFoundError as e:
|
|
190
182
|
raise e.grpc_error
|
|
191
183
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
184
|
+
await analog_writer.write(value=request.value, timeout=timeout, metadata=stream.metadata, extra=struct_to_dict(request.extra))
|
|
185
|
+
response = WriteAnalogResponse()
|
|
186
|
+
await stream.send_message(response)
|
|
187
|
+
|
|
188
|
+
async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
|
|
189
|
+
request = await stream.recv_message()
|
|
190
|
+
assert request is not None
|
|
191
|
+
board = self.get_resource(request.name)
|
|
192
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
192
193
|
result = await board.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
|
|
193
194
|
response = DoCommandResponse(result=dict_to_struct(result))
|
|
194
195
|
await stream.send_message(response)
|
|
196
|
+
|
|
197
|
+
async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
|
|
198
|
+
request = await stream.recv_message()
|
|
199
|
+
assert request is not None
|
|
200
|
+
arm = self.get_resource(request.name)
|
|
201
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
202
|
+
geometries = await arm.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
|
|
203
|
+
response = GetGeometriesResponse(geometries=geometries)
|
|
204
|
+
await stream.send_message(response)
|
|
205
|
+
|
|
206
|
+
async def StreamTicks(self, stream: Stream[StreamTicksRequest, StreamTicksResponse]) -> None:
|
|
207
|
+
request = await stream.recv_message()
|
|
208
|
+
assert request is not None
|
|
209
|
+
name = request.name
|
|
210
|
+
board = self.get_resource(name)
|
|
211
|
+
|
|
212
|
+
dis = []
|
|
213
|
+
for name in request.pin_names:
|
|
214
|
+
dis.append(await board.digital_interrupt_by_name(name))
|
|
215
|
+
|
|
216
|
+
tick_stream = await board.stream_ticks(interrupts=dis, metadata=stream.metadata)
|
|
217
|
+
async for tick in tick_stream:
|
|
218
|
+
try:
|
|
219
|
+
await stream.send_message(tick)
|
|
220
|
+
except StreamClosedError:
|
|
221
|
+
return
|
|
222
|
+
except Exception as e:
|
|
223
|
+
LOGGER.error(e)
|
|
224
|
+
return
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import viam.gen.component.button.v1.button_pb2
|
|
2
|
+
from viam.resource.registry import Registry, ResourceRegistration
|
|
3
|
+
|
|
4
|
+
from .button import Button
|
|
5
|
+
from .client import ButtonClient
|
|
6
|
+
from .service import ButtonRPCService
|
|
7
|
+
|
|
8
|
+
__all__ = ["Button"]
|
|
9
|
+
|
|
10
|
+
Registry.register_api(ResourceRegistration(Button, ButtonRPCService, lambda name, channel: ButtonClient(name, channel)))
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import abc
|
|
2
|
+
from typing import Any, Final, Mapping, Optional
|
|
3
|
+
|
|
4
|
+
from viam.components.component_base import ComponentBase
|
|
5
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Button(ComponentBase):
|
|
9
|
+
"""
|
|
10
|
+
Button represents a device that can be pushed.
|
|
11
|
+
|
|
12
|
+
This acts as an abstract base class for any drivers representing specific
|
|
13
|
+
button implementations. This cannot be used on its own. If the ``__init__()`` function is
|
|
14
|
+
overridden, it must call the ``super().__init__()`` function.
|
|
15
|
+
|
|
16
|
+
::
|
|
17
|
+
|
|
18
|
+
from viam.components.button import Button
|
|
19
|
+
|
|
20
|
+
For more information, see `Button component <https://docs.viam.com/dev/reference/apis/components/button/>` _.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
24
|
+
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "button"
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
@abc.abstractmethod
|
|
28
|
+
async def push(self, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> None:
|
|
29
|
+
"""
|
|
30
|
+
Push the button.
|
|
31
|
+
|
|
32
|
+
::
|
|
33
|
+
|
|
34
|
+
my_button = Button.from_robot(robot=machine, name="my_button")
|
|
35
|
+
|
|
36
|
+
# Push the button
|
|
37
|
+
await my_button.push()
|
|
38
|
+
|
|
39
|
+
For more information, see `Button component <https://docs.viam.com/dev/reference/apis/components/button/>` _.
|
|
40
|
+
"""
|
|
41
|
+
...
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
from typing import Any, Mapping, Optional
|
|
2
|
+
|
|
3
|
+
from grpclib.client import Channel
|
|
4
|
+
|
|
5
|
+
from viam.gen.component.button.v1.button_pb2 import PushRequest
|
|
6
|
+
from viam.proto.common import (
|
|
7
|
+
DoCommandRequest,
|
|
8
|
+
DoCommandResponse,
|
|
9
|
+
)
|
|
10
|
+
from viam.proto.component.button import ButtonServiceStub
|
|
11
|
+
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
12
|
+
from viam.utils import (
|
|
13
|
+
ValueTypes,
|
|
14
|
+
dict_to_struct,
|
|
15
|
+
struct_to_dict,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
from .button import Button
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ButtonClient(Button, ReconfigurableResourceRPCClientBase):
|
|
22
|
+
"""
|
|
23
|
+
gRPC client for Button component
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def __init__(self, name: str, channel: Channel):
|
|
27
|
+
self.channel = channel
|
|
28
|
+
self.client = ButtonServiceStub(channel)
|
|
29
|
+
super().__init__(name)
|
|
30
|
+
|
|
31
|
+
async def push(
|
|
32
|
+
self,
|
|
33
|
+
*,
|
|
34
|
+
extra: Optional[Mapping[str, Any]] = None,
|
|
35
|
+
timeout: Optional[float] = None,
|
|
36
|
+
**kwargs,
|
|
37
|
+
) -> None:
|
|
38
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
39
|
+
request = PushRequest(name=self.name, extra=dict_to_struct(extra))
|
|
40
|
+
await self.client.Push(request, timeout=timeout, metadata=md)
|
|
41
|
+
|
|
42
|
+
async def do_command(
|
|
43
|
+
self,
|
|
44
|
+
command: Mapping[str, ValueTypes],
|
|
45
|
+
*,
|
|
46
|
+
timeout: Optional[float] = None,
|
|
47
|
+
**kwargs,
|
|
48
|
+
) -> Mapping[str, ValueTypes]:
|
|
49
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
50
|
+
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
51
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
52
|
+
return struct_to_dict(response.result)
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
from grpclib.server import Stream
|
|
2
|
+
|
|
3
|
+
from viam.gen.component.button.v1.button_pb2 import (
|
|
4
|
+
PushRequest,
|
|
5
|
+
PushResponse,
|
|
6
|
+
)
|
|
7
|
+
from viam.proto.common import (
|
|
8
|
+
DoCommandRequest,
|
|
9
|
+
DoCommandResponse,
|
|
10
|
+
)
|
|
11
|
+
from viam.proto.component.button import ButtonServiceBase
|
|
12
|
+
from viam.resource.rpc_service_base import ResourceRPCServiceBase
|
|
13
|
+
from viam.utils import dict_to_struct, struct_to_dict
|
|
14
|
+
|
|
15
|
+
from .button import Button
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class ButtonRPCService(ButtonServiceBase, ResourceRPCServiceBase[Button]):
|
|
19
|
+
"""
|
|
20
|
+
gRPC Service for a generic Button
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
RESOURCE_TYPE = Button
|
|
24
|
+
|
|
25
|
+
async def Push(self, stream: Stream[PushRequest, PushResponse]) -> None:
|
|
26
|
+
request = await stream.recv_message()
|
|
27
|
+
assert request is not None
|
|
28
|
+
name = request.name
|
|
29
|
+
button = self.get_resource(name)
|
|
30
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
31
|
+
await button.push(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
32
|
+
await stream.send_message(PushResponse())
|
|
33
|
+
|
|
34
|
+
async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
|
|
35
|
+
request = await stream.recv_message()
|
|
36
|
+
assert request is not None
|
|
37
|
+
name = request.name
|
|
38
|
+
button = self.get_resource(name)
|
|
39
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
40
|
+
result = await button.do_command(
|
|
41
|
+
command=struct_to_dict(request.command),
|
|
42
|
+
timeout=timeout,
|
|
43
|
+
metadata=stream.metadata,
|
|
44
|
+
)
|
|
45
|
+
response = DoCommandResponse(result=dict_to_struct(result))
|
|
46
|
+
await stream.send_message(response)
|