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

amoghdesai pushed a commit to branch v3-1-test
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/v3-1-test by this push:
     new f4eb7473b1c [v3-1-test] Add XCom serilizer for pendulum.date.Date 
(#61176) (#61717)
f4eb7473b1c is described below

commit f4eb7473b1c1aed7f5bae3f2726cc74c7adcd158
Author: Amogh Desai <[email protected]>
AuthorDate: Tue Feb 10 15:59:59 2026 +0530

    [v3-1-test] Add XCom serilizer for pendulum.date.Date (#61176) (#61717)
    
    (cherry picked from commit c36678f9a5a664200d85b266ebd5e3d94d3baea4)
    
    Co-authored-by: mrlimacz <[email protected]>
---
 .../src/airflow/serialization/serializers/datetime.py       | 13 +++++++++++--
 .../unit/serialization/serializers/test_serializers.py      |  7 ++++++-
 2 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/airflow-core/src/airflow/serialization/serializers/datetime.py 
b/airflow-core/src/airflow/serialization/serializers/datetime.py
index b5fe17a2e8b..b91c4c0eebb 100644
--- a/airflow-core/src/airflow/serialization/serializers/datetime.py
+++ b/airflow-core/src/airflow/serialization/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/airflow-core/tests/unit/serialization/serializers/test_serializers.py 
b/airflow-core/tests/unit/serialization/serializers/test_serializers.py
index 07d36babba8..7fdb4edb8c6 100644
--- a/airflow-core/tests/unit/serialization/serializers/test_serializers.py
+++ b/airflow-core/tests/unit/serialization/serializers/test_serializers.py
@@ -31,7 +31,7 @@ import pytest
 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,11 @@ class TestSerializers:
         d = deserialize(s)
         assert i.timestamp() == d.timestamp()
 
+        i = Date(2026, 1, 21)
+        s = serialize(i)
+        d = deserialize(s)
+        assert i == d
+
         i = datetime.date(2022, 7, 10)
         s = serialize(i)
         d = deserialize(s)

Reply via email to