Пример #1
0
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
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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
Пример #6
0
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