mirror of
https://github.com/tiqi-group/pydase.git
synced 2025-04-21 00:40:01 +02:00
Merge pull request #25 from tiqi-group/20-property-that-returns-an-enum-is-not-correctly-rendered
Fixes serialization for enum properties
This commit is contained in:
commit
0f7a8ec63b
@ -1,6 +1,6 @@
|
|||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "pydase"
|
name = "pydase"
|
||||||
version = "0.1.0"
|
version = "0.1.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"
|
||||||
|
@ -309,16 +309,6 @@ class DataService(rpyc.Service, AbstractDataService):
|
|||||||
"readonly": True,
|
"readonly": True,
|
||||||
"value": running_task_info,
|
"value": running_task_info,
|
||||||
}
|
}
|
||||||
elif isinstance(getattr(self.__class__, key, None), property):
|
|
||||||
prop: property = getattr(self.__class__, key)
|
|
||||||
result[key] = {
|
|
||||||
"type": type(value).__name__,
|
|
||||||
"value": value
|
|
||||||
if not isinstance(value, u.Quantity)
|
|
||||||
else {"magnitude": value.m, "unit": str(value.u)},
|
|
||||||
"readonly": prop.fset is None,
|
|
||||||
"doc": get_attribute_doc(prop),
|
|
||||||
}
|
|
||||||
elif isinstance(value, Enum):
|
elif isinstance(value, Enum):
|
||||||
result[key] = {
|
result[key] = {
|
||||||
"type": "Enum",
|
"type": "Enum",
|
||||||
@ -340,6 +330,11 @@ class DataService(rpyc.Service, AbstractDataService):
|
|||||||
"doc": get_attribute_doc(value),
|
"doc": get_attribute_doc(value),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if isinstance(getattr(self.__class__, key, None), property):
|
||||||
|
prop: property = getattr(self.__class__, key)
|
||||||
|
result[key]["readonly"] = prop.fset is None
|
||||||
|
result[key]["doc"] = get_attribute_doc(prop)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def update_DataService_attribute(
|
def update_DataService_attribute(
|
||||||
|
64
tests/data_service/test_data_service.py
Normal file
64
tests/data_service/test_data_service.py
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
from enum import Enum
|
||||||
|
|
||||||
|
import pydase
|
||||||
|
|
||||||
|
|
||||||
|
def test_enum_serialize() -> None:
|
||||||
|
class EnumClass(Enum):
|
||||||
|
FOO = "foo"
|
||||||
|
BAR = "bar"
|
||||||
|
|
||||||
|
class EnumAttribute(pydase.DataService):
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self.some_enum = EnumClass.FOO
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
class EnumPropertyWithoutSetter(pydase.DataService):
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self._some_enum = EnumClass.FOO
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def some_enum(self) -> EnumClass:
|
||||||
|
return self._some_enum
|
||||||
|
|
||||||
|
class EnumPropertyWithSetter(pydase.DataService):
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self._some_enum = EnumClass.FOO
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def some_enum(self) -> EnumClass:
|
||||||
|
return self._some_enum
|
||||||
|
|
||||||
|
@some_enum.setter
|
||||||
|
def some_enum(self, value: EnumClass) -> None:
|
||||||
|
self._some_enum = value
|
||||||
|
|
||||||
|
assert EnumAttribute().serialize() == {
|
||||||
|
"some_enum": {
|
||||||
|
"type": "Enum",
|
||||||
|
"value": "FOO",
|
||||||
|
"enum": {"FOO": "foo", "BAR": "bar"},
|
||||||
|
"readonly": False,
|
||||||
|
"doc": None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert EnumPropertyWithoutSetter().serialize() == {
|
||||||
|
"some_enum": {
|
||||||
|
"type": "Enum",
|
||||||
|
"value": "FOO",
|
||||||
|
"enum": {"FOO": "foo", "BAR": "bar"},
|
||||||
|
"readonly": True,
|
||||||
|
"doc": None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert EnumPropertyWithSetter().serialize() == {
|
||||||
|
"some_enum": {
|
||||||
|
"type": "Enum",
|
||||||
|
"value": "FOO",
|
||||||
|
"enum": {"FOO": "foo", "BAR": "bar"},
|
||||||
|
"readonly": False,
|
||||||
|
"doc": None,
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user