def load_order_components(components): """ Takes in a list of components we want to load: - filters out components we cannot load - filters out components that have invalid/circular dependencies - Will make sure the recorder component is loaded first - Will ensure that all components that do not directly depend on the group component will be loaded before the group component. - returns an OrderedSet load order. """ _check_prepared() group = get_component('group') recorder = get_component('recorder') load_order = OrderedSet() # Sort the list of modules on if they depend on group component or not. # We do this because the components that do not depend on the group # component usually set up states that the group component requires to be # created before it can group them. # This does not matter in the future if we can setup groups without the # states existing yet. for comp_load_order in sorted( (load_order_component(component) for component in components), # Test if group component exists in case # above get_component call had an error. key=lambda order: group and group.DOMAIN in order): load_order.update(comp_load_order) # Push recorder to first place in load order if recorder.DOMAIN in load_order: load_order.promote(recorder.DOMAIN) return load_order
def load_order_components(components: Sequence[str]) -> OrderedSet: """Take in a list of components we want to load. - filters out components we cannot load - filters out components that have invalid/circular dependencies - Will make sure the recorder component is loaded first - Will ensure that all components that do not directly depend on the group component will be loaded before the group component. - returns an OrderedSet load order. - Makes sure MQTT eventstream is available for publish before components start updating states. Async friendly. """ _check_prepared() load_order = OrderedSet() # Sort the list of modules on if they depend on group component or not. # Components that do not depend on the group usually set up states. # Components that depend on group usually use states in their setup. for comp_load_order in sorted((load_order_component(component) for component in components), key=lambda order: 'group' in order): load_order.update(comp_load_order) # Push some to first place in load order for comp in ('mqtt_eventstream', 'mqtt', 'logger', 'recorder', 'introduction'): if comp in load_order: load_order.promote(comp) return load_order
def load_order_components(components): """ Takes in a list of components we want to load: - filters out components we cannot load - filters out components that have invalid/circular dependencies - Will make sure the recorder component is loaded first - Will ensure that all components that do not directly depend on the group component will be loaded before the group component. - returns an OrderedSet load order. """ _check_prepared() load_order = OrderedSet() # Sort the list of modules on if they depend on group component or not. # Components that do not depend on the group usually set up states. # Components that depend on group usually use states in their setup. for comp_load_order in sorted((load_order_component(component) for component in components), key=lambda order: 'group' in order): load_order.update(comp_load_order) # Push recorder to first place in load order if 'recorder' in load_order: load_order.promote('recorder') return load_order
def load_order_components(components): """ Takes in a list of components we want to load: - filters out components we cannot load - filters out components that have invalid/circular dependencies - Will make sure the recorder component is loaded first - Will ensure that all components that do not directly depend on the group component will be loaded before the group component. - returns an OrderedSet load order. """ _check_prepared() load_order = OrderedSet() # Sort the list of modules on if they depend on group component or not. # Components that do not depend on the group usually set up states. # Components that depend on group usually use states in their setup. for comp_load_order in sorted((load_order_component(component) for component in components), key=lambda order: 'group' in order): load_order.update(comp_load_order) # Push some to first place in load order for comp in ('recorder', 'introduction'): if comp in load_order: load_order.promote(comp) return load_order
def load_order_components(components: Sequence[str]) -> OrderedSet: """Take in a list of components we want to load. - filters out components we cannot load - filters out components that have invalid/circular dependencies - Will make sure the recorder component is loaded first - Will ensure that all components that do not directly depend on the group component will be loaded before the group component. - returns an OrderedSet load order. - Makes sure MQTT eventstream is available for publish before components start updating states. Async friendly. """ _check_prepared() load_order = OrderedSet() # Sort the list of modules on if they depend on group component or not. # Components that do not depend on the group usually set up states. # Components that depend on group usually use states in their setup. for comp_load_order in sorted( (load_order_component(component) for component in components), key=lambda order: 'group' in order): load_order.update(comp_load_order) # Push some to first place in load order for comp in ('mqtt_eventstream', 'mqtt', 'logger', 'recorder', 'introduction'): if comp in load_order: load_order.promote(comp) return load_order
def load_order_components(components): """ Takes in a list of components we want to load: - filters out components we cannot load - filters out components that have invalid/circular dependencies - Will make sure the recorder component is loaded first - Will ensure that all components that do not directly depend on the group component will be loaded before the group component. - returns an OrderedSet load order. """ _check_prepared() group = get_component('group') recorder = get_component('recorder') load_order = OrderedSet() # Sort the list of modules on if they depend on group component or not. # We do this because the components that do not depend on the group # component usually set up states that the group component requires to be # created before it can group them. # This does not matter in the future if we can setup groups without the # states existing yet. for comp_load_order in sorted((load_order_component(component) for component in components), # Test if group component exists in case # above get_component call had an error. key=lambda order: group and group.DOMAIN in order): load_order.update(comp_load_order) # Push recorder to first place in load order if recorder.DOMAIN in load_order: load_order.promote(recorder.DOMAIN) return load_order