Skip to content

Commit 43983ed

Browse files
committed
Revert "Revert "Revert "Airbyte CDK: use pytz.utc instead of datetime.utc (#38026)"""
This reverts commit 5ce3693.
1 parent b0456d1 commit 43983ed

File tree

2 files changed

+11
-27
lines changed
  • airbyte-cdk/python

2 files changed

+11
-27
lines changed

airbyte-cdk/python/airbyte_cdk/sources/declarative/interpolation/macros.py

+11-20
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@
44

55
import builtins
66
import datetime
7-
import typing
7+
import numbers
88
from typing import Union
99

10-
import isodate
11-
import pytz
1210
from dateutil import parser
1311
from isodate import parse_duration
1412

@@ -17,7 +15,7 @@
1715
"""
1816

1917

20-
def now_utc() -> datetime.datetime:
18+
def now_utc():
2119
"""
2220
Current local date and time in UTC timezone
2321
@@ -27,7 +25,7 @@ def now_utc() -> datetime.datetime:
2725
return datetime.datetime.now(datetime.timezone.utc)
2826

2927

30-
def today_utc() -> datetime.date:
28+
def today_utc():
3129
"""
3230
Current date in UTC timezone
3331
@@ -37,7 +35,7 @@ def today_utc() -> datetime.date:
3735
return datetime.datetime.now(datetime.timezone.utc).date()
3836

3937

40-
def timestamp(dt: Union[float, str]) -> Union[int, float]:
38+
def timestamp(dt: Union[numbers.Number, str]):
4139
"""
4240
Converts a number or a string to a timestamp
4341
@@ -50,21 +48,21 @@ def timestamp(dt: Union[float, str]) -> Union[int, float]:
5048
:param dt: datetime to convert to timestamp
5149
:return: unix timestamp
5250
"""
53-
if isinstance(dt, (int, float)):
51+
if isinstance(dt, numbers.Number):
5452
return int(dt)
5553
else:
56-
return _str_to_datetime(dt).astimezone(pytz.utc).timestamp()
54+
return _str_to_datetime(dt).astimezone(datetime.timezone.utc).timestamp()
5755

5856

5957
def _str_to_datetime(s: str) -> datetime.datetime:
6058
parsed_date = parser.isoparse(s)
6159
if not parsed_date.tzinfo:
6260
# Assume UTC if the input does not contain a timezone
63-
parsed_date = parsed_date.replace(tzinfo=pytz.utc)
64-
return parsed_date.astimezone(pytz.utc)
61+
parsed_date = parsed_date.replace(tzinfo=datetime.timezone.utc)
62+
return parsed_date.astimezone(datetime.timezone.utc)
6563

6664

67-
def max(*args: typing.Any) -> typing.Any:
65+
def max(*args):
6866
"""
6967
Returns biggest object of an iterable, or two or more arguments.
7068
@@ -97,7 +95,7 @@ def day_delta(num_days: int, format: str = "%Y-%m-%dT%H:%M:%S.%f%z") -> str:
9795
return (datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(days=num_days)).strftime(format)
9896

9997

100-
def duration(datestring: str) -> Union[datetime.timedelta, isodate.Duration]:
98+
def duration(datestring: str) -> datetime.timedelta:
10199
"""
102100
Converts ISO8601 duration to datetime.timedelta
103101
@@ -113,17 +111,10 @@ def format_datetime(dt: Union[str, datetime.datetime], format: str) -> str:
113111
114112
Usage:
115113
`"{{ format_datetime(config.start_date, '%Y-%m-%d') }}"`
116-
117-
CPython Datetime package has known bug with `stfrtime` method: '%s' formatting uses locale timezone
118-
https://github.com/python/cpython/issues/77169
119-
https://github.com/python/cpython/issues/56959
120114
"""
121115
if isinstance(dt, datetime.datetime):
122116
return dt.strftime(format)
123-
dt_datetime = _str_to_datetime(dt)
124-
if format == "%s":
125-
return str(int(dt_datetime.timestamp()))
126-
return dt_datetime.strftime(format)
117+
return _str_to_datetime(dt).strftime(format)
127118

128119

129120
_macros_list = [now_utc, today_utc, timestamp, max, day_delta, duration, format_datetime]

airbyte-cdk/python/unit_tests/sources/declarative/interpolation/test_macros.py

-7
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,3 @@ def test_timestamp(test_name, input_value, expected_output):
7171
timestamp_function = macros["timestamp"]
7272
actual_output = timestamp_function(input_value)
7373
assert actual_output == expected_output
74-
75-
76-
def test_utc_datetime_to_local_timestamp_conversion():
77-
"""
78-
This test ensures correct timezone handling independent of the timezone of the system on which the sync is running.
79-
"""
80-
assert macros["format_datetime"](dt="2020-10-01T00:00:00Z", format="%s") == "1601510400"

0 commit comments

Comments
 (0)