mirror of
https://github.com/tiqi-group/pydase.git
synced 2025-04-21 00:40:01 +02:00
feat: adding support for union type hint serialization
This commit is contained in:
parent
48dd4d58b7
commit
6e4909ece5
@ -3,7 +3,7 @@ import inspect
|
||||
import json
|
||||
import os
|
||||
from enum import Enum
|
||||
from typing import Any, Optional, cast, get_type_hints
|
||||
from typing import Any, Optional, Union, cast, get_args, get_type_hints
|
||||
|
||||
import rpyc
|
||||
from loguru import logger
|
||||
@ -265,12 +265,28 @@ class DataService(rpyc.Service, AbstractDataService):
|
||||
}
|
||||
elif inspect.isfunction(value) or inspect.ismethod(value):
|
||||
sig = inspect.signature(value)
|
||||
parameters = {
|
||||
k: v.annotation.__name__
|
||||
if v.annotation is not inspect._empty
|
||||
else None
|
||||
for k, v in sig.parameters.items()
|
||||
}
|
||||
parameters: dict[str, Optional[str]] = {}
|
||||
for k, v in sig.parameters.items():
|
||||
annotation = v.annotation
|
||||
if annotation is not inspect._empty:
|
||||
if (
|
||||
hasattr(annotation, "__origin__")
|
||||
and annotation.__origin__ is Union
|
||||
):
|
||||
# Handle union types
|
||||
union_types = get_args(annotation)
|
||||
type_names = [
|
||||
t.__name__ if isinstance(t, type) else str(t)
|
||||
for t in union_types
|
||||
]
|
||||
parameters[k] = " | ".join(type_names)
|
||||
elif isinstance(annotation, type):
|
||||
# Handle regular types
|
||||
parameters[k] = annotation.__name__
|
||||
else:
|
||||
parameters[k] = str(annotation)
|
||||
else:
|
||||
parameters[k] = None
|
||||
running_task_info = None
|
||||
if (
|
||||
key in self._task_manager.tasks
|
||||
|
Loading…
x
Reference in New Issue
Block a user