You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by "amoghrajesh (via GitHub)" <gi...@apache.org> on 2025/08/21 11:20:07 UTC

[PR] Fix trigger rule error messages showing enum names instead of values [airflow]

amoghrajesh opened a new pull request, #54774:
URL: https://github.com/apache/airflow/pull/54774

   <!--
    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at
   
      http://www.apache.org/licenses/LICENSE-2.0
   
    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.
    -->
   
   <!--
   Thank you for contributing! Please make sure that your code changes
   are covered with tests. And in case of new features or big changes
   remember to adjust the documentation.
   
   Feel free to ping committers for the review!
   
   In case of an existing issue, reference it using one of the following:
   
   closes: #ISSUE
   related: #ISSUE
   
   How to write a good git commit message:
   http://chris.beams.io/posts/git-commit/
   -->
   
   
   Main's broken with errors like:
   ```
   FAILED airflow-core/tests/unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDepSetupConstraint::test_setup_constraint_will_fail_or_skip_fast[skipped-skipped] - assert False
    +  where False = <built-in method startswith of str object at 0xffc9b0b154d0>("Task's trigger rule 'all_success' requires")
    +    where <built-in method startswith of str object at 0xffc9b0b154d0> = "Task's trigger rule 'TriggerRule.ALL_SUCCESS' requires all upstream tasks to have succeeded, but found 2 non-success(...d=1, failed=0, upstream_failed=0, removed=0, done=1, success_setup=0, skipped_setup=1), upstream_task_ids={'s2', 's1'}".startswith
    +      where "Task's trigger rule 'TriggerRule.ALL_SUCCESS' requires all upstream tasks to have succeeded, but found 2 non-success(...d=1, failed=0, upstream_failed=0, removed=0, done=1, success_setup=0, skipped_setup=1), upstream_task_ids={'s2', 's1'}" = TIDepStatus(dep_name='Trigger Rule', passed=False, reason="Task's trigger rule 'TriggerRule.ALL_SUCCESS' requires all ...=1, failed=0, upstream_failed=0, removed=0, done=1, success_setup=0, skipped_setup=1), upstream_task_ids={'s2', 's1'}").reason
   ```
   
   Example: https://github.com/apache/airflow/actions/runs/17122995052/job/48568924487
   
   Due to recent merge of: https://github.com/apache/airflow/pull/53389, i wonder why no test caught this.
   
   
   <!-- Please keep an empty line above the dashes. -->
   ---
   **^ Add meaningful description above**
   Read the **[Pull Request Guidelines](https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#pull-request-guidelines)** for more information.
   In case of fundamental code changes, an Airflow Improvement Proposal ([AIP](https://cwiki.apache.org/confluence/display/AIRFLOW/Airflow+Improvement+Proposals)) is needed.
   In case of a new dependency, check compliance with the [ASF 3rd Party License Policy](https://www.apache.org/legal/resolved.html#category-x).
   In case of backwards incompatible changes please leave a note in a newsfragment file, named `{pr_number}.significant.rst` or `{issue_number}.significant.rst`, in [airflow-core/newsfragments](https://github.com/apache/airflow/tree/main/airflow-core/newsfragments).
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Fix trigger rule error messages showing enum names instead of values [airflow]

Posted by "amoghrajesh (via GitHub)" <gi...@apache.org>.
amoghrajesh commented on PR #54774:
URL: https://github.com/apache/airflow/pull/54774#issuecomment-3210446993

   Just replaced all the occurecnes with `getattr`, reason being:
   
   * task-sdk TriggerRule has no `__str__`, therefore, f"{trigger_rule}" → "TriggerRule.ALL_SUCCESS"
   * airflow-core TriggerRule has `__str__` and it behaves like f"{trigger_rule}" → "all_success"
   
   That's why getattr(trigger_rule, 'value', trigger_rule) works for all cases:
   Enum objects: Uses .value => "all_success"
   String objects: Falls back to string => "unknown_status"


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Fix trigger rule error messages showing enum names instead of values [airflow]

Posted by "amoghrajesh (via GitHub)" <gi...@apache.org>.
amoghrajesh commented on code in PR #54774:
URL: https://github.com/apache/airflow/pull/54774#discussion_r2291737790


##########
airflow-core/src/airflow/ti_deps/deps/trigger_rule_dep.py:
##########
@@ -617,14 +617,17 @@ def _evaluate_direct_relatives() -> Iterator[TIDepStatus]:
                 elif success == 0:
                     yield self._failing_status(
                         reason=(
-                            f"Task's trigger rule '{trigger_rule}' requires all non-skipped upstream tasks to have "
+                            f"Task's trigger rule '{trigger_rule.value}' requires all non-skipped upstream tasks to have "
                             f"completed and at least one upstream task has succeeded, but found "
                             f"{success} successful task(s). upstream_states={upstream_states}, "
                             f"upstream_task_ids={task.upstream_task_ids}"
                         )
                     )
             else:
-                yield self._failing_status(reason=f"No strategy to evaluate trigger rule '{trigger_rule}'.")
+                print("true rule not implemented:", trigger_rule)
+                yield self._failing_status(
+                    reason=f"No strategy to evaluate trigger rule '{getattr(trigger_rule, 'value', trigger_rule)}'."

Review Comment:
   Resolving to unblock CI runs, can later handle if anything 



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Fix trigger rule error messages showing enum names instead of values [airflow]

Posted by "sunank200 (via GitHub)" <gi...@apache.org>.
sunank200 commented on code in PR #54774:
URL: https://github.com/apache/airflow/pull/54774#discussion_r2290731687


##########
airflow-core/src/airflow/ti_deps/deps/trigger_rule_dep.py:
##########
@@ -617,14 +617,17 @@ def _evaluate_direct_relatives() -> Iterator[TIDepStatus]:
                 elif success == 0:
                     yield self._failing_status(
                         reason=(
-                            f"Task's trigger rule '{trigger_rule}' requires all non-skipped upstream tasks to have "
+                            f"Task's trigger rule '{trigger_rule.value}' requires all non-skipped upstream tasks to have "
                             f"completed and at least one upstream task has succeeded, but found "
                             f"{success} successful task(s). upstream_states={upstream_states}, "
                             f"upstream_task_ids={task.upstream_task_ids}"
                         )
                     )
             else:
-                yield self._failing_status(reason=f"No strategy to evaluate trigger rule '{trigger_rule}'.")
+                print("true rule not implemented:", trigger_rule)

Review Comment:
   ```suggestion
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Fix trigger rule error messages showing enum names instead of values [airflow]

Posted by "amoghrajesh (via GitHub)" <gi...@apache.org>.
amoghrajesh commented on PR #54774:
URL: https://github.com/apache/airflow/pull/54774#issuecomment-3210338427

   @sunank200 where are you seeing failures?
   
   ```
   /Users/amoghdesai/Documents/OSS/repos/airflow/.venv/bin/python /Applications/PyCharm.app/Contents/plugins/python-ce/helpers/pycharm/_jb_pytest_runner.py --target unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep 
   Testing started at 5:39 pm ...
   Launching pytest with arguments unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep --no-header --no-summary -q in /Users/amoghdesai/Documents/OSS/repos/airflow/airflow-core/tests
   
   ============================= test session starts ==============================
   collecting ... collected 109 items
   
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_no_upstream_tasks 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_always_tr 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_success_tr_success[True-skipped] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_success_tr_success[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_success_tr_failure[True-upstream_failed] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_success_tr_failure[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_success_tr_failure_all_skipped[True-skipped] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_success_tr_failure_all_skipped[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_failure_tr_failure[True-skipped] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_failure_tr_failure[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_failure_tr_success[True] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_failure_tr_success_no_failed[False] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_done_tr_success[True] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_done_tr_success[False] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_done_tr_success_with_failed[True] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_done_tr_success_with_failed[False] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_done_tr_skip[True-skipped] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_done_tr_skip[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_done_tr_upstream_failed[True-skipped] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_done_tr_upstream_failed[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_success_tr_success[True] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_success_tr_success[False] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_success_tr_failure[True-upstream_failed] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_success_tr_failure[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_success_tr_skip[True-skipped] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_success_tr_skip[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_success_tr_skip_wait_for_past_depends_before_skipping[True] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_success_tr_skip_wait_for_past_depends_before_skipping[False] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_success_tr_skip_wait_for_past_depends_before_skipping_past_depends_met[True-skipped] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_success_tr_skip_wait_for_past_depends_before_skipping_past_depends_met[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_tr_success[True] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_tr_failure[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_tr_failure_with_upstream_failure[True-upstream_failed] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_tr_failure_with_upstream_failure[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_min_one_success_tr_success[True] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_min_one_success_tr_success[False] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_min_one_success_tr_skipped[True-skipped] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_min_one_success_tr_skipped[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_min_one_success_tr_failure[True-upstream_failed] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_min_one_success_tr_failure[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_min_one_success_tr_upstream_failure[True-upstream_failed] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_min_one_success_tr_upstream_failure[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_failed_tr_success[True] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_failed_tr_success[False] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_failed_tr_failure[True-skipped] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_failed_tr_failure[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_tr_success[True] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_tr_success[False] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-no setups] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-setup not done] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-setup failed0] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-one setup failed one success] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-one setup success one running] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-setup failed1] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-one setup failed one skipped] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-two setups both skipped] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-all success] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-work failed] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-one setup; skipped] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-no setups] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-setup not done] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-setup failed0] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-one setup failed one success] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-one setup success one running] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-setup failed1] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-one setup failed one skipped] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-two setups both skipped] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-all success] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-work failed] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-one setup; skipped] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_skipped_tr_failure[True-skipped] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_skipped_tr_failure[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_skipped_tr_failure_upstream_failed[True-skipped] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_skipped_tr_failure_upstream_failed[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_skipped_tr_success[True] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_skipped_tr_success[False] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_tr_failure[True] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_tr_failure[False] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_skipped_tr_success[True] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_skipped_tr_success[False] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_skipped_tr_failure[True-skipped] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_skipped_tr_failure[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_skipped_tr_failure_empty[True] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_skipped_tr_failure_empty[False] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_unknown_tr[True] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_unknown_tr[False] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_min_one_success_with_mixed_success_and_failure[True-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_min_one_success_with_all_successful_upstreams[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_min_one_success_with_success_and_skipped_upstream[True-skipped] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_min_one_success_with_success_and_skipped_upstream[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_min_one_success_with_all_failed_upstreams[True-upstream_failed] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_min_one_success_with_all_failed_upstreams[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_min_one_success_with_upstream_failed_cascade[True-upstream_failed] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_min_one_success_with_upstream_failed_cascade[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_UpstreamTIStates 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_mapped_task_upstream_removed_with_all_success_trigger_rules[True-removed] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_mapped_task_upstream_removed_with_all_success_trigger_rules[False-None] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_mapped_task_upstream_removed_with_all_failed_trigger_rules[True] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_mapped_task_upstream_removed_with_all_failed_trigger_rules[False] 
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_mapped_task_upstream_removed_with_none_failed_trigger_rules[True-none_failed] 
   ========================= AIRFLOW ==========================
   Home of the user: /Users/amoghdesai
   Airflow home /Users/amoghdesai/airflow
   Skipping initializing of the DB as it was initialized already.
   You can re-initialize the database by adding --with-db-init flag when running tests.
   [2025-08-21T17:39:04.033+0530] {secrets_masker.py:560} WARNING - Skipping masking for a secret as it's too short (<5 chars)
   [2025-08-21T17:39:04.042+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [  0%][2025-08-21T17:39:04.068+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.167+0530] {plugins_manager.py:268} ERROR - Failed to import plugin databricks_workflow
   Traceback (most recent call last):
     File "/Users/amoghdesai/Documents/OSS/repos/airflow/airflow-core/src/airflow/plugins_manager.py", line 260, in load_entrypoint_plugins
       plugin_class = entry_point.load()
     File "/opt/homebrew/Cellar/python@3.13/3.13.3_1/Frameworks/Python.framework/Versions/3.13/lib/python3.13/importlib/metadata/__init__.py", line 179, in load
       module = import_module(match.group('module'))
     File "/opt/homebrew/Cellar/python@3.13/3.13.3_1/Frameworks/Python.framework/Versions/3.13/lib/python3.13/importlib/__init__.py", line 88, in import_module
       return _bootstrap._gcd_import(name[level:], package, level)
              ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
     File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
     File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
     File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
     File "<frozen importlib._bootstrap_external>", line 1026, in exec_module
     File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
     File "/Users/amoghdesai/Documents/OSS/repos/airflow/providers/databricks/src/airflow/providers/databricks/plugins/databricks_workflow.py", line 26, in <module>
       from flask_appbuilder import BaseView
   ModuleNotFoundError: No module named 'flask_appbuilder'
   [2025-08-21T17:39:04.361+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [  1%][2025-08-21T17:39:04.364+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.383+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [  2%][2025-08-21T17:39:04.386+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.401+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [  3%][2025-08-21T17:39:04.404+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.420+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [  4%][2025-08-21T17:39:04.423+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.435+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [  5%][2025-08-21T17:39:04.438+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.450+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [  6%][2025-08-21T17:39:04.453+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.465+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [  7%][2025-08-21T17:39:04.468+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.481+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [  8%][2025-08-21T17:39:04.484+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.496+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [  9%][2025-08-21T17:39:04.498+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.511+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 10%][2025-08-21T17:39:04.514+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_failure_tr_success[False] [2025-08-21T17:39:04.526+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 11%][2025-08-21T17:39:04.528+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_failure_tr_success_no_failed[True] [2025-08-21T17:39:04.541+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 11%][2025-08-21T17:39:04.544+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.555+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 12%][2025-08-21T17:39:04.557+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.570+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 13%][2025-08-21T17:39:04.573+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.585+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 14%][2025-08-21T17:39:04.589+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.602+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 15%][2025-08-21T17:39:04.604+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.616+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 16%][2025-08-21T17:39:04.619+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.632+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 17%][2025-08-21T17:39:04.634+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.646+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 18%][2025-08-21T17:39:04.649+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.662+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 19%][2025-08-21T17:39:04.664+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.676+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 20%][2025-08-21T17:39:04.679+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.691+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 21%][2025-08-21T17:39:04.694+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.705+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 22%][2025-08-21T17:39:04.708+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.720+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 22%][2025-08-21T17:39:04.723+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.735+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 23%][2025-08-21T17:39:04.737+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.751+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 24%][2025-08-21T17:39:04.754+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.765+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 25%][2025-08-21T17:39:04.768+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.782+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 26%][2025-08-21T17:39:04.785+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.797+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 27%][2025-08-21T17:39:04.800+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.813+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 28%][2025-08-21T17:39:04.816+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.828+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 29%][2025-08-21T17:39:04.831+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.844+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 30%][2025-08-21T17:39:04.847+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_tr_success[False] [2025-08-21T17:39:04.859+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 31%][2025-08-21T17:39:04.862+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_tr_failure[True-upstream_failed] [2025-08-21T17:39:04.875+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 32%][2025-08-21T17:39:04.877+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.889+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 33%][2025-08-21T17:39:04.892+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.904+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 33%][2025-08-21T17:39:04.907+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.919+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 34%][2025-08-21T17:39:04.922+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.934+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 35%][2025-08-21T17:39:04.937+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.948+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 36%][2025-08-21T17:39:04.951+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.963+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 37%][2025-08-21T17:39:04.966+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.977+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 38%][2025-08-21T17:39:04.980+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:04.992+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 39%][2025-08-21T17:39:04.994+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.007+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 40%][2025-08-21T17:39:05.010+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.022+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 41%][2025-08-21T17:39:05.025+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.037+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 42%][2025-08-21T17:39:05.040+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.053+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 43%][2025-08-21T17:39:05.055+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.067+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 44%][2025-08-21T17:39:05.069+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.082+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 44%][2025-08-21T17:39:05.084+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.096+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 45%][2025-08-21T17:39:05.099+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.111+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 46%][2025-08-21T17:39:05.114+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.125+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 47%][2025-08-21T17:39:05.127+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.141+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 48%][2025-08-21T17:39:05.143+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.155+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 49%][2025-08-21T17:39:05.158+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.171+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 50%][2025-08-21T17:39:05.173+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.187+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 51%][2025-08-21T17:39:05.189+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.203+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 52%][2025-08-21T17:39:05.205+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.218+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 53%][2025-08-21T17:39:05.221+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.235+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 54%][2025-08-21T17:39:05.238+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.251+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 55%][2025-08-21T17:39:05.254+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.267+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 55%][2025-08-21T17:39:05.270+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.284+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 56%][2025-08-21T17:39:05.287+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.303+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 57%][2025-08-21T17:39:05.306+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.320+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 58%][2025-08-21T17:39:05.323+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.337+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 59%][2025-08-21T17:39:05.339+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.353+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 60%][2025-08-21T17:39:05.356+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.371+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 61%][2025-08-21T17:39:05.374+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.388+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 62%][2025-08-21T17:39:05.391+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.405+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 63%][2025-08-21T17:39:05.408+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.420+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 64%][2025-08-21T17:39:05.423+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.443+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 65%][2025-08-21T17:39:05.446+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.459+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 66%][2025-08-21T17:39:05.462+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.475+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 66%][2025-08-21T17:39:05.478+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.491+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 67%][2025-08-21T17:39:05.494+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.509+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 68%][2025-08-21T17:39:05.512+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.525+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 69%][2025-08-21T17:39:05.528+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.542+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 70%][2025-08-21T17:39:05.545+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.558+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 71%][2025-08-21T17:39:05.560+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.573+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 72%][2025-08-21T17:39:05.576+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.589+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 73%][2025-08-21T17:39:05.593+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.608+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 74%][2025-08-21T17:39:05.611+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.623+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 75%][2025-08-21T17:39:05.626+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.640+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 76%][2025-08-21T17:39:05.643+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.656+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 77%][2025-08-21T17:39:05.659+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.673+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 77%][2025-08-21T17:39:05.676+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.689+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 78%][2025-08-21T17:39:05.692+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.705+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 79%][2025-08-21T17:39:05.708+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.720+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 80%][2025-08-21T17:39:05.723+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.735+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 81%][2025-08-21T17:39:05.738+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   true rule not implemented: Unknown Trigger Rule
   [2025-08-21T17:39:05.750+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 82%][2025-08-21T17:39:05.752+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   true rule not implemented: Unknown Trigger Rule
   [2025-08-21T17:39:05.764+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 83%][2025-08-21T17:39:05.767+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_min_one_success_with_mixed_success_and_failure[False-None] [2025-08-21T17:39:05.779+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 84%][2025-08-21T17:39:05.782+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_min_one_success_with_all_successful_upstreams[True-None] [2025-08-21T17:39:05.798+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 85%][2025-08-21T17:39:05.801+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.813+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 86%][2025-08-21T17:39:05.816+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.828+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 87%][2025-08-21T17:39:05.831+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.844+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 88%][2025-08-21T17:39:05.847+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.860+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 88%][2025-08-21T17:39:05.863+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.876+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 89%][2025-08-21T17:39:05.879+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.894+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 90%][2025-08-21T17:39:05.897+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.912+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 91%][2025-08-21T17:39:05.915+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.930+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 92%][2025-08-21T17:39:05.933+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:05.943+0530] {dagrun.py:1204} INFO - Marking run <DagRun test_dag @ 2016-01-01 00:00:00+00:00: test, state:running, queued_at: None. run_type: manual> successful
   Dag run in success state
   Dag run start:2016-01-01 00:00:00+00:00 end:2025-08-21 12:09:05.943540+00:00
   [2025-08-21T17:39:05.950+0530] {dagrun.py:1266} INFO - DagRun Finished: dag_id=test_dag, logical_date=2016-01-01 00:00:00+00:00, run_id=test, run_start_date=2016-01-01 00:00:00+00:00, run_end_date=2025-08-21 12:09:05.943540+00:00, run_duration=304171745.94354, state=success, run_type=manual, data_interval_start=2015-12-31 00:00:00+00:00, data_interval_end=2016-01-01 00:00:00+00:00,
   [2025-08-21T17:39:06.043+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 93%][2025-08-21T17:39:06.047+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:06.073+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 94%][2025-08-21T17:39:06.077+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:06.101+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 95%][2025-08-21T17:39:06.104+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:06.127+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 96%][2025-08-21T17:39:06.130+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   [2025-08-21T17:39:06.156+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 97%][2025-08-21T17:39:06.159+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_mapped_task_upstream_removed_with_none_failed_trigger_rules[True-none_failed_min_one_success] [2025-08-21T17:39:06.184+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 98%][2025-08-21T17:39:06.188+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_mapped_task_upstream_removed_with_none_failed_trigger_rules[False-none_failed] [2025-08-21T17:39:06.212+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [ 99%][2025-08-21T17:39:06.215+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   
   unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_mapped_task_upstream_removed_with_none_failed_trigger_rules[False-none_failed_min_one_success] [2025-08-21T17:39:06.238+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   PASSED [100%][2025-08-21T17:39:06.241+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   
   
   ======================== 109 passed, 1 warning in 3.99s ========================
   
   Process finished with exit code 0
   
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Fix trigger rule error messages showing enum names instead of values [airflow]

Posted by "amoghrajesh (via GitHub)" <gi...@apache.org>.
amoghrajesh commented on code in PR #54774:
URL: https://github.com/apache/airflow/pull/54774#discussion_r2291149757


##########
airflow-core/src/airflow/ti_deps/deps/trigger_rule_dep.py:
##########
@@ -617,14 +617,17 @@ def _evaluate_direct_relatives() -> Iterator[TIDepStatus]:
                 elif success == 0:
                     yield self._failing_status(
                         reason=(
-                            f"Task's trigger rule '{trigger_rule}' requires all non-skipped upstream tasks to have "
+                            f"Task's trigger rule '{trigger_rule.value}' requires all non-skipped upstream tasks to have "
                             f"completed and at least one upstream task has succeeded, but found "
                             f"{success} successful task(s). upstream_states={upstream_states}, "
                             f"upstream_task_ids={task.upstream_task_ids}"
                         )
                     )
             else:
-                yield self._failing_status(reason=f"No strategy to evaluate trigger rule '{trigger_rule}'.")
+                print("true rule not implemented:", trigger_rule)
+                yield self._failing_status(
+                    reason=f"No strategy to evaluate trigger rule '{getattr(trigger_rule, 'value', trigger_rule)}'."

Review Comment:
   > What if you change the generation to have the use-subclass-enum option?
   I think that will make it subclass string and not need this?
   
   Let me try



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Fix trigger rule error messages showing enum names instead of values [airflow]

Posted by "amoghrajesh (via GitHub)" <gi...@apache.org>.
amoghrajesh commented on code in PR #54774:
URL: https://github.com/apache/airflow/pull/54774#discussion_r2291177291


##########
airflow-core/src/airflow/ti_deps/deps/trigger_rule_dep.py:
##########
@@ -617,14 +617,17 @@ def _evaluate_direct_relatives() -> Iterator[TIDepStatus]:
                 elif success == 0:
                     yield self._failing_status(
                         reason=(
-                            f"Task's trigger rule '{trigger_rule}' requires all non-skipped upstream tasks to have "
+                            f"Task's trigger rule '{trigger_rule.value}' requires all non-skipped upstream tasks to have "
                             f"completed and at least one upstream task has succeeded, but found "
                             f"{success} successful task(s). upstream_states={upstream_states}, "
                             f"upstream_task_ids={task.upstream_task_ids}"
                         )
                     )
             else:
-                yield self._failing_status(reason=f"No strategy to evaluate trigger rule '{trigger_rule}'.")
+                print("true rule not implemented:", trigger_rule)
+                yield self._failing_status(
+                    reason=f"No strategy to evaluate trigger rule '{getattr(trigger_rule, 'value', trigger_rule)}'."

Review Comment:
   > use-subclass-enum=true # enum, not union of Literals
   
   @ashb 
   is already present in the pyproject.toml for task-sdk, the problem is that __str__ is defined on the core version and when we generate the sdk version, it gets removed, I could edit the `datamodel_code_formatter.py` script but I do not think its worth that effort, wdyt?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Fix trigger rule error messages showing enum names instead of values [airflow]

Posted by "sunank200 (via GitHub)" <gi...@apache.org>.
sunank200 commented on PR #54774:
URL: https://github.com/apache/airflow/pull/54774#issuecomment-3210368919

   This was the error I was referring: https://github.com/apache/airflow/actions/runs/17126347058/job/48579436726?pr=54774


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Fix trigger rule error messages showing enum names instead of values [airflow]

Posted by "amoghrajesh (via GitHub)" <gi...@apache.org>.
amoghrajesh commented on PR #54774:
URL: https://github.com/apache/airflow/pull/54774#issuecomment-3210406484

   Oh i see, looking into it


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Fix trigger rule error messages showing enum names instead of values [airflow]

Posted by "kaxil (via GitHub)" <gi...@apache.org>.
kaxil commented on code in PR #54774:
URL: https://github.com/apache/airflow/pull/54774#discussion_r2290840543


##########
airflow-core/src/airflow/ti_deps/deps/trigger_rule_dep.py:
##########
@@ -617,14 +617,17 @@ def _evaluate_direct_relatives() -> Iterator[TIDepStatus]:
                 elif success == 0:
                     yield self._failing_status(
                         reason=(
-                            f"Task's trigger rule '{trigger_rule}' requires all non-skipped upstream tasks to have "
+                            f"Task's trigger rule '{trigger_rule.value}' requires all non-skipped upstream tasks to have "
                             f"completed and at least one upstream task has succeeded, but found "
                             f"{success} successful task(s). upstream_states={upstream_states}, "
                             f"upstream_task_ids={task.upstream_task_ids}"
                         )
                     )
             else:
-                yield self._failing_status(reason=f"No strategy to evaluate trigger rule '{trigger_rule}'.")
+                print("true rule not implemented:", trigger_rule)
+                yield self._failing_status(
+                    reason=f"No strategy to evaluate trigger rule '{getattr(trigger_rule, 'value', trigger_rule)}'."

Review Comment:
   Why getattr here?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Fix trigger rule error messages showing enum names instead of values [airflow]

Posted by "amoghrajesh (via GitHub)" <gi...@apache.org>.
amoghrajesh commented on code in PR #54774:
URL: https://github.com/apache/airflow/pull/54774#discussion_r2290947334


##########
airflow-core/src/airflow/ti_deps/deps/trigger_rule_dep.py:
##########
@@ -617,14 +617,17 @@ def _evaluate_direct_relatives() -> Iterator[TIDepStatus]:
                 elif success == 0:
                     yield self._failing_status(
                         reason=(
-                            f"Task's trigger rule '{trigger_rule}' requires all non-skipped upstream tasks to have "
+                            f"Task's trigger rule '{trigger_rule.value}' requires all non-skipped upstream tasks to have "
                             f"completed and at least one upstream task has succeeded, but found "
                             f"{success} successful task(s). upstream_states={upstream_states}, "
                             f"upstream_task_ids={task.upstream_task_ids}"
                         )
                     )
             else:
-                yield self._failing_status(reason=f"No strategy to evaluate trigger rule '{trigger_rule}'.")
+                print("true rule not implemented:", trigger_rule)
+                yield self._failing_status(
+                    reason=f"No strategy to evaluate trigger rule '{getattr(trigger_rule, 'value', trigger_rule)}'."

Review Comment:
   Just replaced all the occurecnes with `getattr`, reason being:
   
   * task-sdk TriggerRule has no `__str__`, therefore, f"{trigger_rule}" → "TriggerRule.ALL_SUCCESS"
   * airflow-core TriggerRule has `__str__` and it behaves like f"{trigger_rule}" → "all_success"
   
   That's why getattr(trigger_rule, 'value', trigger_rule) works for all cases:
   Enum objects: Uses .value => "all_success"
   String objects: Falls back to string => "unknown_status"



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Fix trigger rule error messages showing enum names instead of values [airflow]

Posted by "amoghrajesh (via GitHub)" <gi...@apache.org>.
amoghrajesh merged PR #54774:
URL: https://github.com/apache/airflow/pull/54774


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Fix trigger rule error messages showing enum names instead of values [airflow]

Posted by "ashb (via GitHub)" <gi...@apache.org>.
ashb commented on code in PR #54774:
URL: https://github.com/apache/airflow/pull/54774#discussion_r2290968699


##########
airflow-core/src/airflow/ti_deps/deps/trigger_rule_dep.py:
##########
@@ -617,14 +617,17 @@ def _evaluate_direct_relatives() -> Iterator[TIDepStatus]:
                 elif success == 0:
                     yield self._failing_status(
                         reason=(
-                            f"Task's trigger rule '{trigger_rule}' requires all non-skipped upstream tasks to have "
+                            f"Task's trigger rule '{trigger_rule.value}' requires all non-skipped upstream tasks to have "
                             f"completed and at least one upstream task has succeeded, but found "
                             f"{success} successful task(s). upstream_states={upstream_states}, "
                             f"upstream_task_ids={task.upstream_task_ids}"
                         )
                     )
             else:
-                yield self._failing_status(reason=f"No strategy to evaluate trigger rule '{trigger_rule}'.")
+                print("true rule not implemented:", trigger_rule)
+                yield self._failing_status(
+                    reason=f"No strategy to evaluate trigger rule '{getattr(trigger_rule, 'value', trigger_rule)}'."

Review Comment:
   What if you change the generation to have the `use-subclass-enum` option?
   
   I think that will make it subclass string and not need this?
   
   Also how does this code get run with the sdk version of the enum in the first place?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Fix trigger rule error messages showing enum names instead of values [airflow]

Posted by "amoghrajesh (via GitHub)" <gi...@apache.org>.
amoghrajesh commented on code in PR #54774:
URL: https://github.com/apache/airflow/pull/54774#discussion_r2291177291


##########
airflow-core/src/airflow/ti_deps/deps/trigger_rule_dep.py:
##########
@@ -617,14 +617,17 @@ def _evaluate_direct_relatives() -> Iterator[TIDepStatus]:
                 elif success == 0:
                     yield self._failing_status(
                         reason=(
-                            f"Task's trigger rule '{trigger_rule}' requires all non-skipped upstream tasks to have "
+                            f"Task's trigger rule '{trigger_rule.value}' requires all non-skipped upstream tasks to have "
                             f"completed and at least one upstream task has succeeded, but found "
                             f"{success} successful task(s). upstream_states={upstream_states}, "
                             f"upstream_task_ids={task.upstream_task_ids}"
                         )
                     )
             else:
-                yield self._failing_status(reason=f"No strategy to evaluate trigger rule '{trigger_rule}'.")
+                print("true rule not implemented:", trigger_rule)
+                yield self._failing_status(
+                    reason=f"No strategy to evaluate trigger rule '{getattr(trigger_rule, 'value', trigger_rule)}'."

Review Comment:
   > use-subclass-enum=true # enum, not union of Literals
   
   is already present in the pyproject.toml for task-sdk, the problem is that __str__ is defined on the core version and when we generate the sdk version, it gets removed, I could edit the `datamodel_code_formatter.py` script but I do not think its worth that effort, wdyt?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Fix trigger rule error messages showing enum names instead of values [airflow]

Posted by "sunank200 (via GitHub)" <gi...@apache.org>.
sunank200 commented on PR #54774:
URL: https://github.com/apache/airflow/pull/54774#issuecomment-3210343630

   > @sunank200 where are you seeing failures?
   > 
   > ```
   > /Users/amoghdesai/Documents/OSS/repos/airflow/.venv/bin/python /Applications/PyCharm.app/Contents/plugins/python-ce/helpers/pycharm/_jb_pytest_runner.py --target unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep 
   > Testing started at 5:39 pm ...
   > Launching pytest with arguments unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep --no-header --no-summary -q in /Users/amoghdesai/Documents/OSS/repos/airflow/airflow-core/tests
   > 
   > ============================= test session starts ==============================
   > collecting ... collected 109 items
   > 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_no_upstream_tasks 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_always_tr 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_success_tr_success[True-skipped] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_success_tr_success[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_success_tr_failure[True-upstream_failed] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_success_tr_failure[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_success_tr_failure_all_skipped[True-skipped] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_success_tr_failure_all_skipped[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_failure_tr_failure[True-skipped] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_failure_tr_failure[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_failure_tr_success[True] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_failure_tr_success_no_failed[False] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_done_tr_success[True] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_done_tr_success[False] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_done_tr_success_with_failed[True] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_done_tr_success_with_failed[False] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_done_tr_skip[True-skipped] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_done_tr_skip[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_done_tr_upstream_failed[True-skipped] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_done_tr_upstream_failed[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_success_tr_success[True] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_success_tr_success[False] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_success_tr_failure[True-upstream_failed] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_success_tr_failure[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_success_tr_skip[True-skipped] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_success_tr_skip[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_success_tr_skip_wait_for_past_depends_before_skipping[True] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_success_tr_skip_wait_for_past_depends_before_skipping[False] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_success_tr_skip_wait_for_past_depends_before_skipping_past_depends_met[True-skipped] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_success_tr_skip_wait_for_past_depends_before_skipping_past_depends_met[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_tr_success[True] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_tr_failure[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_tr_failure_with_upstream_failure[True-upstream_failed] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_tr_failure_with_upstream_failure[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_min_one_success_tr_success[True] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_min_one_success_tr_success[False] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_min_one_success_tr_skipped[True-skipped] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_min_one_success_tr_skipped[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_min_one_success_tr_failure[True-upstream_failed] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_min_one_success_tr_failure[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_min_one_success_tr_upstream_failure[True-upstream_failed] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_min_one_success_tr_upstream_failure[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_failed_tr_success[True] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_failed_tr_success[False] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_failed_tr_failure[True-skipped] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_failed_tr_failure[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_tr_success[True] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_tr_success[False] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-no setups] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-setup not done] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-setup failed0] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-one setup failed one success] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-one setup success one running] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-setup failed1] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-one setup failed one skipped] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-two setups both skipped] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-all success] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-work failed] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[True-one setup; skipped] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-no setups] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-setup not done] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-setup failed0] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-one setup failed one success] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-one setup success one running] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-setup failed1] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-one setup failed one skipped] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-two setups both skipped] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-all success] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-work failed] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_teardown_tr_not_all_done[False-one setup; skipped] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_skipped_tr_failure[True-skipped] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_skipped_tr_failure[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_skipped_tr_failure_upstream_failed[True-skipped] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_skipped_tr_failure_upstream_failed[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_skipped_tr_success[True] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_skipped_tr_success[False] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_tr_failure[True] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_tr_failure[False] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_skipped_tr_success[True] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_skipped_tr_success[False] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_skipped_tr_failure[True-skipped] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_skipped_tr_failure[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_skipped_tr_failure_empty[True] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_skipped_tr_failure_empty[False] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_unknown_tr[True] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_unknown_tr[False] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_min_one_success_with_mixed_success_and_failure[True-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_min_one_success_with_all_successful_upstreams[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_min_one_success_with_success_and_skipped_upstream[True-skipped] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_min_one_success_with_success_and_skipped_upstream[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_min_one_success_with_all_failed_upstreams[True-upstream_failed] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_min_one_success_with_all_failed_upstreams[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_min_one_success_with_upstream_failed_cascade[True-upstream_failed] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_min_one_success_with_upstream_failed_cascade[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_UpstreamTIStates 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_mapped_task_upstream_removed_with_all_success_trigger_rules[True-removed] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_mapped_task_upstream_removed_with_all_success_trigger_rules[False-None] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_mapped_task_upstream_removed_with_all_failed_trigger_rules[True] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_mapped_task_upstream_removed_with_all_failed_trigger_rules[False] 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_mapped_task_upstream_removed_with_none_failed_trigger_rules[True-none_failed] 
   > ========================= AIRFLOW ==========================
   > Home of the user: /Users/amoghdesai
   > Airflow home /Users/amoghdesai/airflow
   > Skipping initializing of the DB as it was initialized already.
   > You can re-initialize the database by adding --with-db-init flag when running tests.
   > [2025-08-21T17:39:04.033+0530] {secrets_masker.py:560} WARNING - Skipping masking for a secret as it's too short (<5 chars)
   > [2025-08-21T17:39:04.042+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [  0%][2025-08-21T17:39:04.068+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.167+0530] {plugins_manager.py:268} ERROR - Failed to import plugin databricks_workflow
   > Traceback (most recent call last):
   >   File "/Users/amoghdesai/Documents/OSS/repos/airflow/airflow-core/src/airflow/plugins_manager.py", line 260, in load_entrypoint_plugins
   >     plugin_class = entry_point.load()
   >   File "/opt/homebrew/Cellar/python@3.13/3.13.3_1/Frameworks/Python.framework/Versions/3.13/lib/python3.13/importlib/metadata/__init__.py", line 179, in load
   >     module = import_module(match.group('module'))
   >   File "/opt/homebrew/Cellar/python@3.13/3.13.3_1/Frameworks/Python.framework/Versions/3.13/lib/python3.13/importlib/__init__.py", line 88, in import_module
   >     return _bootstrap._gcd_import(name[level:], package, level)
   >            ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   >   File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
   >   File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
   >   File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
   >   File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
   >   File "<frozen importlib._bootstrap_external>", line 1026, in exec_module
   >   File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
   >   File "/Users/amoghdesai/Documents/OSS/repos/airflow/providers/databricks/src/airflow/providers/databricks/plugins/databricks_workflow.py", line 26, in <module>
   >     from flask_appbuilder import BaseView
   > ModuleNotFoundError: No module named 'flask_appbuilder'
   > [2025-08-21T17:39:04.361+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [  1%][2025-08-21T17:39:04.364+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.383+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [  2%][2025-08-21T17:39:04.386+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.401+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [  3%][2025-08-21T17:39:04.404+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.420+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [  4%][2025-08-21T17:39:04.423+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.435+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [  5%][2025-08-21T17:39:04.438+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.450+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [  6%][2025-08-21T17:39:04.453+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.465+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [  7%][2025-08-21T17:39:04.468+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.481+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [  8%][2025-08-21T17:39:04.484+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.496+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [  9%][2025-08-21T17:39:04.498+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.511+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 10%][2025-08-21T17:39:04.514+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_failure_tr_success[False] [2025-08-21T17:39:04.526+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 11%][2025-08-21T17:39:04.528+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_one_failure_tr_success_no_failed[True] [2025-08-21T17:39:04.541+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 11%][2025-08-21T17:39:04.544+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.555+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 12%][2025-08-21T17:39:04.557+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.570+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 13%][2025-08-21T17:39:04.573+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.585+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 14%][2025-08-21T17:39:04.589+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.602+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 15%][2025-08-21T17:39:04.604+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.616+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 16%][2025-08-21T17:39:04.619+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.632+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 17%][2025-08-21T17:39:04.634+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.646+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 18%][2025-08-21T17:39:04.649+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.662+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 19%][2025-08-21T17:39:04.664+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.676+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 20%][2025-08-21T17:39:04.679+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.691+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 21%][2025-08-21T17:39:04.694+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.705+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 22%][2025-08-21T17:39:04.708+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.720+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 22%][2025-08-21T17:39:04.723+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.735+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 23%][2025-08-21T17:39:04.737+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.751+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 24%][2025-08-21T17:39:04.754+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.765+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 25%][2025-08-21T17:39:04.768+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.782+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 26%][2025-08-21T17:39:04.785+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.797+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 27%][2025-08-21T17:39:04.800+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.813+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 28%][2025-08-21T17:39:04.816+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.828+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 29%][2025-08-21T17:39:04.831+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.844+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 30%][2025-08-21T17:39:04.847+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_tr_success[False] [2025-08-21T17:39:04.859+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 31%][2025-08-21T17:39:04.862+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_none_failed_tr_failure[True-upstream_failed] [2025-08-21T17:39:04.875+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 32%][2025-08-21T17:39:04.877+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.889+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 33%][2025-08-21T17:39:04.892+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.904+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 33%][2025-08-21T17:39:04.907+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.919+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 34%][2025-08-21T17:39:04.922+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.934+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 35%][2025-08-21T17:39:04.937+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.948+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 36%][2025-08-21T17:39:04.951+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.963+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 37%][2025-08-21T17:39:04.966+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.977+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 38%][2025-08-21T17:39:04.980+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:04.992+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 39%][2025-08-21T17:39:04.994+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.007+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 40%][2025-08-21T17:39:05.010+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.022+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 41%][2025-08-21T17:39:05.025+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.037+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 42%][2025-08-21T17:39:05.040+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.053+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 43%][2025-08-21T17:39:05.055+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.067+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 44%][2025-08-21T17:39:05.069+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.082+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 44%][2025-08-21T17:39:05.084+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.096+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 45%][2025-08-21T17:39:05.099+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.111+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 46%][2025-08-21T17:39:05.114+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.125+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 47%][2025-08-21T17:39:05.127+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.141+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 48%][2025-08-21T17:39:05.143+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.155+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 49%][2025-08-21T17:39:05.158+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.171+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 50%][2025-08-21T17:39:05.173+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.187+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 51%][2025-08-21T17:39:05.189+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.203+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 52%][2025-08-21T17:39:05.205+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.218+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 53%][2025-08-21T17:39:05.221+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.235+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 54%][2025-08-21T17:39:05.238+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.251+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 55%][2025-08-21T17:39:05.254+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.267+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 55%][2025-08-21T17:39:05.270+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.284+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 56%][2025-08-21T17:39:05.287+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.303+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 57%][2025-08-21T17:39:05.306+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.320+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 58%][2025-08-21T17:39:05.323+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.337+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 59%][2025-08-21T17:39:05.339+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.353+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 60%][2025-08-21T17:39:05.356+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.371+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 61%][2025-08-21T17:39:05.374+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.388+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 62%][2025-08-21T17:39:05.391+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.405+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 63%][2025-08-21T17:39:05.408+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.420+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 64%][2025-08-21T17:39:05.423+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.443+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 65%][2025-08-21T17:39:05.446+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.459+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 66%][2025-08-21T17:39:05.462+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.475+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 66%][2025-08-21T17:39:05.478+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.491+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 67%][2025-08-21T17:39:05.494+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.509+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 68%][2025-08-21T17:39:05.512+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.525+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 69%][2025-08-21T17:39:05.528+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.542+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 70%][2025-08-21T17:39:05.545+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.558+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 71%][2025-08-21T17:39:05.560+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.573+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 72%][2025-08-21T17:39:05.576+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.589+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 73%][2025-08-21T17:39:05.593+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.608+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 74%][2025-08-21T17:39:05.611+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.623+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 75%][2025-08-21T17:39:05.626+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.640+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 76%][2025-08-21T17:39:05.643+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.656+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 77%][2025-08-21T17:39:05.659+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.673+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 77%][2025-08-21T17:39:05.676+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.689+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 78%][2025-08-21T17:39:05.692+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.705+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 79%][2025-08-21T17:39:05.708+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.720+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 80%][2025-08-21T17:39:05.723+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.735+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 81%][2025-08-21T17:39:05.738+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > true rule not implemented: Unknown Trigger Rule
   > [2025-08-21T17:39:05.750+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 82%][2025-08-21T17:39:05.752+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > true rule not implemented: Unknown Trigger Rule
   > [2025-08-21T17:39:05.764+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 83%][2025-08-21T17:39:05.767+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_min_one_success_with_mixed_success_and_failure[False-None] [2025-08-21T17:39:05.779+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 84%][2025-08-21T17:39:05.782+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_all_done_min_one_success_with_all_successful_upstreams[True-None] [2025-08-21T17:39:05.798+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 85%][2025-08-21T17:39:05.801+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.813+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 86%][2025-08-21T17:39:05.816+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.828+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 87%][2025-08-21T17:39:05.831+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.844+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 88%][2025-08-21T17:39:05.847+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.860+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 88%][2025-08-21T17:39:05.863+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.876+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 89%][2025-08-21T17:39:05.879+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.894+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 90%][2025-08-21T17:39:05.897+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.912+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 91%][2025-08-21T17:39:05.915+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.930+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 92%][2025-08-21T17:39:05.933+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:05.943+0530] {dagrun.py:1204} INFO - Marking run <DagRun test_dag @ 2016-01-01 00:00:00+00:00: test, state:running, queued_at: None. run_type: manual> successful
   > Dag run in success state
   > Dag run start:2016-01-01 00:00:00+00:00 end:2025-08-21 12:09:05.943540+00:00
   > [2025-08-21T17:39:05.950+0530] {dagrun.py:1266} INFO - DagRun Finished: dag_id=test_dag, logical_date=2016-01-01 00:00:00+00:00, run_id=test, run_start_date=2016-01-01 00:00:00+00:00, run_end_date=2025-08-21 12:09:05.943540+00:00, run_duration=304171745.94354, state=success, run_type=manual, data_interval_start=2015-12-31 00:00:00+00:00, data_interval_end=2016-01-01 00:00:00+00:00,
   > [2025-08-21T17:39:06.043+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 93%][2025-08-21T17:39:06.047+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:06.073+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 94%][2025-08-21T17:39:06.077+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:06.101+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 95%][2025-08-21T17:39:06.104+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:06.127+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 96%][2025-08-21T17:39:06.130+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > [2025-08-21T17:39:06.156+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 97%][2025-08-21T17:39:06.159+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_mapped_task_upstream_removed_with_none_failed_trigger_rules[True-none_failed_min_one_success] [2025-08-21T17:39:06.184+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 98%][2025-08-21T17:39:06.188+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_mapped_task_upstream_removed_with_none_failed_trigger_rules[False-none_failed] [2025-08-21T17:39:06.212+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [ 99%][2025-08-21T17:39:06.215+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > 
   > unit/ti_deps/deps/test_trigger_rule_dep.py::TestTriggerRuleDep::test_mapped_task_upstream_removed_with_none_failed_trigger_rules[False-none_failed_min_one_success] [2025-08-21T17:39:06.238+0530] {dagbag.py:576} INFO - Filling up the DagBag from /dev/null
   > PASSED [100%][2025-08-21T17:39:06.241+0530] {collection.py:82} INFO - Creating ORM DAG for test_dag
   > 
   > 
   > ======================== 109 passed, 1 warning in 3.99s ========================
   > 
   > Process finished with exit code 0
   > ```
   
   @amoghrajesh it was in system tests: https://github.com/apache/airflow/actions/runs/17125393898/job/48576310460
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Fix trigger rule error messages showing enum names instead of values [airflow]

Posted by "amoghrajesh (via GitHub)" <gi...@apache.org>.
amoghrajesh commented on code in PR #54774:
URL: https://github.com/apache/airflow/pull/54774#discussion_r2290841489


##########
airflow-core/src/airflow/ti_deps/deps/trigger_rule_dep.py:
##########
@@ -617,14 +617,17 @@ def _evaluate_direct_relatives() -> Iterator[TIDepStatus]:
                 elif success == 0:
                     yield self._failing_status(
                         reason=(
-                            f"Task's trigger rule '{trigger_rule}' requires all non-skipped upstream tasks to have "
+                            f"Task's trigger rule '{trigger_rule.value}' requires all non-skipped upstream tasks to have "
                             f"completed and at least one upstream task has succeeded, but found "
                             f"{success} successful task(s). upstream_states={upstream_states}, "
                             f"upstream_task_ids={task.upstream_task_ids}"
                         )
                     )
             else:
-                yield self._failing_status(reason=f"No strategy to evaluate trigger rule '{trigger_rule}'.")
+                print("true rule not implemented:", trigger_rule)

Review Comment:
   Ah I have to stop using print for debugging



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Fix trigger rule error messages showing enum names instead of values [airflow]

Posted by "amoghrajesh (via GitHub)" <gi...@apache.org>.
amoghrajesh commented on code in PR #54774:
URL: https://github.com/apache/airflow/pull/54774#discussion_r2290848499


##########
airflow-core/src/airflow/ti_deps/deps/trigger_rule_dep.py:
##########
@@ -617,14 +617,17 @@ def _evaluate_direct_relatives() -> Iterator[TIDepStatus]:
                 elif success == 0:
                     yield self._failing_status(
                         reason=(
-                            f"Task's trigger rule '{trigger_rule}' requires all non-skipped upstream tasks to have "
+                            f"Task's trigger rule '{trigger_rule.value}' requires all non-skipped upstream tasks to have "
                             f"completed and at least one upstream task has succeeded, but found "
                             f"{success} successful task(s). upstream_states={upstream_states}, "
                             f"upstream_task_ids={task.upstream_task_ids}"
                         )
                     )
             else:
-                yield self._failing_status(reason=f"No strategy to evaluate trigger rule '{trigger_rule}'.")
+                print("true rule not implemented:", trigger_rule)
+                yield self._failing_status(
+                    reason=f"No strategy to evaluate trigger rule '{getattr(trigger_rule, 'value', trigger_rule)}'."

Review Comment:
   `trigger_rule` is set as: 
   `ti.task.trigger_rule = "Unknown Trigger Rule"`, so there could be a possibility that it doesn't have a `.value`, I could check if it belongs to the the enum or not, but was fixing the CI quicker.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Fix trigger rule error messages showing enum names instead of values [airflow]

Posted by "amoghrajesh (via GitHub)" <gi...@apache.org>.
amoghrajesh commented on PR #54774:
URL: https://github.com/apache/airflow/pull/54774#issuecomment-3210458758

   @sunank200 it should work now, pushed a change


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Fix trigger rule error messages showing enum names instead of values [airflow]

Posted by "amoghrajesh (via GitHub)" <gi...@apache.org>.
amoghrajesh commented on code in PR #54774:
URL: https://github.com/apache/airflow/pull/54774#discussion_r2291148943


##########
airflow-core/src/airflow/ti_deps/deps/trigger_rule_dep.py:
##########
@@ -617,14 +617,17 @@ def _evaluate_direct_relatives() -> Iterator[TIDepStatus]:
                 elif success == 0:
                     yield self._failing_status(
                         reason=(
-                            f"Task's trigger rule '{trigger_rule}' requires all non-skipped upstream tasks to have "
+                            f"Task's trigger rule '{trigger_rule.value}' requires all non-skipped upstream tasks to have "
                             f"completed and at least one upstream task has succeeded, but found "
                             f"{success} successful task(s). upstream_states={upstream_states}, "
                             f"upstream_task_ids={task.upstream_task_ids}"
                         )
                     )
             else:
-                yield self._failing_status(reason=f"No strategy to evaluate trigger rule '{trigger_rule}'.")
+                print("true rule not implemented:", trigger_rule)
+                yield self._failing_status(
+                    reason=f"No strategy to evaluate trigger rule '{getattr(trigger_rule, 'value', trigger_rule)}'."

Review Comment:
   > Also how does this code get run with the sdk version of the enum in the first place?
   
   All the tasks are written using the task flow api and those use TriggerRule enum of the sdk within sdk:
   ```
   self.trigger_rule: TriggerRule = TriggerRule(trigger_rule) 
   ```
   
   ^ in BaseOperator.__init__



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org