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 6faa4290fb2 Handle non iterables more carefully while sorting serdag 
(#47095)
6faa4290fb2 is described below

commit 6faa4290fb2ab2685459547968d4234d6814c5b4
Author: Amogh Desai <[email protected]>
AuthorDate: Wed Feb 26 20:17:49 2025 +0530

    Handle non iterables more carefully while sorting serdag (#47095)
---
 airflow/models/serialized_dag.py    |  6 +++++-
 tests/models/test_serialized_dag.py | 14 ++++++++++++++
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/airflow/models/serialized_dag.py b/airflow/models/serialized_dag.py
index 3ca6fad0ef4..663629c82c1 100644
--- a/airflow/models/serialized_dag.py
+++ b/airflow/models/serialized_dag.py
@@ -21,6 +21,7 @@ from __future__ import annotations
 
 import logging
 import zlib
+from collections.abc import Iterable
 from datetime import timedelta
 from typing import TYPE_CHECKING, Any
 
@@ -151,7 +152,10 @@ class SerializedDagModel(Base):
             return {k: cls._sort_serialized_dag_dict(v) for k, v in 
sorted(serialized_dag.items())}
         elif isinstance(serialized_dag, list):
             if all(isinstance(i, dict) for i in serialized_dag):
-                if all("task_id" in i.get("__var", {}) for i in 
serialized_dag):
+                if all(
+                    isinstance(i.get("__var", {}), Iterable) and "task_id" in 
i.get("__var", {})
+                    for i in serialized_dag
+                ):
                     return sorted(
                         [cls._sort_serialized_dag_dict(i) for i in 
serialized_dag],
                         key=lambda x: x["__var"]["task_id"],
diff --git a/tests/models/test_serialized_dag.py 
b/tests/models/test_serialized_dag.py
index 266b6d1ebac..9c03f25bddf 100644
--- a/tests/models/test_serialized_dag.py
+++ b/tests/models/test_serialized_dag.py
@@ -357,3 +357,17 @@ class TestSerializedDagModel:
 
         assert session.query(DagVersion).count() == 2
         assert session.query(SDM).count() == 2
+
+    def test_example_dag_sorting_serialised_dag(self, session):
+        """
+        This test asserts if different dag ids -- simple or complex, can be 
sorted
+        """
+
+        example_dags = self._write_example_dags()
+
+        for _, dag in example_dags.items():
+            # flip the tags, the sorting function should sort it alphabetically
+            if dag.tags:
+                dag.tags = sorted(dag.tags, reverse=True)
+            sorted_dag = SDM._sort_serialized_dag_dict(dag)
+            assert sorted_dag == dag

Reply via email to