diff --git a/pyproject.toml b/pyproject.toml index cb7965d094..b3d55c4616 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -342,6 +342,9 @@ typing = "t" fixture-parentheses = false parametrize-names-type = "csv" +[tool.ruff.lint.flake8-tidy-imports.banned-api] +"pendulum".msg = "BAN002: pendulum is banned" + [tool.ruff.lint.isort] known-first-party = ["singer_sdk", "samples", "tests"] required-imports = ["from __future__ import annotations"] diff --git a/singer_sdk/authenticators.py b/singer_sdk/authenticators.py index d31ab1deeb..03ca320671 100644 --- a/singer_sdk/authenticators.py +++ b/singer_sdk/authenticators.py @@ -17,10 +17,9 @@ from singer_sdk.helpers._util import utc_now if t.TYPE_CHECKING: + import datetime import logging - from pendulum import DateTime - from singer_sdk.streams.rest import RESTStream @@ -380,7 +379,7 @@ def __init__( # Initialize internal tracking attributes self.access_token: str | None = None self.refresh_token: str | None = None - self.last_refreshed: DateTime | None = None + self.last_refreshed: datetime.datetime | None = None self.expires_in: int | None = None @property diff --git a/singer_sdk/helpers/_util.py b/singer_sdk/helpers/_util.py index d0079c40d9..ca52c4460a 100644 --- a/singer_sdk/helpers/_util.py +++ b/singer_sdk/helpers/_util.py @@ -2,12 +2,11 @@ from __future__ import annotations +import datetime import json import typing as t from pathlib import Path, PurePath -import pendulum - def read_json_file(path: PurePath | str) -> dict[str, t.Any]: """Read json file, throwing an error if missing.""" @@ -25,6 +24,6 @@ def read_json_file(path: PurePath | str) -> dict[str, t.Any]: return t.cast(dict, json.loads(Path(path).read_text())) -def utc_now() -> pendulum.DateTime: +def utc_now() -> datetime.datetime: """Return current time in UTC.""" - return pendulum.now(tz="UTC") + return datetime.datetime.now(datetime.timezone.utc) diff --git a/singer_sdk/sinks/sql.py b/singer_sdk/sinks/sql.py index eb6dcfef66..1644bef5bc 100644 --- a/singer_sdk/sinks/sql.py +++ b/singer_sdk/sinks/sql.py @@ -9,12 +9,12 @@ from textwrap import dedent import sqlalchemy as sa -from pendulum import now from sqlalchemy.sql.expression import bindparam from singer_sdk.connectors import SQLConnector from singer_sdk.exceptions import ConformedNameClashException from singer_sdk.helpers._conformers import replace_leading_digit +from singer_sdk.helpers._util import utc_now from singer_sdk.sinks.batch import BatchSink if t.TYPE_CHECKING: @@ -366,7 +366,7 @@ def activate_version(self, new_version: int) -> None: if not self.connector.table_exists(self.full_table_name): return - deleted_at = now() + deleted_at = utc_now() if not self.connector.column_exists( full_table_name=self.full_table_name,