diff --git a/src/viam/components/arm/client.py b/src/viam/components/arm/client.py index 523eb8b314..ed0d3dd9cf 100644 --- a/src/viam/components/arm/client.py +++ b/src/viam/components/arm/client.py @@ -3,7 +3,7 @@ from grpclib.client import Channel from viam.components import KinematicsReturn -from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetKinematicsRequest, GetKinematicsResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetKinematicsRequest, GetKinematicsResponse, GetStatusRequest, GetStatusResponse from viam.proto.component.arm import ( ArmServiceStub, GetEndPositionRequest, @@ -112,6 +112,17 @@ async def do_command( response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) + async def get_kinematics( self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs ) -> KinematicsReturn: diff --git a/src/viam/components/arm/service.py b/src/viam/components/arm/service.py index b4d3d7f5fb..f7bba88dde 100644 --- a/src/viam/components/arm/service.py +++ b/src/viam/components/arm/service.py @@ -7,6 +7,8 @@ GetGeometriesResponse, GetKinematicsRequest, GetKinematicsResponse, + GetStatusRequest, + GetStatusResponse, ) from viam.proto.component.arm import ( GetEndPositionRequest, @@ -104,6 +106,15 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + arm = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await arm.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) + async def GetKinematics(self, stream: Stream[GetKinematicsRequest, GetKinematicsResponse]) -> None: request = await stream.recv_message() assert request is not None diff --git a/src/viam/components/audio_in/client.py b/src/viam/components/audio_in/client.py index c025d6c25d..fc0f6e8918 100644 --- a/src/viam/components/audio_in/client.py +++ b/src/viam/components/audio_in/client.py @@ -4,7 +4,7 @@ from grpclib.client import Channel from grpclib.client import Stream as ClientStream -from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetPropertiesRequest +from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetPropertiesRequest, GetStatusRequest, GetStatusResponse from viam.proto.component.audioin import AudioInServiceStub, GetAudioRequest, GetAudioResponse from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase from viam.streams import StreamWithIterator @@ -71,6 +71,17 @@ async def do_command( response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) + async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]: md = kwargs.get("metadata", self.Metadata()) return await get_geometries(self.client, self.name, extra, timeout, md) diff --git a/src/viam/components/audio_in/service.py b/src/viam/components/audio_in/service.py index cf23cd6b97..ea536d751d 100644 --- a/src/viam/components/audio_in/service.py +++ b/src/viam/components/audio_in/service.py @@ -9,6 +9,8 @@ GetGeometriesResponse, GetPropertiesRequest, GetPropertiesResponse, + GetStatusRequest, + GetStatusResponse, ) from viam.proto.component.audioin import AudioInServiceBase, GetAudioRequest, GetAudioResponse from viam.resource.rpc_service_base import ResourceRPCServiceBase @@ -73,6 +75,15 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + audio_in = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await audio_in.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) + async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None: request = await stream.recv_message() assert request is not None diff --git a/src/viam/components/audio_out/client.py b/src/viam/components/audio_out/client.py index f520ffde0f..146455913f 100644 --- a/src/viam/components/audio_out/client.py +++ b/src/viam/components/audio_out/client.py @@ -2,7 +2,7 @@ from grpclib.client import Channel -from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetPropertiesRequest, GetPropertiesResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetPropertiesRequest, GetPropertiesResponse, GetStatusRequest, GetStatusResponse from viam.proto.component.audioout import AudioOutServiceStub, PlayRequest from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict @@ -62,6 +62,17 @@ async def do_command( response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) + async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]: md = kwargs.get("metadata", self.Metadata()) return await get_geometries(self.client, self.name, extra, timeout, md) diff --git a/src/viam/components/audio_out/service.py b/src/viam/components/audio_out/service.py index 48a97a33a9..b50135e8b8 100644 --- a/src/viam/components/audio_out/service.py +++ b/src/viam/components/audio_out/service.py @@ -7,6 +7,8 @@ GetGeometriesResponse, GetPropertiesRequest, GetPropertiesResponse, + GetStatusRequest, + GetStatusResponse, ) from viam.proto.component.audioout import ( AudioOutServiceBase, @@ -53,6 +55,15 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + audio_out = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await audio_out.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) + async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None: request = await stream.recv_message() assert request is not None diff --git a/src/viam/components/base/client.py b/src/viam/components/base/client.py index 9a89ae561a..0930e4e1a6 100644 --- a/src/viam/components/base/client.py +++ b/src/viam/components/base/client.py @@ -2,7 +2,7 @@ from grpclib.client import Channel -from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry +from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetStatusRequest, GetStatusResponse from viam.proto.component.base import ( BaseServiceStub, GetPropertiesRequest, @@ -148,6 +148,17 @@ async def do_command( response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) + async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]: md = kwargs.get("metadata", self.Metadata()) return await get_geometries(self.client, self.name, extra, timeout, md) diff --git a/src/viam/components/base/service.py b/src/viam/components/base/service.py index 90563c0419..404e683073 100644 --- a/src/viam/components/base/service.py +++ b/src/viam/components/base/service.py @@ -1,6 +1,6 @@ from grpclib.server import Stream -from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse, GetStatusRequest, GetStatusResponse from viam.proto.component.base import ( BaseServiceBase, GetPropertiesRequest, @@ -128,6 +128,15 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + base = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await base.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) + async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None: request = await stream.recv_message() assert request is not None diff --git a/src/viam/components/board/client.py b/src/viam/components/board/client.py index 4720667ccb..25b1bdf069 100644 --- a/src/viam/components/board/client.py +++ b/src/viam/components/board/client.py @@ -5,7 +5,7 @@ from grpclib.client import Channel from grpclib.client import Stream as ClientStream -from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry +from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetStatusRequest, GetStatusResponse from viam.proto.component.board import ( BoardServiceStub, GetDigitalInterruptValueRequest, @@ -196,6 +196,17 @@ async def do_command( response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) + async def set_power_mode( self, mode: PowerMode.ValueType, diff --git a/src/viam/components/board/service.py b/src/viam/components/board/service.py index 4a985bf9d6..b3e6544aa3 100644 --- a/src/viam/components/board/service.py +++ b/src/viam/components/board/service.py @@ -3,7 +3,7 @@ from viam.errors import ResourceNotFoundError from viam.logging import getLogger -from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse, GetStatusRequest, GetStatusResponse from viam.proto.component.board import ( BoardServiceBase, GetDigitalInterruptValueRequest, @@ -194,6 +194,15 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + board = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await board.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) + async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None: request = await stream.recv_message() assert request is not None diff --git a/src/viam/components/button/client.py b/src/viam/components/button/client.py index e342e7435e..a8710d4f9c 100644 --- a/src/viam/components/button/client.py +++ b/src/viam/components/button/client.py @@ -6,6 +6,8 @@ from viam.proto.common import ( DoCommandRequest, DoCommandResponse, + GetStatusRequest, + GetStatusResponse, ) from viam.proto.component.button import ButtonServiceStub from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase @@ -50,3 +52,14 @@ async def do_command( request = DoCommandRequest(name=self.name, command=dict_to_struct(command)) response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) diff --git a/src/viam/components/button/service.py b/src/viam/components/button/service.py index 88e9821de1..edde57692f 100644 --- a/src/viam/components/button/service.py +++ b/src/viam/components/button/service.py @@ -7,6 +7,8 @@ from viam.proto.common import ( DoCommandRequest, DoCommandResponse, + GetStatusRequest, + GetStatusResponse, ) from viam.proto.component.button import ButtonServiceBase from viam.resource.rpc_service_base import ResourceRPCServiceBase @@ -44,3 +46,12 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - ) response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + button = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await button.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) diff --git a/src/viam/components/camera/client.py b/src/viam/components/camera/client.py index ae25a6b889..f41198ed73 100644 --- a/src/viam/components/camera/client.py +++ b/src/viam/components/camera/client.py @@ -3,7 +3,7 @@ from grpclib.client import Channel from viam.media.video import CameraMimeType, NamedImage -from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, ResponseMetadata +from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetStatusRequest, GetStatusResponse, ResponseMetadata from viam.proto.component.camera import ( CameraServiceStub, GetImagesRequest, @@ -80,6 +80,17 @@ async def do_command( response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) + async def get_geometries( self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs ) -> Sequence[Geometry]: diff --git a/src/viam/components/camera/service.py b/src/viam/components/camera/service.py index 3ec0939838..4173447d9c 100644 --- a/src/viam/components/camera/service.py +++ b/src/viam/components/camera/service.py @@ -3,7 +3,7 @@ from grpclib.server import Stream from viam.errors import NotSupportedError -from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse, GetStatusRequest, GetStatusResponse from viam.proto.component.camera import ( CameraServiceBase, GetImagesRequest, @@ -82,6 +82,15 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + camera = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await camera.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) + async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None: request = await stream.recv_message() assert request is not None diff --git a/src/viam/components/component_base.py b/src/viam/components/component_base.py index 90d07a369d..b34d169af7 100644 --- a/src/viam/components/component_base.py +++ b/src/viam/components/component_base.py @@ -46,6 +46,9 @@ def from_robot(cls, robot: "RobotClient", name: str) -> Self: async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None, **kwargs) -> Mapping[str, ValueTypes]: raise NotImplementedError() + async def get_status(self, *, timeout: Optional[float] = None, **kwargs) -> Mapping[str, ValueTypes]: + return {} + async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> Sequence[Geometry]: """ Get all geometries associated with the component, in their current configuration, in the diff --git a/src/viam/components/encoder/client.py b/src/viam/components/encoder/client.py index 150f26e35d..62cc201a21 100644 --- a/src/viam/components/encoder/client.py +++ b/src/viam/components/encoder/client.py @@ -2,7 +2,7 @@ from grpclib.client import Channel -from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry +from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetStatusRequest, GetStatusResponse from viam.proto.component.encoder import ( EncoderServiceStub, GetPositionRequest, @@ -78,6 +78,17 @@ async def do_command( response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) + async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]: md = kwargs.get("metadata", self.Metadata()) return await get_geometries(self.client, self.name, extra, timeout, md) diff --git a/src/viam/components/encoder/service.py b/src/viam/components/encoder/service.py index 9937a692b9..38fa9fbd1f 100644 --- a/src/viam/components/encoder/service.py +++ b/src/viam/components/encoder/service.py @@ -1,6 +1,6 @@ from grpclib.server import Stream -from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse, GetStatusRequest, GetStatusResponse from viam.proto.component.encoder import ( EncoderServiceBase, GetPositionRequest, @@ -62,6 +62,15 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + encoder = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await encoder.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) + async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None: request = await stream.recv_message() assert request is not None diff --git a/src/viam/components/gantry/client.py b/src/viam/components/gantry/client.py index 8a3fe2bf0a..085ea084b0 100644 --- a/src/viam/components/gantry/client.py +++ b/src/viam/components/gantry/client.py @@ -9,6 +9,8 @@ Geometry, GetKinematicsRequest, GetKinematicsResponse, + GetStatusRequest, + GetStatusResponse, ) from viam.proto.component.gantry import ( GantryServiceStub, @@ -117,6 +119,17 @@ async def do_command( response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) + async def get_kinematics( self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs ) -> KinematicsReturn: diff --git a/src/viam/components/gantry/service.py b/src/viam/components/gantry/service.py index 70f99a01d7..9b32d03cd4 100644 --- a/src/viam/components/gantry/service.py +++ b/src/viam/components/gantry/service.py @@ -7,6 +7,8 @@ GetGeometriesResponse, GetKinematicsRequest, GetKinematicsResponse, + GetStatusRequest, + GetStatusResponse, ) from viam.proto.component.gantry import ( GetLengthsRequest, @@ -110,6 +112,15 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + gantry = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await gantry.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) + async def GetKinematics(self, stream: Stream[GetKinematicsRequest, GetKinematicsResponse]) -> None: request = await stream.recv_message() assert request is not None diff --git a/src/viam/components/generic/client.py b/src/viam/components/generic/client.py index 3b720ea818..41be4140d9 100644 --- a/src/viam/components/generic/client.py +++ b/src/viam/components/generic/client.py @@ -3,7 +3,7 @@ from grpclib import GRPCError, Status from grpclib.client import Channel -from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry +from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetStatusRequest, GetStatusResponse from viam.proto.component.generic import GenericServiceStub from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase, ResourceRPCClientBase from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict @@ -39,6 +39,17 @@ async def do_command( return struct_to_dict(response.result) + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) + async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]: md = kwargs.get("metadata", self.Metadata()) return await get_geometries(self.client, self.name, extra, timeout, md) diff --git a/src/viam/components/generic/service.py b/src/viam/components/generic/service.py index e8c60ea596..773909305f 100644 --- a/src/viam/components/generic/service.py +++ b/src/viam/components/generic/service.py @@ -2,7 +2,7 @@ from grpclib.server import Stream from viam.components.component_base import ComponentBase -from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse, GetStatusRequest, GetStatusResponse from viam.proto.component.generic import GenericServiceBase from viam.resource.rpc_service_base import ResourceRPCServiceBase from viam.utils import dict_to_struct, struct_to_dict @@ -30,6 +30,15 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + component = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await component.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) + async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None: request = await stream.recv_message() assert request is not None diff --git a/src/viam/components/gripper/client.py b/src/viam/components/gripper/client.py index 2b8319b05d..a62cc4d6ff 100644 --- a/src/viam/components/gripper/client.py +++ b/src/viam/components/gripper/client.py @@ -3,7 +3,7 @@ from grpclib.client import Channel from viam.components import KinematicsReturn -from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetKinematicsRequest, GetKinematicsResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetKinematicsRequest, GetKinematicsResponse, GetStatusRequest, GetStatusResponse from viam.proto.component.gripper import ( GrabRequest, GrabResponse, @@ -91,6 +91,17 @@ async def do_command( response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) + async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]: md = kwargs.get("metadata", self.Metadata()) return await get_geometries(self.client, self.name, extra, timeout, md) diff --git a/src/viam/components/gripper/service.py b/src/viam/components/gripper/service.py index f40b02df3f..f095141025 100644 --- a/src/viam/components/gripper/service.py +++ b/src/viam/components/gripper/service.py @@ -7,6 +7,8 @@ GetGeometriesResponse, GetKinematicsRequest, GetKinematicsResponse, + GetStatusRequest, + GetStatusResponse, ) from viam.proto.component.gripper import ( GrabRequest, @@ -91,6 +93,15 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + gripper = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await gripper.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) + async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None: request = await stream.recv_message() assert request is not None diff --git a/src/viam/components/input/client.py b/src/viam/components/input/client.py index 9a2704bf2f..290ae9b49f 100644 --- a/src/viam/components/input/client.py +++ b/src/viam/components/input/client.py @@ -10,7 +10,7 @@ import viam from viam.errors import NotSupportedError from viam.logging import getLogger -from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry +from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetStatusRequest, GetStatusResponse from viam.proto.component.inputcontroller import ( GetControlsRequest, GetControlsResponse, @@ -189,6 +189,17 @@ async def do_command( response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) + async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]: md = kwargs.get("metadata", self.Metadata()) return await get_geometries(self.client, self.name, extra, timeout, md) diff --git a/src/viam/components/input/service.py b/src/viam/components/input/service.py index 01175a1830..0502410b43 100644 --- a/src/viam/components/input/service.py +++ b/src/viam/components/input/service.py @@ -7,7 +7,7 @@ import viam from viam.errors import NotSupportedError -from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse, GetStatusRequest, GetStatusResponse from viam.proto.component.inputcontroller import ( GetControlsRequest, GetControlsResponse, @@ -165,6 +165,15 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + controller = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await controller.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) + async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None: request = await stream.recv_message() assert request is not None diff --git a/src/viam/components/motor/client.py b/src/viam/components/motor/client.py index 9b3a193a7c..7a17b0c70a 100644 --- a/src/viam/components/motor/client.py +++ b/src/viam/components/motor/client.py @@ -2,7 +2,7 @@ from grpclib.client import Channel -from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry +from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetStatusRequest, GetStatusResponse from viam.proto.component.motor import ( GetPositionRequest, GetPositionResponse, @@ -163,6 +163,17 @@ async def do_command( response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) + async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]: md = kwargs.get("metadata", self.Metadata()) return await get_geometries(self.client, self.name, extra, timeout, md) diff --git a/src/viam/components/motor/service.py b/src/viam/components/motor/service.py index 98bb314c5c..35a25957aa 100644 --- a/src/viam/components/motor/service.py +++ b/src/viam/components/motor/service.py @@ -1,6 +1,6 @@ from grpclib.server import Stream -from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse, GetStatusRequest, GetStatusResponse from viam.proto.component.motor import ( GetPositionRequest, GetPositionResponse, @@ -140,6 +140,15 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + motor = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await motor.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) + async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None: request = await stream.recv_message() assert request is not None diff --git a/src/viam/components/movement_sensor/client.py b/src/viam/components/movement_sensor/client.py index c03dfd87b3..fbe4b951cb 100644 --- a/src/viam/components/movement_sensor/client.py +++ b/src/viam/components/movement_sensor/client.py @@ -3,7 +3,7 @@ from grpclib.client import Channel from viam.components.movement_sensor.movement_sensor import MovementSensor -from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetReadingsRequest, GetReadingsResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetReadingsRequest, GetReadingsResponse, GetStatusRequest, GetStatusResponse from viam.proto.component.movementsensor import ( GetAccuracyRequest, GetAngularVelocityRequest, @@ -156,6 +156,17 @@ async def do_command( response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) + async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]: md = kwargs.get("metadata", self.Metadata()) return await get_geometries(self.client, self.name, extra, timeout, md) diff --git a/src/viam/components/movement_sensor/service.py b/src/viam/components/movement_sensor/service.py index 003dbae01d..08086aee2a 100644 --- a/src/viam/components/movement_sensor/service.py +++ b/src/viam/components/movement_sensor/service.py @@ -8,6 +8,8 @@ GetGeometriesResponse, GetReadingsRequest, GetReadingsResponse, + GetStatusRequest, + GetStatusResponse, ) from viam.proto.component.movementsensor import ( GetAccuracyRequest, @@ -126,6 +128,15 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + sensor = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await sensor.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) + async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None: request = await stream.recv_message() assert request is not None diff --git a/src/viam/components/pose_tracker/client.py b/src/viam/components/pose_tracker/client.py index 6f0b3344c0..d4e9212952 100644 --- a/src/viam/components/pose_tracker/client.py +++ b/src/viam/components/pose_tracker/client.py @@ -2,7 +2,7 @@ from grpclib.client import Channel -from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, PoseInFrame +from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetStatusRequest, GetStatusResponse, PoseInFrame from viam.proto.component.posetracker import GetPosesRequest, GetPosesResponse, PoseTrackerServiceStub from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict @@ -45,6 +45,17 @@ async def do_command( response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) + async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]: md = kwargs.get("metadata", self.Metadata()) return await get_geometries(self.client, self.name, extra, timeout, md) diff --git a/src/viam/components/pose_tracker/service.py b/src/viam/components/pose_tracker/service.py index 96fc069f98..1ff992ba17 100644 --- a/src/viam/components/pose_tracker/service.py +++ b/src/viam/components/pose_tracker/service.py @@ -1,6 +1,6 @@ from grpclib.server import Stream -from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse, GetStatusRequest, GetStatusResponse from viam.proto.component.posetracker import GetPosesRequest, GetPosesResponse, PoseTrackerServiceBase from viam.resource.rpc_service_base import ResourceRPCServiceBase from viam.utils import dict_to_struct, struct_to_dict @@ -35,6 +35,15 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + pose_tracker = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await pose_tracker.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) + async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None: request = await stream.recv_message() assert request is not None diff --git a/src/viam/components/power_sensor/client.py b/src/viam/components/power_sensor/client.py index 0490b19fae..8e3b04358e 100644 --- a/src/viam/components/power_sensor/client.py +++ b/src/viam/components/power_sensor/client.py @@ -3,7 +3,7 @@ from grpclib.client import Channel from viam.components.power_sensor.power_sensor import PowerSensor -from viam.proto.common import DoCommandRequest, DoCommandResponse, GetReadingsRequest, GetReadingsResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetReadingsRequest, GetReadingsResponse, GetStatusRequest, GetStatusResponse from viam.proto.component.powersensor import ( GetCurrentRequest, GetCurrentResponse, @@ -84,3 +84,14 @@ async def do_command( request = DoCommandRequest(name=self.name, command=dict_to_struct(command)) response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) diff --git a/src/viam/components/power_sensor/service.py b/src/viam/components/power_sensor/service.py index 1de709fdc3..2cb6c59f5a 100644 --- a/src/viam/components/power_sensor/service.py +++ b/src/viam/components/power_sensor/service.py @@ -1,7 +1,7 @@ from grpclib.server import Stream from viam.components.power_sensor.power_sensor import PowerSensor -from viam.proto.common import DoCommandRequest, DoCommandResponse, GetReadingsRequest, GetReadingsResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetReadingsRequest, GetReadingsResponse, GetStatusRequest, GetStatusResponse from viam.proto.component.powersensor import ( GetCurrentRequest, GetCurrentResponse, @@ -70,3 +70,12 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - result = await sensor.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata) response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + sensor = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await sensor.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) diff --git a/src/viam/components/sensor/client.py b/src/viam/components/sensor/client.py index b4017a5b8b..209187a245 100644 --- a/src/viam/components/sensor/client.py +++ b/src/viam/components/sensor/client.py @@ -2,7 +2,7 @@ from grpclib.client import Channel -from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetReadingsRequest, GetReadingsResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetReadingsRequest, GetReadingsResponse, GetStatusRequest, GetStatusResponse from viam.proto.component.sensor import SensorServiceStub from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase from viam.utils import SensorReading, ValueTypes, dict_to_struct, get_geometries, sensor_readings_value_to_native, struct_to_dict @@ -44,6 +44,17 @@ async def do_command( response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) + async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]: md = kwargs.get("metadata", self.Metadata()) return await get_geometries(self.client, self.name, extra, timeout, md) diff --git a/src/viam/components/sensor/service.py b/src/viam/components/sensor/service.py index d669b0ed6f..1c9c085675 100644 --- a/src/viam/components/sensor/service.py +++ b/src/viam/components/sensor/service.py @@ -7,6 +7,8 @@ GetGeometriesResponse, GetReadingsRequest, GetReadingsResponse, + GetStatusRequest, + GetStatusResponse, ) from viam.proto.component.sensor import SensorServiceBase from viam.resource.rpc_service_base import ResourceRPCServiceBase @@ -41,6 +43,15 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + sensor = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await sensor.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) + async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None: request = await stream.recv_message() assert request is not None diff --git a/src/viam/components/servo/client.py b/src/viam/components/servo/client.py index 67a1bb6438..7fdd0464dc 100644 --- a/src/viam/components/servo/client.py +++ b/src/viam/components/servo/client.py @@ -2,7 +2,7 @@ from grpclib.client import Channel -from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry +from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetStatusRequest, GetStatusResponse from viam.proto.component.servo import ( GetPositionRequest, GetPositionResponse, @@ -81,6 +81,17 @@ async def do_command( response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) + async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]: md = kwargs.get("metadata", self.Metadata()) return await get_geometries(self.client, self.name, extra, timeout, md) diff --git a/src/viam/components/servo/service.py b/src/viam/components/servo/service.py index 928a353f44..69f5ef5fac 100644 --- a/src/viam/components/servo/service.py +++ b/src/viam/components/servo/service.py @@ -1,6 +1,6 @@ from grpclib.server import Stream -from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse, GetStatusRequest, GetStatusResponse from viam.proto.component.servo import ( GetPositionRequest, GetPositionResponse, @@ -70,6 +70,15 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + servo = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await servo.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) + async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None: request = await stream.recv_message() assert request is not None diff --git a/src/viam/components/switch/client.py b/src/viam/components/switch/client.py index 2931fd92be..8380566670 100644 --- a/src/viam/components/switch/client.py +++ b/src/viam/components/switch/client.py @@ -12,6 +12,8 @@ from viam.proto.common import ( DoCommandRequest, DoCommandResponse, + GetStatusRequest, + GetStatusResponse, ) from viam.proto.component.switch import SwitchServiceStub from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase @@ -81,3 +83,14 @@ async def do_command( request = DoCommandRequest(name=self.name, command=dict_to_struct(command)) response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) diff --git a/src/viam/components/switch/service.py b/src/viam/components/switch/service.py index b97328024a..a869692cd6 100644 --- a/src/viam/components/switch/service.py +++ b/src/viam/components/switch/service.py @@ -11,6 +11,8 @@ from viam.proto.common import ( DoCommandRequest, DoCommandResponse, + GetStatusRequest, + GetStatusResponse, ) from viam.proto.component.switch import SwitchServiceBase from viam.resource.rpc_service_base import ResourceRPCServiceBase @@ -70,3 +72,12 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - ) response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + switch = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await switch.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) diff --git a/src/viam/proto/common/__init__.py b/src/viam/proto/common/__init__.py index f6f72fc580..6b81d6186c 100644 --- a/src/viam/proto/common/__init__.py +++ b/src/viam/proto/common/__init__.py @@ -9,6 +9,8 @@ Capsule, DoCommandRequest, DoCommandResponse, + GetStatusRequest, + GetStatusResponse, GeoGeometry, GeometriesInFrame, Geometry, @@ -46,6 +48,8 @@ "Capsule", "DoCommandRequest", "DoCommandResponse", + "GetStatusRequest", + "GetStatusResponse", "GeoGeometry", "GeoPoint", "GeometriesInFrame", diff --git a/src/viam/services/discovery/client.py b/src/viam/services/discovery/client.py index 486b62add2..e7d2673935 100644 --- a/src/viam/services/discovery/client.py +++ b/src/viam/services/discovery/client.py @@ -3,7 +3,7 @@ from grpclib.client import Channel from viam.proto.app.robot import ComponentConfig -from viam.proto.common import DoCommandRequest, DoCommandResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetStatusRequest, GetStatusResponse from viam.proto.service.discovery import ( DiscoverResourcesRequest, DiscoverResourcesResponse, @@ -53,3 +53,14 @@ async def do_command( request = DoCommandRequest(name=self.name, command=dict_to_struct(command)) response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) diff --git a/src/viam/services/discovery/service.py b/src/viam/services/discovery/service.py index 35eed96c12..a4774a4adf 100644 --- a/src/viam/services/discovery/service.py +++ b/src/viam/services/discovery/service.py @@ -1,6 +1,6 @@ from grpclib.server import Stream -from viam.proto.common import DoCommandRequest, DoCommandResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetStatusRequest, GetStatusResponse from viam.proto.service.discovery import ( DiscoverResourcesRequest, DiscoverResourcesResponse, @@ -41,3 +41,12 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - timeout = stream.deadline.time_remaining() if stream.deadline else None result = await discovery.do_command(struct_to_dict(request.command), timeout=timeout) await stream.send_message(DoCommandResponse(result=dict_to_struct(result))) + + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + discovery = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await discovery.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) diff --git a/src/viam/services/generic/client.py b/src/viam/services/generic/client.py index d9283496da..9d8ff01b92 100644 --- a/src/viam/services/generic/client.py +++ b/src/viam/services/generic/client.py @@ -3,7 +3,7 @@ from grpclib import GRPCError, Status from grpclib.client import Channel -from viam.proto.common import DoCommandRequest, DoCommandResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetStatusRequest, GetStatusResponse from viam.proto.service.generic import GenericServiceStub from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase, ResourceRPCClientBase from viam.utils import ValueTypes, dict_to_struct, struct_to_dict @@ -39,6 +39,17 @@ async def do_command( return struct_to_dict(response.result) + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) + async def do_command( channel: Channel, name: str, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None, **kwargs diff --git a/src/viam/services/generic/service.py b/src/viam/services/generic/service.py index f7381fddbc..b7752251c3 100644 --- a/src/viam/services/generic/service.py +++ b/src/viam/services/generic/service.py @@ -1,7 +1,7 @@ from grpclib import GRPCError, Status from grpclib.server import Stream -from viam.proto.common import DoCommandRequest, DoCommandResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetStatusRequest, GetStatusResponse from viam.proto.service.generic import GenericServiceBase from viam.resource.rpc_service_base import ResourceRPCServiceBase from viam.services.service_base import ServiceBase @@ -27,3 +27,12 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - raise GRPCError(Status.UNIMPLEMENTED, f"``DO`` command is unimplemented for service named: {name}") response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + service = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await service.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) diff --git a/src/viam/services/mlmodel/client.py b/src/viam/services/mlmodel/client.py index f36d003d2a..84b36fc84d 100644 --- a/src/viam/services/mlmodel/client.py +++ b/src/viam/services/mlmodel/client.py @@ -3,10 +3,11 @@ from grpclib.client import Channel from numpy.typing import NDArray +from viam.proto.common import GetStatusRequest, GetStatusResponse from viam.proto.service.mlmodel import InferRequest, InferResponse, MetadataRequest, MetadataResponse, MLModelServiceStub from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase from viam.services.mlmodel.utils import flat_tensors_to_ndarrays, ndarrays_to_flat_tensors -from viam.utils import ValueTypes, dict_to_struct +from viam.utils import ValueTypes, dict_to_struct, struct_to_dict from .mlmodel import Metadata, MLModel @@ -35,3 +36,14 @@ async def metadata(self, *, extra: Optional[Mapping[str, ValueTypes]] = None, ti request = MetadataRequest(name=self.name, extra=dict_to_struct(extra)) response: MetadataResponse = await self.client.Metadata(request, timeout=timeout, metadata=md) return response.metadata + + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) diff --git a/src/viam/services/mlmodel/service.py b/src/viam/services/mlmodel/service.py index ffd3050ebf..85491f4b4e 100644 --- a/src/viam/services/mlmodel/service.py +++ b/src/viam/services/mlmodel/service.py @@ -1,9 +1,10 @@ from grpclib.server import Stream +from viam.proto.common import GetStatusRequest, GetStatusResponse from viam.proto.service.mlmodel import InferRequest, InferResponse, MetadataRequest, MetadataResponse, MLModelServiceBase from viam.resource.rpc_service_base import ResourceRPCServiceBase from viam.services.mlmodel.utils import flat_tensors_to_ndarrays, ndarrays_to_flat_tensors -from viam.utils import struct_to_dict +from viam.utils import dict_to_struct, struct_to_dict from .mlmodel import MLModel @@ -36,3 +37,12 @@ async def Metadata(self, stream: Stream[MetadataRequest, MetadataResponse]) -> N metadata = await mlmodel.metadata(extra=extra, timeout=timeout) response = MetadataResponse(metadata=metadata) await stream.send_message(response) + + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + mlmodel = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await mlmodel.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) diff --git a/src/viam/services/motion/client.py b/src/viam/services/motion/client.py index 27ce1dd69f..e2b1d41f46 100644 --- a/src/viam/services/motion/client.py +++ b/src/viam/services/motion/client.py @@ -8,6 +8,8 @@ GeoGeometry, Geometry, GeoPoint, + GetStatusRequest, + GetStatusResponse, Pose, PoseInFrame, Transform, @@ -212,3 +214,14 @@ async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Option request = DoCommandRequest(name=self.name, command=dict_to_struct(command)) response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) diff --git a/src/viam/services/motion/service.py b/src/viam/services/motion/service.py index bcc71d19c6..24a5fed604 100644 --- a/src/viam/services/motion/service.py +++ b/src/viam/services/motion/service.py @@ -1,6 +1,6 @@ from grpclib.server import Stream -from viam.proto.common import DoCommandRequest, DoCommandResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetStatusRequest, GetStatusResponse from viam.proto.service.motion import ( GetPlanRequest, GetPlanResponse, @@ -130,3 +130,12 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - result = await service.do_command(struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata) response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + service = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await service.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) diff --git a/src/viam/services/navigation/client.py b/src/viam/services/navigation/client.py index 5782ebfec6..a3112ad35b 100644 --- a/src/viam/services/navigation/client.py +++ b/src/viam/services/navigation/client.py @@ -2,7 +2,7 @@ from grpclib.client import Channel -from viam.proto.common import DoCommandRequest, DoCommandResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetStatusRequest, GetStatusResponse from viam.proto.service.navigation import ( AddWaypointRequest, GetLocationRequest, @@ -97,3 +97,14 @@ async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Option request = DoCommandRequest(name=self.name, command=dict_to_struct(command)) response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) diff --git a/src/viam/services/navigation/service.py b/src/viam/services/navigation/service.py index 0f25a50e58..83893377a4 100644 --- a/src/viam/services/navigation/service.py +++ b/src/viam/services/navigation/service.py @@ -1,6 +1,6 @@ from grpclib.server import Stream -from viam.proto.common import DoCommandRequest, DoCommandResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetStatusRequest, GetStatusResponse from viam.proto.service.navigation import ( AddWaypointRequest, AddWaypointResponse, @@ -135,3 +135,12 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - result = await navigation.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata) response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + navigation = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await navigation.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) diff --git a/src/viam/services/service_base.py b/src/viam/services/service_base.py index 87d3455b97..b244c28cfa 100644 --- a/src/viam/services/service_base.py +++ b/src/viam/services/service_base.py @@ -54,6 +54,9 @@ async def main(): service = robot.get_service(cls.get_resource_name(name)) return cast(cls, service) # type: ignore + async def get_status(self, *, timeout: Optional[float] = None, **kwargs) -> Mapping[str, ValueTypes]: + return {} + async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None, **kwargs) -> Mapping[str, ValueTypes]: """Send/receive arbitrary commands. diff --git a/src/viam/services/slam/client.py b/src/viam/services/slam/client.py index 1aecf9e8f3..27ca09b4cd 100644 --- a/src/viam/services/slam/client.py +++ b/src/viam/services/slam/client.py @@ -2,7 +2,7 @@ from grpclib.client import Channel -from viam.proto.common import DoCommandRequest, DoCommandResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetStatusRequest, GetStatusResponse from viam.proto.service.slam import ( GetInternalStateRequest, GetInternalStateResponse, @@ -60,3 +60,14 @@ async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Option request = DoCommandRequest(name=self.name, command=dict_to_struct(command)) response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) diff --git a/src/viam/services/slam/service.py b/src/viam/services/slam/service.py index 0443b29141..594b9bb959 100644 --- a/src/viam/services/slam/service.py +++ b/src/viam/services/slam/service.py @@ -1,6 +1,6 @@ from grpclib.server import Stream -from viam.proto.common import DoCommandRequest, DoCommandResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetStatusRequest, GetStatusResponse from viam.proto.service.slam import ( GetInternalStateRequest, GetInternalStateResponse, @@ -73,3 +73,12 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - result = await slam.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata) response = DoCommandResponse(result=dict_to_struct(result)) await stream.send_message(response) + + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + slam = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await slam.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) diff --git a/src/viam/services/vision/client.py b/src/viam/services/vision/client.py index f2968a55a2..8694fa48f1 100644 --- a/src/viam/services/vision/client.py +++ b/src/viam/services/vision/client.py @@ -4,7 +4,7 @@ from viam.errors import ViamError from viam.media.video import CameraMimeType, ViamImage -from viam.proto.common import DoCommandRequest, DoCommandResponse, PointCloudObject +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetStatusRequest, GetStatusResponse, PointCloudObject from viam.proto.service.vision import ( CaptureAllFromCameraRequest, CaptureAllFromCameraResponse, @@ -204,3 +204,14 @@ async def do_command( request = DoCommandRequest(name=self.name, command=dict_to_struct(command)) response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) diff --git a/src/viam/services/vision/service.py b/src/viam/services/vision/service.py index 25995f6985..ae9d27e1bd 100644 --- a/src/viam/services/vision/service.py +++ b/src/viam/services/vision/service.py @@ -1,7 +1,7 @@ from grpclib.server import Stream from viam.media.video import CameraMimeType, ViamImage -from viam.proto.common import DoCommandRequest, DoCommandResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetStatusRequest, GetStatusResponse from viam.proto.component.camera import Image from viam.proto.service.vision import ( CaptureAllFromCameraRequest, @@ -141,3 +141,12 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - timeout = stream.deadline.time_remaining() if stream.deadline else None result = await vision.do_command(struct_to_dict(request.command), timeout=timeout) await stream.send_message(DoCommandResponse(result=dict_to_struct(result))) + + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + vision = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await vision.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response) diff --git a/src/viam/services/worldstatestore/client.py b/src/viam/services/worldstatestore/client.py index b51fc69788..60ea6e85d6 100644 --- a/src/viam/services/worldstatestore/client.py +++ b/src/viam/services/worldstatestore/client.py @@ -2,7 +2,7 @@ from grpclib.client import Channel -from viam.proto.common import DoCommandRequest, DoCommandResponse, Transform +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetStatusRequest, GetStatusResponse, Transform from viam.proto.service.worldstatestore import ( GetTransformRequest, GetTransformResponse, @@ -92,3 +92,14 @@ async def do_command( ) response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md) return struct_to_dict(response.result) + + async def get_status( + self, + *, + timeout: Optional[float] = None, + **kwargs, + ) -> Mapping[str, ValueTypes]: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetStatusRequest(name=self.name) + response: GetStatusResponse = await self.client.GetStatus(request, timeout=timeout, metadata=md) + return struct_to_dict(response.result) diff --git a/src/viam/services/worldstatestore/service.py b/src/viam/services/worldstatestore/service.py index 30457f9962..7564ab5c32 100644 --- a/src/viam/services/worldstatestore/service.py +++ b/src/viam/services/worldstatestore/service.py @@ -1,6 +1,6 @@ from grpclib.server import Stream -from viam.proto.common import DoCommandRequest, DoCommandResponse +from viam.proto.common import DoCommandRequest, DoCommandResponse, GetStatusRequest, GetStatusResponse from viam.proto.service.worldstatestore import ( GetTransformRequest, GetTransformResponse, @@ -53,3 +53,12 @@ async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) - timeout = stream.deadline.time_remaining() if stream.deadline else None result = await worldstatestore.do_command(struct_to_dict(request.command), timeout=timeout) await stream.send_message(DoCommandResponse(result=dict_to_struct(result))) + + async def GetStatus(self, stream: Stream[GetStatusRequest, GetStatusResponse]) -> None: + request = await stream.recv_message() + assert request is not None + worldstatestore = self.get_resource(request.name) + timeout = stream.deadline.time_remaining() if stream.deadline else None + result = await worldstatestore.get_status(timeout=timeout, metadata=stream.metadata) + response = GetStatusResponse(result=dict_to_struct(result)) + await stream.send_message(response)