Skip to content

Commit 6faa429

Browse files
authored
Handle non iterables more carefully while sorting serdag (apache#47095)
1 parent 273ee81 commit 6faa429

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

airflow/models/serialized_dag.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import logging
2323
import zlib
24+
from collections.abc import Iterable
2425
from datetime import timedelta
2526
from typing import TYPE_CHECKING, Any
2627

@@ -151,7 +152,10 @@ def _sort_serialized_dag_dict(cls, serialized_dag: Any):
151152
return {k: cls._sort_serialized_dag_dict(v) for k, v in sorted(serialized_dag.items())}
152153
elif isinstance(serialized_dag, list):
153154
if all(isinstance(i, dict) for i in serialized_dag):
154-
if all("task_id" in i.get("__var", {}) for i in serialized_dag):
155+
if all(
156+
isinstance(i.get("__var", {}), Iterable) and "task_id" in i.get("__var", {})
157+
for i in serialized_dag
158+
):
155159
return sorted(
156160
[cls._sort_serialized_dag_dict(i) for i in serialized_dag],
157161
key=lambda x: x["__var"]["task_id"],

tests/models/test_serialized_dag.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,3 +357,17 @@ def test_new_dag_versions_are_created_if_there_is_a_dagrun(self, dag_maker, sess
357357

358358
assert session.query(DagVersion).count() == 2
359359
assert session.query(SDM).count() == 2
360+
361+
def test_example_dag_sorting_serialised_dag(self, session):
362+
"""
363+
This test asserts if different dag ids -- simple or complex, can be sorted
364+
"""
365+
366+
example_dags = self._write_example_dags()
367+
368+
for _, dag in example_dags.items():
369+
# flip the tags, the sorting function should sort it alphabetically
370+
if dag.tags:
371+
dag.tags = sorted(dag.tags, reverse=True)
372+
sorted_dag = SDM._sort_serialized_dag_dict(dag)
373+
assert sorted_dag == dag

0 commit comments

Comments
 (0)