mirror of
https://github.com/tiqi-group/pydase.git
synced 2025-04-20 00:10:03 +02:00
155 lines
4.0 KiB
Python
155 lines
4.0 KiB
Python
import enum
|
|
from datetime import datetime
|
|
from typing import Any
|
|
|
|
import pydase.components
|
|
import pydase.units as u
|
|
import pytest
|
|
from pydase.utils.serialization.deserializer import loads
|
|
from pydase.utils.serialization.serializer import dump
|
|
from pydase.utils.serialization.types import SerializedObject
|
|
|
|
|
|
class MyEnum(enum.Enum):
|
|
FINISHED = "finished"
|
|
RUNNING = "running"
|
|
|
|
|
|
class MyService(pydase.DataService):
|
|
name = "MyService"
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"obj, obj_serialization",
|
|
[
|
|
(
|
|
1,
|
|
{
|
|
"full_access_path": "",
|
|
"type": "int",
|
|
"value": 1,
|
|
"readonly": False,
|
|
"doc": None,
|
|
},
|
|
),
|
|
(
|
|
1.0,
|
|
{
|
|
"full_access_path": "",
|
|
"type": "float",
|
|
"value": 1.0,
|
|
"readonly": False,
|
|
"doc": None,
|
|
},
|
|
),
|
|
(
|
|
True,
|
|
{
|
|
"full_access_path": "",
|
|
"type": "bool",
|
|
"value": True,
|
|
"readonly": False,
|
|
"doc": None,
|
|
},
|
|
),
|
|
(
|
|
u.Quantity(10, "m"),
|
|
{
|
|
"full_access_path": "",
|
|
"type": "Quantity",
|
|
"value": {"magnitude": 10, "unit": "meter"},
|
|
"readonly": False,
|
|
"doc": None,
|
|
},
|
|
),
|
|
(
|
|
[1.0],
|
|
{
|
|
"full_access_path": "",
|
|
"value": [
|
|
{
|
|
"full_access_path": "[0]",
|
|
"doc": None,
|
|
"readonly": False,
|
|
"type": "float",
|
|
"value": 1.0,
|
|
}
|
|
],
|
|
"type": "list",
|
|
"doc": None,
|
|
"readonly": False,
|
|
},
|
|
),
|
|
(
|
|
{"key": 1.0},
|
|
{
|
|
"full_access_path": "",
|
|
"value": {
|
|
"key": {
|
|
"full_access_path": '["key"]',
|
|
"doc": None,
|
|
"readonly": False,
|
|
"type": "float",
|
|
"value": 1.0,
|
|
}
|
|
},
|
|
"type": "dict",
|
|
"doc": None,
|
|
"readonly": False,
|
|
},
|
|
),
|
|
],
|
|
)
|
|
def test_loads_primitive_types(obj: Any, obj_serialization: SerializedObject) -> None:
|
|
assert loads(obj_serialization) == obj
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"obj, obj_serialization",
|
|
[
|
|
(
|
|
MyEnum.RUNNING,
|
|
{
|
|
"full_access_path": "",
|
|
"value": "RUNNING",
|
|
"type": "Enum",
|
|
"doc": "MyEnum description",
|
|
"readonly": False,
|
|
"name": "MyEnum",
|
|
"enum": {"RUNNING": "running", "FINISHED": "finished"},
|
|
},
|
|
),
|
|
(
|
|
MyService(),
|
|
{
|
|
"full_access_path": "",
|
|
"value": {
|
|
"name": {
|
|
"full_access_path": "name",
|
|
"doc": None,
|
|
"readonly": False,
|
|
"type": "str",
|
|
"value": "MyService",
|
|
}
|
|
},
|
|
"type": "DataService",
|
|
"doc": None,
|
|
"readonly": False,
|
|
"name": "MyService",
|
|
},
|
|
),
|
|
(
|
|
datetime.fromisoformat("2024-07-09 15:37:08.249845"),
|
|
{
|
|
"full_access_path": "",
|
|
"type": "datetime",
|
|
"value": "2024-07-09 15:37:08.249845",
|
|
"readonly": True,
|
|
"doc": None,
|
|
},
|
|
),
|
|
],
|
|
)
|
|
def test_loads_advanced_types(obj: Any, obj_serialization: SerializedObject) -> None:
|
|
assert dump(loads(obj_serialization)) == dump(obj)
|