1
0
mirror of https://github.com/checktheroads/hyperglass synced 2024-05-11 05:55:08 +00:00
2022-12-11 17:30:20 -05:00

45 lines
1.5 KiB
Python

"""hyperglass Configuration."""
# Standard Library
import typing as t
# Project
from hyperglass.state import use_state
from hyperglass.defaults.directives import init_builtin_directives
# Local
from .validate import init_files, init_params, init_devices, init_ui_params, init_directives
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
__all__ = ("init_user_config",)
def init_user_config(
params: t.Optional["Params"] = None,
directives: t.Optional["Directives"] = None,
devices: t.Optional["Devices"] = None,
) -> None:
"""Initialize all user configurations and add them to global state."""
state = use_state()
init_files()
_params = params or init_params()
builtins = init_builtin_directives()
_custom = directives or init_directives()
_directives = builtins + _custom
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.
pipeline.set("params", _params)
pipeline.set("directives", _directives)
_devices = devices or init_devices()
ui_params = init_ui_params(params=_params, devices=_devices)
with state.cache.pipeline() as pipeline:
pipeline.set("devices", _devices)
pipeline.set("ui_params", ui_params)