Skip to content

Commit 1ae3805

Browse files
authored
[RSDK-1822] Subtypes and ResourceNames (#209)
1 parent a6ae1d0 commit 1ae3805

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

87 files changed

+4205
-260
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ format:
1515

1616
_buf: clean
1717
rm -rf src/viam/gen
18-
buf generate buf.build/viamrobotics/api --path common,component,robot,service
18+
buf generate buf.build/viamrobotics/api --path common,component,robot,service,module,app/v1,tagger
1919
buf generate buf.build/viamrobotics/goutils
2020
protol -e googl* --in-place -s _grpc.py -s _pb2.py -s _pb2.pyi -o src/viam/gen buf buf.build/viamrobotics/api
2121
protol -e googl* --in-place -s _grpc.py -s _pb2.py -s _pb2.pyi -o src/viam/gen buf buf.build/viamrobotics/goutils

etc/generate_proto_import.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ def get_packages(root: str) -> Dict[str, List[str]]:
5959
rel_path = rel_path.replace(os.path.sep, ".")
6060
packages[rel_path] = list(set([".".join(f.split(".")[:-1]) for f in filenames if "__init__.py" not in f]))
6161
LOGGER.debug(f"Packages at path {rel_path}: {packages[rel_path]}")
62-
return packages
62+
common = packages["common"]
63+
del packages["common"]
64+
return {**{"common": common}, **packages} # Always have the common package first
6365

6466

6567
def build_dirs(root: str, package: str, modules: List[str]):

examples/server/v1/components.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
from viam.components.pose_tracker import PoseTracker
3131
from viam.components.sensor import Sensor
3232
from viam.components.servo import Servo
33-
from viam.errors import ComponentNotFoundError
33+
from viam.errors import ResourceNotFoundError
3434
from viam.media import MediaStreamWithIterator
3535
from viam.media.audio import Audio, AudioStream
3636
from viam.operations import run_with_operation
@@ -278,19 +278,19 @@ async def analog_reader_by_name(self, name: str) -> Board.AnalogReader:
278278
try:
279279
return self.analog_readers[name]
280280
except KeyError:
281-
raise ComponentNotFoundError("Board.AnalogReader", name)
281+
raise ResourceNotFoundError("Board.AnalogReader", name)
282282

283283
async def digital_interrupt_by_name(self, name: str) -> Board.DigitalInterrupt:
284284
try:
285285
return self.digital_interrupts[name]
286286
except KeyError:
287-
raise ComponentNotFoundError("Board.DigitalInterrupt", name)
287+
raise ResourceNotFoundError("Board.DigitalInterrupt", name)
288288

289289
async def gpio_pin_by_name(self, name: str) -> Board.GPIOPin:
290290
try:
291291
return self.gpios[name]
292292
except KeyError:
293-
raise ComponentNotFoundError("Board.GPIOPin", name)
293+
raise ResourceNotFoundError("Board.GPIOPin", name)
294294

295295
async def analog_reader_names(self) -> List[str]:
296296
return [key for key in self.analog_readers.keys()]

src/viam/components/arm/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import asyncio
22
from viam.proto.component.arm import Status as ArmStatus
33
from viam.proto.robot import Status
4-
from viam.registry import ComponentRegistration, Registry
4+
from viam.resource.registry import ComponentRegistration, Registry
55
from viam.utils import message_to_struct
66

77
from .arm import Arm, JointPositions, Pose, WorldState
@@ -30,4 +30,4 @@ async def create_status(component: Arm) -> Status:
3030
return Status(name=Arm.get_resource_name(component.name), status=message_to_struct(s))
3131

3232

33-
Registry.register(ComponentRegistration(Arm, "arm", ArmService, lambda name, channel: ArmClient(name, channel), create_status))
33+
Registry.register(ComponentRegistration(Arm, ArmService, lambda name, channel: ArmClient(name, channel), create_status))

src/viam/components/arm/arm.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import abc
2-
from typing import Any, Dict, Optional
2+
from typing import Any, Dict, Final, Optional
33

44
from viam.proto.common import Pose, WorldState
55
from viam.proto.component.arm import JointPositions
6+
from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, Subtype
67

78
from ..component_base import ComponentBase
89

@@ -16,6 +17,8 @@ class Arm(ComponentBase):
1617
overridden, it must call the ``super().__init__()`` function.
1718
"""
1819

20+
SUBTYPE: Final = Subtype(RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "arm")
21+
1922
@abc.abstractmethod
2023
async def get_end_position(
2124
self,

src/viam/components/arm/service.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from grpclib.server import Stream
22

33
from viam.components.service_base import ComponentServiceBase
4-
from viam.errors import ComponentNotFoundError
4+
from viam.errors import ResourceNotFoundError
55
from viam.proto.component.arm import (
66
ArmServiceBase,
77
GetEndPositionRequest,
@@ -35,7 +35,7 @@ async def GetEndPosition(self, stream: Stream[GetEndPositionRequest, GetEndPosit
3535
name = request.name
3636
try:
3737
arm = self.get_component(name)
38-
except ComponentNotFoundError as e:
38+
except ResourceNotFoundError as e:
3939
raise e.grpc_error
4040
timeout = stream.deadline.time_remaining() if stream.deadline else None
4141
position = await arm.get_end_position(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
@@ -48,7 +48,7 @@ async def MoveToPosition(self, stream: Stream[MoveToPositionRequest, MoveToPosit
4848
name = request.name
4949
try:
5050
arm = self.get_component(name)
51-
except ComponentNotFoundError as e:
51+
except ResourceNotFoundError as e:
5252
raise e.grpc_error
5353
timeout = stream.deadline.time_remaining() if stream.deadline else None
5454
await arm.move_to_position(
@@ -63,7 +63,7 @@ async def GetJointPositions(self, stream: Stream[GetJointPositionsRequest, GetJo
6363
name = request.name
6464
try:
6565
arm = self.get_component(name)
66-
except ComponentNotFoundError as e:
66+
except ResourceNotFoundError as e:
6767
raise e.grpc_error
6868
timeout = stream.deadline.time_remaining() if stream.deadline else None
6969
positions = await arm.get_joint_positions(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
@@ -76,7 +76,7 @@ async def MoveToJointPositions(self, stream: Stream[MoveToJointPositionsRequest,
7676
name = request.name
7777
try:
7878
arm = self.get_component(name)
79-
except ComponentNotFoundError as e:
79+
except ResourceNotFoundError as e:
8080
raise e.grpc_error
8181
timeout = stream.deadline.time_remaining() if stream.deadline else None
8282
await arm.move_to_joint_positions(request.positions, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
@@ -89,7 +89,7 @@ async def Stop(self, stream: Stream[StopRequest, StopResponse]) -> None:
8989
name = request.name
9090
try:
9191
arm = self.get_component(name)
92-
except ComponentNotFoundError as e:
92+
except ResourceNotFoundError as e:
9393
raise e.grpc_error
9494
timeout = stream.deadline.time_remaining() if stream.deadline else None
9595
await arm.stop(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
@@ -102,7 +102,7 @@ async def IsMoving(self, stream: Stream[IsMovingRequest, IsMovingResponse]) -> N
102102
name = request.name
103103
try:
104104
arm = self.get_component(name)
105-
except ComponentNotFoundError as e:
105+
except ResourceNotFoundError as e:
106106
raise e.grpc_error
107107
is_moving = await arm.is_moving()
108108
response = IsMovingResponse(is_moving=is_moving)

src/viam/components/audio_input/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from viam.registry import ComponentRegistration, Registry
1+
from viam.resource.registry import ComponentRegistration, Registry
22

33
from .audio_input import AudioInput
44
from .client import AudioInputClient
@@ -12,7 +12,6 @@
1212
Registry.register(
1313
ComponentRegistration(
1414
AudioInput,
15-
"audio_input",
1615
AudioInputService,
1716
lambda name, channel: AudioInputClient(name, channel),
1817
)

src/viam/components/audio_input/audio_input.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
import abc
22
from dataclasses import dataclass
33
from datetime import timedelta
4-
from typing import Optional
4+
from typing import Final, Optional
55

66
from google.protobuf.duration_pb2 import Duration
77
from typing_extensions import Self
88

99
from viam.media import MediaSource
1010
from viam.media.audio import Audio, AudioStream
1111
from viam.proto.component.audioinput import PropertiesResponse
12+
from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, Subtype
1213

1314
from ..component_base import ComponentBase
1415

1516

1617
class AudioInput(ComponentBase, MediaSource[Audio]):
18+
19+
SUBTYPE: Final = Subtype(RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "audio_input")
20+
1721
@dataclass
1822
class Properties:
1923
channel_count: int

src/viam/components/audio_input/service.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from grpclib.server import Stream
88

99
from viam.components.service_base import ComponentServiceBase
10-
from viam.errors import ComponentNotFoundError, NotSupportedError
10+
from viam.errors import ResourceNotFoundError, NotSupportedError
1111
from viam.gen.component.audioinput.v1.audioinput_pb2 import SampleFormat
1212
from viam.proto.component.audioinput import (
1313
AudioInputServiceBase,
@@ -33,7 +33,7 @@ async def Chunks(self, stream: Stream[ChunksRequest, ChunksResponse]) -> None:
3333
assert request is not None
3434
try:
3535
audio_input = self.get_component(request.name)
36-
except ComponentNotFoundError as e:
36+
except ResourceNotFoundError as e:
3737
raise e.grpc_error
3838

3939
timeout = stream.deadline.time_remaining() if stream.deadline else None
@@ -50,7 +50,7 @@ async def Properties(self, stream: Stream[PropertiesRequest, PropertiesResponse]
5050
assert request is not None
5151
try:
5252
audio_input = self.get_component(request.name)
53-
except ComponentNotFoundError as e:
53+
except ResourceNotFoundError as e:
5454
raise e.grpc_error
5555
timeout = stream.deadline.time_remaining() if stream.deadline else None
5656
response = (await audio_input.get_properties(timeout=timeout, metadata=stream.metadata)).proto
@@ -70,7 +70,7 @@ async def Record(self, stream: Stream[RecordRequest, HttpBody]) -> None:
7070

7171
try:
7272
audio_input = self.get_component(request.name)
73-
except ComponentNotFoundError as e:
73+
except ResourceNotFoundError as e:
7474
raise e.grpc_error
7575
audio_stream = await audio_input.stream()
7676
first_chunk = await audio_stream.__anext__()

src/viam/components/base/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from viam.registry import ComponentRegistration, Registry
1+
from viam.resource.registry import ComponentRegistration, Registry
22
from viam.proto.common import ActuatorStatus
33
from viam.proto.robot import Status
44
from viam.utils import message_to_struct
@@ -15,4 +15,4 @@ async def create_status(component: Base) -> Status:
1515
return Status(name=Base.get_resource_name(component.name), status=message_to_struct(s))
1616

1717

18-
Registry.register(ComponentRegistration(Base, "base", BaseService, lambda name, channel: BaseClient(name, channel), create_status))
18+
Registry.register(ComponentRegistration(Base, BaseService, lambda name, channel: BaseClient(name, channel), create_status))

0 commit comments

Comments
 (0)