mirror of
https://github.com/tiqi-group/pydase.git
synced 2025-04-21 00:40:01 +02:00
adds tests for load_state decorator
This commit is contained in:
parent
aa9f1ba35a
commit
c2a22d4456
@ -7,7 +7,7 @@ from pytest import LogCaptureFixture
|
|||||||
import pydase
|
import pydase
|
||||||
import pydase.units as u
|
import pydase.units as u
|
||||||
from pydase.components.coloured_enum import ColouredEnum
|
from pydase.components.coloured_enum import ColouredEnum
|
||||||
from pydase.data_service.state_manager import StateManager
|
from pydase.data_service.state_manager import StateManager, load_state
|
||||||
|
|
||||||
|
|
||||||
class SubService(pydase.DataService):
|
class SubService(pydase.DataService):
|
||||||
@ -28,7 +28,7 @@ class Service(pydase.DataService):
|
|||||||
self.list_attr = [1.0, 2.0]
|
self.list_attr = [1.0, 2.0]
|
||||||
self._property_attr = 1337.0
|
self._property_attr = 1337.0
|
||||||
self._name = "Service"
|
self._name = "Service"
|
||||||
self._state = State.RUNNING
|
self.state = State.RUNNING
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -43,14 +43,6 @@ class Service(pydase.DataService):
|
|||||||
def property_attr(self, value: float) -> None:
|
def property_attr(self, value: float) -> None:
|
||||||
self._property_attr = value
|
self._property_attr = value
|
||||||
|
|
||||||
@property
|
|
||||||
def state(self) -> State:
|
|
||||||
return self._state
|
|
||||||
|
|
||||||
@state.setter
|
|
||||||
def state(self, value: State) -> None:
|
|
||||||
self._state = value
|
|
||||||
|
|
||||||
|
|
||||||
CURRENT_STATE = Service().serialize()
|
CURRENT_STATE = Service().serialize()
|
||||||
|
|
||||||
@ -148,7 +140,9 @@ def test_load_state(tmp_path: Path, caplog: LogCaptureFixture):
|
|||||||
assert service.some_unit == u.Quantity(12, "A") # has changed
|
assert service.some_unit == u.Quantity(12, "A") # has changed
|
||||||
assert service.list_attr[0] == 1.4 # has changed
|
assert service.list_attr[0] == 1.4 # has changed
|
||||||
assert service.list_attr[1] == 2.0 # has not changed
|
assert service.list_attr[1] == 2.0 # has not changed
|
||||||
assert service.property_attr == 1337.1 # has changed
|
assert (
|
||||||
|
service.property_attr == 1337
|
||||||
|
) # has not changed as property has not @load_state decorator
|
||||||
assert service.state == State.FAILED # has changed
|
assert service.state == State.FAILED # has changed
|
||||||
assert service.name == "Service" # has not changed as readonly
|
assert service.name == "Service" # has not changed as readonly
|
||||||
assert service.some_float == 1.0 # has not changed due to different type
|
assert service.some_float == 1.0 # has not changed due to different type
|
||||||
@ -215,3 +209,54 @@ def test_changed_type(tmp_path: Path, caplog: LogCaptureFixture):
|
|||||||
"Attribute type of 'some_float' changed from 'int' to "
|
"Attribute type of 'some_float' changed from 'int' to "
|
||||||
"'float'. Ignoring value from JSON file..."
|
"'float'. Ignoring value from JSON file..."
|
||||||
) in caplog.text
|
) in caplog.text
|
||||||
|
|
||||||
|
|
||||||
|
def test_property_load_state(tmp_path: Path):
|
||||||
|
# Create a StateManager instance with a temporary file
|
||||||
|
file = tmp_path / "test_state.json"
|
||||||
|
|
||||||
|
LOAD_STATE = {
|
||||||
|
"name": {
|
||||||
|
"type": "str",
|
||||||
|
"value": "Some other name",
|
||||||
|
"readonly": False,
|
||||||
|
"doc": None,
|
||||||
|
},
|
||||||
|
"not_loadable_attr": {
|
||||||
|
"type": "str",
|
||||||
|
"value": "But I AM loadable!?",
|
||||||
|
"readonly": False,
|
||||||
|
"doc": None,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
# Write a temporary JSON file to read back
|
||||||
|
with open(file, "w") as f:
|
||||||
|
json.dump(LOAD_STATE, f, indent=4)
|
||||||
|
|
||||||
|
class Service(pydase.DataService):
|
||||||
|
_name = "Service"
|
||||||
|
_not_loadable_attr = "Not loadable"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self) -> str:
|
||||||
|
return self._name
|
||||||
|
|
||||||
|
@name.setter
|
||||||
|
@load_state
|
||||||
|
def name(self, value: str) -> None:
|
||||||
|
self._name = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def not_loadable_attr(self) -> str:
|
||||||
|
return self._not_loadable_attr
|
||||||
|
|
||||||
|
@not_loadable_attr.setter
|
||||||
|
def not_loadable_attr(self, value: str) -> None:
|
||||||
|
self._not_loadable_attr = value
|
||||||
|
|
||||||
|
service_instance = Service()
|
||||||
|
StateManager(service_instance, filename=file).load_state()
|
||||||
|
|
||||||
|
assert service_instance.name == "Some other name"
|
||||||
|
assert service_instance.not_loadable_attr == "Not loadable"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user