52 lines
1 KiB
Python
52 lines
1 KiB
Python
![]() |
# Data Conversion Helpers:
|
||
|
|
||
|
|
||
|
from typing import List, Dict, Any, TypeVar, Callable, Type, cast
|
||
|
|
||
|
T = TypeVar("T")
|
||
|
|
||
|
|
||
|
def from_float(x: Any) -> float:
|
||
|
assert isinstance(x, (float, int)) and not isinstance(x, bool)
|
||
|
return float(x)
|
||
|
|
||
|
|
||
|
def to_float(x: Any) -> float:
|
||
|
assert isinstance(x, float)
|
||
|
return x
|
||
|
|
||
|
|
||
|
def from_str(x: Any) -> str:
|
||
|
assert isinstance(x, str)
|
||
|
return x
|
||
|
|
||
|
|
||
|
def from_int(x: Any) -> int:
|
||
|
assert isinstance(x, int) and not isinstance(x, bool)
|
||
|
return x
|
||
|
|
||
|
|
||
|
def to_class(c: Type[T], x: Any) -> dict:
|
||
|
assert isinstance(x, c)
|
||
|
return cast(Any, x).to_dict()
|
||
|
|
||
|
|
||
|
def from_list(f: Callable[[Any], T], x: Any) -> List[T]:
|
||
|
assert isinstance(x, list)
|
||
|
return [f(y) for y in x]
|
||
|
|
||
|
|
||
|
def from_str(x: Any) -> str:
|
||
|
assert isinstance(x, str)
|
||
|
return x
|
||
|
|
||
|
|
||
|
def from_dict(f: Callable[[Any], T], x: Any) -> Dict[str, T]:
|
||
|
assert isinstance(x, dict)
|
||
|
return {k: f(v) for (k, v) in x.items()}
|
||
|
|
||
|
|
||
|
def to_class(c: Type[T], x: Any) -> dict:
|
||
|
assert isinstance(x, c)
|
||
|
return cast(Any, x).to_dict()
|