Skip to content

Commit cc2c533

Browse files
aaronsteersoctavia-squidington-iii
and
octavia-squidington-iii
authored
chore: add python 3.12 support (#596)
Co-authored-by: octavia-squidington-iii <contact@airbyte.com>
1 parent e0c70b8 commit cc2c533

File tree

6 files changed

+118
-68
lines changed

6 files changed

+118
-68
lines changed

.github/workflows/python_pytest.yml

+1
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ jobs:
133133
python-version: [
134134
'3.10',
135135
'3.11',
136+
'3.12',
136137
]
137138
os: [
138139
Ubuntu,

airbyte/_message_iterators.py

+10-3
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
from collections.abc import Iterator
88
from typing import IO, TYPE_CHECKING, cast
99

10-
import pendulum
1110
import pydantic
1211
from typing_extensions import final
1312

13+
from airbyte_cdk.utils.datetime_helpers import ab_datetime_now
1414
from airbyte_protocol.models import (
1515
AirbyteMessage,
1616
AirbyteRecordMessage,
@@ -39,15 +39,22 @@ def _new_stream_success_message(stream_name: str) -> AirbyteMessage:
3939
type=Type.TRACE,
4040
trace=AirbyteTraceMessage(
4141
type=TraceType.STREAM_STATUS,
42-
stream=stream_name,
43-
emitted_at=pendulum.now().float_timestamp,
42+
emitted_at=ab_datetime_now().timestamp(),
4443
stream_status=AirbyteStreamStatusTraceMessage(
4544
stream_descriptor=StreamDescriptor(
4645
name=stream_name,
4746
),
4847
status=AirbyteStreamStatus.COMPLETE,
48+
reasons=None,
4949
),
50+
estimate=None,
51+
error=None,
5052
),
53+
log=None,
54+
record=None,
55+
state=None,
56+
catalog=None,
57+
control=None,
5158
)
5259

5360

airbyte/logs.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@
1919
from functools import lru_cache
2020
from pathlib import Path
2121

22-
import pendulum
2322
import structlog
2423
import ulid
2524

25+
from airbyte_cdk.utils.datetime_helpers import ab_datetime_now
26+
2627

2728
def _str_to_bool(value: str) -> bool:
2829
"""Convert a string value of an environment values to a boolean value."""
@@ -60,6 +61,7 @@ def warn_once(
6061

6162
if not with_stack:
6263
stacklevel = 0
64+
6365
if with_stack is True:
6466
stacklevel = 2
6567

@@ -139,7 +141,7 @@ def get_global_file_logger() -> logging.Logger | None:
139141
for handler in logger.handlers:
140142
logger.removeHandler(handler)
141143

142-
yyyy_mm_dd: str = pendulum.now().format("YYYY-MM-DD")
144+
yyyy_mm_dd: str = ab_datetime_now().strftime("%Y-%m-%d")
143145
folder = AIRBYTE_LOGGING_ROOT / yyyy_mm_dd
144146
try:
145147
folder.mkdir(parents=True, exist_ok=True)

airbyte/progress.py

+10-6
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@
2828
from enum import Enum, auto
2929
from typing import IO, TYPE_CHECKING, Any, Literal, cast
3030

31-
import pendulum
3231
from rich.errors import LiveError
3332
from rich.live import Live as RichLive
3433
from rich.markdown import Markdown as RichMarkdown
3534

35+
from airbyte_cdk.utils.datetime_helpers import ab_datetime_now
3636
from airbyte_protocol.models import (
3737
AirbyteMessage,
3838
AirbyteStreamStatus,
@@ -410,7 +410,8 @@ def _send_telemetry(
410410
def _log_sync_start(self) -> None:
411411
"""Log the start of a sync operation."""
412412
self._print_info_message(
413-
f"Started `{self.job_description}` sync at `{pendulum.now().format('HH:mm:ss')}`..."
413+
f"Started `{self.job_description}` sync at "
414+
f"`{ab_datetime_now().strftime('%H:%M:%S')}`..."
414415
)
415416
# We access a non-public API here (noqa: SLF001) to get the runtime info for participants.
416417
self._send_telemetry(
@@ -423,13 +424,14 @@ def log_stream_start(self, stream_name: str) -> None:
423424
if stream_name not in self.stream_read_start_times:
424425
self._print_info_message(
425426
f"Read started on stream `{stream_name}` at "
426-
f"`{pendulum.now().format('HH:mm:ss')}`..."
427+
f"`{ab_datetime_now().strftime('%H:%M:%S')}`..."
427428
)
428429
self.stream_read_start_times[stream_name] = time.time()
429430

430431
def _log_stream_read_end(self, stream_name: str) -> None:
431432
self._print_info_message(
432-
f"Read completed on stream `{stream_name}` at `{pendulum.now().format('HH:mm:ss')}`..."
433+
f"Read completed on stream `{stream_name}` at "
434+
f"`{ab_datetime_now().strftime('%H:%M:%S')}`..."
433435
)
434436
self.stream_read_end_times[stream_name] = time.time()
435437

@@ -535,7 +537,8 @@ def log_success(
535537
self._update_display(force_refresh=True)
536538
self._stop_rich_view()
537539
self._print_info_message(
538-
f"Completed `{self.job_description}` sync at `{pendulum.now().format('HH:mm:ss')}`."
540+
f"Completed `{self.job_description}` sync at "
541+
f"`{ab_datetime_now().strftime('%H:%M:%S')}`."
539542
)
540543
self._log_read_metrics()
541544
self._send_telemetry(
@@ -552,7 +555,8 @@ def log_failure(
552555
self._update_display(force_refresh=True)
553556
self._stop_rich_view()
554557
self._print_info_message(
555-
f"Failed `{self.job_description}` sync at `{pendulum.now().format('HH:mm:ss')}`."
558+
f"Failed `{self.job_description}` sync at "
559+
f"`{ab_datetime_now().strftime('%H:%M:%S')}`."
556560
)
557561
self._send_telemetry(
558562
state=EventState.FAILED,

0 commit comments

Comments
 (0)