Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 5 additions & 21 deletions examples/module/src/gizmo/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@

from viam.components.component_base import ComponentBase
from viam.components.generic.client import do_command
from viam.errors import ResourceNotFoundError
from viam.resource.rpc_service_base import ResourceRPCServiceBase
from viam.resource.types import RESOURCE_TYPE_COMPONENT, Subtype
from viam.utils import ValueTypes
Expand Down Expand Up @@ -82,10 +81,7 @@ async def DoOne(self, stream: Stream[DoOneRequest, DoOneResponse]) -> None:
request = await stream.recv_message()
assert request is not None
name = request.name
try:
gizmo = self.get_resource(name)
except ResourceNotFoundError as e:
raise e.grpc_error
gizmo = self.get_resource(name)
resp = await gizmo.do_one(request.arg1)
response = DoOneResponse(ret1=resp)
await stream.send_message(response)
Expand All @@ -97,10 +93,7 @@ async def DoOneClientStream(self, stream: Stream[DoOneClientStreamRequest, DoOne
if len(set(names)) != 1:
raise Exception("Unexpectedly received requests for multiple Gizmos")
name = names[0]
try:
gizmo = self.get_resource(name)
except ResourceNotFoundError as e:
raise e.grpc_error
gizmo = self.get_resource(name)
resp = await gizmo.do_one_client_stream(args)
response = DoOneClientStreamResponse(ret1=resp)
await stream.send_message(response)
Expand All @@ -109,10 +102,7 @@ async def DoOneServerStream(self, stream: Stream[DoOneServerStreamRequest, DoOne
request = await stream.recv_message()
assert request is not None
name = request.name
try:
gizmo = self.get_resource(name)
except ResourceNotFoundError as e:
raise e.grpc_error
gizmo = self.get_resource(name)
resps = await gizmo.do_one_server_stream(request.arg1)
for resp in resps:
await stream.send_message(DoOneServerStreamResponse(ret1=resp))
Expand All @@ -127,10 +117,7 @@ async def DoOneBiDiStream(self, stream: Stream[DoOneBiDiStreamRequest, DoOneBiDi
continue
if name != request.name:
raise Exception("Unexpectedly received requests for multiple Gizmos")
try:
gizmo = self.get_resource(name)
except ResourceNotFoundError as e:
raise e.grpc_error
gizmo = self.get_resource(name)

resps = await gizmo.do_one_bidi_stream(args)
for resp in resps:
Expand All @@ -140,10 +127,7 @@ async def DoTwo(self, stream: Stream[DoTwoRequest, DoTwoResponse]) -> None:
request = await stream.recv_message()
assert request is not None
name = request.name
try:
gizmo = self.get_resource(name)
except ResourceNotFoundError as e:
raise e.grpc_error
gizmo = self.get_resource(name)
resp = await gizmo.do_two(request.arg1)
response = DoTwoResponse(ret1=resp)
await stream.send_message(response)
Expand Down
6 changes: 1 addition & 5 deletions examples/module/src/summation/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
from grpclib.client import Channel
from grpclib.server import Stream

from viam.errors import ResourceNotFoundError
from viam.resource.rpc_service_base import ResourceRPCServiceBase
from viam.resource.types import RESOURCE_TYPE_SERVICE, Subtype
from viam.services.service_base import ServiceBase
Expand Down Expand Up @@ -54,10 +53,7 @@ async def Sum(self, stream: Stream[SumRequest, SumResponse]) -> None:
request = await stream.recv_message()
assert request is not None
name = request.name
try:
service = self.get_resource(name)
except ResourceNotFoundError as e:
raise e.grpc_error
service = self.get_resource(name)
resp = await service.sum(request.numbers)
await stream.send_message(SumResponse(sum=resp))

Expand Down
36 changes: 7 additions & 29 deletions src/viam/components/arm/service.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from grpclib.server import Stream

from viam.errors import ResourceNotFoundError
from viam.proto.common import DoCommandRequest, DoCommandResponse
from viam.proto.component.arm import (
ArmServiceBase,
Expand Down Expand Up @@ -34,10 +33,7 @@ async def GetEndPosition(self, stream: Stream[GetEndPositionRequest, GetEndPosit
request = await stream.recv_message()
assert request is not None
name = request.name
try:
arm = self.get_resource(name)
except ResourceNotFoundError as e:
raise e.grpc_error
arm = self.get_resource(name)
timeout = stream.deadline.time_remaining() if stream.deadline else None
position = await arm.get_end_position(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
response = GetEndPositionResponse(pose=position)
Expand All @@ -47,10 +43,7 @@ async def MoveToPosition(self, stream: Stream[MoveToPositionRequest, MoveToPosit
request = await stream.recv_message()
assert request is not None
name = request.name
try:
arm = self.get_resource(name)
except ResourceNotFoundError as e:
raise e.grpc_error
arm = self.get_resource(name)
timeout = stream.deadline.time_remaining() if stream.deadline else None
await arm.move_to_position(request.to, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
response = MoveToPositionResponse()
Expand All @@ -60,10 +53,7 @@ async def GetJointPositions(self, stream: Stream[GetJointPositionsRequest, GetJo
request = await stream.recv_message()
assert request is not None
name = request.name
try:
arm = self.get_resource(name)
except ResourceNotFoundError as e:
raise e.grpc_error
arm = self.get_resource(name)
timeout = stream.deadline.time_remaining() if stream.deadline else None
positions = await arm.get_joint_positions(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
response = GetJointPositionsResponse(positions=positions)
Expand All @@ -73,10 +63,7 @@ async def MoveToJointPositions(self, stream: Stream[MoveToJointPositionsRequest,
request = await stream.recv_message()
assert request is not None
name = request.name
try:
arm = self.get_resource(name)
except ResourceNotFoundError as e:
raise e.grpc_error
arm = self.get_resource(name)
timeout = stream.deadline.time_remaining() if stream.deadline else None
await arm.move_to_joint_positions(request.positions, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
response = MoveToJointPositionsResponse()
Expand All @@ -86,10 +73,7 @@ async def Stop(self, stream: Stream[StopRequest, StopResponse]) -> None:
request = await stream.recv_message()
assert request is not None
name = request.name
try:
arm = self.get_resource(name)
except ResourceNotFoundError as e:
raise e.grpc_error
arm = self.get_resource(name)
timeout = stream.deadline.time_remaining() if stream.deadline else None
await arm.stop(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
response = StopResponse()
Expand All @@ -99,21 +83,15 @@ async def IsMoving(self, stream: Stream[IsMovingRequest, IsMovingResponse]) -> N
request = await stream.recv_message()
assert request is not None
name = request.name
try:
arm = self.get_resource(name)
except ResourceNotFoundError as e:
raise e.grpc_error
arm = self.get_resource(name)
is_moving = await arm.is_moving()
response = IsMovingResponse(is_moving=is_moving)
await stream.send_message(response)

async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
request = await stream.recv_message()
assert request is not None
try:
arm = self.get_resource(request.name)
except ResourceNotFoundError as e:
raise e.grpc_error
arm = self.get_resource(request.name)
timeout = stream.deadline.time_remaining() if stream.deadline else None
result = await arm.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
response = DoCommandResponse(result=dict_to_struct(result))
Expand Down
23 changes: 5 additions & 18 deletions src/viam/components/audio_input/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from grpclib import GRPCError, Status
from grpclib.server import Stream

from viam.errors import NotSupportedError, ResourceNotFoundError
from viam.errors import NotSupportedError
from viam.proto.common import DoCommandRequest, DoCommandResponse
from viam.proto.component.audioinput import (
AudioInputServiceBase,
Expand All @@ -33,11 +33,7 @@ class AudioInputRPCService(AudioInputServiceBase, ResourceRPCServiceBase[AudioIn
async def Chunks(self, stream: Stream[ChunksRequest, ChunksResponse]) -> None:
request = await stream.recv_message()
assert request is not None
try:
audio_input = self.get_resource(request.name)
except ResourceNotFoundError as e:
raise e.grpc_error

audio_input = self.get_resource(request.name)
timeout = stream.deadline.time_remaining() if stream.deadline else None
audio_stream = await audio_input.stream(timeout=timeout, metadata=stream.metadata)
first_chunk = await audio_stream.__anext__()
Expand All @@ -50,10 +46,7 @@ async def Chunks(self, stream: Stream[ChunksRequest, ChunksResponse]) -> None:
async def Properties(self, stream: Stream[PropertiesRequest, PropertiesResponse]) -> None:
request = await stream.recv_message()
assert request is not None
try:
audio_input = self.get_resource(request.name)
except ResourceNotFoundError as e:
raise e.grpc_error
audio_input = self.get_resource(request.name)
timeout = stream.deadline.time_remaining() if stream.deadline else None
response = (await audio_input.get_properties(timeout=timeout, metadata=stream.metadata)).proto
await stream.send_message(response)
Expand All @@ -70,10 +63,7 @@ async def Record(self, stream: Stream[RecordRequest, HttpBody]) -> None:
if duration.total_seconds() > 5:
raise GRPCError(Status.INVALID_ARGUMENT, "Can only record up to 5 seconds")

try:
audio_input = self.get_resource(request.name)
except ResourceNotFoundError as e:
raise e.grpc_error
audio_input = self.get_resource(request.name)
audio_stream = await audio_input.stream()
first_chunk = await audio_stream.__anext__()
num_chunks = int(duration.total_seconds() * float(first_chunk.info.sampling_rate / first_chunk.chunk.length))
Expand Down Expand Up @@ -108,10 +98,7 @@ async def Record(self, stream: Stream[RecordRequest, HttpBody]) -> None:
async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
request = await stream.recv_message()
assert request is not None
try:
audio_input = self.get_resource(request.name)
except ResourceNotFoundError as e:
raise e.grpc_error
audio_input = self.get_resource(request.name)
timeout = stream.deadline.time_remaining() if stream.deadline else None
result = await audio_input.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
response = DoCommandResponse(result=dict_to_struct(result))
Expand Down
36 changes: 7 additions & 29 deletions src/viam/components/base/service.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from grpclib.server import Stream

from viam.errors import ResourceNotFoundError
from viam.proto.common import DoCommandRequest, DoCommandResponse
from viam.proto.component.base import (
BaseServiceBase,
Expand Down Expand Up @@ -34,10 +33,7 @@ async def MoveStraight(self, stream: Stream[MoveStraightRequest, MoveStraightRes
request = await stream.recv_message()
assert request is not None
name = request.name
try:
base = self.get_resource(name)
except ResourceNotFoundError as e:
raise e.grpc_error
base = self.get_resource(name)
timeout = stream.deadline.time_remaining() if stream.deadline else None
await base.move_straight(
distance=request.distance_mm,
Expand All @@ -53,10 +49,7 @@ async def Spin(self, stream: Stream[SpinRequest, SpinResponse]) -> None:
request = await stream.recv_message()
assert request is not None
name = request.name
try:
base = self.get_resource(name)
except ResourceNotFoundError as e:
raise e.grpc_error
base = self.get_resource(name)
timeout = stream.deadline.time_remaining() if stream.deadline else None
await base.spin(
angle=request.angle_deg,
Expand All @@ -72,10 +65,7 @@ async def SetPower(self, stream: Stream[SetPowerRequest, SetPowerResponse]) -> N
request = await stream.recv_message()
assert request is not None
name = request.name
try:
base = self.get_resource(name)
except ResourceNotFoundError as e:
raise e.grpc_error
base = self.get_resource(name)
timeout = stream.deadline.time_remaining() if stream.deadline else None
await base.set_power(
request.linear, request.angular, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata
Expand All @@ -87,10 +77,7 @@ async def SetVelocity(self, stream: Stream[SetVelocityRequest, SetVelocityRespon
request = await stream.recv_message()
assert request is not None
name = request.name
try:
base = self.get_resource(name)
except ResourceNotFoundError as e:
raise e.grpc_error
base = self.get_resource(name)
timeout = stream.deadline.time_remaining() if stream.deadline else None
await base.set_velocity(
request.linear, request.angular, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata
Expand All @@ -101,10 +88,7 @@ async def Stop(self, stream: Stream[StopRequest, StopResponse]) -> None:
request = await stream.recv_message()
assert request is not None
name = request.name
try:
base = self.get_resource(name)
except ResourceNotFoundError as e:
raise e.grpc_error
base = self.get_resource(name)
timeout = stream.deadline.time_remaining() if stream.deadline else None
await base.stop(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
response = StopResponse()
Expand All @@ -114,21 +98,15 @@ async def IsMoving(self, stream: Stream[IsMovingRequest, IsMovingResponse]) -> N
request = await stream.recv_message()
assert request is not None
name = request.name
try:
base = self.get_resource(name)
except ResourceNotFoundError as e:
raise e.grpc_error
base = self.get_resource(name)
is_moving = await base.is_moving()
response = IsMovingResponse(is_moving=is_moving)
await stream.send_message(response)

async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
request = await stream.recv_message()
assert request is not None
try:
base = self.get_resource(request.name)
except ResourceNotFoundError as e:
raise e.grpc_error
base = self.get_resource(request.name)
timeout = stream.deadline.time_remaining() if stream.deadline else None
result = await base.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
response = DoCommandResponse(result=dict_to_struct(result))
Expand Down
Loading