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/resource/registry.py
CHANGED
|
@@ -1,26 +1,20 @@
|
|
|
1
1
|
from dataclasses import dataclass
|
|
2
2
|
from threading import Lock
|
|
3
|
-
from typing import TYPE_CHECKING,
|
|
3
|
+
from typing import TYPE_CHECKING, Callable, ClassVar, Dict, Generic, Mapping, Type, TypeVar
|
|
4
4
|
|
|
5
|
-
from google.protobuf.struct_pb2 import Struct
|
|
6
5
|
from grpclib.client import Channel
|
|
7
6
|
|
|
8
7
|
from viam.errors import DuplicateResourceError, ResourceNotFoundError, ValidationError
|
|
9
|
-
from viam.proto.robot import Status
|
|
10
8
|
|
|
11
9
|
from .base import ResourceBase
|
|
12
10
|
|
|
13
11
|
if TYPE_CHECKING:
|
|
14
12
|
from .rpc_service_base import ResourceRPCServiceBase
|
|
15
|
-
from .types import Model, ResourceCreator,
|
|
13
|
+
from .types import API, Model, ResourceCreator, Validator
|
|
16
14
|
|
|
17
15
|
Resource = TypeVar("Resource", bound=ResourceBase)
|
|
18
16
|
|
|
19
17
|
|
|
20
|
-
async def default_create_status(resource: ResourceBase) -> Status:
|
|
21
|
-
return Status(name=resource.get_resource_name(resource.name), status=Struct())
|
|
22
|
-
|
|
23
|
-
|
|
24
18
|
@dataclass
|
|
25
19
|
class ResourceCreatorRegistration:
|
|
26
20
|
"""An object representing a resource creator to be registered.
|
|
@@ -33,7 +27,7 @@ class ResourceCreatorRegistration:
|
|
|
33
27
|
"""A function that can create a resource given a mapping of dependencies (``ResourceName`` to ``ResourceBase``
|
|
34
28
|
"""
|
|
35
29
|
|
|
36
|
-
validator: "Validator" = lambda x: []
|
|
30
|
+
validator: "Validator" = lambda x: ([], [])
|
|
37
31
|
"""A function that can validate a resource and return implicit dependencies.
|
|
38
32
|
|
|
39
33
|
If called without a validator function, default to a function returning an empty Sequence
|
|
@@ -63,12 +57,6 @@ class ResourceRegistration(Generic[Resource]):
|
|
|
63
57
|
"""A function that will create the RPC client for this resource
|
|
64
58
|
"""
|
|
65
59
|
|
|
66
|
-
create_status: Callable[[Resource], Coroutine[Any, Any, Status]] = default_create_status
|
|
67
|
-
"""A function to create a Status object for this resource.
|
|
68
|
-
|
|
69
|
-
If the resource does not provide a custom status type, the default implementation can be used.
|
|
70
|
-
"""
|
|
71
|
-
|
|
72
60
|
|
|
73
61
|
class Registry:
|
|
74
62
|
"""The global registry of robotic parts.
|
|
@@ -76,50 +64,50 @@ class Registry:
|
|
|
76
64
|
**NB** The Registry should almost never be used directly
|
|
77
65
|
|
|
78
66
|
The Registry keeps track of the types of Resources that are available on robots using this SDK. All the base resource types are
|
|
79
|
-
pre-registered (
|
|
67
|
+
pre-registered (for example Arm, Motor).
|
|
80
68
|
|
|
81
69
|
If you create a new resource type that is not an extension of any of the existing base resource types, then you must register said
|
|
82
70
|
resource using ``Registry.register(...)``.
|
|
83
71
|
"""
|
|
84
72
|
|
|
85
|
-
|
|
73
|
+
_APIS: ClassVar[Dict["API", ResourceRegistration]] = {}
|
|
86
74
|
_RESOURCES: ClassVar[Dict[str, ResourceCreatorRegistration]] = {}
|
|
87
75
|
_lock: ClassVar[Lock] = Lock()
|
|
88
76
|
|
|
89
77
|
@classmethod
|
|
90
|
-
def
|
|
91
|
-
"""Register a
|
|
78
|
+
def register_api(cls, registration: ResourceRegistration[Resource]):
|
|
79
|
+
"""Register a API with the Registry
|
|
92
80
|
|
|
93
81
|
Args:
|
|
94
|
-
registration (ResourceRegistration): Object containing registration data for the
|
|
82
|
+
registration (ResourceRegistration): Object containing registration data for the API
|
|
95
83
|
|
|
96
84
|
Raises:
|
|
97
|
-
DuplicateResourceError: Raised if the
|
|
85
|
+
DuplicateResourceError: Raised if the API to register is already in the registry
|
|
98
86
|
ValidationError: Raised if registration is missing any necessary parameters
|
|
99
87
|
"""
|
|
100
88
|
with cls._lock:
|
|
101
|
-
if registration.resource_type.
|
|
102
|
-
raise DuplicateResourceError(str(registration.resource_type.
|
|
89
|
+
if registration.resource_type.API in cls._APIS:
|
|
90
|
+
raise DuplicateResourceError(str(registration.resource_type.API))
|
|
103
91
|
|
|
104
92
|
if registration.resource_type and registration.rpc_service and registration.create_rpc_client:
|
|
105
|
-
cls.
|
|
93
|
+
cls._APIS[registration.resource_type.API] = registration
|
|
106
94
|
else:
|
|
107
95
|
raise ValidationError("Passed resource registration does not have correct parameters")
|
|
108
96
|
|
|
109
97
|
@classmethod
|
|
110
|
-
def register_resource_creator(cls,
|
|
111
|
-
"""Register a specific ``Model`` and validator function for the specific resource ``
|
|
98
|
+
def register_resource_creator(cls, api: "API", model: "Model", registration: ResourceCreatorRegistration):
|
|
99
|
+
"""Register a specific ``Model`` and validator function for the specific resource ``API`` with the Registry
|
|
112
100
|
|
|
113
101
|
Args:
|
|
114
|
-
|
|
102
|
+
api (API): The API of the resource
|
|
115
103
|
model (Model): The Model of the resource
|
|
116
104
|
registration (ResourceCreatorRegistration): The registration functions of the model
|
|
117
105
|
|
|
118
106
|
Raises:
|
|
119
|
-
DuplicateResourceError: Raised if the
|
|
107
|
+
DuplicateResourceError: Raised if the API and Model pairing is already registered
|
|
120
108
|
ValidationError: Raised if registration does not have creator
|
|
121
109
|
"""
|
|
122
|
-
key = f"{
|
|
110
|
+
key = f"{api}/{model}"
|
|
123
111
|
with cls._lock:
|
|
124
112
|
if key in cls._RESOURCES:
|
|
125
113
|
raise DuplicateResourceError(key)
|
|
@@ -130,78 +118,78 @@ class Registry:
|
|
|
130
118
|
raise ValidationError("A creator function was not provided")
|
|
131
119
|
|
|
132
120
|
@classmethod
|
|
133
|
-
def
|
|
134
|
-
"""Lookup and retrieve a registered
|
|
121
|
+
def lookup_api(cls, api: "API") -> ResourceRegistration:
|
|
122
|
+
"""Lookup and retrieve a registered API by its name
|
|
135
123
|
|
|
136
124
|
Args:
|
|
137
|
-
|
|
125
|
+
api (str): The API of the resource
|
|
138
126
|
|
|
139
127
|
Raises:
|
|
140
|
-
ResourceNotFoundError: Raised if the
|
|
128
|
+
ResourceNotFoundError: Raised if the API is not registered
|
|
141
129
|
|
|
142
130
|
Returns:
|
|
143
131
|
ResourceRegistration: The registration object of the resource
|
|
144
132
|
"""
|
|
145
133
|
with cls._lock:
|
|
146
134
|
try:
|
|
147
|
-
return cls.
|
|
135
|
+
return cls._APIS[api]
|
|
148
136
|
except KeyError:
|
|
149
|
-
raise ResourceNotFoundError(
|
|
137
|
+
raise ResourceNotFoundError(api.resource_type, api.resource_subtype)
|
|
150
138
|
|
|
151
139
|
@classmethod
|
|
152
|
-
def lookup_resource_creator(cls,
|
|
153
|
-
"""Lookup and retrieve a registered resource creator by its
|
|
140
|
+
def lookup_resource_creator(cls, api: "API", model: "Model") -> "ResourceCreator":
|
|
141
|
+
"""Lookup and retrieve a registered resource creator by its API and model
|
|
154
142
|
|
|
155
143
|
Args:
|
|
156
|
-
|
|
144
|
+
api (API): The API of the resource
|
|
157
145
|
model (Model): The Model of the resource
|
|
158
146
|
|
|
159
147
|
Raises:
|
|
160
|
-
ResourceNotFoundError: Raised if the
|
|
148
|
+
ResourceNotFoundError: Raised if the API Model pairing is not registered
|
|
161
149
|
|
|
162
150
|
Returns:
|
|
163
151
|
ResourceCreator: The function to create the resource
|
|
164
152
|
"""
|
|
165
153
|
with cls._lock:
|
|
166
154
|
try:
|
|
167
|
-
return cls._RESOURCES[f"{
|
|
155
|
+
return cls._RESOURCES[f"{api}/{model}"].creator
|
|
168
156
|
except KeyError:
|
|
169
|
-
raise ResourceNotFoundError(
|
|
157
|
+
raise ResourceNotFoundError(api.resource_type, api.resource_subtype)
|
|
170
158
|
|
|
171
159
|
@classmethod
|
|
172
|
-
def lookup_validator(cls,
|
|
173
|
-
"""Lookup and retrieve a registered validator function by its
|
|
160
|
+
def lookup_validator(cls, api: "API", model: "Model") -> "Validator":
|
|
161
|
+
"""Lookup and retrieve a registered validator function by its API and model. If there is none, return None
|
|
174
162
|
|
|
175
163
|
Args:
|
|
176
|
-
|
|
164
|
+
api (API): The API of the resource
|
|
177
165
|
model (Model): The Model of the resource
|
|
178
166
|
|
|
179
167
|
Returns:
|
|
180
168
|
Validator: The function to validate the resource
|
|
181
169
|
"""
|
|
182
170
|
try:
|
|
183
|
-
return cls._RESOURCES[f"{
|
|
171
|
+
return cls._RESOURCES[f"{api}/{model}"].validator
|
|
184
172
|
except AttributeError:
|
|
185
|
-
return lambda x: []
|
|
173
|
+
return lambda x: ([], [])
|
|
186
174
|
except KeyError:
|
|
187
|
-
raise ResourceNotFoundError(
|
|
175
|
+
raise ResourceNotFoundError(api.resource_type, api.resource_subtype)
|
|
188
176
|
|
|
189
177
|
@classmethod
|
|
190
|
-
def
|
|
178
|
+
def REGISTERED_APIS(cls) -> Mapping["API", ResourceRegistration]:
|
|
191
179
|
"""The dictionary of all registered resources
|
|
192
|
-
- Key:
|
|
180
|
+
- Key: API of the resource
|
|
193
181
|
- Value: The registration object for the resource
|
|
194
182
|
|
|
195
183
|
Returns:
|
|
196
|
-
Mapping[
|
|
184
|
+
Mapping[API, ResourceRegistration]: All registered resources
|
|
197
185
|
"""
|
|
198
186
|
with cls._lock:
|
|
199
|
-
return cls.
|
|
187
|
+
return cls._APIS.copy()
|
|
200
188
|
|
|
201
189
|
@classmethod
|
|
202
190
|
def REGISTERED_RESOURCE_CREATORS(cls) -> Mapping[str, "ResourceCreatorRegistration"]:
|
|
203
191
|
"""The dictionary of all registered resources
|
|
204
|
-
- Key:
|
|
192
|
+
- Key: API/model
|
|
205
193
|
- Value: The ResourceCreatorRegistration for the resource
|
|
206
194
|
|
|
207
195
|
Returns:
|
viam/resource/rpc_client_base.py
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
from
|
|
1
|
+
from random import choice
|
|
2
|
+
from string import ascii_lowercase
|
|
3
|
+
from typing import Any, Dict, Protocol, runtime_checkable
|
|
2
4
|
|
|
3
5
|
from grpclib.client import Channel
|
|
4
6
|
|
|
@@ -12,6 +14,36 @@ class ResourceRPCClientBase(Protocol):
|
|
|
12
14
|
Resource RPC clients must inherit from this class
|
|
13
15
|
"""
|
|
14
16
|
|
|
17
|
+
class Metadata:
|
|
18
|
+
metadata: Dict[str, str] = {}
|
|
19
|
+
|
|
20
|
+
def enable_debug_logging(self, key: str = ""):
|
|
21
|
+
"""Enables server-side debug logging for resource methods.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
key (str): The key to associate debug logs with. If not provided, will default to a randomly generated string value.
|
|
25
|
+
"""
|
|
26
|
+
if key == "":
|
|
27
|
+
key = "".join(choice(ascii_lowercase) for i in range(6))
|
|
28
|
+
self.metadata["dtname"] = key
|
|
29
|
+
|
|
30
|
+
def disable_debug_logging(self):
|
|
31
|
+
"""Disables server-side debug logging for resource methods."""
|
|
32
|
+
del self.metadata["dtname"]
|
|
33
|
+
|
|
34
|
+
def add_metadata(self, key: str, value: str):
|
|
35
|
+
"""Adds a key-value pair to the metadata"""
|
|
36
|
+
self.metadata[key] = value
|
|
37
|
+
|
|
38
|
+
def delete_metadata(self, key: str):
|
|
39
|
+
"""Removes a key-value pair from the metadata by key"""
|
|
40
|
+
del self.metadata[key]
|
|
41
|
+
|
|
42
|
+
@property
|
|
43
|
+
def proto(self):
|
|
44
|
+
"""Returns metadata in a gRPC-appropriate form"""
|
|
45
|
+
return [(k, v) for k, v in self.metadata.items()]
|
|
46
|
+
|
|
15
47
|
channel: Channel
|
|
16
48
|
client: Any
|
|
17
49
|
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import abc
|
|
2
|
-
from typing import Generic, Type
|
|
2
|
+
from typing import TYPE_CHECKING, Generic, Type
|
|
3
3
|
|
|
4
4
|
from viam.components.component_base import ComponentBase
|
|
5
|
-
from viam.
|
|
5
|
+
from viam.errors import ResourceNotFoundError
|
|
6
|
+
from viam.resource.manager import ResourceType
|
|
6
7
|
from viam.rpc.types import RPCServiceBase
|
|
7
8
|
from viam.services.service_base import ServiceBase
|
|
8
9
|
|
|
9
10
|
from .base import ResourceBase
|
|
10
11
|
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from viam.resource.manager import ResourceManager
|
|
14
|
+
|
|
11
15
|
|
|
12
16
|
class ResourceRPCServiceBase(abc.ABC, RPCServiceBase, Generic[ResourceType]):
|
|
13
17
|
"""
|
|
@@ -16,9 +20,9 @@ class ResourceRPCServiceBase(abc.ABC, RPCServiceBase, Generic[ResourceType]):
|
|
|
16
20
|
"""
|
|
17
21
|
|
|
18
22
|
RESOURCE_TYPE = Type
|
|
19
|
-
manager: ResourceManager
|
|
23
|
+
manager: "ResourceManager"
|
|
20
24
|
|
|
21
|
-
def __init__(self, manager: ResourceManager):
|
|
25
|
+
def __init__(self, manager: "ResourceManager"):
|
|
22
26
|
self.manager = manager
|
|
23
27
|
|
|
24
28
|
def get_resource(self, name: str) -> ResourceType:
|
|
@@ -31,11 +35,14 @@ class ResourceRPCServiceBase(abc.ABC, RPCServiceBase, Generic[ResourceType]):
|
|
|
31
35
|
name (str): Name of the resource
|
|
32
36
|
|
|
33
37
|
Raises:
|
|
34
|
-
|
|
38
|
+
GRPCError with the status code Status.NOT_FOUND
|
|
35
39
|
|
|
36
40
|
Returns:
|
|
37
41
|
ResourceType: The resource
|
|
38
42
|
"""
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
43
|
+
try:
|
|
44
|
+
if self.RESOURCE_TYPE == ComponentBase or self.RESOURCE_TYPE == ResourceBase or self.RESOURCE_TYPE == ServiceBase:
|
|
45
|
+
return self.manager._resource_by_name_only(name) # type: ignore
|
|
46
|
+
return self.manager.get_resource(self.RESOURCE_TYPE, self.RESOURCE_TYPE.get_resource_name(name)) # type: ignore
|
|
47
|
+
except ResourceNotFoundError as e:
|
|
48
|
+
raise e.grpc_error
|
viam/resource/types.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import re
|
|
2
2
|
import sys
|
|
3
|
-
from typing import TYPE_CHECKING, Callable, ClassVar, Mapping, Sequence
|
|
3
|
+
from typing import TYPE_CHECKING, Callable, ClassVar, Mapping, Optional, Protocol, Sequence, Tuple, runtime_checkable
|
|
4
4
|
|
|
5
5
|
if sys.version_info >= (3, 10):
|
|
6
6
|
from typing import TypeAlias
|
|
@@ -10,7 +10,7 @@ else:
|
|
|
10
10
|
from typing_extensions import Self
|
|
11
11
|
|
|
12
12
|
from viam.proto.app.robot import ComponentConfig
|
|
13
|
-
from viam.proto.common import ResourceName
|
|
13
|
+
from viam.proto.common import GetGeometriesRequest, GetGeometriesResponse, ResourceName
|
|
14
14
|
|
|
15
15
|
if TYPE_CHECKING:
|
|
16
16
|
from .base import ResourceBase
|
|
@@ -20,64 +20,66 @@ RESOURCE_TYPE_COMPONENT = "component"
|
|
|
20
20
|
RESOURCE_TYPE_SERVICE = "service"
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
class
|
|
23
|
+
class API:
|
|
24
24
|
"""Represents a known component/service (resource) API"""
|
|
25
25
|
|
|
26
26
|
namespace: str
|
|
27
27
|
"""The namespace of the resource"""
|
|
28
28
|
|
|
29
29
|
resource_type: str
|
|
30
|
-
"""The type of the resource,
|
|
30
|
+
"""The type of the resource, for example `component` or `service`"""
|
|
31
31
|
|
|
32
32
|
resource_subtype: str
|
|
33
|
-
"""The subtype of the resource
|
|
33
|
+
"""The subtype of the resource for example `servo`, `arm`, `vision`"""
|
|
34
34
|
|
|
35
35
|
def __init__(self, namespace: str, resource_type: str, resource_subtype: str):
|
|
36
|
-
self.namespace = namespace
|
|
37
|
-
self.resource_type = resource_type
|
|
38
|
-
self.resource_subtype = resource_subtype
|
|
36
|
+
self.namespace = namespace
|
|
37
|
+
self.resource_type = resource_type
|
|
38
|
+
self.resource_subtype = resource_subtype
|
|
39
39
|
|
|
40
40
|
def __str__(self) -> str:
|
|
41
41
|
return f"{self.namespace}:{self.resource_type}:{self.resource_subtype}"
|
|
42
42
|
|
|
43
43
|
def __repr__(self) -> str:
|
|
44
|
-
return f"<viam.resource.types.
|
|
44
|
+
return f"<viam.resource.types.API {str(self)} at {hex(id(self))}>"
|
|
45
45
|
|
|
46
46
|
def __hash__(self) -> int:
|
|
47
47
|
return hash(str(self))
|
|
48
48
|
|
|
49
|
-
def __eq__(self, other:
|
|
50
|
-
|
|
49
|
+
def __eq__(self, other: object) -> bool:
|
|
50
|
+
if isinstance(other, API):
|
|
51
|
+
return str(self) == str(other)
|
|
52
|
+
return False
|
|
51
53
|
|
|
52
54
|
@classmethod
|
|
53
55
|
def from_resource_name(cls, resource_name: ResourceName) -> Self:
|
|
54
|
-
"""Convert a ```ResourceName``` into a ```
|
|
56
|
+
"""Convert a ```ResourceName``` into a ```API```
|
|
55
57
|
|
|
56
58
|
Args:
|
|
57
59
|
resource_name (viam.proto.common.ResourceName): The ResourceName to convert
|
|
58
60
|
|
|
59
61
|
Returns:
|
|
60
|
-
Self: A new
|
|
62
|
+
Self: A new API
|
|
61
63
|
"""
|
|
62
64
|
return cls(resource_name.namespace, resource_name.type, resource_name.subtype)
|
|
63
65
|
|
|
64
66
|
@classmethod
|
|
65
67
|
def from_string(cls, string: str) -> Self:
|
|
66
|
-
"""Create a ```
|
|
68
|
+
"""Create a ```API``` from its string representation (namespace:resource_type:resource_subtype)
|
|
67
69
|
|
|
68
70
|
Args:
|
|
69
|
-
string (str): The
|
|
71
|
+
string (str): The API as a string
|
|
70
72
|
|
|
71
73
|
Raises:
|
|
72
|
-
ValueError: Raised if the string does not represent a valid
|
|
74
|
+
ValueError: Raised if the string does not represent a valid API
|
|
73
75
|
|
|
74
76
|
Returns:
|
|
75
|
-
Self: A new
|
|
77
|
+
Self: A new API
|
|
76
78
|
"""
|
|
77
79
|
regex = re.compile(r"^([\w-]+):([\w-]+):([\w-]+)$")
|
|
78
80
|
match = regex.match(string)
|
|
79
81
|
if not match:
|
|
80
|
-
raise ValueError(f"{string} is not a valid
|
|
82
|
+
raise ValueError(f"{string} is not a valid API")
|
|
81
83
|
return cls(match.group(1), match.group(2), match.group(3))
|
|
82
84
|
|
|
83
85
|
|
|
@@ -95,8 +97,8 @@ class ModelFamily:
|
|
|
95
97
|
DEFAULT: ClassVar["ModelFamily"]
|
|
96
98
|
|
|
97
99
|
def __init__(self, namespace: str, family: str):
|
|
98
|
-
self.namespace = namespace
|
|
99
|
-
self.family = family
|
|
100
|
+
self.namespace = namespace
|
|
101
|
+
self.family = family
|
|
100
102
|
|
|
101
103
|
def __str__(self) -> str:
|
|
102
104
|
return f"{self.namespace}:{self.family}"
|
|
@@ -107,8 +109,10 @@ class ModelFamily:
|
|
|
107
109
|
def __hash__(self) -> int:
|
|
108
110
|
return hash(str(self))
|
|
109
111
|
|
|
110
|
-
def __eq__(self, other:
|
|
111
|
-
|
|
112
|
+
def __eq__(self, other: object) -> bool:
|
|
113
|
+
if isinstance(other, ModelFamily):
|
|
114
|
+
return str(self) == str(other)
|
|
115
|
+
return False
|
|
112
116
|
|
|
113
117
|
|
|
114
118
|
ModelFamily.DEFAULT = ModelFamily(RESOURCE_NAMESPACE_RDK, ModelFamily.DEFAULT_FAMILY_NAME)
|
|
@@ -125,7 +129,7 @@ class Model:
|
|
|
125
129
|
|
|
126
130
|
def __init__(self, model_family: ModelFamily, name: str):
|
|
127
131
|
self.model_family = model_family
|
|
128
|
-
self.name = name
|
|
132
|
+
self.name = name
|
|
129
133
|
|
|
130
134
|
def __str__(self) -> str:
|
|
131
135
|
return f"{self.model_family}:{self.name}"
|
|
@@ -136,8 +140,10 @@ class Model:
|
|
|
136
140
|
def __hash__(self) -> int:
|
|
137
141
|
return hash(str(self))
|
|
138
142
|
|
|
139
|
-
def __eq__(self, other:
|
|
140
|
-
|
|
143
|
+
def __eq__(self, other: object) -> bool:
|
|
144
|
+
if isinstance(other, Model):
|
|
145
|
+
return str(self) == str(other)
|
|
146
|
+
return False
|
|
141
147
|
|
|
142
148
|
@classmethod
|
|
143
149
|
def from_string(cls, model: str, *, ignore_errors=False) -> Self:
|
|
@@ -197,4 +203,11 @@ def resource_name_from_string(string: str) -> ResourceName:
|
|
|
197
203
|
|
|
198
204
|
|
|
199
205
|
ResourceCreator: TypeAlias = Callable[[ComponentConfig, Mapping[ResourceName, "ResourceBase"]], "ResourceBase"]
|
|
200
|
-
Validator: TypeAlias = Callable[[ComponentConfig], Sequence[str]]
|
|
206
|
+
Validator: TypeAlias = Callable[[ComponentConfig], Tuple[Sequence[str], Sequence[str]]]
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
@runtime_checkable
|
|
210
|
+
class SupportsGetGeometries(Protocol):
|
|
211
|
+
"""The SupportsGetGeometries protocol defines the requirements for a resource to call get_geometries."""
|
|
212
|
+
|
|
213
|
+
async def GetGeometries(self, request: GetGeometriesRequest, *, timeout: Optional[float] = None, **kwargs) -> GetGeometriesResponse: ...
|