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)