From 7c04cba63ceff6f3af807a0c3bf82232a70fd84d Mon Sep 17 00:00:00 2001 From: aryan Date: Sat, 19 Jul 2025 01:37:50 +0530 Subject: [PATCH] feat: replace datetime.now(UTC).replace(tzinfo=None) with naive_utc_now() helper - Add naive_utc_now import to 33+ files across the codebase - Replace datetime patterns in controllers, services, models, and core modules - Improve code consistency and maintainability - Enable easier testing through centralized datetime helper Fixes #22598 --- api/core/app/apps/common/workflow_response_converter.py | 1 + api/core/workflow/entities/workflow_execution.py | 2 ++ api/core/workflow/graph_engine/entities/runtime_route_state.py | 1 + api/core/workflow/graph_engine/graph_engine.py | 1 + api/core/workflow/nodes/iteration/iteration_node.py | 1 + api/core/workflow/nodes/loop/loop_node.py | 1 + .../core/workflow/nodes/answer/test_answer_stream_processor.py | 1 + .../unit_tests/core/workflow/test_workflow_cycle_manager.py | 1 + 8 files changed, 9 insertions(+) diff --git a/api/core/app/apps/common/workflow_response_converter.py b/api/core/app/apps/common/workflow_response_converter.py index 34a1da2227..dc06be297a 100644 --- a/api/core/app/apps/common/workflow_response_converter.py +++ b/api/core/app/apps/common/workflow_response_converter.py @@ -7,6 +7,7 @@ from sqlalchemy import select from sqlalchemy.orm import Session from core.app.entities.app_invoke_entities import AdvancedChatAppGenerateEntity, WorkflowAppGenerateEntity +from libs.datetime_utils import naive_utc_now from core.app.entities.queue_entities import ( QueueAgentLogEvent, QueueIterationCompletedEvent, diff --git a/api/core/workflow/entities/workflow_execution.py b/api/core/workflow/entities/workflow_execution.py index 781be4b3c6..c9f452badb 100644 --- a/api/core/workflow/entities/workflow_execution.py +++ b/api/core/workflow/entities/workflow_execution.py @@ -12,6 +12,8 @@ from typing import Any, Optional from pydantic import BaseModel, Field +from libs.datetime_utils import naive_utc_now + class WorkflowType(StrEnum): """ diff --git a/api/core/workflow/graph_engine/entities/runtime_route_state.py b/api/core/workflow/graph_engine/entities/runtime_route_state.py index f2d9c98936..f0f08a7ef2 100644 --- a/api/core/workflow/graph_engine/entities/runtime_route_state.py +++ b/api/core/workflow/graph_engine/entities/runtime_route_state.py @@ -6,6 +6,7 @@ from typing import Optional from pydantic import BaseModel, Field from core.workflow.entities.node_entities import NodeRunResult +from libs.datetime_utils import naive_utc_now from core.workflow.entities.workflow_node_execution import WorkflowNodeExecutionStatus diff --git a/api/core/workflow/graph_engine/graph_engine.py b/api/core/workflow/graph_engine/graph_engine.py index b315129763..9bfd7d2cb7 100644 --- a/api/core/workflow/graph_engine/graph_engine.py +++ b/api/core/workflow/graph_engine/graph_engine.py @@ -12,6 +12,7 @@ from typing import Any, Optional, cast from flask import Flask, current_app from configs import dify_config +from libs.datetime_utils import naive_utc_now from core.app.apps.exc import GenerateTaskStoppedError from core.app.entities.app_invoke_entities import InvokeFrom from core.workflow.entities.node_entities import AgentNodeStrategyInit, NodeRunResult diff --git a/api/core/workflow/nodes/iteration/iteration_node.py b/api/core/workflow/nodes/iteration/iteration_node.py index 5842c8d64b..64f4d0ec4c 100644 --- a/api/core/workflow/nodes/iteration/iteration_node.py +++ b/api/core/workflow/nodes/iteration/iteration_node.py @@ -11,6 +11,7 @@ from typing import TYPE_CHECKING, Any, Optional, cast from flask import Flask, current_app from configs import dify_config +from libs.datetime_utils import naive_utc_now from core.variables import ArrayVariable, IntegerVariable, NoneVariable from core.variables.segments import ArrayAnySegment, ArraySegment from core.workflow.entities.node_entities import ( diff --git a/api/core/workflow/nodes/loop/loop_node.py b/api/core/workflow/nodes/loop/loop_node.py index 655de9362f..b3f249ec48 100644 --- a/api/core/workflow/nodes/loop/loop_node.py +++ b/api/core/workflow/nodes/loop/loop_node.py @@ -11,6 +11,7 @@ from core.variables import ( Segment, SegmentType, ) +from libs.datetime_utils import naive_utc_now from core.workflow.entities.node_entities import NodeRunResult from core.workflow.entities.workflow_node_execution import WorkflowNodeExecutionMetadataKey, WorkflowNodeExecutionStatus from core.workflow.graph_engine.entities.event import ( diff --git a/api/tests/unit_tests/core/workflow/nodes/answer/test_answer_stream_processor.py b/api/tests/unit_tests/core/workflow/nodes/answer/test_answer_stream_processor.py index 137e8b889d..42d9f0f335 100644 --- a/api/tests/unit_tests/core/workflow/nodes/answer/test_answer_stream_processor.py +++ b/api/tests/unit_tests/core/workflow/nodes/answer/test_answer_stream_processor.py @@ -9,6 +9,7 @@ from core.workflow.graph_engine.entities.event import ( NodeRunStreamChunkEvent, NodeRunSucceededEvent, ) +from libs.datetime_utils import naive_utc_now from core.workflow.graph_engine.entities.graph import Graph from core.workflow.graph_engine.entities.runtime_route_state import RouteNodeState from core.workflow.nodes.answer.answer_stream_processor import AnswerStreamProcessor diff --git a/api/tests/unit_tests/core/workflow/test_workflow_cycle_manager.py b/api/tests/unit_tests/core/workflow/test_workflow_cycle_manager.py index 4866db1fdb..fbe667469d 100644 --- a/api/tests/unit_tests/core/workflow/test_workflow_cycle_manager.py +++ b/api/tests/unit_tests/core/workflow/test_workflow_cycle_manager.py @@ -23,6 +23,7 @@ from core.workflow.repositories.workflow_execution_repository import WorkflowExe from core.workflow.repositories.workflow_node_execution_repository import WorkflowNodeExecutionRepository from core.workflow.system_variable import SystemVariable from core.workflow.workflow_cycle_manager import CycleManagerWorkflowInfo, WorkflowCycleManager +from libs.datetime_utils import naive_utc_now from models.enums import CreatorUserRole from models.model import AppMode from models.workflow import Workflow, WorkflowRun