diff --git a/src/pydase/data_service/data_service.py b/src/pydase/data_service/data_service.py index 36d45e5..06dd197 100644 --- a/src/pydase/data_service/data_service.py +++ b/src/pydase/data_service/data_service.py @@ -83,8 +83,9 @@ class DataService(rpyc.Service, AbstractDataService): def __check_instance_classes(self) -> None: for attr_name, attr_value in get_class_and_instance_attributes(self).items(): - # every class defined by the user should inherit from DataService - if not attr_name.startswith("_DataService__"): + # every class defined by the user should inherit from DataService if it is + # assigned to a public attribute + if not attr_name.startswith("_"): warn_if_instance_class_does_not_inherit_from_DataService(attr_value) def __set_attribute_based_on_type( # noqa:CFQ002 diff --git a/tests/test_warnings.py b/tests/utils/test_warnings.py similarity index 67% rename from tests/test_warnings.py rename to tests/utils/test_warnings.py index aae794b..8bd5922 100644 --- a/tests/test_warnings.py +++ b/tests/utils/test_warnings.py @@ -2,7 +2,7 @@ from pytest import LogCaptureFixture from pydase import DataService -from . import caplog # noqa +from .. import caplog # noqa def test_setattr_warnings(caplog: LogCaptureFixture) -> None: # noqa @@ -32,3 +32,19 @@ def test_private_attribute_warning(caplog: LogCaptureFixture) -> None: # noqa " Warning: You should not set private but rather protected attributes! Use " "_something instead of __something." in caplog.text ) + + +def test_protected_attribute_warning(caplog: LogCaptureFixture) -> None: # noqa + class SubClass: + name = "Hello" + + class ServiceClass(DataService): + def __init__(self) -> None: + self._subclass = SubClass + super().__init__() + + ServiceClass() + + assert ( + "Warning: Class SubClass does not inherit from DataService." not in caplog.text + )