Skip to content
Closed
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
1 change: 1 addition & 0 deletions src/viam/module/module.py
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,7 @@ async def reconfigure_resource(self, request: ReconfigureResourceRequest):
resource = self.server.get_resource(ResourceBase, rn)
if isinstance(resource, Reconfigurable):
resource.reconfigure(config, dependencies)
update_log_level(resource.logger, config.log_configuration.level.upper())
else:
if isinstance(resource, Stoppable):
if iscoroutinefunction(resource.stop):
Expand Down
65 changes: 64 additions & 1 deletion tests/test_module.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import datetime
import logging
import os
import uuid
from unittest import mock
Expand All @@ -10,7 +11,7 @@
from viam.module import Module
from viam.module.resource_data_consumer import ResourceDataConsumer
from viam.module.service import ModuleRPCService
from viam.proto.app.robot import ComponentConfig
from viam.proto.app.robot import ComponentConfig, LogConfiguration
from viam.proto.module import (
AddResourceRequest,
ModuleServiceStub,
Expand Down Expand Up @@ -138,6 +139,68 @@ async def test_reconfigure_resource(self, module: Module):
await module.reconfigure_resource(req)
assert summer.subtract is True

async def test_add_resource_applies_log_level(self, module: Module):
req = AddResourceRequest(
config=ComponentConfig(
name="gizmo_log",
namespace="acme",
type="gizmo",
model="acme:demo:mygizmo",
attributes=dict_to_struct({"arg1": "arg1", "motor": "motor1"}),
api="acme:component:gizmo",
log_configuration=LogConfiguration(level="debug"),
)
)
await module.add_resource(req)
gizmo = module.server.get_resource(MyGizmo, Gizmo.get_resource_name("gizmo_log"))
assert gizmo.logger.level == logging.DEBUG

async def test_reconfigure_resource_applies_log_level(self, module: Module):
# Add a resource with default (INFO) log level
req = AddResourceRequest(
config=ComponentConfig(
name="gizmo_reconf_log",
namespace="acme",
type="gizmo",
model="acme:demo:mygizmo",
attributes=dict_to_struct({"arg1": "arg1", "motor": "motor1"}),
api="acme:component:gizmo",
)
)
await module.add_resource(req)
gizmo = module.server.get_resource(MyGizmo, Gizmo.get_resource_name("gizmo_reconf_log"))
assert gizmo.logger.level != logging.DEBUG

# Reconfigure with debug log level
req = ReconfigureResourceRequest(
config=ComponentConfig(
name="gizmo_reconf_log",
namespace="acme",
type="gizmo",
model="acme:demo:mygizmo",
attributes=dict_to_struct({"arg1": "arg2", "motor": "motor1"}),
api="acme:component:gizmo",
log_configuration=LogConfiguration(level="debug"),
)
)
await module.reconfigure_resource(req)
assert gizmo.my_arg == "arg2"
assert gizmo.logger.level == logging.DEBUG

# Reconfigure with no log_configuration
req = ReconfigureResourceRequest(
config=ComponentConfig(
name="gizmo_reconf_log",
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.logger.level == logging.INFO

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")
Expand Down