Repository navigation
Labels
affected_version:3.1Issues Reported for 3.1Issues Reported for 3.1area:coregood first issuekind:bugThis is a clearly a bugThis is a clearly a bug
Description
Apache Airflow version
3.1.7
What happened and how to reproduce it?
I am trying to port a Notifier to airflow 3 and ran into an issue when trying to run the code though airflow dags test. I reduced my dag down to
import logging
from datetime import datetime
from airflow import DAG
from airflow.sdk import BaseNotifier, task
class MyNotifier(BaseNotifier):
log = logging.getLogger("MyNotifier")
def notify(self, *args) -> None:
self.log.info("Sending a really lovely message")
@task
def failing_task():
"""This task will intentionally fail."""
raise Exception("This DAG is designed to fail!")
with DAG(
dag_id="bad_dag",
start_date=datetime(2024, 1, 1),
schedule=None,
catchup=False,
tags=["test", "failing"],
on_failure_callback=MyNotifier(),
) as dag:
fail_task = failing_task()And then when I run airflow dags test bad_dag 2025-10-03T08:00:00, the task fails as expected, but then an error is thrown
[2026-04-02T21:35:01.741165Z] {dagrun.py:1453} ERROR - Callback failed for bad_dag
Traceback (most recent call last):
File "/Users/jhoran/Workspace/eda_astronomer/.venv/lib/python3.12/site-packages/airflow/models/dagrun.py", line 1451, in handle_dag_callback
callback(context)
File "/Users/jhoran/Workspace/eda_astronomer/.venv/lib/python3.12/site-packages/airflow/sdk/bases/notifier.py", line 136, in __call__
self.render_template_fields(context)
File "/Users/jhoran/Workspace/eda_astronomer/.venv/lib/python3.12/site-packages/airflow/sdk/bases/notifier.py", line 92, in render_template_fields
jinja_env = self.get_template_env(dag=dag)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/jhoran/Workspace/eda_astronomer/.venv/lib/python3.12/site-packages/airflow/sdk/definitions/_internal/templater.py", line 79, in get_template_env
return dag.get_template_env(force_sandboxed=False)
^^^^^^^^^^^^^^^^^^^^
AttributeError: 'SerializedDAG' object has no attribute 'get_template_env'
I tried running the same dag in astronomer, there I didn't see any failure but I also didn't get any log output, so I can only assume it's working there.
What you think should happen instead?
No response
Operating System
No response
Versions of Apache Airflow Providers
No response
Deployment
Virtualenv installation
Deployment details
No response
Anything else?
No response
Are you willing to submit PR?
- Yes I am willing to submit a PR!
Code of Conduct
- I agree to follow this project's Code of Conduct
Metadata
Metadata
Assignees
Labels
affected_version:3.1Issues Reported for 3.1Issues Reported for 3.1area:coregood first issuekind:bugThis is a clearly a bugThis is a clearly a bug
Activity
jroachgolf84 commentedon Apr 3, 2026
Just to confirm, this is running in Astronomer (you're able to see the logs), but not locally with the Astro CLI?
@johnhoran, send a message in the #airflow-astronomer channel in Slack, and we can troubleshoot there.
mscsy0104 commentedon Apr 9, 2026
Hi there, I’m interested in working on this issue. I noticed that is already discussing it—is the task currently being handled? If not, I’d love to take it on and be assigned to this issue. Thanks!
Handle serialized DAGs in notifier templating
Quantum0uasar commentedon May 21, 2026
I'd like to work on this fix!
The issue is that when running
airflow dags test, the DAG context doesn't set up the same task context as a real run, so notifiers that calltask(fromairflow.sdk) may fail with a serialization or context error.Looking at the commit
a67e9a7(Handle serialized DAGs in notifier templating), I'll investigate whether the fix is complete or if there are remaining edge cases. My plan:BaseNotifierrendering andairflow dags testcode pathCould a maintainer confirm whether this is still open after
a67e9a7or if there are specific edge cases remaining?Fix AttributeError when notifier renders templates with SerializedDAG
Fix AttributeError when notifier renders templates with SerializedDAG
Fix AttributeError when notifier renders templates with SerializedDAG
Fix AttributeError when notifier renders templates with SerializedDAG
Fix AttributeError when notifier renders templates with SerializedDAG
Fix AttributeError when notifier renders templates with SerializedDAG
Fix AttributeError when notifier renders templates with SerializedDAG
sameerpandey17 commentedon Oct 13, 2026
Still reproducible on main as of today. I also hit it with a notifier that defines
template_fields, so it doesn't look limited to notifiers with none.I tested on main at
7f0d50cffc(Breeze, Python 3.11.16). After fetching,git diff HEAD upstream/mainshows no differences innotifier.pyortemplater.py, so current main should behave the same.Setup is a Dag with a
BaseNotifiersubclass ason_failure_callback, run withairflow dags test <dag_id> 2026-01-01. The task fails as expected, then the callback crashes:I got the same error with a bare-bones notifier and with this one that has a templated field:
Dag with a templated notifier
As an experiment I changed
Templater.get_template_envtoif dag and hasattr(dag, "get_template_env"):so it falls back to the defaultSandboxedEnvironment. With that, both Dags ran their callbacks without crashing, and the templated message rendered asDag templated_notifier_test failed. I reverted it afterwards.One thing I didn't test is Dag-level custom filters or macros (
user_defined_macros). I'd expect the fallback environment to be missing those, but that's just my reading of the code, not something I ran.I noticed #64993 and #67862 both take this approach (#67862 was closed because of the open-PR limit, not on its merits). I hope this reproduction helps. If #64993 has stalled and the maintainers are fine with it, I’d be glad to pick this up.
(I also used AI in the process of understanding and testing)