def validate_condition_structure(condition_dnf, definitions_index):
    result = validate_condition_includes_positive_clause(condition_dnf)
    if not result.is_valid_config:
        return result

    common_targets = get_condition_common_targets(condition_dnf,
                                                  definitions_index,
                                                  TemplateSymbolResolver())

    return get_content_correct_result() if common_targets \
        else get_content_fault_result(135)
Esempio n. 2
0
def calculate_action_target(condition, entities, relationships):
    """Return a vertex that can be used as an action target.

    External actions like execute_mistral do not have an explicit
    action target. This parameter is a must for the sub-graph matching
    algorithm. If it is missing, we would like to select an arbitrary
    target from the condition.
    If the target result is empty the condition is not valid.

    """
    definition_index = entities.copy()
    definition_index.update(relationships)
    targets = get_condition_common_targets(condition, definition_index,
                                           TemplateDataSymbolResolver())
    return {TFields.TARGET: targets.pop()} if targets else None