From a8a05647b591a7ce3e23ce7f0417097ee96f07c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Ram=C3=ADrez=20Mondrag=C3=B3n?= Date: Fri, 1 Dec 2023 20:03:32 -0600 Subject: [PATCH] chore: Move datetime.fromisoformat patch to singer_sdk.helpers._compat --- singer_sdk/helpers/_compat.py | 20 +++++++++++++++++++- singer_sdk/sinks/core.py | 19 +++++++++---------- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/singer_sdk/helpers/_compat.py b/singer_sdk/helpers/_compat.py index 39042e532..cc84576a8 100644 --- a/singer_sdk/helpers/_compat.py +++ b/singer_sdk/helpers/_compat.py @@ -2,6 +2,7 @@ from __future__ import annotations +import datetime import sys if sys.version_info < (3, 8): @@ -21,4 +22,21 @@ else: from importlib import resources -__all__ = ["metadata", "final", "resources", "entry_points"] +if sys.version_info < (3, 11): + from backports.datetime_fromisoformat import MonkeyPatch + + MonkeyPatch.patch_fromisoformat() + +datetime_fromisoformat = datetime.datetime.fromisoformat +date_fromisoformat = datetime.date.fromisoformat +time_fromisoformat = datetime.time.fromisoformat + +__all__ = [ + "metadata", + "final", + "resources", + "entry_points", + "datetime_fromisoformat", + "date_fromisoformat", + "time_fromisoformat", +] diff --git a/singer_sdk/sinks/core.py b/singer_sdk/sinks/core.py index f3a1975cf..735bd3a58 100644 --- a/singer_sdk/sinks/core.py +++ b/singer_sdk/sinks/core.py @@ -7,7 +7,6 @@ import datetime import importlib.util import json -import sys import time import typing as t from gzip import GzipFile @@ -23,7 +22,12 @@ BatchFileFormat, StorageTarget, ) -from singer_sdk.helpers._compat import final +from singer_sdk.helpers._compat import ( + date_fromisoformat, + datetime_fromisoformat, + final, + time_fromisoformat, +) from singer_sdk.helpers._typing import ( DatetimeErrorTreatmentEnum, get_datelike_property_type, @@ -35,11 +39,6 @@ from singer_sdk.target_base import Target -if sys.version_info < (3, 11): - from backports.datetime_fromisoformat import MonkeyPatch - - MonkeyPatch.patch_fromisoformat() - JSONSchemaValidator = Draft7Validator @@ -384,11 +383,11 @@ def _parse_timestamps_in_record( try: if value is not None: if datelike_type == "time": - date_val = datetime.time.fromisoformat(date_val) + date_val = time_fromisoformat(date_val) elif datelike_type == "date": - date_val = datetime.date.fromisoformat(date_val) + date_val = date_fromisoformat(date_val) else: - date_val = datetime.datetime.fromisoformat(date_val) + date_val = datetime_fromisoformat(date_val) except ValueError as ex: date_val = handle_invalid_timestamp_in_record( record,