40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
import importlib
|
|
import os
|
|
from typing import List
|
|
|
|
from ray.train.v2._internal.constants import RAY_TRAIN_CALLBACKS_ENV_VAR
|
|
from ray.train.v2._internal.execution.callback import RayTrainCallback
|
|
|
|
|
|
def _initialize_env_callbacks() -> List[RayTrainCallback]:
|
|
"""Initialize callbacks from environment variable.
|
|
|
|
Returns:
|
|
List of callbacks initialized from environment variable.
|
|
"""
|
|
callbacks = []
|
|
callbacks_str = os.environ.get(RAY_TRAIN_CALLBACKS_ENV_VAR, "")
|
|
if not callbacks_str:
|
|
return callbacks
|
|
|
|
for callback_path in callbacks_str.split(","):
|
|
callback_path = callback_path.strip()
|
|
if not callback_path:
|
|
continue
|
|
|
|
try:
|
|
module_path, class_name = callback_path.rsplit(".", 1)
|
|
module = importlib.import_module(module_path)
|
|
callback_cls = getattr(module, class_name)
|
|
if not issubclass(callback_cls, RayTrainCallback):
|
|
raise TypeError(
|
|
f"Callback class '{callback_path}' must be a subclass of "
|
|
f"RayTrainCallback, got {type(callback_cls).__name__}"
|
|
)
|
|
callback = callback_cls()
|
|
callbacks.append(callback)
|
|
except (ImportError, AttributeError, ValueError, TypeError) as e:
|
|
raise ValueError(f"Failed to import callback from '{callback_path}'") from e
|
|
|
|
return callbacks
|