From ae6d28df5410937e31c6f66792249d04923282f8 Mon Sep 17 00:00:00 2001 From: vitor-aignosi Date: Fri, 22 Aug 2025 14:17:54 -0300 Subject: [PATCH] SIENTIAPDE-1193 Update Gates activity and format_and_export_prediction workflow to use DATETIME_FORMAT_WITH_TZ for consistent timestamp handling - Modified Gates activity to correctly handle the maximum timestamp without formatting it prematurely. - Updated format_and_export_prediction workflow to utilize DATETIME_FORMAT_WITH_TZ for timestamp conversion. - Enhanced tests to ensure timestamp conversion is applied consistently across workflows. --- laborious/activities/gates.py | 2 +- .../sub_workflows/format_and_export_prediction.py | 4 ++-- .../test_format_and_export_prediction.py | 13 +++++++++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/laborious/activities/gates.py b/laborious/activities/gates.py index caa9eaa..c3d119f 100644 --- a/laborious/activities/gates.py +++ b/laborious/activities/gates.py @@ -322,7 +322,7 @@ class Gates(BaseActivity): return now().strftime(DATETIME_FORMAT_WITH_TZ) max_timestamp = max( - data['timestamp'].values.tolist()).strftime(DATETIME_FORMAT_WITH_TZ) + data['timestamp'].values.tolist()) self.info( f"Last timestamp: {max_timestamp}", metadata) diff --git a/laborious/workflows/sub_workflows/format_and_export_prediction.py b/laborious/workflows/sub_workflows/format_and_export_prediction.py index a3ed8e8..ee7c424 100644 --- a/laborious/workflows/sub_workflows/format_and_export_prediction.py +++ b/laborious/workflows/sub_workflows/format_and_export_prediction.py @@ -5,7 +5,7 @@ with workflow.unsafe.imports_passed_through(): from typing import Any from datetime import timedelta from sientia_do.temporal.policies import retry_policy - from sientia_do.temporal.constants import DATETIME_FORMAT + from sientia_do.temporal.constants import DATETIME_FORMAT_WITH_TZ @workflow.defn(name="format_and_export_prediction") @@ -94,7 +94,7 @@ class FormatAndExportPrediction(): 'data': prediction, 'timestamp_conversion': { 'column': 'timestamp', - 'format': DATETIME_FORMAT + 'format': DATETIME_FORMAT_WITH_TZ } }, retry_policy=retry_policy, diff --git a/tests/laborious/workflows/subworkflows/test_format_and_export_prediction.py b/tests/laborious/workflows/subworkflows/test_format_and_export_prediction.py index 648a38f..54909a6 100644 --- a/tests/laborious/workflows/subworkflows/test_format_and_export_prediction.py +++ b/tests/laborious/workflows/subworkflows/test_format_and_export_prediction.py @@ -3,6 +3,7 @@ from pytest import mark, fixture from laborious.activities.activities import Activities from laborious.workflows.sub_workflows.format_and_export_prediction import FormatAndExportPrediction +from sientia_do.temporal.constants import DATETIME_FORMAT_WITH_TZ @fixture @@ -73,7 +74,11 @@ async def test_run_none_path_flag(workflow_mock, format_and_export_prediction): 'schema': input_data['schema'], 'table_name': input_data['table_name'], 'data': workflow_mock.execute_activity_method.return_value, - **metadata + **metadata, + 'timestamp_conversion': { + 'column': 'timestamp', + 'format': DATETIME_FORMAT_WITH_TZ + } }, retry_policy=ANY, start_to_close_timeout=ANY @@ -138,7 +143,11 @@ async def test_run_default_path_flag(workflow_mock, format_and_export_prediction 'schema': input_data['schema'], 'table_name': input_data['table_name'], 'data': workflow_mock.execute_activity_method.return_value, - **metadata + **metadata, + 'timestamp_conversion': { + 'column': 'timestamp', + 'format': DATETIME_FORMAT_WITH_TZ + } }, retry_policy=ANY, start_to_close_timeout=ANY