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
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,7 @@
"tobytes",
"viam"
],
"isort.args": [
"-l 140 --profile black"
],
}
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ lint:

_format:
black --exclude ".*/gen/.*" ./src
isort ./src

format:
poetry run $(MAKE) _format
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
## (In)stability Notice

> **Warning**
> This is an beta release of the Viam Python SDK. Stability is not guaranteed. Breaking changes are likely to occur, and occur often.
> This is a beta release of the Viam Python SDK. Stability is not guaranteed. Breaking changes are likely to occur, and occur often.

## Installation
Currently, we have pre-built binaries for macOS (both Intel and Apple Silicon), along with Linux (x86, aarch64, armv6l) that you can install via pip
Expand Down
13 changes: 13 additions & 0 deletions examples/module/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,19 @@ An example configuration for a Gizmo component and a Summation service could loo
"motor": "motor1"
},
"depends_on": []
},
{
"name": "motor1",
"type": "motor",
"model": "fake",
"attributes": {
"pins": {
"dir": "",
"pwm": ""
},
"board": ""
},
"depends_on": []
}
],
"services": [
Expand Down
635 changes: 322 additions & 313 deletions poetry.lock

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ nbmake = "1.3.0"
types-pillow = "^9.4.0.17"
mypy-protobuf = "^3.4.0"
tox = "^4.4.6"
isort = "^5.12.0"

[tool.pytest.ini_options]
addopts = "-ra"
Expand All @@ -51,6 +52,8 @@ line-length = 140

[tool.isort]
profile = "black"
skip_glob = ["**/gen/**"]
line_length = 140

[build-system]
requires = [ "poetry-core>=1.0.0" ]
Expand Down
3 changes: 2 additions & 1 deletion src/viam/components/arm/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import asyncio

from viam.proto.component.arm import Status as ArmStatus
from viam.proto.robot import Status
from viam.resource.registry import ResourceRegistration, Registry
from viam.resource.registry import Registry, ResourceRegistration
from viam.utils import message_to_struct

from .arm import Arm, JointPositions, Pose
Expand Down
5 changes: 0 additions & 5 deletions src/viam/components/arm/arm.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,9 @@ async def move_to_position(
):
"""
Move the end of the arm to the Pose specified in ``pose``.
When obstacles are specified in ``world_state``, the motion plan of the arm will avoid them.

Args:

pose (Pose): The destination Pose for the arm.

world_state (WorldState): The obstacles for the arm to avoid on its way to ``pose``.
"""
...

Expand All @@ -68,7 +64,6 @@ async def move_to_joint_positions(
Move each joint on the arm to the corresponding angle specified in ``positions``.

Args:

positions (JointPositions): The destination ``JointPositions`` for the arm.
"""
...
Expand Down
7 changes: 4 additions & 3 deletions src/viam/components/arm/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from grpclib.client import Channel

from viam.proto.common import Pose, WorldState, DoCommandRequest, DoCommandResponse
from viam.proto.common import DoCommandRequest, DoCommandResponse, Pose, WorldState
from viam.proto.component.arm import (
ArmServiceStub,
GetEndPositionRequest,
Expand All @@ -16,12 +16,13 @@
MoveToPositionRequest,
StopRequest,
)
from viam.utils import dict_to_struct, struct_to_dict, ValueTypes
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
from viam.utils import ValueTypes, dict_to_struct, struct_to_dict

from .arm import Arm


class ArmClient(Arm):
class ArmClient(Arm, ReconfigurableResourceRPCClientBase):
"""
gRPC client for an Arm component.

Expand Down
2 changes: 1 addition & 1 deletion src/viam/components/audio_input/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from viam.resource.registry import ResourceRegistration, Registry
from viam.resource.registry import Registry, ResourceRegistration

from .audio_input import AudioInput
from .client import AudioInputClient
Expand Down
5 changes: 3 additions & 2 deletions src/viam/components/audio_input/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,13 @@
PropertiesResponse,
SampleFormat,
)
from viam.utils import dict_to_struct, struct_to_dict, ValueTypes
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
from viam.utils import ValueTypes, dict_to_struct, struct_to_dict

from .audio_input import AudioInput


class AudioInputClient(AudioInput):
class AudioInputClient(AudioInput, ReconfigurableResourceRPCClientBase):
"""
gRPC client for the AudioInput component.
"""
Expand Down
2 changes: 1 addition & 1 deletion src/viam/components/audio_input/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
from grpclib.server import Stream

from viam.errors import NotSupportedError, ResourceNotFoundError
from viam.gen.component.audioinput.v1.audioinput_pb2 import SampleFormat
from viam.proto.common import DoCommandRequest, DoCommandResponse
from viam.proto.component.audioinput import (
AudioInputServiceBase,
Expand All @@ -16,6 +15,7 @@
PropertiesRequest,
PropertiesResponse,
RecordRequest,
SampleFormat,
)
from viam.resource.rpc_service_base import ResourceRPCServiceBase
from viam.utils import dict_to_struct, struct_to_dict
Expand Down
2 changes: 1 addition & 1 deletion src/viam/components/base/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from viam.resource.registry import ResourceRegistration, Registry
from viam.proto.common import ActuatorStatus
from viam.proto.robot import Status
from viam.resource.registry import Registry, ResourceRegistration
from viam.utils import message_to_struct

from .base import Base, Vector3
Expand Down
7 changes: 4 additions & 3 deletions src/viam/components/base/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from grpclib.client import Channel

from viam.proto.common import Vector3, DoCommandRequest, DoCommandResponse
from viam.proto.common import DoCommandRequest, DoCommandResponse, Vector3
from viam.proto.component.base import (
BaseServiceStub,
IsMovingRequest,
Expand All @@ -13,12 +13,13 @@
SpinRequest,
StopRequest,
)
from viam.utils import dict_to_struct, struct_to_dict, ValueTypes
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
from viam.utils import ValueTypes, dict_to_struct, struct_to_dict

from .base import Base


class BaseClient(Base):
class BaseClient(Base, ReconfigurableResourceRPCClientBase):
"""
gRPC client for the Base component.
"""
Expand Down
2 changes: 1 addition & 1 deletion src/viam/components/board/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from viam.proto.robot import Status
from viam.resource.registry import ResourceRegistration, Registry
from viam.resource.registry import Registry, ResourceRegistration
from viam.utils import message_to_struct

from .board import Board
Expand Down
4 changes: 3 additions & 1 deletion src/viam/components/board/board.py
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,9 @@ async def model_attributes(self) -> Attributes:
...

@abc.abstractmethod
async def set_power_mode(self, mode: PowerMode, duration: Optional[timedelta] = None, *, timeout: Optional[float] = None, **kwargs):
async def set_power_mode(
self, mode: PowerMode.ValueType, duration: Optional[timedelta] = None, *, timeout: Optional[float] = None, **kwargs
):
"""
Set the board to the indicated power mode.

Expand Down
21 changes: 11 additions & 10 deletions src/viam/components/board/client.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
from datetime import timedelta
from multiprocessing import Queue
from typing import Any, Dict, Mapping, List, Optional

from grpclib.client import Channel
from typing import Any, Dict, List, Mapping, Optional

from google.protobuf.duration_pb2 import Duration
from grpclib.client import Channel

from viam.proto.common import BoardStatus, DoCommandRequest, DoCommandResponse
from viam.proto.component.board import (
Expand All @@ -21,13 +20,14 @@
ReadAnalogReaderRequest,
ReadAnalogReaderResponse,
SetGPIORequest,
SetPowerModeRequest,
SetPWMFrequencyRequest,
SetPWMRequest,
SetPowerModeRequest,
StatusRequest,
StatusResponse,
)
from viam.utils import dict_to_struct, struct_to_dict, ValueTypes
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
from viam.utils import ValueTypes, dict_to_struct, struct_to_dict

from .board import Board, PostProcessor

Expand Down Expand Up @@ -112,7 +112,7 @@ async def set_pwm_frequency(self, frequency: int, *, extra: Optional[Dict[str, A
await self.board.client.SetPWMFrequency(request, timeout=timeout)


class BoardClient(Board):
class BoardClient(Board, ReconfigurableResourceRPCClientBase):
"""
gRPC client for the Board component.
"""
Expand Down Expand Up @@ -164,12 +164,13 @@ async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Option

async def set_power_mode(
self,
mode: PowerMode,
mode: PowerMode.ValueType,
duration: Optional[timedelta] = None,
*,
timeout: Optional[float] = None,
):
if duration:
duration = [(d, d.FromTimedelta(duration)) for d in [Duration()]][0][0]
request = SetPowerModeRequest(name=self.name, power_mode=mode, duration=duration)
duration_pb: Optional[Duration] = None
if duration is not None:
duration_pb = [(d, d.FromTimedelta(duration)) for d in [Duration()]][0][0]
request = SetPowerModeRequest(name=self.name, power_mode=mode, duration=duration_pb)
await self.client.SetPowerMode(request, timeout=timeout)
7 changes: 6 additions & 1 deletion src/viam/components/board/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,12 @@ async def SetPowerMode(self, stream: Stream[SetPowerModeRequest, SetPowerModeRes
except ResourceNotFoundError as e:
raise e.grpc_error
timeout = stream.deadline.time_remaining() if stream.deadline else None
await board.set_power_mode(mode=request.power_mode, duration=request.duration, timeout=timeout, metadata=stream.metadata)
await board.set_power_mode(
mode=request.power_mode,
duration=request.duration.ToTimedelta(),
timeout=timeout,
metadata=stream.metadata,
)
response = SetPowerModeResponse()
await stream.send_message(response)

Expand Down
2 changes: 1 addition & 1 deletion src/viam/components/camera/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from viam.resource.registry import ResourceRegistration, Registry
from viam.resource.registry import Registry, ResourceRegistration

from .camera import Camera, DistortionParameters, IntrinsicParameters, RawImage
from .client import CameraClient
Expand Down
7 changes: 4 additions & 3 deletions src/viam/components/camera/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from grpclib.client import Channel
from PIL import Image

from viam.media.video import CameraMimeType, RawImage, LIBRARY_SUPPORTED_FORMATS
from viam.media.video import LIBRARY_SUPPORTED_FORMATS, CameraMimeType, RawImage
from viam.proto.common import DoCommandRequest, DoCommandResponse
from viam.proto.component.camera import (
CameraServiceStub,
Expand All @@ -15,12 +15,13 @@
GetPropertiesRequest,
GetPropertiesResponse,
)
from viam.utils import dict_to_struct, struct_to_dict, ValueTypes
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
from viam.utils import ValueTypes, dict_to_struct, struct_to_dict

from .camera import Camera


class CameraClient(Camera):
class CameraClient(Camera, ReconfigurableResourceRPCClientBase):
"""
gRPC client for the Camera component
"""
Expand Down
12 changes: 1 addition & 11 deletions src/viam/components/component_base.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,5 @@
import abc
from typing import (
TYPE_CHECKING,
ClassVar,
List,
Mapping,
Optional,
SupportsBytes,
SupportsFloat,
Union,
cast,
)
from typing import TYPE_CHECKING, ClassVar, List, Mapping, Optional, SupportsBytes, SupportsFloat, Union, cast

from typing_extensions import Self

Expand Down
3 changes: 2 additions & 1 deletion src/viam/components/encoder/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,13 @@
PositionType,
ResetPositionRequest,
)
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
from viam.utils import ValueTypes, dict_to_struct, struct_to_dict

from .encoder import Encoder


class EncoderClient(Encoder):
class EncoderClient(Encoder, ReconfigurableResourceRPCClientBase):
"""
gRPC client for the Ecoder component.
"""
Expand Down
3 changes: 2 additions & 1 deletion src/viam/components/gantry/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import asyncio

from viam.proto.component.gantry import Status as GantryStatus
from viam.proto.robot import Status
from viam.resource.registry import ResourceRegistration, Registry
from viam.resource.registry import Registry, ResourceRegistration
from viam.utils import message_to_struct

from .client import GantryClient
Expand Down
7 changes: 4 additions & 3 deletions src/viam/components/gantry/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from grpclib.client import Channel

from viam.proto.common import WorldState, DoCommandResponse, DoCommandRequest
from viam.proto.common import DoCommandRequest, DoCommandResponse, WorldState
from viam.proto.component.gantry import (
GantryServiceStub,
GetLengthsRequest,
Expand All @@ -14,12 +14,13 @@
MoveToPositionRequest,
StopRequest,
)
from viam.utils import dict_to_struct, struct_to_dict, ValueTypes
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
from viam.utils import ValueTypes, dict_to_struct, struct_to_dict

from .gantry import Gantry


class GantryClient(Gantry):
class GantryClient(Gantry, ReconfigurableResourceRPCClientBase):
"""
gRPC client for the Gantry component.
"""
Expand Down
2 changes: 1 addition & 1 deletion src/viam/components/gantry/gantry.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import abc
from typing import Any, Dict, List, Optional, Final
from typing import Any, Dict, Final, List, Optional

from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, Subtype

Expand Down
Loading