This is an automated email from the ASF dual-hosted git repository. amoghdesai pushed a commit to branch backport-c36678f-v3-1-test in repository https://gitbox.apache.org/repos/asf/airflow.git
commit 595af8ec4bba53823505f8bd4a22d72d3763a07f Author: mrlimacz <[email protected]> AuthorDate: Tue Feb 10 10:29:37 2026 +0100 [v3-1-test] Add XCom serilizer for pendulum.date.Date (#61176) (cherry picked from commit c36678f9a5a664200d85b266ebd5e3d94d3baea4) Co-authored-by: mrlimacz <[email protected]> Co-authored-by: Amogh Desai <[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)
