Skip to content

Activity.are_depency_condition_met returns False for multiple dependency.dependency_conditions: Skipped and Completed #163

@SemUijen

Description

@SemUijen

When an activity has two conditions, both are evaluated.
However, in Fabric, isn't it the case that only one of the two DependencyConditions of a single activity needs to be met?
Currently, in Fabric, an activity with both skipped and completed conditions works as expected.
Skipped and Completed is necessary if there are sequential Dependencies.

Current function

def are_dependency_condition_met(self, state: PipelineRunState) -> bool:
        if not self.depends_on:
            return True
        for dependency in self.depends_on:
            dependency_activity = state.try_get_activity_result_by_name(dependency.activity)
            if dependency_activity is None:
                return False
            for dependency_condition in dependency.dependency_conditions:
                if (
                    dependency_activity["status"] != dependency_condition
                    and dependency_condition != DependencyCondition.COMPLETED
                ):
                    return False
        return True

test example

"dependsOn": [
          {
            "activity": "Example",
            "dependencyConditions": [
              "Completed",
              "Skipped"
            ]
          },
for dependency_condition in dependency.dependency_conditions:
                if (
                    dependency_activity["status"] != dependency_condition
                    and dependency_condition != DependencyCondition.COMPLETED
                ):
>                   assert False, f"Activity {dependency.activity} should have status {dependency_condition}, got {dependency_activity['status']}"

AssertionError: Activity ForEach TablesDailyChanges should have status Skipped, got DependencyCondition.SUCCEEDED

Expected Behavior Function

def are_dependency_condition_met(self, state: PipelineRunState) -> bool:
        if not self.depends_on:
            return True
        for dependency in self.depends_on:
            dependency_activity = state.try_get_activity_result_by_name(dependency.activity)
            if dependency_activity is None:
                return False
            for dependency_condition in dependency.dependency_conditions:
                if dependency_condition = DependencyCondition.SKIPPED:
                      return True
                if (
                    dependency_activity["status"] == dependency_condition
                    or dependency_condition == DependencyCondition.COMPLETED
                ):
                    return True
        return False

This wil solve the case of multiple conditions. As when one condition is found that is correct it runs
This is under the assumption that I am not missing anything else

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions