mirror of
https://github.com/tiqi-group/pydase.git
synced 2025-04-20 08:20:02 +02:00
Merge pull request #91 from tiqi-group/fix/load_from_file
Fix/load from file
This commit is contained in:
commit
0343abd0b0
@ -1,6 +1,6 @@
|
|||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "pydase"
|
name = "pydase"
|
||||||
version = "0.5.0"
|
version = "0.5.1"
|
||||||
description = "A flexible and robust Python library for creating, managing, and interacting with data services, with built-in support for web and RPC servers, and customizable features for diverse use cases."
|
description = "A flexible and robust Python library for creating, managing, and interacting with data services, with built-in support for web and RPC servers, and customizable features for diverse use cases."
|
||||||
authors = ["Mose Mueller <mosmuell@ethz.ch>"]
|
authors = ["Mose Mueller <mosmuell@ethz.ch>"]
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
|
@ -179,8 +179,8 @@ class Server:
|
|||||||
self._state_manager = StateManager(self._service, filename)
|
self._state_manager = StateManager(self._service, filename)
|
||||||
if getattr(self._service, "_filename", None) is not None:
|
if getattr(self._service, "_filename", None) is not None:
|
||||||
self._service._state_manager = self._state_manager
|
self._service._state_manager = self._state_manager
|
||||||
self._state_manager.load_state()
|
|
||||||
self._observer = DataServiceObserver(self._state_manager)
|
self._observer = DataServiceObserver(self._state_manager)
|
||||||
|
self._state_manager.load_state()
|
||||||
|
|
||||||
def run(self) -> None:
|
def run(self) -> None:
|
||||||
"""
|
"""
|
||||||
|
@ -1,8 +1,15 @@
|
|||||||
|
import json
|
||||||
import signal
|
import signal
|
||||||
|
from pathlib import Path
|
||||||
from pytest_mock import MockerFixture
|
from typing import Any
|
||||||
|
|
||||||
import pydase
|
import pydase
|
||||||
|
import pydase.components
|
||||||
|
import pydase.units as u
|
||||||
|
from pydase.data_service.state_manager import load_state
|
||||||
|
from pydase.server.server import Server
|
||||||
|
from pytest import LogCaptureFixture
|
||||||
|
from pytest_mock import MockerFixture
|
||||||
|
|
||||||
|
|
||||||
def test_signal_handling(mocker: MockerFixture):
|
def test_signal_handling(mocker: MockerFixture):
|
||||||
@ -33,3 +40,64 @@ def test_signal_handling(mocker: MockerFixture):
|
|||||||
# Simulate receiving a SIGINT signal for the second time
|
# Simulate receiving a SIGINT signal for the second time
|
||||||
server.handle_exit(signal.SIGINT, None)
|
server.handle_exit(signal.SIGINT, None)
|
||||||
mock_exit.assert_called_once_with(1)
|
mock_exit.assert_called_once_with(1)
|
||||||
|
|
||||||
|
|
||||||
|
class Service(pydase.DataService):
|
||||||
|
def __init__(self, **kwargs: Any) -> None:
|
||||||
|
super().__init__(**kwargs)
|
||||||
|
self.some_unit: u.Quantity = 1.2 * u.units.A
|
||||||
|
self.some_float = 1.0
|
||||||
|
self._property_attr = 1337.0
|
||||||
|
|
||||||
|
@property
|
||||||
|
def property_attr(self) -> float:
|
||||||
|
return self._property_attr
|
||||||
|
|
||||||
|
@property_attr.setter
|
||||||
|
@load_state
|
||||||
|
def property_attr(self, value: float) -> None:
|
||||||
|
self._property_attr = value
|
||||||
|
|
||||||
|
|
||||||
|
CURRENT_STATE = Service().serialize()
|
||||||
|
|
||||||
|
LOAD_STATE = {
|
||||||
|
"some_float": {
|
||||||
|
"type": "float",
|
||||||
|
"value": 10.0,
|
||||||
|
"readonly": False,
|
||||||
|
"doc": None,
|
||||||
|
},
|
||||||
|
"property_attr": {
|
||||||
|
"type": "float",
|
||||||
|
"value": 1337.1,
|
||||||
|
"readonly": False,
|
||||||
|
"doc": None,
|
||||||
|
},
|
||||||
|
"some_unit": {
|
||||||
|
"type": "Quantity",
|
||||||
|
"value": {"magnitude": 12.0, "unit": "A"},
|
||||||
|
"readonly": False,
|
||||||
|
"doc": None,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def test_load_state(tmp_path: Path, caplog: LogCaptureFixture) -> None:
|
||||||
|
# Create a StateManager instance with a temporary file
|
||||||
|
file = tmp_path / "test_state.json"
|
||||||
|
|
||||||
|
# Write a temporary JSON file to read back
|
||||||
|
with open(file, "w") as f:
|
||||||
|
json.dump(LOAD_STATE, f, indent=4)
|
||||||
|
|
||||||
|
service = Service()
|
||||||
|
Server(service, filename=str(file))
|
||||||
|
|
||||||
|
assert service.some_unit == u.Quantity(12, "A")
|
||||||
|
assert service.property_attr == 1337.1
|
||||||
|
assert service.some_float == 10.0
|
||||||
|
|
||||||
|
assert "'some_unit' changed to '12.0 A'" in caplog.text
|
||||||
|
assert "'some_float' changed to '10.0'" in caplog.text
|
||||||
|
assert "'property_attr' changed to '1337.1'" in caplog.text
|
||||||
|
Loading…
x
Reference in New Issue
Block a user