From e1c6f7ba256e11eb51696587d4d651644d6af7d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Ram=C3=ADrez=20Mondrag=C3=B3n?= <16805946+edgarrmondragon@users.noreply.github.com> Date: Tue, 6 Aug 2024 20:12:06 -0600 Subject: [PATCH] Fix output format of time fields --- tap_mysql/sync_strategies/common.py | 5 +++- tests/unit/sync_strategies/test_common.py | 33 +++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 tests/unit/sync_strategies/test_common.py diff --git a/tap_mysql/sync_strategies/common.py b/tap_mysql/sync_strategies/common.py index 5c2787a..cdc2f32 100644 --- a/tap_mysql/sync_strategies/common.py +++ b/tap_mysql/sync_strategies/common.py @@ -103,7 +103,10 @@ def row_to_singer_record(catalog_entry, version, row, columns, time_extracted): elif isinstance(elem, datetime.timedelta): if property_format == 'time': - row_to_persist += (str(elem),) # this should convert time column into 'HH:MM:SS' formatted string + _total_seconds = int(elem.total_seconds()) + _hours, _remainder = divmod(_total_seconds, 3600) + _minutes, _seconds = divmod(_remainder, 60) + row_to_persist += (f"{_hours:02}:{_minutes:02}:{_seconds:02}",) # this should convert time column into 'HH:MM:SS' formatted string else: epoch = datetime.datetime.utcfromtimestamp(0) timedelta_from_epoch = epoch + elem diff --git a/tests/unit/sync_strategies/test_common.py b/tests/unit/sync_strategies/test_common.py new file mode 100644 index 0000000..de70015 --- /dev/null +++ b/tests/unit/sync_strategies/test_common.py @@ -0,0 +1,33 @@ +from datetime import datetime, timedelta, timezone + +from singer.catalog import CatalogEntry +from singer.schema import Schema + +from tap_mysql.sync_strategies.common import row_to_singer_record + + +def test_row_to_singer_record(): + catalog_entry = CatalogEntry( + stream='stream', + schema=Schema.from_dict({ + 'type': 'object', + 'properties': { + 'time': { + 'type': 'string', + 'format': 'time', + }, + }, + }), + ) + message = row_to_singer_record( + catalog_entry, + version=1, + row=(timedelta(hours=8, minutes=30),), + columns=['time'], + time_extracted=datetime.now(timezone.utc), + ) + + assert message.stream == 'stream' + assert message.version == 1 + assert message.record == {'time': '08:30:00'} + assert message.time_extracted is not None