Files
ray-project--ray/python/ray/util/state/util.py
T
2026-07-13 13:17:40 +08:00

63 lines
1.9 KiB
Python

from typing import Optional, Union
def convert_string_to_type(
val: Optional[Union[str, int, float, bool]], convert_type: Union[int, float, bool]
) -> Union[int, float, bool]:
"""Convert the given value to a convert type.
If the given val is None, it will just return None without the conversion.
It supports,
str -> int/float/bool
int -> int
bool -> bool
float -> float
"""
if val is None:
return None
elif type(val) is convert_type:
return val
elif convert_type is int:
try:
val = int(val)
except ValueError:
raise ValueError(
f"Failed to convert a value {val} of type {type(val)} to {convert_type}"
)
elif convert_type is float:
try:
val = float(val)
except ValueError:
raise ValueError(
f"Failed to convert a value {val} of type {type(val)} to {convert_type}"
)
elif convert_type is bool:
# Without this, "False" will become True.
if val == "False" or val == "false" or val == "0":
val = False
elif val == "True" or val == "true" or val == "1":
val = True
else:
raise ValueError(
f"Failed to convert a value {val} of type {type(val)} to {convert_type}"
)
else:
assert False, f"Unsupported convert type {convert_type}"
return val
def record_deprecated_state_api_import():
import warnings
from ray._common.usage.usage_lib import TagKey, record_extra_usage_tag
warnings.warn(
"Ray state API is no longer experimental. Please import from `ray.util.state`. "
"instead. Importing from `ray.experimental` will be deprecated in "
"future releases. ",
DeprecationWarning,
)
record_extra_usage_tag(TagKey.EXPERIMENTAL_STATE_API_IMPORT, "1")