Skip to content

Commit ca18c56

Browse files
committed
rework whenever dependency
1 parent 4db3c8b commit ca18c56

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

airbyte_cdk/utils/datetime_helpers.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@
8686

8787
from dateutil import parser
8888
from typing_extensions import Never
89-
from whenever import Instant, LocalDateTime, ZonedDateTime
9089

9190

9291
class AirbyteDateTime(datetime):
@@ -138,6 +137,18 @@ def from_datetime(cls, dt: datetime) -> "AirbyteDateTime":
138137
dt.tzinfo or timezone.utc,
139138
)
140139

140+
@classmethod
141+
def from_timestamp(cls, timestamp: float) -> "AirbyteDateTime":
142+
"""Creates an AirbyteDateTime from a Unix timestamp in seconds.
143+
144+
Args:
145+
timestamp: A Unix timestamp in seconds (float).
146+
147+
Returns:
148+
AirbyteDateTime: A new timezone-aware datetime instance (UTC).
149+
"""
150+
return AirbyteDateTime.from_datetime(datetime.fromtimestamp(timestamp, tz=timezone.utc))
151+
141152
def to_datetime(self) -> datetime:
142153
"""Converts this AirbyteDateTime to a standard datetime object.
143154
@@ -400,8 +411,7 @@ def ab_datetime_parse(dt_str: str | int) -> AirbyteDateTime:
400411
raise ValueError("Timestamp cannot be negative")
401412
if len(str(abs(timestamp))) > 10:
402413
raise ValueError("Timestamp value too large")
403-
instant = Instant.from_timestamp(timestamp)
404-
return AirbyteDateTime.from_datetime(instant.py_datetime())
414+
return AirbyteDateTime.from_timestamp(timestamp)
405415

406416
if not isinstance(dt_str, str):
407417
raise ValueError(
@@ -414,8 +424,7 @@ def ab_datetime_parse(dt_str: str | int) -> AirbyteDateTime:
414424
year, month, day = map(int, dt_str.split("-"))
415425
if not (1 <= month <= 12 and 1 <= day <= 31):
416426
raise ValueError(f"Invalid date format: {dt_str}")
417-
instant = Instant.from_utc(year, month, day, 0, 0, 0)
418-
return AirbyteDateTime.from_datetime(instant.py_datetime())
427+
return AirbyteDateTime(year, month, day, 0, 0, 0)
419428
except (ValueError, TypeError):
420429
raise ValueError(f"Invalid date format: {dt_str}")
421430

0 commit comments

Comments
 (0)