This is an automated email from the ASF dual-hosted git repository.
amoghdesai pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 3bde8382861 Display a more friendly error when invalid branches are
provided to branch operators (#54273)
3bde8382861 is described below
commit 3bde838286118e99cf8411f8e89c5262e0e7d1fd
Author: Jake Roach <[email protected]>
AuthorDate: Wed Aug 20 02:10:21 2025 -0400
Display a more friendly error when invalid branches are provided to branch
operators (#54273)
---
.../src/airflow/providers/standard/utils/skipmixin.py | 7 +++++--
.../tests/unit/standard/utils/test_skipmixin.py | 19 +++++++++++++++----
2 files changed, 20 insertions(+), 6 deletions(-)
diff --git
a/providers/standard/src/airflow/providers/standard/utils/skipmixin.py
b/providers/standard/src/airflow/providers/standard/utils/skipmixin.py
index 432b287f3a1..f00bbfcb19d 100644
--- a/providers/standard/src/airflow/providers/standard/utils/skipmixin.py
+++ b/providers/standard/src/airflow/providers/standard/utils/skipmixin.py
@@ -129,14 +129,17 @@ class SkipMixin(LoggingMixin):
if isinstance(branch_task_ids, str):
branch_task_id_set = {branch_task_ids}
elif isinstance(branch_task_ids, Iterable):
+ # Handle the case where invalid values are passed as elements of
an Iterable
+ # Non-string values are considered invalid elements
branch_task_id_set = set(branch_task_ids)
invalid_task_ids_type = {
(bti, type(bti).__name__) for bti in branch_task_id_set if not
isinstance(bti, str)
}
if invalid_task_ids_type:
raise AirflowException(
- f"'branch_task_ids' expected all task IDs are strings. "
- f"Invalid tasks found: {invalid_task_ids_type}."
+ f"Unable to branch to the specified tasks. "
+ f"The branching function returned invalid
'branch_task_ids': {invalid_task_ids_type}. "
+ f"Please check that your function returns an Iterable of
valid task IDs that exist in your DAG."
)
elif branch_task_ids is None:
branch_task_id_set = set()
diff --git a/providers/standard/tests/unit/standard/utils/test_skipmixin.py
b/providers/standard/tests/unit/standard/utils/test_skipmixin.py
index db805f5f2a5..ac66c89d7e2 100644
--- a/providers/standard/tests/unit/standard/utils/test_skipmixin.py
+++ b/providers/standard/tests/unit/standard/utils/test_skipmixin.py
@@ -327,10 +327,21 @@ class TestSkipMixin:
ti1 = TI(task, run_id=DEFAULT_DAG_RUN_ID,
dag_version_id=dag_version.id)
else:
ti1 = TI(task, run_id=DEFAULT_DAG_RUN_ID)
- error_message = (
- r"'branch_task_ids' expected all task IDs are strings. "
- r"Invalid tasks found: \{\(42, 'int'\)\}\."
- )
+
+ if AIRFLOW_V_3_0_PLUS:
+ # Improved error message for Airflow 3.0+
+ error_message = (
+ r"Unable to branch to the specified tasks\. "
+ r"The branching function returned invalid 'branch_task_ids':
\{\(42, 'int'\)\}\. "
+ r"Please check that your function returns an Iterable of valid
task IDs that exist in your DAG\."
+ )
+ else:
+ # Old error message for Airflow 2.x
+ error_message = (
+ r"'branch_task_ids' expected all task IDs are strings\. "
+ r"Invalid tasks found: \{\(42, 'int'\)\}\."
+ )
+
with pytest.raises(AirflowException, match=error_message):
SkipMixin().skip_all_except(ti=ti1, branch_task_ids=["task", 42])