This is an automated email from the ASF dual-hosted git repository.

jasonliu 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 ff03c74542f Fix Triggerer crashing if Trigger uses builtin print 
function (#60258)
ff03c74542f is described below

commit ff03c74542f4e8f99b3329eb169ba990255d6e81
Author: Henry Chen <[email protected]>
AuthorDate: Tue Feb 10 14:12:05 2026 +0800

    Fix Triggerer crashing if Trigger uses builtin print function (#60258)
    
    * fix typeerror when call the print func
    
    * add unit test
---
 .../logging/src/airflow_shared/logging/percent_formatter.py   |  9 ++++-----
 shared/logging/tests/logging/test_percent_formatter.py        | 11 +++++++++++
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/shared/logging/src/airflow_shared/logging/percent_formatter.py 
b/shared/logging/src/airflow_shared/logging/percent_formatter.py
index 78e4b82a810..ee9195e59b5 100644
--- a/shared/logging/src/airflow_shared/logging/percent_formatter.py
+++ b/shared/logging/src/airflow_shared/logging/percent_formatter.py
@@ -54,16 +54,15 @@ class _LazyLogRecordDict(collections.abc.Mapping):
         # logging would
         # 
https://github.com/python/cpython/blob/d3c888b4ec15dbd7d6b6ef4f15b558af77c228af/Lib/logging/__init__.py#L1652C34-L1652C48
         if key == "lineno":
-            return self.event.get("lineno", 0)
+            return self.event.get("lineno") or 0
         if key == "filename":
             return self.event.get("filename", "(unknown file)")
         if key == "funcName":
             return self.event.get("funcName", "(unknown function)")
-
         if key in PercentFormatRender.callsite_parameters:
-            return 
self.event.get(PercentFormatRender.callsite_parameters[key].value)
+            return 
self.event.get(PercentFormatRender.callsite_parameters[key].value, "(unknown)")
         if key == "name":
-            return self.event.get("logger") or self.event.get("logger_name")
+            return self.event.get("logger") or self.event.get("logger_name", 
"(unknown)")
         if key == "levelname":
             return self.event.get("level", self.method_name).upper()
         if key == "asctime" or key == "created":
@@ -85,7 +84,7 @@ class _LazyLogRecordDict(collections.abc.Mapping):
                 return ""
             return self.level_styles.get(self.event.get("level", 
self.method_name), "")
 
-        return self.event[key]
+        return self.event.get(key)
 
     def __iter__(self):
         return self.event.__iter__()
diff --git a/shared/logging/tests/logging/test_percent_formatter.py 
b/shared/logging/tests/logging/test_percent_formatter.py
index c2ce9c50ee3..3a3ae84f562 100644
--- a/shared/logging/tests/logging/test_percent_formatter.py
+++ b/shared/logging/tests/logging/test_percent_formatter.py
@@ -29,3 +29,14 @@ class TestPercentFormatRender:
         formatted = fmter(mock.Mock(name="Logger"), "info", {"event": "our 
msg"})
 
         assert formatted == "(unknown file):0 our msg"
+
+    def test_lineno_is_none(self):
+        fmter = PercentFormatRender("%(filename)s:%(lineno)d %(message)s")
+
+        formatted = fmter(
+            mock.Mock(name="Logger"),
+            "info",
+            {"event": "our msg", "filename": "test.py", "lineno": None},
+        )
+
+        assert formatted == "test.py:0 our msg"

Reply via email to