diff --git a/src/pydase/observer_pattern/observable/observable_object.py b/src/pydase/observer_pattern/observable/observable_object.py index a09e0cf..922018d 100644 --- a/src/pydase/observer_pattern/observable/observable_object.py +++ b/src/pydase/observer_pattern/observable/observable_object.py @@ -1,6 +1,7 @@ import logging from abc import ABC, abstractmethod -from typing import TYPE_CHECKING, Any, ClassVar +from collections.abc import Iterable +from typing import TYPE_CHECKING, Any, ClassVar, SupportsIndex if TYPE_CHECKING: from pydase.observer_pattern.observer.observer import Observer @@ -151,6 +152,41 @@ class _ObservableList(ObservableObject, list[Any]): super().append(__object) self._notify_changed("", self) + def clear(self) -> None: + logger.warning( + "'clear' has not been overridden yet. This might lead to unexpected " + "behaviour." + ) + super().clear() + + def extend(self, __iterable: Iterable[Any]) -> None: + logger.warning( + "'extend' has not been overridden yet. This might lead to unexpected " + "behaviour." + ) + return super().extend(__iterable) + + def insert(self, __index: SupportsIndex, __object: Any) -> None: + logger.warning( + "'insert' has not been overridden yet. This might lead to unexpected " + "behaviour." + ) + super().insert(__index, __object) + + def pop(self, __index: SupportsIndex = -1) -> Any: + logger.warning( + "'pop' has not been overridden yet. This might lead to unexpected " + "behaviour." + ) + return super().pop(__index) + + def remove(self, __value: Any) -> None: + logger.warning( + "'remove' has not been overridden yet. This might lead to unexpected " + "behaviour." + ) + super().remove(__value) + def _remove_observer_if_observable(self, name: str) -> None: key = int(name[1:-1]) current_value = self.__getitem__(key) diff --git a/tests/observer_pattern/observable/test_observable_object.py b/tests/observer_pattern/observable/test_observable_object.py index d12f927..91838e7 100644 --- a/tests/observer_pattern/observable/test_observable_object.py +++ b/tests/observer_pattern/observable/test_observable_object.py @@ -280,3 +280,44 @@ def test_list_in_dict_instance(caplog: pytest.LogCaptureFixture) -> None: instance.list_in_dict["some_list"][0] = "Ciao" assert "'list_in_dict['some_list'][0]' changed to 'Ciao'" in caplog.text + + +def test_list_warnings(caplog: pytest.LogCaptureFixture) -> None: + class MyObservable(Observable): + def __init__(self) -> None: + super().__init__() + self.my_list = [1, 2, 3] + + observable_instance = MyObservable() + + observable_instance.my_list.insert(1, -1) + assert ( + "'insert' has not been overridden yet. This might lead to unexpected " + "behaviour." + ) in caplog.text + caplog.clear() + + observable_instance.my_list.extend([1]) + assert ( + "'extend' has not been overridden yet. This might lead to unexpected " + "behaviour." + ) in caplog.text + caplog.clear() + + observable_instance.my_list.remove(1) + assert ( + "'remove' has not been overridden yet. This might lead to unexpected " + "behaviour." + ) in caplog.text + caplog.clear() + + observable_instance.my_list.pop() + assert ( + "'pop' has not been overridden yet. This might lead to unexpected behaviour." + ) in caplog.text + caplog.clear() + + observable_instance.my_list.clear() + assert ( + "'clear' has not been overridden yet. This might lead to unexpected behaviour." + ) in caplog.text