mirror of
https://github.com/tiqi-group/pydase.git
synced 2025-04-20 00:10:03 +02:00
adds start and stop methods for tasks in socketio client
This commit is contained in:
parent
9d3264de1f
commit
454b0fb7d1
@ -1,11 +1,12 @@
|
|||||||
import logging
|
import logging
|
||||||
|
from copy import copy
|
||||||
from typing import TYPE_CHECKING, Any, cast
|
from typing import TYPE_CHECKING, Any, cast
|
||||||
|
|
||||||
import socketio # type: ignore
|
import socketio # type: ignore
|
||||||
|
|
||||||
import pydase
|
import pydase
|
||||||
from pydase.utils.deserializer import Deserializer, loads
|
from pydase.utils.deserializer import Deserializer, loads
|
||||||
from pydase.utils.serializer import SerializedObject, dump
|
from pydase.utils.serializer import SerializedMethod, SerializedObject, dump
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
@ -24,7 +25,7 @@ class ProxyClassFactory:
|
|||||||
self.sio_client = sio_client
|
self.sio_client = sio_client
|
||||||
|
|
||||||
def create_proxy(self, data: SerializedObject) -> "ProxyClass":
|
def create_proxy(self, data: SerializedObject) -> "ProxyClass":
|
||||||
proxy = self._deserialize(data)
|
proxy: "ProxyClass" = self._deserialize(data)
|
||||||
proxy._sio = self.sio_client
|
proxy._sio = self.sio_client
|
||||||
return proxy
|
return proxy
|
||||||
|
|
||||||
@ -39,7 +40,6 @@ class ProxyClassFactory:
|
|||||||
"Quantity": self._create_attr_property,
|
"Quantity": self._create_attr_property,
|
||||||
"Enum": self._create_attr_property,
|
"Enum": self._create_attr_property,
|
||||||
"ColouredEnum": self._create_attr_property,
|
"ColouredEnum": self._create_attr_property,
|
||||||
"method": self._deserialize_method,
|
|
||||||
"list": loads,
|
"list": loads,
|
||||||
"dict": loads,
|
"dict": loads,
|
||||||
"Exception": loads,
|
"Exception": loads,
|
||||||
@ -60,7 +60,7 @@ class ProxyClassFactory:
|
|||||||
return proxy_class
|
return proxy_class
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def _deserialize_method(self, serialized_object: SerializedObject) -> Any:
|
def _deserialize_method(self, serialized_object: SerializedMethod) -> Any:
|
||||||
def method_proxy(self: "ProxyClass", *args: Any, **kwargs: Any) -> Any:
|
def method_proxy(self: "ProxyClass", *args: Any, **kwargs: Any) -> Any:
|
||||||
serialized_response = cast(
|
serialized_response = cast(
|
||||||
dict[str, Any],
|
dict[str, Any],
|
||||||
@ -80,6 +80,11 @@ class ProxyClassFactory:
|
|||||||
def _deserialize_component_type(
|
def _deserialize_component_type(
|
||||||
self, serialized_object: SerializedObject, base_class: type
|
self, serialized_object: SerializedObject, base_class: type
|
||||||
) -> Any:
|
) -> Any:
|
||||||
|
def add_prefix_to_last_path_element(s: str, prefix: str) -> str:
|
||||||
|
parts = s.split(".")
|
||||||
|
parts[-1] = f"{prefix}_{parts[-1]}"
|
||||||
|
return ".".join(parts)
|
||||||
|
|
||||||
def create_proxy_class(serialized_object: SerializedObject) -> type:
|
def create_proxy_class(serialized_object: SerializedObject) -> type:
|
||||||
class_bases = (base_class,)
|
class_bases = (base_class,)
|
||||||
class_attrs: dict[str, Any] = {}
|
class_attrs: dict[str, Any] = {}
|
||||||
@ -88,7 +93,30 @@ class ProxyClassFactory:
|
|||||||
for key, value in cast(
|
for key, value in cast(
|
||||||
dict[str, SerializedObject], serialized_object["value"]
|
dict[str, SerializedObject], serialized_object["value"]
|
||||||
).items():
|
).items():
|
||||||
class_attrs[key] = self._deserialize(value)
|
if value["type"] == "method":
|
||||||
|
if value["async"] is True:
|
||||||
|
start_method = copy(value)
|
||||||
|
start_method["full_access_path"] = (
|
||||||
|
add_prefix_to_last_path_element(
|
||||||
|
start_method["full_access_path"], "start"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
stop_method = copy(value)
|
||||||
|
stop_method["full_access_path"] = (
|
||||||
|
add_prefix_to_last_path_element(
|
||||||
|
stop_method["full_access_path"], "stop"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
class_attrs[f"start_{key}"] = self._deserialize_method(
|
||||||
|
start_method
|
||||||
|
)
|
||||||
|
class_attrs[f"stop_{key}"] = self._deserialize_method(
|
||||||
|
stop_method
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
class_attrs[key] = self._deserialize_method(value)
|
||||||
|
else:
|
||||||
|
class_attrs[key] = self._deserialize(value)
|
||||||
|
|
||||||
# Create the dynamic class with the given name and attributes
|
# Create the dynamic class with the given name and attributes
|
||||||
return type(serialized_object["name"], class_bases, class_attrs) # type: ignore
|
return type(serialized_object["name"], class_bases, class_attrs) # type: ignore
|
||||||
|
Loading…
x
Reference in New Issue
Block a user