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

husseinawala 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 69f556dd13 Stop serializing timezone-naive datetime to timezone-aware 
dateime with UTC tz (#36379)
69f556dd13 is described below

commit 69f556dd136598662db9e87478584a3c96362fc9
Author: Hussein Awala <[email protected]>
AuthorDate: Mon Dec 25 14:57:12 2023 +0100

    Stop serializing timezone-naive datetime to timezone-aware dateime with UTC 
tz (#36379)
---
 airflow/serialization/serializers/datetime.py       | 11 ++++++-----
 tests/serialization/serializers/test_serializers.py |  5 +++++
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/airflow/serialization/serializers/datetime.py 
b/airflow/serialization/serializers/datetime.py
index 49f0899a59..d32dd8897b 100644
--- a/airflow/serialization/serializers/datetime.py
+++ b/airflow/serialization/serializers/datetime.py
@@ -24,7 +24,6 @@ from airflow.serialization.serializers.timezone import (
     serialize as serialize_timezone,
 )
 from airflow.utils.module_loading import qualname
-from airflow.utils.timezone import convert_to_utc, is_naive
 
 if TYPE_CHECKING:
     import datetime
@@ -45,10 +44,8 @@ def serialize(o: object) -> tuple[U, str, int, bool]:
 
     if isinstance(o, datetime):
         qn = qualname(o)
-        if is_naive(o):
-            o = convert_to_utc(o)
 
-        tz = serialize_timezone(o.tzinfo)
+        tz = serialize_timezone(o.tzinfo) if o.tzinfo else None
 
         return {TIMESTAMP: o.timestamp(), TIMEZONE: tz}, qn, __version__, True
 
@@ -83,7 +80,11 @@ def deserialize(classname: str, version: int, data: dict | 
str) -> datetime.date
             else:
                 tz = timezone(data[TIMEZONE])
         else:
-            tz = deserialize_timezone(data[TIMEZONE][1], data[TIMEZONE][2], 
data[TIMEZONE][0])
+            tz = (
+                deserialize_timezone(data[TIMEZONE][1], data[TIMEZONE][2], 
data[TIMEZONE][0])
+                if data[TIMEZONE]
+                else None
+            )
 
     if classname == qualname(datetime.datetime) and isinstance(data, dict):
         return datetime.datetime.fromtimestamp(float(data[TIMESTAMP]), tz=tz)
diff --git a/tests/serialization/serializers/test_serializers.py 
b/tests/serialization/serializers/test_serializers.py
index aab9f91395..32e9787ccf 100644
--- a/tests/serialization/serializers/test_serializers.py
+++ b/tests/serialization/serializers/test_serializers.py
@@ -84,6 +84,11 @@ class TestSerializers:
         d = deserialize(s)
         assert i.timestamp() == d.timestamp()
 
+        i = datetime.datetime.now()
+        s = serialize(i)
+        d = deserialize(s)
+        assert i.timestamp() == d.timestamp()
+
     def test_deserialize_datetime_v1(self):
         s = {
             "__classname__": "pendulum.datetime.DateTime",

Reply via email to