2020-10-11 13:14:07 -07:00
|
|
|
"""hyperglass Configuration."""
|
2022-12-11 17:27:53 -05:00
|
|
|
# Standard Library
|
|
|
|
import typing as t
|
2020-10-11 13:14:07 -07:00
|
|
|
|
2021-09-17 18:15:59 -07:00
|
|
|
# Project
|
|
|
|
from hyperglass.state import use_state
|
|
|
|
from hyperglass.defaults.directives import init_builtin_directives
|
|
|
|
|
2020-10-11 13:14:07 -07:00
|
|
|
# Local
|
2021-12-22 22:22:01 -07:00
|
|
|
from .validate import init_files, init_params, init_devices, init_ui_params, init_directives
|
2021-09-17 18:15:59 -07:00
|
|
|
|
2022-12-11 17:27:53 -05:00
|
|
|
if t.TYPE_CHECKING:
|
|
|
|
# Project
|
|
|
|
from hyperglass.models.directive import Directives
|
|
|
|
from hyperglass.models.config.params import Params
|
|
|
|
from hyperglass.models.config.devices import Devices
|
|
|
|
|
2021-09-17 18:15:59 -07:00
|
|
|
__all__ = ("init_user_config",)
|
|
|
|
|
|
|
|
|
2022-12-11 17:27:53 -05:00
|
|
|
def init_user_config(
|
|
|
|
params: t.Optional["Params"] = None,
|
|
|
|
directives: t.Optional["Directives"] = None,
|
|
|
|
devices: t.Optional["Devices"] = None,
|
|
|
|
) -> None:
|
2021-09-17 18:15:59 -07:00
|
|
|
"""Initialize all user configurations and add them to global state."""
|
|
|
|
state = use_state()
|
2021-12-07 10:28:02 -07:00
|
|
|
init_files()
|
2021-09-17 18:15:59 -07:00
|
|
|
|
2022-12-11 17:27:53 -05:00
|
|
|
_params = params or init_params()
|
2021-09-17 18:15:59 -07:00
|
|
|
builtins = init_builtin_directives()
|
2022-12-11 17:27:53 -05:00
|
|
|
_custom = directives or init_directives()
|
|
|
|
_directives = builtins + _custom
|
2021-09-17 18:15:59 -07:00
|
|
|
with state.cache.pipeline() as pipeline:
|
|
|
|
# Write params and directives to the cache first to avoid a race condition where ui_params
|
|
|
|
# or devices try to access params or directives before they're available.
|
2022-12-11 17:27:53 -05:00
|
|
|
pipeline.set("params", _params)
|
|
|
|
pipeline.set("directives", _directives)
|
2021-09-17 18:15:59 -07:00
|
|
|
|
2022-12-11 17:27:53 -05:00
|
|
|
_devices = devices or init_devices()
|
|
|
|
ui_params = init_ui_params(params=_params, devices=_devices)
|
2021-09-17 18:15:59 -07:00
|
|
|
with state.cache.pipeline() as pipeline:
|
2022-12-11 17:27:53 -05:00
|
|
|
pipeline.set("devices", _devices)
|
2021-09-17 18:15:59 -07:00
|
|
|
pipeline.set("ui_params", ui_params)
|