Skip to content

Commit

Permalink
refactor: Use datetime.fromisoformat in other places (#2092)
Browse files Browse the repository at this point in the history
  • Loading branch information
edgarrmondragon authored Dec 7, 2023
1 parent fcf30d5 commit d755024
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 10 deletions.
5 changes: 2 additions & 3 deletions samples/sample_tap_google_analytics/ga_tap_stream.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,10 @@

from __future__ import annotations

import datetime
import typing as t
from pathlib import Path

import pendulum

from singer_sdk.authenticators import OAuthJWTAuthenticator
from singer_sdk.streams import RESTStream

Expand Down Expand Up @@ -59,7 +58,7 @@ def prepare_request_payload(
request_def["dateRanges"] = [
{
"startDate": self.config.get("start_date"),
"endDate": pendulum.now(tz="UTC"),
"endDate": datetime.datetime.now(datetime.timezone.utc),
},
]
return {"reportRequests": [request_def]}
Expand Down
10 changes: 8 additions & 2 deletions singer_sdk/_singerlib/messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,11 @@
from datetime import datetime, timezone

import simplejson as json
from dateutil.parser import parse

if sys.version_info < (3, 11):
from backports.datetime_fromisoformat import MonkeyPatch

MonkeyPatch.patch_fromisoformat()


class SingerMessageType(str, enum.Enum):
Expand Down Expand Up @@ -112,7 +116,9 @@ def from_dict(cls: type[RecordMessage], data: dict[str, t.Any]) -> RecordMessage
stream=data["stream"],
record=data["record"],
version=data.get("version"),
time_extracted=parse(time_extracted) if time_extracted else None,
time_extracted=datetime.fromisoformat(time_extracted)
if time_extracted
else None,
)

def to_dict(self) -> dict[str, t.Any]:
Expand Down
9 changes: 7 additions & 2 deletions singer_sdk/_singerlib/utils.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
from __future__ import annotations

import sys
from datetime import datetime, timedelta

import dateutil.parser
import pytz

if sys.version_info < (3, 11):
from backports.datetime_fromisoformat import MonkeyPatch

MonkeyPatch.patch_fromisoformat()

DATETIME_FMT = "%04Y-%m-%dT%H:%M:%S.%fZ"
DATETIME_FMT_SAFE = "%Y-%m-%dT%H:%M:%S.%fZ"

Expand All @@ -26,7 +31,7 @@ def strptime_to_utc(dtimestr: str) -> datetime:
Returns:
A UTC datetime.datetime object
"""
d_object: datetime = dateutil.parser.parse(dtimestr)
d_object: datetime = datetime.fromisoformat(dtimestr)
if d_object.tzinfo is None:
return d_object.replace(tzinfo=pytz.UTC)

Expand Down
6 changes: 3 additions & 3 deletions singer_sdk/testing/tap_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
import typing as t
import warnings

from dateutil import parser
from jsonschema import Draft7Validator

import singer_sdk.helpers._typing as th
from singer_sdk import Tap
from singer_sdk.helpers._compat import datetime_fromisoformat

from .templates import AttributeTestTemplate, StreamTestTemplate, TapTestTemplate

Expand Down Expand Up @@ -194,8 +194,8 @@ def test(self) -> None:
try:
for v in self.non_null_attribute_values:
error_message = f"Unable to parse value ('{v}') with datetime parser."
assert parser.parse(v), error_message
except parser.ParserError as e:
assert datetime_fromisoformat(v), error_message
except ValueError as e:
raise AssertionError(error_message) from e

@classmethod
Expand Down

0 comments on commit d755024

Please sign in to comment.