From cf69c205790541043f277902d89b5e4215f115ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Ram=C3=ADrez-Mondrag=C3=B3n?= Date: Tue, 20 Aug 2024 16:56:13 -0600 Subject: [PATCH] Fix --- singer_sdk/streams/core.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/singer_sdk/streams/core.py b/singer_sdk/streams/core.py index 3f8ca6a72..739c254d8 100644 --- a/singer_sdk/streams/core.py +++ b/singer_sdk/streams/core.py @@ -365,6 +365,23 @@ def _write_replication_key_signpost( state = self.get_context_state(context) write_replication_key_signpost(state, value) + def _parse_datetime(self, value: str) -> datetime.datetime: # noqa: PLR6301 + """Parse a datetime string. + + Args: + value: The datetime string. + + Returns: + The parsed datetime, timezone-aware preferred. + """ + result = datetime_fromisoformat(value) + + # Ensure datetime is timezone-aware + if not result.tzinfo: + result = result.astimezone() + + return result + def compare_start_date(self, value: str, start_date_value: str) -> str: """Compare a bookmark value to a start date and return the most recent value. @@ -384,7 +401,7 @@ def compare_start_date(self, value: str, start_date_value: str) -> str: The most recent value between the bookmark and start date. """ if self.is_timestamp_replication_key: - return max(value, start_date_value, key=datetime_fromisoformat) + return max(value, start_date_value, key=self._parse_datetime) return value