mirror of
https://github.com/tiqi-group/pydase.git
synced 2025-04-20 00:10:03 +02:00
adds serialization module, moves types into separate file
This commit is contained in:
parent
e6251975b8
commit
7405d2cafc
0
src/pydase/utils/serialization/__init__.py
Normal file
0
src/pydase/utils/serialization/__init__.py
Normal file
113
src/pydase/utils/serialization/types.py
Normal file
113
src/pydase/utils/serialization/types.py
Normal file
@ -0,0 +1,113 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
from typing import TYPE_CHECKING, Any, Literal, TypedDict
|
||||
|
||||
if TYPE_CHECKING:
|
||||
import pydase.units as u
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class SignatureDict(TypedDict):
|
||||
parameters: dict[str, dict[str, Any]]
|
||||
return_annotation: dict[str, Any]
|
||||
|
||||
|
||||
class SerializedObjectBase(TypedDict):
|
||||
full_access_path: str
|
||||
doc: str | None
|
||||
readonly: bool
|
||||
|
||||
|
||||
class SerializedInteger(SerializedObjectBase):
|
||||
value: int
|
||||
type: Literal["int"]
|
||||
|
||||
|
||||
class SerializedFloat(SerializedObjectBase):
|
||||
value: float
|
||||
type: Literal["float"]
|
||||
|
||||
|
||||
class SerializedQuantity(SerializedObjectBase):
|
||||
value: u.QuantityDict
|
||||
type: Literal["Quantity"]
|
||||
|
||||
|
||||
class SerializedBool(SerializedObjectBase):
|
||||
value: bool
|
||||
type: Literal["bool"]
|
||||
|
||||
|
||||
class SerializedString(SerializedObjectBase):
|
||||
value: str
|
||||
type: Literal["str"]
|
||||
|
||||
|
||||
class SerializedEnum(SerializedObjectBase):
|
||||
name: str
|
||||
value: str
|
||||
type: Literal["Enum", "ColouredEnum"]
|
||||
enum: dict[str, Any]
|
||||
|
||||
|
||||
class SerializedList(SerializedObjectBase):
|
||||
value: list[SerializedObject]
|
||||
type: Literal["list"]
|
||||
|
||||
|
||||
class SerializedDict(SerializedObjectBase):
|
||||
value: dict[str, SerializedObject]
|
||||
type: Literal["dict"]
|
||||
|
||||
|
||||
class SerializedNoneType(SerializedObjectBase):
|
||||
value: None
|
||||
type: Literal["NoneType"]
|
||||
|
||||
|
||||
SerializedMethod = TypedDict(
|
||||
"SerializedMethod",
|
||||
{
|
||||
"full_access_path": str,
|
||||
"value": Literal["RUNNING"] | None,
|
||||
"type": Literal["method"],
|
||||
"doc": str | None,
|
||||
"readonly": bool,
|
||||
"async": bool,
|
||||
"signature": SignatureDict,
|
||||
"frontend_render": bool,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class SerializedException(SerializedObjectBase):
|
||||
name: str
|
||||
value: str
|
||||
type: Literal["Exception"]
|
||||
|
||||
|
||||
DataServiceTypes = Literal["DataService", "Image", "NumberSlider", "DeviceConnection"]
|
||||
|
||||
|
||||
class SerializedDataService(SerializedObjectBase):
|
||||
name: str
|
||||
value: dict[str, SerializedObject]
|
||||
type: DataServiceTypes
|
||||
|
||||
|
||||
SerializedObject = (
|
||||
SerializedBool
|
||||
| SerializedFloat
|
||||
| SerializedInteger
|
||||
| SerializedString
|
||||
| SerializedList
|
||||
| SerializedDict
|
||||
| SerializedNoneType
|
||||
| SerializedMethod
|
||||
| SerializedException
|
||||
| SerializedDataService
|
||||
| SerializedEnum
|
||||
| SerializedQuantity
|
||||
)
|
@ -4,7 +4,7 @@ import inspect
|
||||
import logging
|
||||
import sys
|
||||
from enum import Enum
|
||||
from typing import TYPE_CHECKING, Any, Literal, TypedDict, cast
|
||||
from typing import TYPE_CHECKING, Any, Literal, cast
|
||||
|
||||
import pydase.units as u
|
||||
from pydase.data_service.abstract_data_service import AbstractDataService
|
||||
@ -16,6 +16,23 @@ from pydase.utils.helpers import (
|
||||
parse_list_attr_and_index,
|
||||
render_in_frontend,
|
||||
)
|
||||
from pydase.utils.serialization.types import (
|
||||
DataServiceTypes,
|
||||
SerializedBool,
|
||||
SerializedDataService,
|
||||
SerializedDict,
|
||||
SerializedEnum,
|
||||
SerializedException,
|
||||
SerializedFloat,
|
||||
SerializedInteger,
|
||||
SerializedList,
|
||||
SerializedMethod,
|
||||
SerializedNoneType,
|
||||
SerializedObject,
|
||||
SerializedQuantity,
|
||||
SerializedString,
|
||||
SignatureDict,
|
||||
)
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Callable
|
||||
@ -35,110 +52,6 @@ class SerializationValueError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class SignatureDict(TypedDict):
|
||||
parameters: dict[str, dict[str, Any]]
|
||||
return_annotation: dict[str, Any]
|
||||
|
||||
|
||||
class SerializedObjectBase(TypedDict):
|
||||
full_access_path: str
|
||||
doc: str | None
|
||||
readonly: bool
|
||||
|
||||
|
||||
class SerializedInteger(SerializedObjectBase):
|
||||
value: int
|
||||
type: Literal["int"]
|
||||
|
||||
|
||||
class SerializedFloat(SerializedObjectBase):
|
||||
value: float
|
||||
type: Literal["float"]
|
||||
|
||||
|
||||
class SerializedQuantity(SerializedObjectBase):
|
||||
value: u.QuantityDict
|
||||
type: Literal["Quantity"]
|
||||
|
||||
|
||||
class SerializedBool(SerializedObjectBase):
|
||||
value: bool
|
||||
type: Literal["bool"]
|
||||
|
||||
|
||||
class SerializedString(SerializedObjectBase):
|
||||
value: str
|
||||
type: Literal["str"]
|
||||
|
||||
|
||||
class SerializedEnum(SerializedObjectBase):
|
||||
name: str
|
||||
value: str
|
||||
type: Literal["Enum", "ColouredEnum"]
|
||||
enum: dict[str, Any]
|
||||
|
||||
|
||||
class SerializedList(SerializedObjectBase):
|
||||
value: list[SerializedObject]
|
||||
type: Literal["list"]
|
||||
|
||||
|
||||
class SerializedDict(SerializedObjectBase):
|
||||
value: dict[str, SerializedObject]
|
||||
type: Literal["dict"]
|
||||
|
||||
|
||||
class SerializedNoneType(SerializedObjectBase):
|
||||
value: None
|
||||
type: Literal["NoneType"]
|
||||
|
||||
|
||||
SerializedMethod = TypedDict(
|
||||
"SerializedMethod",
|
||||
{
|
||||
"full_access_path": str,
|
||||
"value": Literal["RUNNING"] | None,
|
||||
"type": Literal["method"],
|
||||
"doc": str | None,
|
||||
"readonly": bool,
|
||||
"async": bool,
|
||||
"signature": SignatureDict,
|
||||
"frontend_render": bool,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class SerializedException(SerializedObjectBase):
|
||||
name: str
|
||||
value: str
|
||||
type: Literal["Exception"]
|
||||
|
||||
|
||||
DataServiceTypes = Literal["DataService", "Image", "NumberSlider", "DeviceConnection"]
|
||||
|
||||
|
||||
class SerializedDataService(SerializedObjectBase):
|
||||
name: str
|
||||
value: dict[str, SerializedObject]
|
||||
type: DataServiceTypes
|
||||
|
||||
|
||||
SerializedObject = (
|
||||
SerializedBool
|
||||
| SerializedFloat
|
||||
| SerializedInteger
|
||||
| SerializedString
|
||||
| SerializedList
|
||||
| SerializedDict
|
||||
| SerializedNoneType
|
||||
| SerializedMethod
|
||||
| SerializedException
|
||||
| SerializedDataService
|
||||
| SerializedEnum
|
||||
| SerializedQuantity
|
||||
)
|
||||
|
||||
|
||||
class Serializer:
|
||||
@staticmethod
|
||||
def serialize_object(obj: Any, access_path: str = "") -> SerializedObject:
|
||||
|
Loading…
x
Reference in New Issue
Block a user