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

amoghdesai 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 c36678f9a5a Add XCom serilizer for pendulum.date.Date (#61176)
c36678f9a5a is described below

commit c36678f9a5a664200d85b266ebd5e3d94d3baea4
Author: mrlimacz <[email protected]>
AuthorDate: Tue Feb 10 10:29:37 2026 +0100

    Add XCom serilizer for pendulum.date.Date (#61176)
    
    Co-authored-by: Amogh Desai <[email protected]>
---
 task-sdk/src/airflow/sdk/serde/serializers/datetime.py | 13 +++++++++++--
 task-sdk/tests/task_sdk/serde/test_serializers.py      |  5 +++--
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/task-sdk/src/airflow/sdk/serde/serializers/datetime.py 
b/task-sdk/src/airflow/sdk/serde/serializers/datetime.py
index a1a1ac77878..9c21ee115a2 100644
--- a/task-sdk/src/airflow/sdk/serde/serializers/datetime.py
+++ b/task-sdk/src/airflow/sdk/serde/serializers/datetime.py
@@ -33,7 +33,13 @@ if TYPE_CHECKING:
 
 __version__ = 2
 
-serializers = ["datetime.date", "datetime.datetime", "datetime.timedelta", 
"pendulum.datetime.DateTime"]
+serializers = [
+    "datetime.date",
+    "datetime.datetime",
+    "datetime.timedelta",
+    "pendulum.datetime.DateTime",
+    "pendulum.date.Date",
+]
 deserializers = serializers
 
 TIMESTAMP = "timestamp"
@@ -62,7 +68,7 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
 def deserialize(cls: type, version: int, data: dict | str) -> datetime.date | 
datetime.timedelta:
     import datetime
 
-    from pendulum import DateTime
+    from pendulum import Date, DateTime
 
     tz: datetime.tzinfo | None = None
     if isinstance(data, dict) and TIMEZONE in data:
@@ -95,6 +101,9 @@ def deserialize(cls: type, version: int, data: dict | str) 
-> datetime.date | da
     if cls is datetime.timedelta and isinstance(data, str | float):
         return datetime.timedelta(seconds=float(data))
 
+    if cls is Date and isinstance(data, str):
+        return Date.fromisoformat(data)
+
     if cls is datetime.date and isinstance(data, str):
         return datetime.date.fromisoformat(data)
 
diff --git a/task-sdk/tests/task_sdk/serde/test_serializers.py 
b/task-sdk/tests/task_sdk/serde/test_serializers.py
index a090e8d6b13..5cf987d81f3 100644
--- a/task-sdk/tests/task_sdk/serde/test_serializers.py
+++ b/task-sdk/tests/task_sdk/serde/test_serializers.py
@@ -33,7 +33,7 @@ from cryptography.fernet import Fernet
 from dateutil.tz import tzutc
 from kubernetes.client import models as k8s
 from packaging import version
-from pendulum import DateTime
+from pendulum import Date, DateTime
 from pendulum.tz.timezone import FixedTimezone, Timezone
 from pydantic import BaseModel, Field
 from pydantic.dataclasses import dataclass as pydantic_dataclass
@@ -91,6 +91,7 @@ class TestSerializers:
                 id="datetime_utc",
             ),
             pytest.param(DateTime(2022, 7, 10, tzinfo=pendulum.tz.UTC), 
id="pendulum_datetime_utc"),
+            pytest.param(Date(2026, 1, 21), id="pendulum_date"),
             pytest.param(datetime.date(2022, 7, 10), id="date"),
             pytest.param(datetime.timedelta(days=320), id="timedelta"),
             pytest.param(
@@ -112,7 +113,7 @@ class TestSerializers:
         """Test serialization and deserialization of various datetime-related 
objects."""
         serialized_obj = serialize(input_obj)
         deserialized_obj = deserialize(serialized_obj)
-        if isinstance(input_obj, (datetime.date, datetime.timedelta)):
+        if isinstance(input_obj, (datetime.date, datetime.timedelta, Date)):
             assert input_obj == deserialized_obj
         else:
             assert input_obj.timestamp() == deserialized_obj.timestamp()

Reply via email to