diff --git a/doc/dependency_decisions.yml b/doc/dependency_decisions.yml index 6e8c6cc83..173d41864 100644 --- a/doc/dependency_decisions.yml +++ b/doc/dependency_decisions.yml @@ -94,7 +94,7 @@ :when: 2026-08-12 00:00:00.000000000 Z - - :approve - googleapis-common-protos - - :who: njooma - :why: Apache 2.0 - :versions: [] - :when: 2026-09-10 22:09:58.590402000 Z + - :who: npmenard + :why: Apache-2.0 + :versions: ['1.75.3'] + :when: 2026-09-04 00:00:00.000000000 Z diff --git a/docs/examples/example.ipynb b/docs/examples/example.ipynb index 05e6ab204..b62968903 100644 --- a/docs/examples/example.ipynb +++ b/docs/examples/example.ipynb @@ -585,6 +585,15 @@ " async def get_3d_models(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> Mapping[str, Mesh]:\n", " raise NotImplementedError()\n", "\n", + " async def set_manual_mode(self, manual_mode: bool, enabled_for: int = 0, extra: Optional[Dict[str, Any]] = None, **kwargs):\n", + " raise NotImplementedError()\n", + "\n", + " async def get_manual_mode(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> bool:\n", + " raise NotImplementedError()\n", + "\n", + " async def get_properties(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> Arm.Properties:\n", + " return Arm.Properties()\n", + "\n", " async def stop(self, extra: Optional[Dict[str, Any]] = None, **kwargs):\n", " self.is_stopped = True\n", "\n", diff --git a/docs/examples/my_cool_arm.py b/docs/examples/my_cool_arm.py index b94485992..0fd940c86 100644 --- a/docs/examples/my_cool_arm.py +++ b/docs/examples/my_cool_arm.py @@ -122,6 +122,17 @@ async def get_3d_models(self, extra: Optional[Dict[str, Any]] = None, **kwargs) # Return the 3D meshes for this arm, keyed by name. This arm has none. return {} + async def set_manual_mode(self, manual_mode: bool, enabled_for: int = 0, extra: Optional[Dict[str, Any]] = None, **kwargs): + # This arm does not support manual mode. + raise NotImplementedError() + + async def get_manual_mode(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> bool: + # This arm does not support manual mode. + raise NotImplementedError() + + async def get_properties(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> Arm.Properties: + return Arm.Properties(support_manual_mode=False, support_cartesian_commands=True) + async def stop(self, extra: Optional[Dict[str, Any]] = None, **kwargs): self.is_stopped = True diff --git a/examples/complex_module/src/arm/my_arm.py b/examples/complex_module/src/arm/my_arm.py index ee9a5d28c..cae773c06 100644 --- a/examples/complex_module/src/arm/my_arm.py +++ b/examples/complex_module/src/arm/my_arm.py @@ -126,6 +126,17 @@ async def get_3d_models(self, extra: Optional[Dict[str, Any]] = None, **kwargs) # This arm has no meshes to report. return {} + async def set_manual_mode(self, manual_mode: bool, enabled_for: int = 0, extra: Optional[Dict[str, Any]] = None, **kwargs): + # This arm does not support manual mode. + raise NotImplementedError() + + async def get_manual_mode(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> bool: + # This arm does not support manual mode. + raise NotImplementedError() + + async def get_properties(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> Arm.Properties: + return Arm.Properties(support_manual_mode=False, support_cartesian_commands=True) + async def stop(self, extra: Optional[Dict[str, Any]] = None, **kwargs): self.is_stopped = True diff --git a/examples/server/v1/components.py b/examples/server/v1/components.py index 679ed3571..cf3b8be68 100644 --- a/examples/server/v1/components.py +++ b/examples/server/v1/components.py @@ -109,6 +109,15 @@ async def move_through_joint_positions( async def get_3d_models(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> Mapping[str, Mesh]: return {} + async def set_manual_mode(self, manual_mode: bool, enabled_for: int = 0, extra: Optional[Dict[str, Any]] = None, **kwargs): + raise NotImplementedError() + + async def get_manual_mode(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> bool: + raise NotImplementedError() + + async def get_properties(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> Arm.Properties: + return Arm.Properties(support_manual_mode=False, support_cartesian_commands=True) + async def stop(self, extra: Optional[Dict[str, Any]] = None, **kwargs): self.is_stopped = True diff --git a/src/viam/components/arm/arm.py b/src/viam/components/arm/arm.py index 501c16c7c..a7cd61d45 100644 --- a/src/viam/components/arm/arm.py +++ b/src/viam/components/arm/arm.py @@ -1,8 +1,9 @@ import abc -from typing import Any, Dict, Final, List, Mapping, Optional +from typing import Any, Dict, Final, List, Mapping, Optional, TypeAlias from viam.components import KinematicsReturn from viam.components.component_base import ComponentBase +from viam.proto.component.arm import GetPropertiesResponse from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT from . import JointPositions, Mesh, MoveOptions, Pose @@ -31,6 +32,8 @@ class Arm(ComponentBase): For more information, see `Arm component `_. """ + Properties: "TypeAlias" = GetPropertiesResponse + API: Final = API(RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "arm") # pyright: ignore [reportIncompatibleVariableOverride] @abc.abstractmethod @@ -315,3 +318,85 @@ async def get_3d_models( For more information, see `Arm component `_. """ ... + + @abc.abstractmethod + async def set_manual_mode( + self, + manual_mode: bool, + enabled_for: int = 0, + *, + extra: Optional[Dict[str, Any]] = None, + timeout: Optional[float] = None, + **kwargs, + ): + """ + Enter or exit manual mode for an arm that supports it. + + :: + + my_arm = Arm.from_robot(robot=machine, name="my_arm") + + # Enter manual mode for at most 30 seconds. + await my_arm.set_manual_mode(manual_mode=True, enabled_for=30) + + # Exit manual mode. + await my_arm.set_manual_mode(manual_mode=False) + + Args: + manual_mode (bool): Whether to enter (``True``) or exit (``False``) manual mode. + enabled_for (int): How long to stay in manual mode, in seconds. ``0`` means no time limit. + + For more information, see `Arm component `_. + """ + ... + + @abc.abstractmethod + async def get_manual_mode( + self, + *, + extra: Optional[Dict[str, Any]] = None, + timeout: Optional[float] = None, + **kwargs, + ) -> bool: + """ + Get whether the arm is currently in manual mode. + + :: + + my_arm = Arm.from_robot(robot=machine, name="my_arm") + + # Print whether the arm is currently in manual mode. + print(await my_arm.get_manual_mode()) + + Returns: + bool: Whether the arm is in manual mode. + + For more information, see `Arm component `_. + """ + ... + + @abc.abstractmethod + async def get_properties( + self, + *, + extra: Optional[Dict[str, Any]] = None, + timeout: Optional[float] = None, + **kwargs, + ) -> Properties: + """ + Get a mapping of each optional feature to whether it is supported by this arm. + + :: + + my_arm = Arm.from_robot(robot=machine, name="my_arm") + + # Get the properties of the arm. + properties = await my_arm.get_properties() + + Returns: + Properties: The arm's properties; whether it supports software-enabled manual mode + and whether it supports direct cartesian commands (``move_to_position``). + + For more information, see `Arm component `_. + """ + ... diff --git a/src/viam/components/arm/client.py b/src/viam/components/arm/client.py index a602d6bda..343ab8885 100644 --- a/src/viam/components/arm/client.py +++ b/src/viam/components/arm/client.py @@ -21,6 +21,9 @@ GetEndPositionResponse, GetJointPositionsRequest, GetJointPositionsResponse, + GetManualModeRequest, + GetManualModeResponse, + GetPropertiesRequest, IsMovingRequest, IsMovingResponse, JointPositions, @@ -28,6 +31,7 @@ MoveThroughJointPositionsRequest, MoveToJointPositionsRequest, MoveToPositionRequest, + SetManualModeRequest, StopRequest, ) from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase @@ -173,3 +177,39 @@ async def get_3d_models( 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) + + async def set_manual_mode( + self, + manual_mode: bool, + enabled_for: int = 0, + *, + extra: Optional[Dict[str, Any]] = None, + timeout: Optional[float] = None, + **kwargs, + ): + md = kwargs.get("metadata", self.Metadata()).proto + request = SetManualModeRequest(name=self.name, manual_mode=manual_mode, enabled_for=enabled_for, extra=dict_to_struct(extra)) + await self.client.SetManualMode(request, timeout=timeout, metadata=md) + + async def get_manual_mode( + self, + *, + extra: Optional[Dict[str, Any]] = None, + timeout: Optional[float] = None, + **kwargs, + ) -> bool: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetManualModeRequest(name=self.name, extra=dict_to_struct(extra)) + response: GetManualModeResponse = await self.client.GetManualMode(request, timeout=timeout, metadata=md) + return response.manual_mode + + async def get_properties( + self, + *, + extra: Optional[Dict[str, Any]] = None, + timeout: Optional[float] = None, + **kwargs, + ) -> Arm.Properties: + md = kwargs.get("metadata", self.Metadata()).proto + request = GetPropertiesRequest(name=self.name, extra=dict_to_struct(extra)) + return await self.client.GetProperties(request, timeout=timeout, metadata=md) diff --git a/src/viam/components/arm/service.py b/src/viam/components/arm/service.py index 8b4884eb6..741711a5b 100644 --- a/src/viam/components/arm/service.py +++ b/src/viam/components/arm/service.py @@ -17,6 +17,10 @@ GetEndPositionResponse, GetJointPositionsRequest, GetJointPositionsResponse, + GetManualModeRequest, + GetManualModeResponse, + GetPropertiesRequest, + GetPropertiesResponse, IsMovingRequest, IsMovingResponse, MoveThroughJointPositionsRequest, @@ -25,6 +29,8 @@ MoveToJointPositionsResponse, MoveToPositionRequest, MoveToPositionResponse, + SetManualModeRequest, + SetManualModeResponse, StopRequest, StopResponse, UnimplementedArmServiceBase, @@ -169,3 +175,35 @@ async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometries geometries = await arm.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout) response = GetGeometriesResponse(geometries=geometries) await stream.send_message(response) + + async def SetManualMode(self, stream: Stream[SetManualModeRequest, SetManualModeResponse]) -> 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 + await arm.set_manual_mode( + request.manual_mode, + enabled_for=request.enabled_for, + extra=struct_to_dict(request.extra), + timeout=timeout, + metadata=stream.metadata, + ) + response = SetManualModeResponse() + await stream.send_message(response) + + async def GetManualMode(self, stream: Stream[GetManualModeRequest, GetManualModeResponse]) -> 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 + manual_mode = await arm.get_manual_mode(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata) + response = GetManualModeResponse(manual_mode=manual_mode) + await stream.send_message(response) + + async def GetProperties(self, stream: Stream[GetPropertiesRequest, GetPropertiesResponse]) -> 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 + response = await arm.get_properties(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata) + await stream.send_message(response) diff --git a/src/viam/gen/component/arm/v1/arm_grpc.py b/src/viam/gen/component/arm/v1/arm_grpc.py index 7eb7c2db4..7f37372e9 100644 --- a/src/viam/gen/component/arm/v1/arm_grpc.py +++ b/src/viam/gen/component/arm/v1/arm_grpc.py @@ -65,8 +65,20 @@ async def GetGeometries(self, stream: 'grpclib.server.Stream[common.v1.common_pb async def Get3DModels(self, stream: 'grpclib.server.Stream[common.v1.common_pb2.Get3DModelsRequest, common.v1.common_pb2.Get3DModelsResponse]') -> None: pass + @abc.abstractmethod + async def SetManualMode(self, stream: 'grpclib.server.Stream[component.arm.v1.arm_pb2.SetManualModeRequest, component.arm.v1.arm_pb2.SetManualModeResponse]') -> None: + pass + + @abc.abstractmethod + async def GetManualMode(self, stream: 'grpclib.server.Stream[component.arm.v1.arm_pb2.GetManualModeRequest, component.arm.v1.arm_pb2.GetManualModeResponse]') -> None: + pass + + @abc.abstractmethod + async def GetProperties(self, stream: 'grpclib.server.Stream[component.arm.v1.arm_pb2.GetPropertiesRequest, component.arm.v1.arm_pb2.GetPropertiesResponse]') -> None: + pass + def __mapping__(self) -> typing.Dict[str, grpclib.const.Handler]: - return {'/viam.component.arm.v1.ArmService/GetEndPosition': grpclib.const.Handler(self.GetEndPosition, grpclib.const.Cardinality.UNARY_UNARY, component.arm.v1.arm_pb2.GetEndPositionRequest, component.arm.v1.arm_pb2.GetEndPositionResponse), '/viam.component.arm.v1.ArmService/MoveToPosition': grpclib.const.Handler(self.MoveToPosition, grpclib.const.Cardinality.UNARY_UNARY, component.arm.v1.arm_pb2.MoveToPositionRequest, component.arm.v1.arm_pb2.MoveToPositionResponse), '/viam.component.arm.v1.ArmService/GetJointPositions': grpclib.const.Handler(self.GetJointPositions, grpclib.const.Cardinality.UNARY_UNARY, component.arm.v1.arm_pb2.GetJointPositionsRequest, component.arm.v1.arm_pb2.GetJointPositionsResponse), '/viam.component.arm.v1.ArmService/MoveToJointPositions': grpclib.const.Handler(self.MoveToJointPositions, grpclib.const.Cardinality.UNARY_UNARY, component.arm.v1.arm_pb2.MoveToJointPositionsRequest, component.arm.v1.arm_pb2.MoveToJointPositionsResponse), '/viam.component.arm.v1.ArmService/MoveThroughJointPositions': grpclib.const.Handler(self.MoveThroughJointPositions, grpclib.const.Cardinality.UNARY_UNARY, component.arm.v1.arm_pb2.MoveThroughJointPositionsRequest, component.arm.v1.arm_pb2.MoveThroughJointPositionsResponse), '/viam.component.arm.v1.ArmService/MoveThroughJointPositionsStreamed': grpclib.const.Handler(self.MoveThroughJointPositionsStreamed, grpclib.const.Cardinality.STREAM_STREAM, component.arm.v1.arm_pb2.MoveThroughJointPositionsStreamedRequest, component.arm.v1.arm_pb2.MoveThroughJointPositionsStreamedResponse), '/viam.component.arm.v1.ArmService/Stop': grpclib.const.Handler(self.Stop, grpclib.const.Cardinality.UNARY_UNARY, component.arm.v1.arm_pb2.StopRequest, component.arm.v1.arm_pb2.StopResponse), '/viam.component.arm.v1.ArmService/IsMoving': grpclib.const.Handler(self.IsMoving, grpclib.const.Cardinality.UNARY_UNARY, component.arm.v1.arm_pb2.IsMovingRequest, component.arm.v1.arm_pb2.IsMovingResponse), '/viam.component.arm.v1.ArmService/DoCommand': grpclib.const.Handler(self.DoCommand, grpclib.const.Cardinality.UNARY_UNARY, common.v1.common_pb2.DoCommandRequest, common.v1.common_pb2.DoCommandResponse), '/viam.component.arm.v1.ArmService/GetStatus': grpclib.const.Handler(self.GetStatus, grpclib.const.Cardinality.UNARY_UNARY, common.v1.common_pb2.GetStatusRequest, common.v1.common_pb2.GetStatusResponse), '/viam.component.arm.v1.ArmService/GetKinematics': grpclib.const.Handler(self.GetKinematics, grpclib.const.Cardinality.UNARY_UNARY, common.v1.common_pb2.GetKinematicsRequest, common.v1.common_pb2.GetKinematicsResponse), '/viam.component.arm.v1.ArmService/GetGeometries': grpclib.const.Handler(self.GetGeometries, grpclib.const.Cardinality.UNARY_UNARY, common.v1.common_pb2.GetGeometriesRequest, common.v1.common_pb2.GetGeometriesResponse), '/viam.component.arm.v1.ArmService/Get3DModels': grpclib.const.Handler(self.Get3DModels, grpclib.const.Cardinality.UNARY_UNARY, common.v1.common_pb2.Get3DModelsRequest, common.v1.common_pb2.Get3DModelsResponse)} + return {'/viam.component.arm.v1.ArmService/GetEndPosition': grpclib.const.Handler(self.GetEndPosition, grpclib.const.Cardinality.UNARY_UNARY, component.arm.v1.arm_pb2.GetEndPositionRequest, component.arm.v1.arm_pb2.GetEndPositionResponse), '/viam.component.arm.v1.ArmService/MoveToPosition': grpclib.const.Handler(self.MoveToPosition, grpclib.const.Cardinality.UNARY_UNARY, component.arm.v1.arm_pb2.MoveToPositionRequest, component.arm.v1.arm_pb2.MoveToPositionResponse), '/viam.component.arm.v1.ArmService/GetJointPositions': grpclib.const.Handler(self.GetJointPositions, grpclib.const.Cardinality.UNARY_UNARY, component.arm.v1.arm_pb2.GetJointPositionsRequest, component.arm.v1.arm_pb2.GetJointPositionsResponse), '/viam.component.arm.v1.ArmService/MoveToJointPositions': grpclib.const.Handler(self.MoveToJointPositions, grpclib.const.Cardinality.UNARY_UNARY, component.arm.v1.arm_pb2.MoveToJointPositionsRequest, component.arm.v1.arm_pb2.MoveToJointPositionsResponse), '/viam.component.arm.v1.ArmService/MoveThroughJointPositions': grpclib.const.Handler(self.MoveThroughJointPositions, grpclib.const.Cardinality.UNARY_UNARY, component.arm.v1.arm_pb2.MoveThroughJointPositionsRequest, component.arm.v1.arm_pb2.MoveThroughJointPositionsResponse), '/viam.component.arm.v1.ArmService/MoveThroughJointPositionsStreamed': grpclib.const.Handler(self.MoveThroughJointPositionsStreamed, grpclib.const.Cardinality.STREAM_STREAM, component.arm.v1.arm_pb2.MoveThroughJointPositionsStreamedRequest, component.arm.v1.arm_pb2.MoveThroughJointPositionsStreamedResponse), '/viam.component.arm.v1.ArmService/Stop': grpclib.const.Handler(self.Stop, grpclib.const.Cardinality.UNARY_UNARY, component.arm.v1.arm_pb2.StopRequest, component.arm.v1.arm_pb2.StopResponse), '/viam.component.arm.v1.ArmService/IsMoving': grpclib.const.Handler(self.IsMoving, grpclib.const.Cardinality.UNARY_UNARY, component.arm.v1.arm_pb2.IsMovingRequest, component.arm.v1.arm_pb2.IsMovingResponse), '/viam.component.arm.v1.ArmService/DoCommand': grpclib.const.Handler(self.DoCommand, grpclib.const.Cardinality.UNARY_UNARY, common.v1.common_pb2.DoCommandRequest, common.v1.common_pb2.DoCommandResponse), '/viam.component.arm.v1.ArmService/GetStatus': grpclib.const.Handler(self.GetStatus, grpclib.const.Cardinality.UNARY_UNARY, common.v1.common_pb2.GetStatusRequest, common.v1.common_pb2.GetStatusResponse), '/viam.component.arm.v1.ArmService/GetKinematics': grpclib.const.Handler(self.GetKinematics, grpclib.const.Cardinality.UNARY_UNARY, common.v1.common_pb2.GetKinematicsRequest, common.v1.common_pb2.GetKinematicsResponse), '/viam.component.arm.v1.ArmService/GetGeometries': grpclib.const.Handler(self.GetGeometries, grpclib.const.Cardinality.UNARY_UNARY, common.v1.common_pb2.GetGeometriesRequest, common.v1.common_pb2.GetGeometriesResponse), '/viam.component.arm.v1.ArmService/Get3DModels': grpclib.const.Handler(self.Get3DModels, grpclib.const.Cardinality.UNARY_UNARY, common.v1.common_pb2.Get3DModelsRequest, common.v1.common_pb2.Get3DModelsResponse), '/viam.component.arm.v1.ArmService/SetManualMode': grpclib.const.Handler(self.SetManualMode, grpclib.const.Cardinality.UNARY_UNARY, component.arm.v1.arm_pb2.SetManualModeRequest, component.arm.v1.arm_pb2.SetManualModeResponse), '/viam.component.arm.v1.ArmService/GetManualMode': grpclib.const.Handler(self.GetManualMode, grpclib.const.Cardinality.UNARY_UNARY, component.arm.v1.arm_pb2.GetManualModeRequest, component.arm.v1.arm_pb2.GetManualModeResponse), '/viam.component.arm.v1.ArmService/GetProperties': grpclib.const.Handler(self.GetProperties, grpclib.const.Cardinality.UNARY_UNARY, component.arm.v1.arm_pb2.GetPropertiesRequest, component.arm.v1.arm_pb2.GetPropertiesResponse)} class UnimplementedArmServiceBase(ArmServiceBase): @@ -109,6 +121,15 @@ async def GetGeometries(self, stream: 'grpclib.server.Stream[common.v1.common_pb async def Get3DModels(self, stream: 'grpclib.server.Stream[common.v1.common_pb2.Get3DModelsRequest, common.v1.common_pb2.Get3DModelsResponse]') -> None: raise grpclib.exceptions.GRPCError(grpclib.const.Status.UNIMPLEMENTED) + async def SetManualMode(self, stream: 'grpclib.server.Stream[component.arm.v1.arm_pb2.SetManualModeRequest, component.arm.v1.arm_pb2.SetManualModeResponse]') -> None: + raise grpclib.exceptions.GRPCError(grpclib.const.Status.UNIMPLEMENTED) + + async def GetManualMode(self, stream: 'grpclib.server.Stream[component.arm.v1.arm_pb2.GetManualModeRequest, component.arm.v1.arm_pb2.GetManualModeResponse]') -> None: + raise grpclib.exceptions.GRPCError(grpclib.const.Status.UNIMPLEMENTED) + + async def GetProperties(self, stream: 'grpclib.server.Stream[component.arm.v1.arm_pb2.GetPropertiesRequest, component.arm.v1.arm_pb2.GetPropertiesResponse]') -> None: + raise grpclib.exceptions.GRPCError(grpclib.const.Status.UNIMPLEMENTED) + class ArmServiceStub: def __init__(self, channel: grpclib.client.Channel) -> None: @@ -124,4 +145,7 @@ def __init__(self, channel: grpclib.client.Channel) -> None: self.GetStatus = grpclib.client.UnaryUnaryMethod(channel, '/viam.component.arm.v1.ArmService/GetStatus', common.v1.common_pb2.GetStatusRequest, common.v1.common_pb2.GetStatusResponse) self.GetKinematics = grpclib.client.UnaryUnaryMethod(channel, '/viam.component.arm.v1.ArmService/GetKinematics', common.v1.common_pb2.GetKinematicsRequest, common.v1.common_pb2.GetKinematicsResponse) self.GetGeometries = grpclib.client.UnaryUnaryMethod(channel, '/viam.component.arm.v1.ArmService/GetGeometries', common.v1.common_pb2.GetGeometriesRequest, common.v1.common_pb2.GetGeometriesResponse) - self.Get3DModels = grpclib.client.UnaryUnaryMethod(channel, '/viam.component.arm.v1.ArmService/Get3DModels', common.v1.common_pb2.Get3DModelsRequest, common.v1.common_pb2.Get3DModelsResponse) \ No newline at end of file + self.Get3DModels = grpclib.client.UnaryUnaryMethod(channel, '/viam.component.arm.v1.ArmService/Get3DModels', common.v1.common_pb2.Get3DModelsRequest, common.v1.common_pb2.Get3DModelsResponse) + self.SetManualMode = grpclib.client.UnaryUnaryMethod(channel, '/viam.component.arm.v1.ArmService/SetManualMode', component.arm.v1.arm_pb2.SetManualModeRequest, component.arm.v1.arm_pb2.SetManualModeResponse) + self.GetManualMode = grpclib.client.UnaryUnaryMethod(channel, '/viam.component.arm.v1.ArmService/GetManualMode', component.arm.v1.arm_pb2.GetManualModeRequest, component.arm.v1.arm_pb2.GetManualModeResponse) + self.GetProperties = grpclib.client.UnaryUnaryMethod(channel, '/viam.component.arm.v1.ArmService/GetProperties', component.arm.v1.arm_pb2.GetPropertiesRequest, component.arm.v1.arm_pb2.GetPropertiesResponse) \ No newline at end of file diff --git a/src/viam/gen/component/arm/v1/arm_pb2.py b/src/viam/gen/component/arm/v1/arm_pb2.py index e419b1d79..5f04959ac 100644 --- a/src/viam/gen/component/arm/v1/arm_pb2.py +++ b/src/viam/gen/component/arm/v1/arm_pb2.py @@ -10,7 +10,7 @@ from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1acomponent/arm/v1/arm.proto\x12\x15viam.component.arm.v1\x1a\x16common/v1/common.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto"Z\n\x15GetEndPositionRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"B\n\x16GetEndPositionResponse\x12(\n\x04pose\x18\x01 \x01(\x0b2\x14.viam.common.v1.PoseR\x04pose"(\n\x0eJointPositions\x12\x16\n\x06values\x18\x01 \x03(\x01R\x06values")\n\x0fJointVelocities\x12\x16\n\x06values\x18\x01 \x03(\x01R\x06values",\n\x12JointAccelerations\x12\x16\n\x06values\x18\x01 \x03(\x01R\x06values"]\n\x18GetJointPositionsRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"`\n\x19GetJointPositionsResponse\x12C\n\tpositions\x18\x01 \x01(\x0b2%.viam.component.arm.v1.JointPositionsR\tpositions"\x80\x01\n\x15MoveToPositionRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12$\n\x02to\x18\x02 \x01(\x0b2\x14.viam.common.v1.PoseR\x02to\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"\x18\n\x16MoveToPositionResponse"\xa5\x01\n\x1bMoveToJointPositionsRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12C\n\tpositions\x18\x02 \x01(\x0b2%.viam.component.arm.v1.JointPositionsR\tpositions\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"\x1e\n\x1cMoveToJointPositionsResponse"\xf9\x01\n MoveThroughJointPositionsRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12C\n\tpositions\x18\x02 \x03(\x0b2%.viam.component.arm.v1.JointPositionsR\tpositions\x12A\n\x07options\x18\x03 \x01(\x0b2".viam.component.arm.v1.MoveOptionsH\x00R\x07options\x88\x01\x01\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extraB\n\n\x08_options"#\n!MoveThroughJointPositionsResponse"\xc2\x03\n\x0fTrajectoryPoint\x12-\n\x04time\x18\x01 \x01(\x0b2\x19.google.protobuf.DurationR\x04time\x12C\n\tpositions\x18\x02 \x01(\x0b2%.viam.component.arm.v1.JointPositionsR\tpositions\x12b\n\x0bconstraints\x18\x03 \x01(\x0b2;.viam.component.arm.v1.TrajectoryPoint.KinematicConstraintsH\x00R\x0bconstraints\x88\x01\x01\x1a\xc6\x01\n\x14KinematicConstraints\x12F\n\nvelocities\x18\x01 \x01(\x0b2&.viam.component.arm.v1.JointVelocitiesR\nvelocities\x12T\n\raccelerations\x18\x02 \x01(\x0b2).viam.component.arm.v1.JointAccelerationsH\x00R\raccelerations\x88\x01\x01B\x10\n\x0e_accelerationsB\x0e\n\x0c_constraints"\x98\x03\n(MoveThroughJointPositionsStreamedRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12Z\n\x04init\x18\x02 \x01(\x0b2D.viam.component.arm.v1.MoveThroughJointPositionsStreamedRequest.InitH\x00R\x04init\x12g\n\x05batch\x18\x03 \x01(\x0b2O.viam.component.arm.v1.MoveThroughJointPositionsStreamedRequest.TrajectoryBatchH\x00R\x05batch\x1a5\n\x04Init\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra\x1aQ\n\x0fTrajectoryBatch\x12>\n\x06points\x18\x01 \x03(\x0b2&.viam.component.arm.v1.TrajectoryPointR\x06pointsB\t\n\x07message"\xd0\x01\n)MoveThroughJointPositionsStreamedResponse\x12]\n\x03ack\x18\x01 \x01(\x0b2I.viam.component.arm.v1.MoveThroughJointPositionsStreamedResponse.BatchAckH\x00R\x03ack\x1a9\n\x08BatchAck\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extraB\t\n\x07message"P\n\x0bStopRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"\x0e\n\x0cStopResponse"\xae\x01\n\x06Status\x127\n\x0cend_position\x18\x01 \x01(\x0b2\x14.viam.common.v1.PoseR\x0bendPosition\x12N\n\x0fjoint_positions\x18\x02 \x01(\x0b2%.viam.component.arm.v1.JointPositionsR\x0ejointPositions\x12\x1b\n\tis_moving\x18\x03 \x01(\x08R\x08isMoving"%\n\x0fIsMovingRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name"/\n\x10IsMovingResponse\x12\x1b\n\tis_moving\x18\x01 \x01(\x08R\x08isMoving"\xe3\x02\n\x0bMoveOptions\x123\n\x14max_vel_degs_per_sec\x18\x01 \x01(\x01H\x00R\x10maxVelDegsPerSec\x88\x01\x01\x125\n\x15max_acc_degs_per_sec2\x18\x02 \x01(\x01H\x01R\x11maxAccDegsPerSec2\x88\x01\x01\x12;\n\x1bmax_vel_degs_per_sec_joints\x18\x03 \x03(\x01R\x16maxVelDegsPerSecJoints\x12=\n\x1cmax_acc_degs_per_sec2_joints\x18\x04 \x03(\x01R\x17maxAccDegsPerSec2Joints\x12\'\n\rmax_tcp_speed\x18\x05 \x01(\x01H\x02R\x0bmaxTcpSpeed\x88\x01\x01B\x17\n\x15_max_vel_degs_per_secB\x18\n\x16_max_acc_degs_per_sec2B\x10\n\x0e_max_tcp_speed2\xbb\x10\n\nArmService\x12\xa1\x01\n\x0eGetEndPosition\x12,.viam.component.arm.v1.GetEndPositionRequest\x1a-.viam.component.arm.v1.GetEndPositionResponse"2\x82\xd3\xe4\x93\x02,\x12*/viam/api/v1/component/arm/{name}/position\x12\xa5\x01\n\x0eMoveToPosition\x12,.viam.component.arm.v1.MoveToPositionRequest\x1a-.viam.component.arm.v1.MoveToPositionResponse"6\xa0\x92)\x01\x82\xd3\xe4\x93\x02,\x1a*/viam/api/v1/component/arm/{name}/position\x12\xb1\x01\n\x11GetJointPositions\x12/.viam.component.arm.v1.GetJointPositionsRequest\x1a0.viam.component.arm.v1.GetJointPositionsResponse"9\x82\xd3\xe4\x93\x023\x121/viam/api/v1/component/arm/{name}/joint_positions\x12\xbe\x01\n\x14MoveToJointPositions\x122.viam.component.arm.v1.MoveToJointPositionsRequest\x1a3.viam.component.arm.v1.MoveToJointPositionsResponse"=\xa0\x92)\x01\x82\xd3\xe4\x93\x023\x1a1/viam/api/v1/component/arm/{name}/joint_positions\x12\xda\x01\n\x19MoveThroughJointPositions\x127.viam.component.arm.v1.MoveThroughJointPositionsRequest\x1a8.viam.component.arm.v1.MoveThroughJointPositionsResponse"J\xa0\x92)\x01\x82\xd3\xe4\x93\x02@">/viam/api/v1/component/arm/{name}/move_through_joint_positions\x12\xb0\x01\n!MoveThroughJointPositionsStreamed\x12?.viam.component.arm.v1.MoveThroughJointPositionsStreamedRequest\x1a@.viam.component.arm.v1.MoveThroughJointPositionsStreamedResponse"\x04\xa0\x92)\x01(\x010\x01\x12\x7f\n\x04Stop\x12".viam.component.arm.v1.StopRequest\x1a#.viam.component.arm.v1.StopResponse".\x82\xd3\xe4\x93\x02("&/viam/api/v1/component/arm/{name}/stop\x12\x90\x01\n\x08IsMoving\x12&.viam.component.arm.v1.IsMovingRequest\x1a\'.viam.component.arm.v1.IsMovingResponse"3\x82\xd3\xe4\x93\x02-\x12+/viam/api/v1/component/arm/{name}/is_moving\x12\x86\x01\n\tDoCommand\x12 .viam.common.v1.DoCommandRequest\x1a!.viam.common.v1.DoCommandResponse"4\x82\xd3\xe4\x93\x02.",/viam/api/v1/component/arm/{name}/do_command\x12\x86\x01\n\tGetStatus\x12 .viam.common.v1.GetStatusRequest\x1a!.viam.common.v1.GetStatusResponse"4\x82\xd3\xe4\x93\x02.\x12,/viam/api/v1/component/arm/{name}/get_status\x12\x92\x01\n\rGetKinematics\x12$.viam.common.v1.GetKinematicsRequest\x1a%.viam.common.v1.GetKinematicsResponse"4\x82\xd3\xe4\x93\x02.\x12,/viam/api/v1/component/arm/{name}/kinematics\x12\x92\x01\n\rGetGeometries\x12$.viam.common.v1.GetGeometriesRequest\x1a%.viam.common.v1.GetGeometriesResponse"4\x82\xd3\xe4\x93\x02.\x12,/viam/api/v1/component/arm/{name}/geometries\x12\x8b\x01\n\x0bGet3DModels\x12".viam.common.v1.Get3DModelsRequest\x1a#.viam.common.v1.Get3DModelsResponse"3\x82\xd3\xe4\x93\x02-\x12+/viam/api/v1/component/arm/{name}/3d_modelsB=\n\x19com.viam.component.arm.v1Z go.viam.com/api/component/arm/v1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1acomponent/arm/v1/arm.proto\x12\x15viam.component.arm.v1\x1a\x16common/v1/common.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto"Z\n\x15GetEndPositionRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"B\n\x16GetEndPositionResponse\x12(\n\x04pose\x18\x01 \x01(\x0b2\x14.viam.common.v1.PoseR\x04pose"(\n\x0eJointPositions\x12\x16\n\x06values\x18\x01 \x03(\x01R\x06values")\n\x0fJointVelocities\x12\x16\n\x06values\x18\x01 \x03(\x01R\x06values",\n\x12JointAccelerations\x12\x16\n\x06values\x18\x01 \x03(\x01R\x06values"]\n\x18GetJointPositionsRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"`\n\x19GetJointPositionsResponse\x12C\n\tpositions\x18\x01 \x01(\x0b2%.viam.component.arm.v1.JointPositionsR\tpositions"\x80\x01\n\x15MoveToPositionRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12$\n\x02to\x18\x02 \x01(\x0b2\x14.viam.common.v1.PoseR\x02to\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"\x18\n\x16MoveToPositionResponse"\xa5\x01\n\x1bMoveToJointPositionsRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12C\n\tpositions\x18\x02 \x01(\x0b2%.viam.component.arm.v1.JointPositionsR\tpositions\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"\x1e\n\x1cMoveToJointPositionsResponse"\xf9\x01\n MoveThroughJointPositionsRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12C\n\tpositions\x18\x02 \x03(\x0b2%.viam.component.arm.v1.JointPositionsR\tpositions\x12A\n\x07options\x18\x03 \x01(\x0b2".viam.component.arm.v1.MoveOptionsH\x00R\x07options\x88\x01\x01\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extraB\n\n\x08_options"#\n!MoveThroughJointPositionsResponse"\xc2\x03\n\x0fTrajectoryPoint\x12-\n\x04time\x18\x01 \x01(\x0b2\x19.google.protobuf.DurationR\x04time\x12C\n\tpositions\x18\x02 \x01(\x0b2%.viam.component.arm.v1.JointPositionsR\tpositions\x12b\n\x0bconstraints\x18\x03 \x01(\x0b2;.viam.component.arm.v1.TrajectoryPoint.KinematicConstraintsH\x00R\x0bconstraints\x88\x01\x01\x1a\xc6\x01\n\x14KinematicConstraints\x12F\n\nvelocities\x18\x01 \x01(\x0b2&.viam.component.arm.v1.JointVelocitiesR\nvelocities\x12T\n\raccelerations\x18\x02 \x01(\x0b2).viam.component.arm.v1.JointAccelerationsH\x00R\raccelerations\x88\x01\x01B\x10\n\x0e_accelerationsB\x0e\n\x0c_constraints"\x98\x03\n(MoveThroughJointPositionsStreamedRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12Z\n\x04init\x18\x02 \x01(\x0b2D.viam.component.arm.v1.MoveThroughJointPositionsStreamedRequest.InitH\x00R\x04init\x12g\n\x05batch\x18\x03 \x01(\x0b2O.viam.component.arm.v1.MoveThroughJointPositionsStreamedRequest.TrajectoryBatchH\x00R\x05batch\x1a5\n\x04Init\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra\x1aQ\n\x0fTrajectoryBatch\x12>\n\x06points\x18\x01 \x03(\x0b2&.viam.component.arm.v1.TrajectoryPointR\x06pointsB\t\n\x07message"\xd0\x01\n)MoveThroughJointPositionsStreamedResponse\x12]\n\x03ack\x18\x01 \x01(\x0b2I.viam.component.arm.v1.MoveThroughJointPositionsStreamedResponse.BatchAckH\x00R\x03ack\x1a9\n\x08BatchAck\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extraB\t\n\x07message"P\n\x0bStopRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"\x0e\n\x0cStopResponse"\xae\x01\n\x06Status\x127\n\x0cend_position\x18\x01 \x01(\x0b2\x14.viam.common.v1.PoseR\x0bendPosition\x12N\n\x0fjoint_positions\x18\x02 \x01(\x0b2%.viam.component.arm.v1.JointPositionsR\x0ejointPositions\x12\x1b\n\tis_moving\x18\x03 \x01(\x08R\x08isMoving"%\n\x0fIsMovingRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name"/\n\x10IsMovingResponse\x12\x1b\n\tis_moving\x18\x01 \x01(\x08R\x08isMoving"\xe3\x02\n\x0bMoveOptions\x123\n\x14max_vel_degs_per_sec\x18\x01 \x01(\x01H\x00R\x10maxVelDegsPerSec\x88\x01\x01\x125\n\x15max_acc_degs_per_sec2\x18\x02 \x01(\x01H\x01R\x11maxAccDegsPerSec2\x88\x01\x01\x12;\n\x1bmax_vel_degs_per_sec_joints\x18\x03 \x03(\x01R\x16maxVelDegsPerSecJoints\x12=\n\x1cmax_acc_degs_per_sec2_joints\x18\x04 \x03(\x01R\x17maxAccDegsPerSec2Joints\x12\'\n\rmax_tcp_speed\x18\x05 \x01(\x01H\x02R\x0bmaxTcpSpeed\x88\x01\x01B\x17\n\x15_max_vel_degs_per_secB\x18\n\x16_max_acc_degs_per_sec2B\x10\n\x0e_max_tcp_speed"\x9b\x01\n\x14SetManualModeRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x1f\n\x0bmanual_mode\x18\x02 \x01(\x08R\nmanualMode\x12\x1f\n\x0benabled_for\x18\x03 \x01(\x05R\nenabledFor\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"\x17\n\x15SetManualModeResponse"Y\n\x14GetManualModeRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"8\n\x15GetManualModeResponse\x12\x1f\n\x0bmanual_mode\x18\x01 \x01(\x08R\nmanualMode"Y\n\x14GetPropertiesRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"\x85\x01\n\x15GetPropertiesResponse\x12.\n\x13support_manual_mode\x18\x01 \x01(\x08R\x11supportManualMode\x12<\n\x1asupport_cartesian_commands\x18\x02 \x01(\x08R\x18supportCartesianCommands2\xa4\x14\n\nArmService\x12\xa1\x01\n\x0eGetEndPosition\x12,.viam.component.arm.v1.GetEndPositionRequest\x1a-.viam.component.arm.v1.GetEndPositionResponse"2\x82\xd3\xe4\x93\x02,\x12*/viam/api/v1/component/arm/{name}/position\x12\xa5\x01\n\x0eMoveToPosition\x12,.viam.component.arm.v1.MoveToPositionRequest\x1a-.viam.component.arm.v1.MoveToPositionResponse"6\xa0\x92)\x01\x82\xd3\xe4\x93\x02,\x1a*/viam/api/v1/component/arm/{name}/position\x12\xb1\x01\n\x11GetJointPositions\x12/.viam.component.arm.v1.GetJointPositionsRequest\x1a0.viam.component.arm.v1.GetJointPositionsResponse"9\x82\xd3\xe4\x93\x023\x121/viam/api/v1/component/arm/{name}/joint_positions\x12\xbe\x01\n\x14MoveToJointPositions\x122.viam.component.arm.v1.MoveToJointPositionsRequest\x1a3.viam.component.arm.v1.MoveToJointPositionsResponse"=\xa0\x92)\x01\x82\xd3\xe4\x93\x023\x1a1/viam/api/v1/component/arm/{name}/joint_positions\x12\xda\x01\n\x19MoveThroughJointPositions\x127.viam.component.arm.v1.MoveThroughJointPositionsRequest\x1a8.viam.component.arm.v1.MoveThroughJointPositionsResponse"J\xa0\x92)\x01\x82\xd3\xe4\x93\x02@">/viam/api/v1/component/arm/{name}/move_through_joint_positions\x12\xb0\x01\n!MoveThroughJointPositionsStreamed\x12?.viam.component.arm.v1.MoveThroughJointPositionsStreamedRequest\x1a@.viam.component.arm.v1.MoveThroughJointPositionsStreamedResponse"\x04\xa0\x92)\x01(\x010\x01\x12\x7f\n\x04Stop\x12".viam.component.arm.v1.StopRequest\x1a#.viam.component.arm.v1.StopResponse".\x82\xd3\xe4\x93\x02("&/viam/api/v1/component/arm/{name}/stop\x12\x90\x01\n\x08IsMoving\x12&.viam.component.arm.v1.IsMovingRequest\x1a\'.viam.component.arm.v1.IsMovingResponse"3\x82\xd3\xe4\x93\x02-\x12+/viam/api/v1/component/arm/{name}/is_moving\x12\x86\x01\n\tDoCommand\x12 .viam.common.v1.DoCommandRequest\x1a!.viam.common.v1.DoCommandResponse"4\x82\xd3\xe4\x93\x02.",/viam/api/v1/component/arm/{name}/do_command\x12\x86\x01\n\tGetStatus\x12 .viam.common.v1.GetStatusRequest\x1a!.viam.common.v1.GetStatusResponse"4\x82\xd3\xe4\x93\x02.\x12,/viam/api/v1/component/arm/{name}/get_status\x12\x92\x01\n\rGetKinematics\x12$.viam.common.v1.GetKinematicsRequest\x1a%.viam.common.v1.GetKinematicsResponse"4\x82\xd3\xe4\x93\x02.\x12,/viam/api/v1/component/arm/{name}/kinematics\x12\x92\x01\n\rGetGeometries\x12$.viam.common.v1.GetGeometriesRequest\x1a%.viam.common.v1.GetGeometriesResponse"4\x82\xd3\xe4\x93\x02.\x12,/viam/api/v1/component/arm/{name}/geometries\x12\x8b\x01\n\x0bGet3DModels\x12".viam.common.v1.Get3DModelsRequest\x1a#.viam.common.v1.Get3DModelsResponse"3\x82\xd3\xe4\x93\x02-\x12+/viam/api/v1/component/arm/{name}/3d_models\x12\xa1\x01\n\rSetManualMode\x12+.viam.component.arm.v1.SetManualModeRequest\x1a,.viam.component.arm.v1.SetManualModeResponse"5\x82\xd3\xe4\x93\x02/\x1a-/viam/api/v1/component/arm/{name}/manual_mode\x12\xa1\x01\n\rGetManualMode\x12+.viam.component.arm.v1.GetManualModeRequest\x1a,.viam.component.arm.v1.GetManualModeResponse"5\x82\xd3\xe4\x93\x02/\x12-/viam/api/v1/component/arm/{name}/manual_mode\x12\x9e\x01\n\rGetProperties\x12+.viam.component.arm.v1.GetPropertiesRequest\x1a,.viam.component.arm.v1.GetPropertiesResponse"2\x82\xd3\xe4\x93\x02,\x12*/viam/api/v1/component/arm/{name}/featuresB=\n\x19com.viam.component.arm.v1Z go.viam.com/api/component/arm/v1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'component.arm.v1.arm_pb2', _globals) @@ -43,6 +43,12 @@ _globals['_ARMSERVICE'].methods_by_name['GetGeometries']._serialized_options = b'\x82\xd3\xe4\x93\x02.\x12,/viam/api/v1/component/arm/{name}/geometries' _globals['_ARMSERVICE'].methods_by_name['Get3DModels']._loaded_options = None _globals['_ARMSERVICE'].methods_by_name['Get3DModels']._serialized_options = b'\x82\xd3\xe4\x93\x02-\x12+/viam/api/v1/component/arm/{name}/3d_models' + _globals['_ARMSERVICE'].methods_by_name['SetManualMode']._loaded_options = None + _globals['_ARMSERVICE'].methods_by_name['SetManualMode']._serialized_options = b'\x82\xd3\xe4\x93\x02/\x1a-/viam/api/v1/component/arm/{name}/manual_mode' + _globals['_ARMSERVICE'].methods_by_name['GetManualMode']._loaded_options = None + _globals['_ARMSERVICE'].methods_by_name['GetManualMode']._serialized_options = b'\x82\xd3\xe4\x93\x02/\x12-/viam/api/v1/component/arm/{name}/manual_mode' + _globals['_ARMSERVICE'].methods_by_name['GetProperties']._loaded_options = None + _globals['_ARMSERVICE'].methods_by_name['GetProperties']._serialized_options = b'\x82\xd3\xe4\x93\x02,\x12*/viam/api/v1/component/arm/{name}/features' _globals['_GETENDPOSITIONREQUEST']._serialized_start = 169 _globals['_GETENDPOSITIONREQUEST']._serialized_end = 259 _globals['_GETENDPOSITIONRESPONSE']._serialized_start = 261 @@ -95,5 +101,17 @@ _globals['_ISMOVINGRESPONSE']._serialized_end = 2735 _globals['_MOVEOPTIONS']._serialized_start = 2738 _globals['_MOVEOPTIONS']._serialized_end = 3093 - _globals['_ARMSERVICE']._serialized_start = 3096 - _globals['_ARMSERVICE']._serialized_end = 5203 \ No newline at end of file + _globals['_SETMANUALMODEREQUEST']._serialized_start = 3096 + _globals['_SETMANUALMODEREQUEST']._serialized_end = 3251 + _globals['_SETMANUALMODERESPONSE']._serialized_start = 3253 + _globals['_SETMANUALMODERESPONSE']._serialized_end = 3276 + _globals['_GETMANUALMODEREQUEST']._serialized_start = 3278 + _globals['_GETMANUALMODEREQUEST']._serialized_end = 3367 + _globals['_GETMANUALMODERESPONSE']._serialized_start = 3369 + _globals['_GETMANUALMODERESPONSE']._serialized_end = 3425 + _globals['_GETPROPERTIESREQUEST']._serialized_start = 3427 + _globals['_GETPROPERTIESREQUEST']._serialized_end = 3516 + _globals['_GETPROPERTIESRESPONSE']._serialized_start = 3519 + _globals['_GETPROPERTIESRESPONSE']._serialized_end = 3652 + _globals['_ARMSERVICE']._serialized_start = 3655 + _globals['_ARMSERVICE']._serialized_end = 6251 \ No newline at end of file diff --git a/src/viam/gen/component/arm/v1/arm_pb2.pyi b/src/viam/gen/component/arm/v1/arm_pb2.pyi index d39d9e8f7..3530eb53b 100644 --- a/src/viam/gen/component/arm/v1/arm_pb2.pyi +++ b/src/viam/gen/component/arm/v1/arm_pb2.pyi @@ -644,4 +644,123 @@ class MoveOptions(_message.Message): @_typing.overload def WhichOneof(self, oneof_group: _WhichOneofArgType__max_vel_degs_per_sec) -> _WhichOneofReturnType__max_vel_degs_per_sec | None: ... -Global___MoveOptions: _TypeAlias = MoveOptions \ No newline at end of file +Global___MoveOptions: _TypeAlias = MoveOptions + +@_typing.final +class SetManualModeRequest(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + NAME_FIELD_NUMBER: _builtins.int + MANUAL_MODE_FIELD_NUMBER: _builtins.int + ENABLED_FOR_FIELD_NUMBER: _builtins.int + EXTRA_FIELD_NUMBER: _builtins.int + name: _builtins.str + 'Name of an arm' + manual_mode: _builtins.bool + 'True to enter manual mode, false to exit it' + enabled_for: _builtins.int + 'How long to stay in manual mode, in seconds; 0 means no time limit' + + @_builtins.property + def extra(self) -> _struct_pb2.Struct: + """Additional arguments to the method""" + + def __init__(self, *, name: _builtins.str=..., manual_mode: _builtins.bool=..., enabled_for: _builtins.int=..., extra: _struct_pb2.Struct | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['extra', b'extra'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['enabled_for', b'enabled_for', 'extra', b'extra', 'manual_mode', b'manual_mode', 'name', b'name'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___SetManualModeRequest: _TypeAlias = SetManualModeRequest + +@_typing.final +class SetManualModeResponse(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + + def __init__(self) -> None: + ... +Global___SetManualModeResponse: _TypeAlias = SetManualModeResponse + +@_typing.final +class GetManualModeRequest(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + NAME_FIELD_NUMBER: _builtins.int + EXTRA_FIELD_NUMBER: _builtins.int + name: _builtins.str + 'Name of an arm' + + @_builtins.property + def extra(self) -> _struct_pb2.Struct: + """Additional arguments to the method""" + + def __init__(self, *, name: _builtins.str=..., extra: _struct_pb2.Struct | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['extra', b'extra'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['extra', b'extra', 'name', b'name'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___GetManualModeRequest: _TypeAlias = GetManualModeRequest + +@_typing.final +class GetManualModeResponse(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + MANUAL_MODE_FIELD_NUMBER: _builtins.int + manual_mode: _builtins.bool + 'True if the arm is in manual mode' + + def __init__(self, *, manual_mode: _builtins.bool=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['manual_mode', b'manual_mode'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___GetManualModeResponse: _TypeAlias = GetManualModeResponse + +@_typing.final +class GetPropertiesRequest(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + NAME_FIELD_NUMBER: _builtins.int + EXTRA_FIELD_NUMBER: _builtins.int + name: _builtins.str + 'Name of an arm' + + @_builtins.property + def extra(self) -> _struct_pb2.Struct: + """Additional arguments to the method""" + + def __init__(self, *, name: _builtins.str=..., extra: _struct_pb2.Struct | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['extra', b'extra'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['extra', b'extra', 'name', b'name'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___GetPropertiesRequest: _TypeAlias = GetPropertiesRequest + +@_typing.final +class GetPropertiesResponse(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + SUPPORT_MANUAL_MODE_FIELD_NUMBER: _builtins.int + SUPPORT_CARTESIAN_COMMANDS_FIELD_NUMBER: _builtins.int + support_manual_mode: _builtins.bool + 'True if the arm supports software-enabled manual mode' + support_cartesian_commands: _builtins.bool + 'True if the arm supports direct cartesian commands (MoveToPosition is implemented)' + + def __init__(self, *, support_manual_mode: _builtins.bool=..., support_cartesian_commands: _builtins.bool=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['support_cartesian_commands', b'support_cartesian_commands', 'support_manual_mode', b'support_manual_mode'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___GetPropertiesResponse: _TypeAlias = GetPropertiesResponse \ No newline at end of file diff --git a/src/viam/gen/proto/rpc/webrtc/v1/signaling_pb2.py b/src/viam/gen/proto/rpc/webrtc/v1/signaling_pb2.py index b3bfab3c9..8bc395c98 100644 --- a/src/viam/gen/proto/rpc/webrtc/v1/signaling_pb2.py +++ b/src/viam/gen/proto/rpc/webrtc/v1/signaling_pb2.py @@ -9,13 +9,15 @@ from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 from google.rpc import status_pb2 as google_dot_rpc_dot_status__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#proto/rpc/webrtc/v1/signaling.proto\x12\x13proto.rpc.webrtc.v1\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x17google/rpc/status.proto"\xdf\x01\n\x0cICECandidate\x12\x1c\n\tcandidate\x18\x01 \x01(\tR\tcandidate\x12\x1c\n\x07sdp_mid\x18\x02 \x01(\tH\x00R\x06sdpMid\x88\x01\x01\x12+\n\x0fsdpm_line_index\x18\x03 \x01(\rH\x01R\rsdpmLineIndex\x88\x01\x01\x120\n\x11username_fragment\x18\x04 \x01(\tH\x02R\x10usernameFragment\x88\x01\x01B\n\n\x08_sdp_midB\x12\n\x10_sdpm_line_indexB\x14\n\x12_username_fragment"H\n\x0bCallRequest\x12\x10\n\x03sdp\x18\x01 \x01(\tR\x03sdp\x12\'\n\x0fdisable_trickle\x18\x02 \x01(\x08R\x0edisableTrickle")\n\x15CallResponseInitStage\x12\x10\n\x03sdp\x18\x01 \x01(\tR\x03sdp"Z\n\x17CallResponseUpdateStage\x12?\n\tcandidate\x18\x01 \x01(\x0b2!.proto.rpc.webrtc.v1.ICECandidateR\tcandidate"\xb5\x01\n\x0cCallResponse\x12\x12\n\x04uuid\x18\x01 \x01(\tR\x04uuid\x12@\n\x04init\x18\x02 \x01(\x0b2*.proto.rpc.webrtc.v1.CallResponseInitStageH\x00R\x04init\x12F\n\x06update\x18\x03 \x01(\x0b2,.proto.rpc.webrtc.v1.CallResponseUpdateStageH\x00R\x06updateB\x07\n\x05stage"\xb6\x01\n\x11CallUpdateRequest\x12\x12\n\x04uuid\x18\x01 \x01(\tR\x04uuid\x12A\n\tcandidate\x18\x02 \x01(\x0b2!.proto.rpc.webrtc.v1.ICECandidateH\x00R\tcandidate\x12\x14\n\x04done\x18\x03 \x01(\x08H\x00R\x04done\x12*\n\x05error\x18\x04 \x01(\x0b2\x12.google.rpc.StatusH\x00R\x05errorB\x08\n\x06update"\x14\n\x12CallUpdateResponse"[\n\tICEServer\x12\x12\n\x04urls\x18\x01 \x03(\tR\x04urls\x12\x1a\n\x08username\x18\x02 \x01(\tR\x08username\x12\x1e\n\ncredential\x18\x03 \x01(\tR\ncredential"\x8d\x01\n\x0cWebRTCConfig\x12T\n\x16additional_ice_servers\x18\x01 \x03(\x0b2\x1e.proto.rpc.webrtc.v1.ICEServerR\x14additionalIceServers\x12\'\n\x0fdisable_trickle\x18\x02 \x01(\x08R\x0edisableTrickle"\xc0\x01\n\x16AnswerRequestInitStage\x12\x10\n\x03sdp\x18\x01 \x01(\tR\x03sdp\x12J\n\x0foptional_config\x18\x02 \x01(\x0b2!.proto.rpc.webrtc.v1.WebRTCConfigR\x0eoptionalConfig\x12;\n\x08deadline\x18\x03 \x01(\x0b2\x1a.google.protobuf.TimestampH\x00R\x08deadline\x88\x01\x01B\x0b\n\t_deadline"[\n\x18AnswerRequestUpdateStage\x12?\n\tcandidate\x18\x01 \x01(\x0b2!.proto.rpc.webrtc.v1.ICECandidateR\tcandidate"\x18\n\x16AnswerRequestDoneStage"E\n\x17AnswerRequestErrorStage\x12*\n\x06status\x18\x01 \x01(\x0b2\x12.google.rpc.StatusR\x06status"\x1d\n\x1bAnswerRequestHeartbeatStage"\x93\x03\n\rAnswerRequest\x12\x12\n\x04uuid\x18\x01 \x01(\tR\x04uuid\x12A\n\x04init\x18\x02 \x01(\x0b2+.proto.rpc.webrtc.v1.AnswerRequestInitStageH\x00R\x04init\x12G\n\x06update\x18\x03 \x01(\x0b2-.proto.rpc.webrtc.v1.AnswerRequestUpdateStageH\x00R\x06update\x12A\n\x04done\x18\x04 \x01(\x0b2+.proto.rpc.webrtc.v1.AnswerRequestDoneStageH\x00R\x04done\x12D\n\x05error\x18\x05 \x01(\x0b2,.proto.rpc.webrtc.v1.AnswerRequestErrorStageH\x00R\x05error\x12P\n\theartbeat\x18\x06 \x01(\x0b20.proto.rpc.webrtc.v1.AnswerRequestHeartbeatStageH\x00R\theartbeatB\x07\n\x05stage"+\n\x17AnswerResponseInitStage\x12\x10\n\x03sdp\x18\x01 \x01(\tR\x03sdp"\\\n\x19AnswerResponseUpdateStage\x12?\n\tcandidate\x18\x01 \x01(\x0b2!.proto.rpc.webrtc.v1.ICECandidateR\tcandidate"\x19\n\x17AnswerResponseDoneStage"F\n\x18AnswerResponseErrorStage\x12*\n\x06status\x18\x01 \x01(\x0b2\x12.google.rpc.StatusR\x06status"\xc6\x02\n\x0eAnswerResponse\x12\x12\n\x04uuid\x18\x01 \x01(\tR\x04uuid\x12B\n\x04init\x18\x02 \x01(\x0b2,.proto.rpc.webrtc.v1.AnswerResponseInitStageH\x00R\x04init\x12H\n\x06update\x18\x03 \x01(\x0b2..proto.rpc.webrtc.v1.AnswerResponseUpdateStageH\x00R\x06update\x12B\n\x04done\x18\x04 \x01(\x0b2,.proto.rpc.webrtc.v1.AnswerResponseDoneStageH\x00R\x04done\x12E\n\x05error\x18\x05 \x01(\x0b2-.proto.rpc.webrtc.v1.AnswerResponseErrorStageH\x00R\x05errorB\x07\n\x05stage"\x1d\n\x1bOptionalWebRTCConfigRequest"Y\n\x1cOptionalWebRTCConfigResponse\x129\n\x06config\x18\x01 \x01(\x0b2!.proto.rpc.webrtc.v1.WebRTCConfigR\x06config"u\n\x13ConnectionCandidate\x129\n\x04type\x18\x01 \x01(\x0e2%.proto.rpc.webrtc.v1.ICECandidateTypeR\x04type\x12#\n\rrelay_address\x18\x02 \x01(\tR\x0crelayAddress"\x81\x03\n\x1fReportConnectionMetadataRequest\x12>\n\x05local\x18\x01 \x01(\x0b2(.proto.rpc.webrtc.v1.ConnectionCandidateR\x05local\x12@\n\x06remote\x18\x02 \x01(\x0b2(.proto.rpc.webrtc.v1.ConnectionCandidateR\x06remote\x12C\n\rreached_stage\x18\x03 \x01(\x0e2\x1e.proto.rpc.webrtc.v1.DialStageR\x0creachedStage\x12\x1f\n\x0bduration_ms\x18\x04 \x01(\rR\ndurationMs\x12S\n\x0esignaling_path\x18\x05 \x01(\x0e2,.proto.rpc.webrtc.v1.ConnectionSignalingPathR\rsignalingPath\x12!\n\x0cfailure_code\x18\x06 \x01(\x05R\x0bfailureCode""\n ReportConnectionMetadataResponse*\x8e\x01\n\x10ICECandidateType\x12"\n\x1eICE_CANDIDATE_TYPE_UNSPECIFIED\x10\x00\x12\x1b\n\x17ICE_CANDIDATE_TYPE_HOST\x10\x01\x12\x1b\n\x17ICE_CANDIDATE_TYPE_STUN\x10\x02\x12\x1c\n\x18ICE_CANDIDATE_TYPE_RELAY\x10\x03*\xf8\x01\n\tDialStage\x12\x1a\n\x16DIAL_STAGE_UNSPECIFIED\x10\x00\x12"\n\x1eDIAL_STAGE_SIGNALING_CONNECTED\x10\x01\x12\x1d\n\x19DIAL_STAGE_CONFIG_FETCHED\x10\x02\x12\x19\n\x15DIAL_STAGE_OFFER_SENT\x10\x03\x12\x1e\n\x1aDIAL_STAGE_ANSWER_RECEIVED\x10\x04\x12\x1c\n\x18DIAL_STAGE_ICE_CONNECTED\x10\x05\x12\x1d\n\x19DIAL_STAGE_DTLS_CONNECTED\x10\x06\x12\x14\n\x10DIAL_STAGE_READY\x10\x07*\xc1\x01\n\x17ConnectionSignalingPath\x12)\n%CONNECTION_SIGNALING_PATH_UNSPECIFIED\x10\x00\x12,\n(CONNECTION_SIGNALING_PATH_CLOUD_SIGNALED\x10\x01\x12(\n$CONNECTION_SIGNALING_PATH_MDNS_LOCAL\x10\x02\x12#\n\x1fCONNECTION_SIGNALING_PATH_LOCAL\x10\x032\xc3\x05\n\x10SignalingService\x12j\n\x04Call\x12 .proto.rpc.webrtc.v1.CallRequest\x1a!.proto.rpc.webrtc.v1.CallResponse"\x1b\x82\xd3\xe4\x93\x02\x15"\x13/rpc/webrtc/v1/call0\x01\x12\x81\x01\n\nCallUpdate\x12&.proto.rpc.webrtc.v1.CallUpdateRequest\x1a\'.proto.rpc.webrtc.v1.CallUpdateResponse""\x82\xd3\xe4\x93\x02\x1c\x1a\x1a/rpc/webrtc/v1/call_update\x12U\n\x06Answer\x12#.proto.rpc.webrtc.v1.AnswerResponse\x1a".proto.rpc.webrtc.v1.AnswerRequest(\x010\x01\x12\xaa\x01\n\x14OptionalWebRTCConfig\x120.proto.rpc.webrtc.v1.OptionalWebRTCConfigRequest\x1a1.proto.rpc.webrtc.v1.OptionalWebRTCConfigResponse"-\x82\xd3\xe4\x93\x02\'\x12%/rpc/webrtc/v1/optional_webrtc_config\x12\xba\x01\n\x18ReportConnectionMetadata\x124.proto.rpc.webrtc.v1.ReportConnectionMetadataRequest\x1a5.proto.rpc.webrtc.v1.ReportConnectionMetadataResponse"1\x82\xd3\xe4\x93\x02+")/rpc/webrtc/v1/report_connection_metadataB\'Z%go.viam.com/utils/proto/rpc/webrtc/v1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#proto/rpc/webrtc/v1/signaling.proto\x12\x13proto.rpc.webrtc.v1\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x17google/rpc/status.proto"\xdf\x01\n\x0cICECandidate\x12\x1c\n\tcandidate\x18\x01 \x01(\tR\tcandidate\x12\x1c\n\x07sdp_mid\x18\x02 \x01(\tH\x00R\x06sdpMid\x88\x01\x01\x12+\n\x0fsdpm_line_index\x18\x03 \x01(\rH\x01R\rsdpmLineIndex\x88\x01\x01\x120\n\x11username_fragment\x18\x04 \x01(\tH\x02R\x10usernameFragment\x88\x01\x01B\n\n\x08_sdp_midB\x12\n\x10_sdpm_line_indexB\x14\n\x12_username_fragment"H\n\x0bCallRequest\x12\x10\n\x03sdp\x18\x01 \x01(\tR\x03sdp\x12\'\n\x0fdisable_trickle\x18\x02 \x01(\x08R\x0edisableTrickle")\n\x15CallResponseInitStage\x12\x10\n\x03sdp\x18\x01 \x01(\tR\x03sdp"Z\n\x17CallResponseUpdateStage\x12?\n\tcandidate\x18\x01 \x01(\x0b2!.proto.rpc.webrtc.v1.ICECandidateR\tcandidate"\xb5\x01\n\x0cCallResponse\x12\x12\n\x04uuid\x18\x01 \x01(\tR\x04uuid\x12@\n\x04init\x18\x02 \x01(\x0b2*.proto.rpc.webrtc.v1.CallResponseInitStageH\x00R\x04init\x12F\n\x06update\x18\x03 \x01(\x0b2,.proto.rpc.webrtc.v1.CallResponseUpdateStageH\x00R\x06updateB\x07\n\x05stage"\xb6\x01\n\x11CallUpdateRequest\x12\x12\n\x04uuid\x18\x01 \x01(\tR\x04uuid\x12A\n\tcandidate\x18\x02 \x01(\x0b2!.proto.rpc.webrtc.v1.ICECandidateH\x00R\tcandidate\x12\x14\n\x04done\x18\x03 \x01(\x08H\x00R\x04done\x12*\n\x05error\x18\x04 \x01(\x0b2\x12.google.rpc.StatusH\x00R\x05errorB\x08\n\x06update"\x14\n\x12CallUpdateResponse"[\n\tICEServer\x12\x12\n\x04urls\x18\x01 \x03(\tR\x04urls\x12\x1a\n\x08username\x18\x02 \x01(\tR\x08username\x12\x1e\n\ncredential\x18\x03 \x01(\tR\ncredential"\x8d\x01\n\x0cWebRTCConfig\x12T\n\x16additional_ice_servers\x18\x01 \x03(\x0b2\x1e.proto.rpc.webrtc.v1.ICEServerR\x14additionalIceServers\x12\'\n\x0fdisable_trickle\x18\x02 \x01(\x08R\x0edisableTrickle"\xac\x03\n\x16AnswerRequestInitStage\x12\x10\n\x03sdp\x18\x01 \x01(\tR\x03sdp\x12J\n\x0foptional_config\x18\x02 \x01(\x0b2!.proto.rpc.webrtc.v1.WebRTCConfigR\x0eoptionalConfig\x12;\n\x08deadline\x18\x03 \x01(\x0b2\x1a.google.protobuf.TimestampH\x00R\x08deadline\x88\x01\x01\x12,\n\x12caller_auth_entity\x18\x04 \x01(\tR\x10callerAuthEntity\x12u\n\x14caller_auth_metadata\x18\x05 \x03(\x0b2C.proto.rpc.webrtc.v1.AnswerRequestInitStage.CallerAuthMetadataEntryR\x12callerAuthMetadata\x1aE\n\x17CallerAuthMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x028\x01B\x0b\n\t_deadline"[\n\x18AnswerRequestUpdateStage\x12?\n\tcandidate\x18\x01 \x01(\x0b2!.proto.rpc.webrtc.v1.ICECandidateR\tcandidate"\x18\n\x16AnswerRequestDoneStage"E\n\x17AnswerRequestErrorStage\x12*\n\x06status\x18\x01 \x01(\x0b2\x12.google.rpc.StatusR\x06status"\x1d\n\x1bAnswerRequestHeartbeatStage"\x93\x03\n\rAnswerRequest\x12\x12\n\x04uuid\x18\x01 \x01(\tR\x04uuid\x12A\n\x04init\x18\x02 \x01(\x0b2+.proto.rpc.webrtc.v1.AnswerRequestInitStageH\x00R\x04init\x12G\n\x06update\x18\x03 \x01(\x0b2-.proto.rpc.webrtc.v1.AnswerRequestUpdateStageH\x00R\x06update\x12A\n\x04done\x18\x04 \x01(\x0b2+.proto.rpc.webrtc.v1.AnswerRequestDoneStageH\x00R\x04done\x12D\n\x05error\x18\x05 \x01(\x0b2,.proto.rpc.webrtc.v1.AnswerRequestErrorStageH\x00R\x05error\x12P\n\theartbeat\x18\x06 \x01(\x0b20.proto.rpc.webrtc.v1.AnswerRequestHeartbeatStageH\x00R\theartbeatB\x07\n\x05stage"+\n\x17AnswerResponseInitStage\x12\x10\n\x03sdp\x18\x01 \x01(\tR\x03sdp"\\\n\x19AnswerResponseUpdateStage\x12?\n\tcandidate\x18\x01 \x01(\x0b2!.proto.rpc.webrtc.v1.ICECandidateR\tcandidate"\x19\n\x17AnswerResponseDoneStage"F\n\x18AnswerResponseErrorStage\x12*\n\x06status\x18\x01 \x01(\x0b2\x12.google.rpc.StatusR\x06status"\xc6\x02\n\x0eAnswerResponse\x12\x12\n\x04uuid\x18\x01 \x01(\tR\x04uuid\x12B\n\x04init\x18\x02 \x01(\x0b2,.proto.rpc.webrtc.v1.AnswerResponseInitStageH\x00R\x04init\x12H\n\x06update\x18\x03 \x01(\x0b2..proto.rpc.webrtc.v1.AnswerResponseUpdateStageH\x00R\x06update\x12B\n\x04done\x18\x04 \x01(\x0b2,.proto.rpc.webrtc.v1.AnswerResponseDoneStageH\x00R\x04done\x12E\n\x05error\x18\x05 \x01(\x0b2-.proto.rpc.webrtc.v1.AnswerResponseErrorStageH\x00R\x05errorB\x07\n\x05stage"\x1d\n\x1bOptionalWebRTCConfigRequest"Y\n\x1cOptionalWebRTCConfigResponse\x129\n\x06config\x18\x01 \x01(\x0b2!.proto.rpc.webrtc.v1.WebRTCConfigR\x06config"u\n\x13ConnectionCandidate\x129\n\x04type\x18\x01 \x01(\x0e2%.proto.rpc.webrtc.v1.ICECandidateTypeR\x04type\x12#\n\rrelay_address\x18\x02 \x01(\tR\x0crelayAddress"\x81\x03\n\x1fReportConnectionMetadataRequest\x12>\n\x05local\x18\x01 \x01(\x0b2(.proto.rpc.webrtc.v1.ConnectionCandidateR\x05local\x12@\n\x06remote\x18\x02 \x01(\x0b2(.proto.rpc.webrtc.v1.ConnectionCandidateR\x06remote\x12C\n\rreached_stage\x18\x03 \x01(\x0e2\x1e.proto.rpc.webrtc.v1.DialStageR\x0creachedStage\x12\x1f\n\x0bduration_ms\x18\x04 \x01(\rR\ndurationMs\x12S\n\x0esignaling_path\x18\x05 \x01(\x0e2,.proto.rpc.webrtc.v1.ConnectionSignalingPathR\rsignalingPath\x12!\n\x0cfailure_code\x18\x06 \x01(\x05R\x0bfailureCode""\n ReportConnectionMetadataResponse*\x8e\x01\n\x10ICECandidateType\x12"\n\x1eICE_CANDIDATE_TYPE_UNSPECIFIED\x10\x00\x12\x1b\n\x17ICE_CANDIDATE_TYPE_HOST\x10\x01\x12\x1b\n\x17ICE_CANDIDATE_TYPE_STUN\x10\x02\x12\x1c\n\x18ICE_CANDIDATE_TYPE_RELAY\x10\x03*\xf8\x01\n\tDialStage\x12\x1a\n\x16DIAL_STAGE_UNSPECIFIED\x10\x00\x12"\n\x1eDIAL_STAGE_SIGNALING_CONNECTED\x10\x01\x12\x1d\n\x19DIAL_STAGE_CONFIG_FETCHED\x10\x02\x12\x19\n\x15DIAL_STAGE_OFFER_SENT\x10\x03\x12\x1e\n\x1aDIAL_STAGE_ANSWER_RECEIVED\x10\x04\x12\x1c\n\x18DIAL_STAGE_ICE_CONNECTED\x10\x05\x12\x1d\n\x19DIAL_STAGE_DTLS_CONNECTED\x10\x06\x12\x14\n\x10DIAL_STAGE_READY\x10\x07*\xc1\x01\n\x17ConnectionSignalingPath\x12)\n%CONNECTION_SIGNALING_PATH_UNSPECIFIED\x10\x00\x12,\n(CONNECTION_SIGNALING_PATH_CLOUD_SIGNALED\x10\x01\x12(\n$CONNECTION_SIGNALING_PATH_MDNS_LOCAL\x10\x02\x12#\n\x1fCONNECTION_SIGNALING_PATH_LOCAL\x10\x032\xc3\x05\n\x10SignalingService\x12j\n\x04Call\x12 .proto.rpc.webrtc.v1.CallRequest\x1a!.proto.rpc.webrtc.v1.CallResponse"\x1b\x82\xd3\xe4\x93\x02\x15"\x13/rpc/webrtc/v1/call0\x01\x12\x81\x01\n\nCallUpdate\x12&.proto.rpc.webrtc.v1.CallUpdateRequest\x1a\'.proto.rpc.webrtc.v1.CallUpdateResponse""\x82\xd3\xe4\x93\x02\x1c\x1a\x1a/rpc/webrtc/v1/call_update\x12U\n\x06Answer\x12#.proto.rpc.webrtc.v1.AnswerResponse\x1a".proto.rpc.webrtc.v1.AnswerRequest(\x010\x01\x12\xaa\x01\n\x14OptionalWebRTCConfig\x120.proto.rpc.webrtc.v1.OptionalWebRTCConfigRequest\x1a1.proto.rpc.webrtc.v1.OptionalWebRTCConfigResponse"-\x82\xd3\xe4\x93\x02\'\x12%/rpc/webrtc/v1/optional_webrtc_config\x12\xba\x01\n\x18ReportConnectionMetadata\x124.proto.rpc.webrtc.v1.ReportConnectionMetadataRequest\x1a5.proto.rpc.webrtc.v1.ReportConnectionMetadataResponse"1\x82\xd3\xe4\x93\x02+")/rpc/webrtc/v1/report_connection_metadataB\'Z%go.viam.com/utils/proto/rpc/webrtc/v1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'proto.rpc.webrtc.v1.signaling_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'Z%go.viam.com/utils/proto/rpc/webrtc/v1' + _globals['_ANSWERREQUESTINITSTAGE_CALLERAUTHMETADATAENTRY']._loaded_options = None + _globals['_ANSWERREQUESTINITSTAGE_CALLERAUTHMETADATAENTRY']._serialized_options = b'8\x01' _globals['_SIGNALINGSERVICE'].methods_by_name['Call']._loaded_options = None _globals['_SIGNALINGSERVICE'].methods_by_name['Call']._serialized_options = b'\x82\xd3\xe4\x93\x02\x15"\x13/rpc/webrtc/v1/call' _globals['_SIGNALINGSERVICE'].methods_by_name['CallUpdate']._loaded_options = None @@ -24,12 +26,12 @@ _globals['_SIGNALINGSERVICE'].methods_by_name['OptionalWebRTCConfig']._serialized_options = b"\x82\xd3\xe4\x93\x02'\x12%/rpc/webrtc/v1/optional_webrtc_config" _globals['_SIGNALINGSERVICE'].methods_by_name['ReportConnectionMetadata']._loaded_options = None _globals['_SIGNALINGSERVICE'].methods_by_name['ReportConnectionMetadata']._serialized_options = b'\x82\xd3\xe4\x93\x02+")/rpc/webrtc/v1/report_connection_metadata' - _globals['_ICECANDIDATETYPE']._serialized_start = 3266 - _globals['_ICECANDIDATETYPE']._serialized_end = 3408 - _globals['_DIALSTAGE']._serialized_start = 3411 - _globals['_DIALSTAGE']._serialized_end = 3659 - _globals['_CONNECTIONSIGNALINGPATH']._serialized_start = 3662 - _globals['_CONNECTIONSIGNALINGPATH']._serialized_end = 3855 + _globals['_ICECANDIDATETYPE']._serialized_start = 3502 + _globals['_ICECANDIDATETYPE']._serialized_end = 3644 + _globals['_DIALSTAGE']._serialized_start = 3647 + _globals['_DIALSTAGE']._serialized_end = 3895 + _globals['_CONNECTIONSIGNALINGPATH']._serialized_start = 3898 + _globals['_CONNECTIONSIGNALINGPATH']._serialized_end = 4091 _globals['_ICECANDIDATE']._serialized_start = 149 _globals['_ICECANDIDATE']._serialized_end = 372 _globals['_CALLREQUEST']._serialized_start = 374 @@ -49,36 +51,38 @@ _globals['_WEBRTCCONFIG']._serialized_start = 1068 _globals['_WEBRTCCONFIG']._serialized_end = 1209 _globals['_ANSWERREQUESTINITSTAGE']._serialized_start = 1212 - _globals['_ANSWERREQUESTINITSTAGE']._serialized_end = 1404 - _globals['_ANSWERREQUESTUPDATESTAGE']._serialized_start = 1406 - _globals['_ANSWERREQUESTUPDATESTAGE']._serialized_end = 1497 - _globals['_ANSWERREQUESTDONESTAGE']._serialized_start = 1499 - _globals['_ANSWERREQUESTDONESTAGE']._serialized_end = 1523 - _globals['_ANSWERREQUESTERRORSTAGE']._serialized_start = 1525 - _globals['_ANSWERREQUESTERRORSTAGE']._serialized_end = 1594 - _globals['_ANSWERREQUESTHEARTBEATSTAGE']._serialized_start = 1596 - _globals['_ANSWERREQUESTHEARTBEATSTAGE']._serialized_end = 1625 - _globals['_ANSWERREQUEST']._serialized_start = 1628 - _globals['_ANSWERREQUEST']._serialized_end = 2031 - _globals['_ANSWERRESPONSEINITSTAGE']._serialized_start = 2033 - _globals['_ANSWERRESPONSEINITSTAGE']._serialized_end = 2076 - _globals['_ANSWERRESPONSEUPDATESTAGE']._serialized_start = 2078 - _globals['_ANSWERRESPONSEUPDATESTAGE']._serialized_end = 2170 - _globals['_ANSWERRESPONSEDONESTAGE']._serialized_start = 2172 - _globals['_ANSWERRESPONSEDONESTAGE']._serialized_end = 2197 - _globals['_ANSWERRESPONSEERRORSTAGE']._serialized_start = 2199 - _globals['_ANSWERRESPONSEERRORSTAGE']._serialized_end = 2269 - _globals['_ANSWERRESPONSE']._serialized_start = 2272 - _globals['_ANSWERRESPONSE']._serialized_end = 2598 - _globals['_OPTIONALWEBRTCCONFIGREQUEST']._serialized_start = 2600 - _globals['_OPTIONALWEBRTCCONFIGREQUEST']._serialized_end = 2629 - _globals['_OPTIONALWEBRTCCONFIGRESPONSE']._serialized_start = 2631 - _globals['_OPTIONALWEBRTCCONFIGRESPONSE']._serialized_end = 2720 - _globals['_CONNECTIONCANDIDATE']._serialized_start = 2722 - _globals['_CONNECTIONCANDIDATE']._serialized_end = 2839 - _globals['_REPORTCONNECTIONMETADATAREQUEST']._serialized_start = 2842 - _globals['_REPORTCONNECTIONMETADATAREQUEST']._serialized_end = 3227 - _globals['_REPORTCONNECTIONMETADATARESPONSE']._serialized_start = 3229 - _globals['_REPORTCONNECTIONMETADATARESPONSE']._serialized_end = 3263 - _globals['_SIGNALINGSERVICE']._serialized_start = 3858 - _globals['_SIGNALINGSERVICE']._serialized_end = 4565 \ No newline at end of file + _globals['_ANSWERREQUESTINITSTAGE']._serialized_end = 1640 + _globals['_ANSWERREQUESTINITSTAGE_CALLERAUTHMETADATAENTRY']._serialized_start = 1558 + _globals['_ANSWERREQUESTINITSTAGE_CALLERAUTHMETADATAENTRY']._serialized_end = 1627 + _globals['_ANSWERREQUESTUPDATESTAGE']._serialized_start = 1642 + _globals['_ANSWERREQUESTUPDATESTAGE']._serialized_end = 1733 + _globals['_ANSWERREQUESTDONESTAGE']._serialized_start = 1735 + _globals['_ANSWERREQUESTDONESTAGE']._serialized_end = 1759 + _globals['_ANSWERREQUESTERRORSTAGE']._serialized_start = 1761 + _globals['_ANSWERREQUESTERRORSTAGE']._serialized_end = 1830 + _globals['_ANSWERREQUESTHEARTBEATSTAGE']._serialized_start = 1832 + _globals['_ANSWERREQUESTHEARTBEATSTAGE']._serialized_end = 1861 + _globals['_ANSWERREQUEST']._serialized_start = 1864 + _globals['_ANSWERREQUEST']._serialized_end = 2267 + _globals['_ANSWERRESPONSEINITSTAGE']._serialized_start = 2269 + _globals['_ANSWERRESPONSEINITSTAGE']._serialized_end = 2312 + _globals['_ANSWERRESPONSEUPDATESTAGE']._serialized_start = 2314 + _globals['_ANSWERRESPONSEUPDATESTAGE']._serialized_end = 2406 + _globals['_ANSWERRESPONSEDONESTAGE']._serialized_start = 2408 + _globals['_ANSWERRESPONSEDONESTAGE']._serialized_end = 2433 + _globals['_ANSWERRESPONSEERRORSTAGE']._serialized_start = 2435 + _globals['_ANSWERRESPONSEERRORSTAGE']._serialized_end = 2505 + _globals['_ANSWERRESPONSE']._serialized_start = 2508 + _globals['_ANSWERRESPONSE']._serialized_end = 2834 + _globals['_OPTIONALWEBRTCCONFIGREQUEST']._serialized_start = 2836 + _globals['_OPTIONALWEBRTCCONFIGREQUEST']._serialized_end = 2865 + _globals['_OPTIONALWEBRTCCONFIGRESPONSE']._serialized_start = 2867 + _globals['_OPTIONALWEBRTCCONFIGRESPONSE']._serialized_end = 2956 + _globals['_CONNECTIONCANDIDATE']._serialized_start = 2958 + _globals['_CONNECTIONCANDIDATE']._serialized_end = 3075 + _globals['_REPORTCONNECTIONMETADATAREQUEST']._serialized_start = 3078 + _globals['_REPORTCONNECTIONMETADATAREQUEST']._serialized_end = 3463 + _globals['_REPORTCONNECTIONMETADATARESPONSE']._serialized_start = 3465 + _globals['_REPORTCONNECTIONMETADATARESPONSE']._serialized_end = 3499 + _globals['_SIGNALINGSERVICE']._serialized_start = 4094 + _globals['_SIGNALINGSERVICE']._serialized_end = 4801 \ No newline at end of file diff --git a/src/viam/gen/proto/rpc/webrtc/v1/signaling_pb2.pyi b/src/viam/gen/proto/rpc/webrtc/v1/signaling_pb2.pyi index ea5781eb7..7f56681bd 100644 --- a/src/viam/gen/proto/rpc/webrtc/v1/signaling_pb2.pyi +++ b/src/viam/gen/proto/rpc/webrtc/v1/signaling_pb2.pyi @@ -345,10 +345,29 @@ class AnswerRequestInitStage(_message.Message): callers initial SDP request to the controlled (answerer) side. """ DESCRIPTOR: _descriptor.Descriptor + + @_typing.final + class CallerAuthMetadataEntry(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + KEY_FIELD_NUMBER: _builtins.int + VALUE_FIELD_NUMBER: _builtins.int + key: _builtins.str + value: _builtins.str + + def __init__(self, *, key: _builtins.str=..., value: _builtins.str=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['key', b'key', 'value', b'value'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... SDP_FIELD_NUMBER: _builtins.int OPTIONAL_CONFIG_FIELD_NUMBER: _builtins.int DEADLINE_FIELD_NUMBER: _builtins.int + CALLER_AUTH_ENTITY_FIELD_NUMBER: _builtins.int + CALLER_AUTH_METADATA_FIELD_NUMBER: _builtins.int sdp: _builtins.str + caller_auth_entity: _builtins.str + "caller_auth_entity is the caller's authenticated entity (its JWT subject), extracted\n from the caller's auth token by the signaling server. Only the caller's identity is\n forwarded to the answerer, not its bearer token. Empty when the caller was\n unauthenticated.\n " @_builtins.property def optional_config(self) -> Global___WebRTCConfig: @@ -358,13 +377,19 @@ class AnswerRequestInitStage(_message.Message): def deadline(self) -> _timestamp_pb2.Timestamp: ... - def __init__(self, *, sdp: _builtins.str=..., optional_config: Global___WebRTCConfig | None=..., deadline: _timestamp_pb2.Timestamp | None=...) -> None: + @_builtins.property + def caller_auth_metadata(self) -> _containers.ScalarMap[_builtins.str, _builtins.str]: + """caller_auth_metadata is the caller's auth metadata (its rpc_auth_md claim), extracted + from the caller's auth token by the signaling server. + """ + + def __init__(self, *, sdp: _builtins.str=..., optional_config: Global___WebRTCConfig | None=..., deadline: _timestamp_pb2.Timestamp | None=..., caller_auth_entity: _builtins.str=..., caller_auth_metadata: _abc.Mapping[_builtins.str, _builtins.str] | None=...) -> None: ... _HasFieldArgType: _TypeAlias = _typing.Literal['_deadline', b'_deadline', 'deadline', b'deadline', 'optional_config', b'optional_config'] def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['_deadline', b'_deadline', 'deadline', b'deadline', 'optional_config', b'optional_config', 'sdp', b'sdp'] + _ClearFieldArgType: _TypeAlias = _typing.Literal['_deadline', b'_deadline', 'caller_auth_entity', b'caller_auth_entity', 'caller_auth_metadata', b'caller_auth_metadata', 'deadline', b'deadline', 'optional_config', b'optional_config', 'sdp', b'sdp'] def ClearField(self, field_name: _ClearFieldArgType) -> None: ... diff --git a/src/viam/proto/component/arm/__init__.py b/src/viam/proto/component/arm/__init__.py index cf5a4c821..9567a8646 100644 --- a/src/viam/proto/component/arm/__init__.py +++ b/src/viam/proto/component/arm/__init__.py @@ -9,6 +9,10 @@ GetEndPositionResponse, GetJointPositionsRequest, GetJointPositionsResponse, + GetManualModeRequest, + GetManualModeResponse, + GetPropertiesRequest, + GetPropertiesResponse, IsMovingRequest, IsMovingResponse, JointAccelerations, @@ -23,6 +27,8 @@ MoveToJointPositionsResponse, MoveToPositionRequest, MoveToPositionResponse, + SetManualModeRequest, + SetManualModeResponse, Status, StopRequest, StopResponse, @@ -37,6 +43,10 @@ "GetEndPositionResponse", "GetJointPositionsRequest", "GetJointPositionsResponse", + "GetManualModeRequest", + "GetManualModeResponse", + "GetPropertiesRequest", + "GetPropertiesResponse", "IsMovingRequest", "IsMovingResponse", "JointAccelerations", @@ -51,6 +61,8 @@ "MoveToJointPositionsResponse", "MoveToPositionRequest", "MoveToPositionResponse", + "SetManualModeRequest", + "SetManualModeResponse", "Status", "StopRequest", "StopResponse", diff --git a/src/viam/version_metadata.py b/src/viam/version_metadata.py index 97e96e6da..a4064f348 100644 --- a/src/viam/version_metadata.py +++ b/src/viam/version_metadata.py @@ -1,4 +1,4 @@ __version__ = "0.81.0" -API_VERSION = "v0.1.578" +API_VERSION = "v0.1.579" SDK_VERSION = __version__ diff --git a/tests/mocks/components.py b/tests/mocks/components.py index e5acfca5d..5c37746a1 100644 --- a/tests/mocks/components.py +++ b/tests/mocks/components.py @@ -155,6 +155,19 @@ async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeou self.timeout = timeout return self.geometries + async def set_manual_mode( + self, manual_mode: bool, enabled_for: int = 0, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs + ): + raise NotImplementedError() + + async def get_manual_mode(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> bool: + raise NotImplementedError() + + async def get_properties(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> Arm.Properties: + self.extra = extra + self.timeout = timeout + return Arm.Properties(support_manual_mode=False, support_cartesian_commands=True) + async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None, **kwargs) -> Mapping[str, ValueTypes]: return {"command": command} diff --git a/tests/test_arm.py b/tests/test_arm.py index b451554ca..633f69850 100644 --- a/tests/test_arm.py +++ b/tests/test_arm.py @@ -1,4 +1,5 @@ import pytest +from grpclib import GRPCError from grpclib.testing import ChannelFor from viam.components.arm import ArmClient, KinematicsFileFormat @@ -22,6 +23,9 @@ GetEndPositionResponse, GetJointPositionsRequest, GetJointPositionsResponse, + GetManualModeRequest, + GetPropertiesRequest, + GetPropertiesResponse, IsMovingRequest, IsMovingResponse, JointPositions, @@ -29,6 +33,7 @@ MoveThroughJointPositionsRequest, MoveToJointPositionsRequest, MoveToPositionRequest, + SetManualModeRequest, StopRequest, ) from viam.resource.manager import ResourceManager @@ -93,6 +98,19 @@ async def test_get_3d_models(self): assert models == MODELS_3D assert self.arm.extra == {"1": "2"} + async def test_set_manual_mode(self): + with pytest.raises(NotImplementedError): + await self.arm.set_manual_mode(True) + + async def test_get_manual_mode(self): + with pytest.raises(NotImplementedError): + await self.arm.get_manual_mode() + + async def test_get_properties(self): + properties = await self.arm.get_properties() + assert properties.support_manual_mode is False + assert properties.support_cartesian_commands is True + async def test_do(self): command = {"command": "args"} resp = await self.arm.do_command(command) @@ -249,6 +267,28 @@ async def test_get_3d_models_empty(self): finally: self.arm.models_3d = MODELS_3D + async def test_set_manual_mode(self): + async with ChannelFor([self.service]) as channel: + client = ArmServiceStub(channel) + request = SetManualModeRequest(name=self.name, manual_mode=True, enabled_for=30) + with pytest.raises(GRPCError): + await client.SetManualMode(request) + + async def test_get_manual_mode(self): + async with ChannelFor([self.service]) as channel: + client = ArmServiceStub(channel) + request = GetManualModeRequest(name=self.name) + with pytest.raises(GRPCError): + await client.GetManualMode(request) + + async def test_get_properties(self): + async with ChannelFor([self.service]) as channel: + client = ArmServiceStub(channel) + request = GetPropertiesRequest(name=self.name) + response: GetPropertiesResponse = await client.GetProperties(request) + assert response.support_manual_mode is False + assert response.support_cartesian_commands is True + async def test_extra(self): async with ChannelFor([self.service]) as channel: client = ArmServiceStub(channel) @@ -364,6 +404,26 @@ async def test_get_status(self): status = await client.get_status() assert status == {} + async def test_set_manual_mode(self): + async with ChannelFor([self.service]) as channel: + client = ArmClient(self.name, channel) + with pytest.raises(GRPCError): + await client.set_manual_mode(True, enabled_for=30) + + async def test_get_manual_mode(self): + async with ChannelFor([self.service]) as channel: + client = ArmClient(self.name, channel) + with pytest.raises(GRPCError): + await client.get_manual_mode() + + async def test_get_properties(self): + async with ChannelFor([self.service]) as channel: + client = ArmClient(self.name, channel) + properties = await client.get_properties(extra={"1": "2"}) + assert properties.support_manual_mode is False + assert properties.support_cartesian_commands is True + assert self.arm.extra == {"1": "2"} + async def test_extra(self): async with ChannelFor([self.service]) as channel: client = ArmClient(self.name, channel) diff --git a/tests/test_robot.py b/tests/test_robot.py index 5acd8a338..207432920 100644 --- a/tests/test_robot.py +++ b/tests/test_robot.py @@ -515,6 +515,32 @@ async def get_3d_models( ) -> Mapping[str, Mesh]: return await self.actual_client.get_3d_models(extra=extra, timeout=timeout) + async def set_manual_mode( + self, + manual_mode: bool, + enabled_for: int = 0, + *, + extra: Optional[Dict[str, Any]] = None, + timeout: Optional[float] = None, + ): + return await self.actual_client.set_manual_mode(manual_mode, enabled_for=enabled_for, extra=extra, timeout=timeout) + + async def get_manual_mode( + self, + *, + extra: Optional[Dict[str, Any]] = None, + timeout: Optional[float] = None, + ) -> bool: + return await self.actual_client.get_manual_mode(extra=extra, timeout=timeout) + + async def get_properties( + self, + *, + extra: Optional[Dict[str, Any]] = None, + timeout: Optional[float] = None, + ) -> Arm.Properties: + return await self.actual_client.get_properties(extra=extra, timeout=timeout) + async def get_joint_positions( self, *,