o-nikolas commented on code in PR #58248:
URL: https://github.com/apache/airflow/pull/58248#discussion_r2608609874
##########
airflow-core/src/airflow/models/serialized_dag.py:
##########
@@ -373,6 +383,104 @@ def _sort_serialized_dag_dict(cls, serialized_dag: Any):
return [cls._sort_serialized_dag_dict(i) for i in serialized_dag]
return serialized_dag
+ @classmethod
+ def _generate_deadline_uuids(cls, dag_data: dict[str, Any]) -> dict[str,
dict]:
+ """
+ Generate UUIDs for DeadlineAlerts and replace dicts with list[UUID] in
dag_data.
+
+ This modifies dag_data in place, replacing deadline alert definitions
with UUID strings.
+ Called before SerializedDagModel creation to ensure UUIDs are included
in the hash.
+
+ :param dag_data: The serialized DAG data dictionary
+ :return: Mapping of UUID strings to deadline alert data dicts
+ """
+ uuid_mapping: dict[str, dict] = {}
+
+ dag_deadline_data = dag_data.get("dag", {}).get("deadline")
+ if not dag_deadline_data:
+ return uuid_mapping
+
+ for deadline_alert in dag_deadline_data:
+ deadline_data = deadline_alert.get(Encoding.VAR, deadline_alert)
+
+ deadline_uuid = str(uuid6.uuid7())
+ uuid_mapping[deadline_uuid] = deadline_data
+
+ dag_data["dag"]["deadline"] = list(uuid_mapping.keys())
+
+ return uuid_mapping
+
+ @classmethod
+ def _create_deadline_alert_records(
+ cls,
+ serialized_dag: SerializedDagModel,
+ uuid_mapping: dict[str, dict],
+ ) -> None:
+ """
+ Create DeadlineAlert records in the database and appends them to
serialized_dag.
+
+ :param serialized_dag: The SerializedDagModel instance (not yet
flushed)
+ :param uuid_mapping: Mapping of UUID strings to deadline alert data
dicts
+ """
+ if not uuid_mapping:
+ return
+
+ for uuid_str, deadline_data in uuid_mapping.items():
+ alert = DeadlineAlertModel(
+ id=uuid_str,
+ reference=deadline_data[DeadlineAlertFields.REFERENCE],
+ interval=deadline_data[DeadlineAlertFields.INTERVAL],
+ callback_def=deadline_data[DeadlineAlertFields.CALLBACK],
+ )
+ serialized_dag.deadline_alerts.append(alert)
+
+ @classmethod
+ def _get_existing_deadline_uuids(
Review Comment:
I don't see this being called anywhere here. Am I missing something?
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]