diff --git a/src/pydase/observer_pattern/observer/property_observer.py b/src/pydase/observer_pattern/observer/property_observer.py index a686765..9d0b8d1 100644 --- a/src/pydase/observer_pattern/observer/property_observer.py +++ b/src/pydase/observer_pattern/observer/property_observer.py @@ -22,7 +22,7 @@ def reverse_dict(original_dict: dict[str, list[str]]) -> dict[str, list[str]]: def get_property_dependencies(prop: property, prefix: str = "") -> list[str]: source_code_string = inspect.getsource(prop.fget) # type: ignore[arg-type] - pattern = r"self\.([^\s\{\}]+)" + pattern = r"self\.([^\s\{\}\(\)]+)" matches = re.findall(pattern, source_code_string) return [prefix + match for match in matches if "(" not in match] diff --git a/tests/data_service/test_data_service_observer.py b/tests/data_service/test_data_service_observer.py index e06198a..e6e9cb1 100644 --- a/tests/data_service/test_data_service_observer.py +++ b/tests/data_service/test_data_service_observer.py @@ -1,8 +1,9 @@ import logging from typing import Any -import pydase import pytest + +import pydase from pydase.data_service.data_service_observer import DataServiceObserver from pydase.data_service.state_manager import StateManager from pydase.utils.serialization.serializer import SerializationError, dump @@ -241,3 +242,23 @@ def test_read_only_dict_property(caplog: pytest.LogCaptureFixture) -> None: service_instance._dict_attr["dotted.key"] = 2.0 assert "'dict_attr[\"dotted.key\"]' changed to '2.0'" in caplog.text + + +def test_dependency_as_function_argument(caplog: pytest.LogCaptureFixture) -> None: + class MyObservable(pydase.DataService): + some_int = 0 + + @property + def other_int(self) -> int: + return self.add_one(self.some_int) + + def add_one(self, value: int) -> int: + return value + 1 + + service_instance = MyObservable() + state_manager = StateManager(service=service_instance) + DataServiceObserver(state_manager) + + service_instance.some_int = 1337 + + assert "'other_int' changed to '1338'" in caplog.text