This is an automated email from the ASF dual-hosted git repository.
potiuk 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 27da663d32 Better message for exception for templated base operator
fields (#37668)
27da663d32 is described below
commit 27da663d32fcb394fbbb4bf589b6cb8d4b84eae6
Author: Ryan Hatter <[email protected]>
AuthorDate: Sat Feb 24 16:56:24 2024 -0500
Better message for exception for templated base operator fields (#37668)
* Better message for exception for templated base operator fields
* fix test
---
airflow/serialization/serialized_objects.py | 8 +++++++-
tests/serialization/test_dag_serialization.py | 12 +++++++++++-
2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/airflow/serialization/serialized_objects.py
b/airflow/serialization/serialized_objects.py
index 0c11fc9301..82c4a6bccc 100644
--- a/airflow/serialization/serialized_objects.py
+++ b/airflow/serialization/serialized_objects.py
@@ -26,6 +26,7 @@ import warnings
import weakref
from dataclasses import dataclass
from inspect import signature
+from textwrap import dedent
from typing import TYPE_CHECKING, Any, Collection, Iterable, Mapping,
NamedTuple, Union
import attrs
@@ -912,7 +913,12 @@ class SerializedBaseOperator(BaseOperator,
BaseSerialization):
if op.template_fields:
for template_field in op.template_fields:
if template_field in forbidden_fields:
- raise AirflowException(f"Cannot template BaseOperator
field: {template_field!r}")
+ raise AirflowException(
+ dedent(
+ f"""Cannot template BaseOperator field:
+ {template_field!r} {op.__class__.__name__=}
{op.template_fields=}"""
+ )
+ )
value = getattr(op, template_field, None)
if not cls._is_excluded(value, template_field, op):
serialize_op[template_field] =
serialize_template_field(value)
diff --git a/tests/serialization/test_dag_serialization.py
b/tests/serialization/test_dag_serialization.py
index 63abaa15bc..959c25c970 100644
--- a/tests/serialization/test_dag_serialization.py
+++ b/tests/serialization/test_dag_serialization.py
@@ -25,9 +25,11 @@ import json
import multiprocessing
import os
import pickle
+import re
from datetime import datetime, timedelta
from glob import glob
from pathlib import Path
+from textwrap import dedent
from typing import TYPE_CHECKING
from unittest import mock
@@ -2072,7 +2074,15 @@ class TestStringifiedDAGs:
task.render_template_fields(context={"test_email_list":
["[email protected]", "[email protected]"]})
assert task.email == "[email protected],[email protected]"
- with pytest.raises(AirflowException, match="Cannot template
BaseOperator field: 'execution_timeout'"):
+ with pytest.raises(
+ AirflowException,
+ match=re.escape(
+ dedent(
+ """Failed to serialize DAG 'test_dag': Cannot template
BaseOperator field:
+ 'execution_timeout'
op.__class__.__name__='TestOperator' op.template_fields=('email',
'execution_timeout')"""
+ )
+ ),
+ ):
SerializedDAG.to_dict(dag)