From 7a26220751f37b663c9e8b76b864b43714feff69 Mon Sep 17 00:00:00 2001 From: Alden Hsu Date: Tue, 17 Mar 2026 12:27:22 -0400 Subject: [PATCH] remove reconfigure --- examples/complex_module/src/base/my_base.py | 3 +- examples/complex_module/src/gizmo/my_gizmo.py | 3 +- .../src/summation/my_summation.py | 3 +- examples/optionaldepsmodule/module.py | 3 +- src/viam/module/module.py | 22 +++++------- src/viam/module/types.py | 6 ---- tests/mocks/module/gizmo/my_gizmo.py | 3 +- tests/mocks/module/summation/my_summation.py | 3 +- tests/test_module.py | 34 ------------------- 9 files changed, 15 insertions(+), 65 deletions(-) diff --git a/examples/complex_module/src/base/my_base.py b/examples/complex_module/src/base/my_base.py index cc896f3d78..12b2038c76 100644 --- a/examples/complex_module/src/base/my_base.py +++ b/examples/complex_module/src/base/my_base.py @@ -4,7 +4,6 @@ from viam.components.base import Base from viam.components.motor import Motor -from viam.module.types import Reconfigurable from viam.proto.app.robot import ComponentConfig from viam.resource.base import ResourceBase from viam.proto.common import Geometry, Vector3, ResourceName @@ -13,7 +12,7 @@ from viam.utils import struct_to_dict -class MyBase(Base, Reconfigurable): +class MyBase(Base): """ MyBase implements a base that only supports set_power (basic forward/back/turn controls), is_moving (check if in motion), and stop (stop all motion). diff --git a/examples/complex_module/src/gizmo/my_gizmo.py b/examples/complex_module/src/gizmo/my_gizmo.py index bd66c1a530..19a5c2aa90 100644 --- a/examples/complex_module/src/gizmo/my_gizmo.py +++ b/examples/complex_module/src/gizmo/my_gizmo.py @@ -3,7 +3,6 @@ from typing_extensions import Self from viam.logging import getLogger -from viam.module.types import Reconfigurable from viam.proto.app.robot import ComponentConfig from viam.proto.common import ResourceName from viam.resource.base import ResourceBase @@ -15,7 +14,7 @@ LOGGER = getLogger(__name__) -class MyGizmo(Gizmo, Reconfigurable): +class MyGizmo(Gizmo): """This is the specific implementation of a ``Gizmo`` (defined in api.py). It inherits from Gizmo, as well conforms to the ``Reconfigurable`` protocol, which signifies that this component can be reconfigured. diff --git a/examples/complex_module/src/summation/my_summation.py b/examples/complex_module/src/summation/my_summation.py index 7eca4f29c5..b405ab885f 100644 --- a/examples/complex_module/src/summation/my_summation.py +++ b/examples/complex_module/src/summation/my_summation.py @@ -2,7 +2,6 @@ from typing_extensions import Self -from viam.module.types import Reconfigurable from viam.proto.app.robot import ComponentConfig from viam.proto.common import ResourceName from viam.resource.base import ResourceBase @@ -12,7 +11,7 @@ from ..summation.api import SummationService -class MySummationService(SummationService, Reconfigurable): +class MySummationService(SummationService): """This is the specific implementation of a ``SummationService`` (defined in api.py) It inherits from SummationService, as well as conforms to the ``Reconfigurable`` protocol, which signifies that this component can be diff --git a/examples/optionaldepsmodule/module.py b/examples/optionaldepsmodule/module.py index 5c27393176..d505359168 100644 --- a/examples/optionaldepsmodule/module.py +++ b/examples/optionaldepsmodule/module.py @@ -4,7 +4,6 @@ from viam.components.generic import Generic from viam.components.motor import Motor -from viam.module.types import Reconfigurable from viam.proto.app.robot import ComponentConfig from viam.resource.base import ResourceBase from viam.proto.common import ResourceName @@ -15,7 +14,7 @@ import asyncio -class Foo(Generic, Reconfigurable): +class Foo(Generic): MODEL: ClassVar[Model] = Model(ModelFamily("acme", "demo"), "foo") def __init__(self, name: str): diff --git a/src/viam/module/module.py b/src/viam/module/module.py index 9471b785da..8bf73661ef 100644 --- a/src/viam/module/module.py +++ b/src/viam/module/module.py @@ -36,7 +36,7 @@ from viam.rpc.server import Server from .service import ModuleRPCService -from .types import Reconfigurable, Stoppable +from .types import Stoppable def _parse_module_args() -> argparse.Namespace: @@ -198,23 +198,19 @@ async def add_resource(self, request: AddResourceRequest, *, deadline: Optional[ self.server.register(resource) async def reconfigure_resource(self, request: ReconfigureResourceRequest): - dependencies = await self._get_dependencies(request.dependencies) config: ComponentConfig = request.config api = API.from_string(config.api) name = config.name rn = ResourceName(namespace=api.namespace, type=api.resource_type, subtype=api.resource_subtype, name=name) resource = self.server.get_resource(ResourceBase, rn) - if isinstance(resource, Reconfigurable): - resource.reconfigure(config, dependencies) - else: - if isinstance(resource, Stoppable): - if iscoroutinefunction(resource.stop): - await resource.stop() - else: - resource.stop() - add_request = AddResourceRequest(config=request.config, dependencies=request.dependencies) - await self.server.remove_resource(rn) - await self.add_resource(add_request) + if isinstance(resource, Stoppable): + if iscoroutinefunction(resource.stop): + await resource.stop() + else: + resource.stop() + add_request = AddResourceRequest(config=request.config, dependencies=request.dependencies) + await self.server.remove_resource(rn) + await self.add_resource(add_request) async def remove_resource(self, request: RemoveResourceRequest): rn = resource_name_from_string(request.name) diff --git a/src/viam/module/types.py b/src/viam/module/types.py index b1cd3ea73b..4930653426 100644 --- a/src/viam/module/types.py +++ b/src/viam/module/types.py @@ -1,16 +1,10 @@ from typing import Any, Mapping, Optional, Protocol, runtime_checkable -from viam.proto.app.robot import ComponentConfig -from viam.proto.common import ResourceName -from viam.resource.base import ResourceBase - @runtime_checkable class Reconfigurable(Protocol): """The Reconfigurable protocol defines the requirements for making a resource Reconfigurable""" - def reconfigure(self, config: ComponentConfig, dependencies: Mapping[ResourceName, ResourceBase]): ... - @runtime_checkable class Stoppable(Protocol): diff --git a/tests/mocks/module/gizmo/my_gizmo.py b/tests/mocks/module/gizmo/my_gizmo.py index 5ae932630b..3ab3f67bf0 100644 --- a/tests/mocks/module/gizmo/my_gizmo.py +++ b/tests/mocks/module/gizmo/my_gizmo.py @@ -3,7 +3,6 @@ from typing_extensions import Self from viam.components.component_base import ComponentBase -from viam.module.types import Reconfigurable from viam.proto.app.robot import ComponentConfig from viam.proto.common import ResourceName from viam.resource.base import ResourceBase @@ -12,7 +11,7 @@ from ..gizmo.api import Gizmo -class MyGizmo(Gizmo, Reconfigurable): +class MyGizmo(Gizmo): MODEL: ClassVar[Model] = Model(ModelFamily("acme", "demo"), "mygizmo") my_arg: str closed: bool = False diff --git a/tests/mocks/module/summation/my_summation.py b/tests/mocks/module/summation/my_summation.py index f613d3885e..97a9fa4802 100644 --- a/tests/mocks/module/summation/my_summation.py +++ b/tests/mocks/module/summation/my_summation.py @@ -2,7 +2,6 @@ from typing_extensions import Self -from viam.module.types import Reconfigurable from viam.proto.app.robot import ComponentConfig from viam.proto.common import ResourceName from viam.resource.base import ResourceBase @@ -11,7 +10,7 @@ from ..summation.api import SummationService -class MySummationService(SummationService, Reconfigurable): +class MySummationService(SummationService): MODEL: ClassVar[Model] = Model.from_string("acme:demo:mysum") subtract: bool diff --git a/tests/test_module.py b/tests/test_module.py index 9f7d48c891..9a677a6800 100644 --- a/tests/test_module.py +++ b/tests/test_module.py @@ -26,7 +26,6 @@ from .mocks.module.gizmo.api import Gizmo from .mocks.module.gizmo.my_gizmo import MyGizmo from .mocks.module.summation.api import SummationService -from .mocks.module.summation.my_summation import MySummationService from .test_robot import service as robot_service # noqa: F401 @@ -74,39 +73,6 @@ async def test_add_resource(self, module: Module): await module.add_resource(req) assert SummationService.get_resource_name("mysum1") in module.server.resources - async def test_reconfigure_resource(self, module: Module): - await self.test_add_resource(module) - - gizmo = module.server.get_resource(MyGizmo, Gizmo.get_resource_name("gizmo1")) - assert gizmo.my_arg == "arg1" - req = ReconfigureResourceRequest( - config=ComponentConfig( - name="gizmo1", - namespace="acme", - type="gizmo", - model="acme:demo:mygizmo", - attributes=dict_to_struct({"arg1": "arg2", "motor": "motor1"}), - api="acme:component:gizmo", - ) - ) - await module.reconfigure_resource(req) - assert gizmo.my_arg == "arg2" - - summer = module.server.get_resource(MySummationService, SummationService.get_resource_name("mysum1")) - assert summer.subtract is False - req = ReconfigureResourceRequest( - config=ComponentConfig( - name="mysum1", - namespace="acme", - type="summation", - model="acme:demo:mysum", - attributes=dict_to_struct({"subtract": True}), - api="acme:service:summation", - ) - ) - await module.reconfigure_resource(req) - assert summer.subtract is True - async def test_add_resource_with_deps(self, robot_service: RobotService, module: Module): # noqa: F811 async with ChannelFor([robot_service]) as channel: _ = mock.patch("viam.module.module.Module._connect_to_parent")