Source code for deisa.ray.config
# deisa/config.py
from __future__ import annotations
from deisa.ray.errors import ConfigError
[docs]
class Config:
"""
Process-wide configuration for the deisa library.
Mutable until locked. Instantiating Deisa() locks configuration to prevent
mid-run behavior changes.
"""
def __init__(self) -> None:
"""Initialise configuration defaults (all features disabled and unlocked)."""
self._locked: bool = False
self._enable_experimental_distributed_scheduling: bool = False
@property
def experimental_distributed_scheduling_enabled(self) -> bool:
"""
Read-only accessor for the experimental distributed scheduling flag.
Returns
-------
bool
``True`` when distributed scheduling is enabled, ``False`` otherwise.
"""
return self._enable_experimental_distributed_scheduling
[docs]
def enable_experimental_distributed_scheduling(self, enabled: bool = True) -> None:
"""
Enable/disable experimental distributed scheduling.
Parameters
----------
enabled : bool, optional
Desired state of the flag. Defaults to ``True``.
Raises
------
ConfigError
If configuration has already been locked by instantiating ``Deisa``.
TypeError
If ``enabled`` is not a boolean.
Examples
--------
>>> deisa.config.enable_experimental_distributed_scheduling() # enable
>>> deisa.config.enable_experimental_distributed_scheduling(False) # disable
"""
if self._locked:
raise ConfigError(
"deisa.config is locked because Deisa() has already been instantiated. "
"Set configuration before creating a Deisa instance."
)
if not isinstance(enabled, bool):
raise TypeError("enabled must be a bool")
self._enable_experimental_distributed_scheduling = enabled
[docs]
def lock(self) -> None:
"""
Make configuration immutable for the remainder of the process.
Notes
-----
Called automatically when ``Deisa()`` is instantiated. Further
mutation attempts will raise :class:`ConfigError`.
"""
self._locked = True
[docs]
def is_locked(self) -> bool:
"""
Report whether the configuration has been locked.
Returns
-------
bool
``True`` if :meth:`lock` has been called, otherwise ``False``.
"""
return self._locked
# ---- Test support (explicitly non-public) ----
def _reset_for_tests(self) -> None:
"""
Reset config to defaults and unlock it.
Intended for unit tests only. Do not rely on this in production.
"""
self._locked = False
self._enable_experimental_distributed_scheduling = False
config = Config()